Pull to refresh
0
0
Кирилл Длусский @Dlussky

Пользователь

Send message

Как работают замыкания (под капотом) в JavaScript

Reading time11 min
Views76K
Привет, Хабр!

Мы в Хекслете используем JavaScript не только для очевидных задач во фронтэнде, но и, например, для реализации браузерной среды разработки (наш опен-сорсный hexlet-ide) на React'е. У нас есть практический курс по JavaScript, и один из уроков там посвящен замыканиям. Это важная тема не столько в рамках JS, сколько в программировании вообще. Мы освещаем ее и в других курсах.

В целом, статей и туториалов про использование замыканий в JS полно, но объяснений как это все работает внутри — мало. Сегодняшний перевод посвящен именно этой теме. Как и почему работают замыкания в JS, когда они создаются и уничтожаются и почему каждая функция в JS — это замыкание.


Я использую замыкания уже достаточно давно. Я научился их использовать, но не до конца понимал как они на самом деле работают, что происходит «под капотом». Что это вообще такое? Википедия не очень помогает. Когда замыкание создается и уничтожается? Как выглядит реализация?

"use strict";
 
var myClosure = (function outerFunction() {
 
  var hidden = 1;
 
  return {
    inc: function innerFunction() {
      return hidden++;
    }
  };
 
}());
 
myClosure.inc();  // возвращает 1
myClosure.inc();  // возвращает 2
myClosure.inc();  // возвращает 3
 
// Ага, круто. А как это реализовано?
// И что происходит под капотом?
Читать дальше →

Boris — небольшой, но надежный REPL для php

Reading time2 min
Views10K
REPL есть у python, ruby, clojure. REPL — read-eval-print loop. Если описать на псевдокоде что такое REPL — это будет выглядеть как-то так:
while(true){
    echo eval($input->get());
}

Подобная реализация позволяет разработчику эксперементировать с кодом как ему вздумается без создания файлов. Вы можете совершить ошибку, Boris выдаст сообщение об этом, но продолжит работать ожидая новый код.
Читать дальше →

Тюним память и сетевой стек в Linux: история перевода высоконагруженных серверов на свежий дистрибутив

Reading time10 min
Views96K
image

До недавнего времени в Одноклассниках в качестве основного Linux-дистрибутива использовался частично обновлённый OpenSuSE 10.2. Однако, поддерживать его становилось всё труднее, поэтому с прошлого года мы перешли к активной миграции на CentOS 7. На подготовительном этапе перехода для CentOS были отработаны все внутренние процедуры, подготовлены конфиги и политики настройки (мы используем CFEngine). Поэтому сейчас во многих случаях миграция с одного дистрибутива на другой заключается в установке ОС через kickstart и развёртывании приложения с помощью системы деплоя нашей разработки — всё остальное осуществляется без участия человека. Так происходит во многих случаях, хотя и не во всех.

Но с самыми большими проблемами мы столкнулись при миграции серверов раздачи видео. На их решение у нас ушло полгода.
Читать дальше →

Медиана: точно, иногда точно и почти точно

Reading time5 min
Views32K
Если пройтись по коллегам и спросить сколько у них сотовых телефонов, то окажется, что в среднем их около 2.5, но при этом у подавляющего большинства их не больше одного. Тут возникает сразу множество вопросов начиная от того, почему их вдруг не целое число и как же все-таки оценить сколько телефонов в среднем у человека.



Для таких целей подойдет оценка медианы. То есть такая статистика, что половина значений выборки меньше, а половина больше. Более формально: упорядочим значения выборки X=(x_1,..., x_n) по порядку (x_{[1]}, ..., x_{[n]}) и выберем среди них с порядковым номером floor(n/2). У такой оценки есть несколько преимуществ. Она менее подвержена влиянию ошибочных данных, значение всегда будет из того множества, что встречалось в выборке, но есть и неприятные недостатки, главный из них, это сложность подсчета, даже для довольно распространенных распределений не существует общей формулы расчета (точнее есть, но ее сложно применить на практике, смотрите Распределение порядковой статистики).
Читать дальше →

Самодельный мобильный телефон

Reading time1 min
Views27K


В салонах сотовой связи выбор мобильных телефонов очень ограничен: либо совсем «тупые» звонилки, либо смартфоны с большими экранами. Но зачем покупать мобильный телефон в магазине, если можно сделать свой собственный телефон? Так подумал американский программист Кевин Линах (Kevin Lynagh) — и воплотил мечту в реальность.

В презентации на конференции !!Con 2015 Кевин рассказал, как ему это удалось.
Читать дальше →

Публичные шаблоны VPS на Linux/Windows — приглашаем авторов и админов для создания сервиса типа AWS AMI

Reading time3 min
Views6.7K
Огромное количество разнообразного софта требует тщательной настройки VPS и поддержания сотен шаблонов в актуальном состоянии. Amazon Web Services использует поддержку сообщества для поддержания AWS AMI (Amazon Machine Images). Мы в HOSTKEY не обладаем ресурсами для этого и просим взаимовыгодной помощи у нашего сообщества. Если коротко — мы приглашаем админов и программистов взаимовыгодно помочь нам с созданием популярных шаблонов.

Большинство сложных программ с открытым кодом сложно в установке, надо знать как это делается и иметь опыт эксплуатации. По README обычно сходу не получается достичь успеха не потратив несколько часов за консолью. А через месяц наступает прозрение что все поставлено совсем не так как надо. В Амазоне есть готовые AMI. Мы ищем авторов для местного сервиса похожего по функционалу на AMI, только круче.


Читать дальше →

Недорогая 10GbE инфраструктура для кластеров

Reading time5 min
Views44K
Мы в HOSTKEY регулярно сталкиваемся с необходимостью организации VLAN на скорости 10Гбит для кластеров виртуализации – своих и клиентских. Эта технология необходима для взаимодействия с СХД, для резервного копирования, для доступа у БД и для обеспечения живой миграции виртуальных машин. Всегда возникает вопрос — как сделать это надежно и с минимальными затратами?

До последнего времени минимальные затраты для такого решения были существенными. Самый маленький коммутатор 10GbE был на 24 порта, а самая простая карта – Intel X520 за 500 долларов. Бюджет на порт составлял около 700-1000 долларов, а входной билет был очень высокий.

Прогресс не стоит на месте, в начале 2015 года появился новый класс устройств 10GbE за приемлемые деньги со склада в Москве и под гарантией.
Так как мы в HOSTKEY регулярно строим на их базе выделенные сервера и частные облака, то хотим поделиться опытом.

Итак, у нашего Клиента 5 машин в кластере и ему нужен 10GbE VLAN – там 2 файлера, одна машина для резервного копирования и несколько нод. На гигабите все медленно и не хочется ставить в машины гигабитные четырехпортовки в тиминге. Надо 10GbE и бюджет ограничен. Звучит знакомо, не правда ли?
Читать дальше →

Совместное редактирование. Часть 1

Reading time9 min
Views44K
Добрый день. Последний год я занимаюсь в проекте «МойОфис» вопросами совместного редактирования (collaboration). Оглядываясь назад, могу констатировать, что это непростая и очень интересная задача. Поэтому я хотел бы подробно рассказать о ней и дать ответы на следующие вопросы:

  1. Какие существуют подходы к обеспечению совместного редактирования?
  2. Насколько они сложны в реализации?
  3. Можно ли взять готовую библиотеку и использовать ее в своем проекте?
  4. Можно ли вести разработку без оглядки на совместное редактирование?



Для того чтобы подробно и аргументированно ответить на них, необходимо написать довольно много материала, поэтому статей будет несколько, присаживайтесь поудобнее, мы начинаем.
Читать дальше →

mhddfs — Монтирование нескольких разделов в одну директорию

Reading time3 min
Views48K
Хочу рассказать о том, как смонтироват в одну директорию два раздела.
Честно говоря, никогда не задумывался о такой возможности, пока не попался клиент с подобным пожеланием. Поначалу мне показалось что это невозможно, но покопавшись в интернете нашел пару интересных статей. За основу в работе была взята статья с сайта hotbits.ru. Но в статье монтировали разделы одного и того же диска, мне же предстояло смонтировать разделы с разных дисков. Как оказалось, нет никакой разницы.
Читать дальше →

Облачный сервер в Нидерландах и США бесплатно до октября для зарегистрированных пользователей habrahabr

Reading time1 min
Views12K
Не так давно мы анонсировали услугу «облачный сервер» и начали распродажу с большими скидками, фактически по цене хостинга.

Сегодня мы приняли решение раздать облачные серверы S или M до октября всем желающим зарегистрированным пользователям habrahabr совершенно бесплатно, предоставить возможность протестировать новую услугу и облачную инфраструктуру. Дальнейшее продление будет доступно по акционным ценам:



Для того, чтоб воспользоваться предложением, оформляете заказ через наш веб-сайт www.ua-hosting.company/vps, но не оплачиваете. При наличии заказа дополнительных услуг (ISP Manager, Windows, сопровождение, увеличенный пакет трафика) — проводите оплату. После заказа в комментарии к этой публикации указываете Ваш логин (или номер заказа) и мы активируем услугу совершенно бесплатно либо вернем средства за vps на Ваш баланс в биллинге, в дальнейшем их можно будет израсходовать на оплату наших услуг.

Для незарегистрированных пользователей мы также предлагаем бонус — месяц обслуживания бесплатно вне зависимости от срока оплаты (создайте запрос в биллинге для получения бонуса).

image
Читать дальше →

Запущена первая в мире ММО-стратегия для программистов

Reading time3 min
Views46K
Почему первая? Потому что раньше были игры для программистов, и были стратегические ММО-игры. Но до нас еще никто не делал игру, которая одновременно и является ММО с единым постоянным миром, и при этом целиком и полностью ориентирована на программистов.

В ноябре прошлого года мы запустили краудфандинговую кампанию на Indiegogo, собранные средства с которой позволили доработать прототип до полноценного продукта. Весь июнь и июль получившие приглашение игроки тестировали версию Early Preview. И вот, теперь мы объявляем о публичном запуске этого необычного проекта. Встречайте Screeps!



Под катом небольшое описание, отзывы и технические подробности проекта.
Читать дальше →

Птицы продолжают нападать на квадрокоптеры

Reading time2 min
Views19K


Разного рода беспилотных летательных аппаратов, доступных для обычных пользователей, сейчас много. Соответственно, владельцы таких аппаратов используют их в самых разных целях — от банального наблюдения за природными объектами, до шпионских штучек. Беспардонное подглядывание раздражает многих людей, представители власти разных стран так и вообще стали рассматривать возможность введения ограничений на полеты беспилотников (во многих случаях такие ограничения имеют смысл).

Но раздражают квадрокоптеры не только людей, но и животных, в частности, птиц. Совсем недавно на квадрокоптер, пролетавший над лесистой местностью в Австралии, напал орел с размахом крыльев в 2 метра. При этом до последнего момента орла просто не было видно. За считанные секунды птица сбила дрон, и тот упал на землю.
Читать дальше →

Go как первый язык программирования для школьников

Reading time5 min
Views38K
Перевод рассказа об опыте обучения программированию группы школьников, с использованием языка Go. Оригинальный текст в почтовой рассылке тут

(ориг. фото)
Читать дальше →

Я не представляю, какого черта я делаю

Reading time14 min
Views26K


Недавно мне представилась возможность открыть конференцию для веб-дизайнеров Generate Conf в Нью-Йорке. Мне выпал шанс поговорить о неопределенности будущего.
Читать дальше →

Легковесный модуль для HTTP запросов

Reading time2 min
Views18K
Все началось с того, что передо мной встала задача написать бота для Telegram, здесь, я первый раз столкнулся с их API. Для работы с ним я выбрал популярный на сегодняшний день модуль Request.

Бот был написан. Я заметил, что потребление им памяти росло с каждым запросом к API, уличив в проблеме тяжеловесный Request, я решил попробовать написать свой модуль для HTTP запросов, максимально простой, легковесный и быстрый.

Читать дальше →

React boilerplate — Rocket React

Reading time3 min
Views18K
image

Хочу представить вашему вниманию boilerplate (skeleton) на базе React.js + Backbone для быстрого старта разработки приложения любой сложности. Эта связка помогла нашей команде в срок сделать сложное приложение с минимальным количеством проблем а простота позволила быстро подключать новых разработчиков в процесс.
Читать дальше →

Две простые и эффективные бесплатные программки для восстановления потерянных данных

Reading time9 min
Views144K
файлы…файлы…файлы

Число технологий, страхующих пользователя от потери данных всеми возможными способами скоро сравнится с числом самих пользователей. И, тем не менее, нужные файлы, несмотря на наличие корзины и возможности резервного сохранения продолжают удаляться с удивительной настойчивостью. История удаления каждого нужного файла по своему уникальна. Задача, стоящая перед каждым незадачливым юзером, всегда одна – по возможности полностью восстановить утерянный контроль над ценной информацией.

О том, как восстановить данные самостоятельно, если знакомый гуру категорически отказывается общаться в выходной на профессиональные темы, а ближайший сервис откроется не раньше понедельника, мы расскажем в нашей статье.
Читать дальше →

Sphinx distribute. Ускоряем поиск

Reading time3 min
Views15K
Давеча у меня возникла необходимость пересмотреть работу полнотекстового поискового движка Sphinx, поскольку, некоторые нередкие запросы занимали секунды, а иные даже больше десяти. После поиска уязвимых мест и путей оптимизации нашел нехитрый способ повышения производительности — распараллеливание нагрузки на несколько потоков, в результате я получил неплохое сокращение времени запросов.

Одна из неприятных особенностей Sphinx'а — очень скудная информация на русском языке. Удивишись тем, что тема распределения нагрузки не была затронута, решил поделиться данным решением на Хабре.

Цель: повысить производительность Sphinx путём разделения нагрузки на несколько потоков.
Решение

Киски: Рефакторинг

Reading time6 min
Views17K
imageДобрый день, Хабровчане!

Продолжаю совмещать развитие навыков перевода c английского и изучение интересных, с моей точки зрения, материалов по программированию и делюсь с вами слегка адаптированным переводом первой части из небольшого цикла статей про рефакторинг от голландца Matthias Noback, который живет в городе Зейст что вблизи Утрехта.

По большей части, в трех статьях речь идет о рефакторинге, а именно о выделении отдельных сущностей и создании самостоятельных частей кода, которые затем удобно тестировать и модифицировать. Это, естественно, приведет к увеличению количества абстракций и усложнению всей задачи, но Noback без этого не может.

Смысловое значение этой статьи не затронуто, а все изменения (заголовок и пара замен названия сервиса) сделаны лишь с целью разбавить довольную сухую и, надеюсь, простую в плане сложности материала статью, чтобы затем перейти к следующим частям всего цикла.
Все подробности, как обычно, под хабракатом..

6 вещей, который я хотел бы знать перед разработкой своего первого Android-приложения

Reading time5 min
Views28K
От переводчика: перевод делался сходу, за один присест, так что в некоторых местах может быть немного топорным. В любом случае, вы знаете, куда писать об ошибках.
В комментариях к оригинальной статье есть несколько здравых мыслей, как, например, не использовать библиотеки с мира «большой» джавы, так как они слишком объемные, или использовать всякие Glide-ы вместо Picasso (с чем я, впрочем, согласен). Можете посмотреть, если интересно.
И еще, я не придумал, как заставить отображаться сниппеты с гитхаба, так что я просто скопировал код.


Мое первое приложение было ужасным. В самом деле, оно было настолько кошмарным, что я удалил его с маркета и больше даже не буду указывать его в своем резюме. То приложение могло быть не настолько ужасным, если бы я знал несколько вещей об Android-разработке перед его написанием.

Далее следует список вещей, которые надо понимать во время разработки вашего первого приложения под Android. Эти уроки были извлечены из реальных ошибок, которые я делал в исходном коде моей первой программы, — ошибкок, которые я буду приводить ниже. Понимание этих вещей поможет вам написать приложение, которым вы будете гордиться чуть больше.

Конечно, если вы пишете что-то по ходу изучения Android-разработки, скорее всего, позже вы все равно возненавидите свое творение. Как сказал @codestandards:

If the code you wrote a year ago doesn't seem bad to you, you're probably not learning enough.— Code Standards ( @codestandards) 21 мая 2015

(Если код, который вы написали год назад, не кажется вам плохим, вы, наверное, недостаточно учились)
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity