Later Ctrl + ↑

Как придумывать хорошие имена переменных

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

// Абстрактно
function drive(settings) {}

// Конкретно
function drive(pathDirections) {}

2. Если думать о программе на русском, то не всегда нужное слово для названия переменной с легкостью извлекается из головы. В таком случае можно воспользоваться электронным переводчиком. Он же предложит несколько вариантов перевода одного и того же термина.

3. Синонимы могут быть лучше первого вспомнившегося перевода. Пользуйся http://thesaurus.com для поиска синонимов. Там же найдешь антонимы.

Какими еще способами можно улучшить именование переменных?

Недооцененные аннотации @event и @fires

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

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

/**
 * @constructor
 */
function EventEmitter() {}
EventEmitter.prototype.on = function () {}
EventEmitter.prototype.off = function () {}
EventEmitter.prototype.trigger = function () {}


/**
 * @constructor
 * @extends EventEmitter
 */
function Model() {}
Model.prototype.ready = function () {}

/**
 * @constructor
 * @extends Model
 */
function UserAccount() {}

var ua = new UserAccount(1)

Подобное использование аннотаций позволяет редактору подсказывать методы экземпляров

А так же переходить к определению класса, от которого происходит наследование

Теперь о недооцененных аннотациях
@event описывает событие подобно еще одному типу данных. Метод, который стреляет событие описывается с помощью аннотации @fires. А так же метод, который слушает событие помечается аннотацией @listens. При корректной поддержке редакторами (я скорее ожидаю этого от webstorm), установить порядок связей в приложении становится намного проще. Реалии веб разработки такие, что почти все проекты используют EventEmitter, Mediator, Stream паттерны. Используя аннотации и продвинутый редактор, установить связь между классами, методами не составляет большой сложности. Большая сложность заключается в понимании того, как связаны объекты между собой, когда объекты подписываются на события. Место, где стреляется событие приходится искать вручную.

Я удивился, что подобная функциональность не была реализована до сих пор к вебшторме. Единственная сложность, с которой я сталкивался в при разборе больших проектов – понимание где стреляется событие, на которое происходит подписка. Аннотации, описанные выше, должны были бы неимоверно упростить понимание хитросплетений событий.

Из хороших новостей – поддержка этих аннотаций запланирована.

Что я узнал о Кипре

Как приехать.
Нужно заполнить заявление на провизу. Внутри документа есть все инструкции. При заполнении нужно знать где останавливаться на Кипре, и когда рейс самолета. Ответ из посольства приходит в течение 2-3 рабочих дней. Посольство не работает во время национальных праздников. Расписание праздников можно найти на сайте посольства. Я ошибся с заполнением визы, ждал ответа 4 дня, потом позвонив в посольство, и вместе с приятной девушкой разобрались что к чему. Провиза позволяет пребывать на Кипре в течение 90 дней со дня въезда, въехать на Кипр по провизе можно в течение 90 дней со дня ее выдачи. Она не дает права трудоустройства. Виза с разрешением на работу привязывается к работодателю, работодателем и оформляется.

Съем квартиры
Цены колеблются от 250 до 600 евро в месяц (1-2 bedroom). Квартиры считаются не по комнатам, а по “спальням”. 1-bedroom эквивалент 2-х комнатной, 2-bedroom – 3-х комнатной. Обязательно ищи квартиру с solar system – водонагрев с помощью солнечных панелей: сэкономишь на электросчетах. Говорят что текущие цены ниже докризисных. Будь готов при въезде оставить 300 евро залога в electricity authority и 200 евро залога в water authority. И еще за 1 месяце аренды залог хозяину квартиры. Агенту по поиску квартиры платит хозяин. Обрати внимание на договор, обычно залог, в случае, если договор расторгается раньше срока его завершения, не возвращается. Если будешь искать квартиру в Лимассоле – обязательно обращайся в http://www.kazo.com.cy. Счета за электричество и воду приходят раз в 2-3 месяца, их можно оплачивать через интернет.

Интернет. Еще 100 евро депозита (как не резиденту), и официальная позиция компании – подключают в течение 3х недель. В моем случае было еще дольше, из-за непоняток с моей стороны и стороны провайдера, и хозяина дома, который должен был дать разрешение на установку оборудования провайдера. Я пользуюсь http://cablenet.com.cy, скорости близки к заявленным, но бывает, что исходящих скоростей не хватает. Оплата онлайн, через тот же самый сайт, где платится коммуналка. Но договор нужно подписывать в офисе. Мобильный интернет не пробовал, но особо в нем нет смысла. В кафешках открытый файфай, даже в супермаркете есть файфай.

Мобильная связь. На острове 2 основных провайдера: https://www.cyta.com.cy и http://www.mtn.com.cy. Я не нашел особого различия в тарифах. Остановился на mtn. Pay-as-you-go карточка (то есть без контракта) стоит 2 евро, если покупать в отделении, то можно спросить и nanosim (для пятого айфона). Могут быть, могут не быть. Себе я обрезал карточку самостоятельно, когда брал второй номер – наносимки были. Пополнение телефона здесь называется top-up, и во многих магазинах такое бывает. За два месяца я выговорил 3 евро.

Еда. Множество кафешек, где можно покушать от 6 до 15 евро. Если есть машина, стоит выбираться кушать в горных деревеньках. Порции огромны, мясо вкусно. Если закупаться на супермаркете, получается 300-400 евро на двоих в месяц. Говядина дороже свинины. Сыр, фрукты прекрасны. Рыба дорогая, несмотря на то, что это остров. Качество всех продуктов субъективно выше, чем на Украине.

Язык. Многие киприоты владеют английским, особенно молодые. Те, с которыми я общался (риэлтор, бармен, ребята с работы), учились в Британии, но наверняка я не вижу картины в целом, может не все такие. Есть и русскоговорящие, так как немало бизнеса заточено под русских туристов. В крайнем случае объясниться на пальцах не составит труда. Люди отзывчивые, и чаще стараются помочь.

Туристы. Русских множество. Меньше британцев. Британцы в основном пожилые, русские помоложе.

Обман. Встречал попытки обмануть, но неагрессивные. Таксист, не включивший счетчик, лишний товар в чеке в магазине.

Передвижение. Очень неудобно без машины. Подержанную машину можно взять за 1500 евро. Публичный транспорт наличествует, проезд на автобусе – 1.5 евро. Автобусы ходят и на большие расстояния – между городами. На такси 6 км петляний и простоя обошлись в 15 евро. По тротуарам ходить невозможно, так как на них всегда по-мудацки припаркованы машины.

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

Островные особенности.
Источник пресной воды – дожди. Воду собирают в водохранилище. Water authority агитирует экономить воду. Счета приходят раз в 3 месяца, их можно оплатить онлайн. Я заплатил за воду около 20 евро за 2 месяца. Кстати,

Одно из любимых времяпрепровождений местных – готовка шашлыка. Делают это везде: на природе, на пляже, на верандах, на крышах.

Что почитать про JavaScript

Скопилось интересных технических ссылок

Еще один “костыль”, или закономерность (зависит от точки зрения) для более строгой работы с объектами в джаваскрипте в стандарте es6.
http://www.nczonline.net/blog/2014/04/22/creating-defensive-objects-with-es6-proxies/

Антипаттерны работы с промисами. Всем, кто использует промисы с более, чем с одним then посвящается
http://taoofcode.net/promise-anti-patterns/

Профилирование памяти с хром девелопер тулз.
https://developer.chrome.com/devtools/docs/javascript-memory-profiling

Трюки повышения js производительности на мобильных. Отлично срабатывают и на десктопе в большом приложении
http://cubiq.org/performance-tricks-for-mobile-web-development

Как работают браузеры. То, что раньше собиралось по частям в интернетах, теперь в одной статье:
http://www.html5rocks.com/en/tutorials/internals/howbrowserswork/

Еще про оптимизацию: ограничение reflow границами элемента. В комментах высказываются сомнения по поводу актуальности метода.
http://wilsonpage.co.uk/introducing-layout-boundaries/

Следующий спорный, но, “если аккуратно, то можно” хак насильного подключения hardware acceleration для рендеринга слоя
http://aerotwist.com/blog/on-translate3d-and-layer-creation-hacks/

Объяснение как работает event-loop и асинхронность в джаваскрипте

Проверка правописания для движка blogengine

Качество правописания у меня страдает. Решение – автоматическая проверка набираемых текстов прямо на уровне движка. Правописание можно проверять в комментариях и при наборе статьи. Для проверки используется API Яндекс спеллера.

Код и инструкция по установке – на гитхабе: https://github.com/podgorniy/blogengine-speller

Попробовал писать проект на es6

Классы – круто. В es < 6 Так или иначе приходилось эмулировать создание классов, хоть и на прототипном наследовании. Поддержка на уровне языка дает чистый читабельный код.

Деструктивное присваивание, оператор spread и rest arguments используется не так часто, как мне казалось, когда я думал о es6.

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

Квазилитералы волшебны. Для логгирования самое то. Опять-таки, из-за того, что приложение было серверным, строки со вставками вычислений не надо было генерировать в том количестве, что требует клиентский код.

Как только проект чуть разросся (5 классов), столкнулся с бедной поддержкой языка редактором (писал в саблайме). Переход к методу или классу не работает, а пользоваться поиском не с руки. Еще столкнулся с проблемой с подсветкой синтаксиса. Из-за непривычности синтаксиса допускал много ошибок, которые в редакторе не были видны, и приходилось запускать приложение, а потом из stack trace понимать в какой строке допустил описку.

Эти два фактора свели на “нет” все прелести нового стандарта, и в итоге недоделанный проект я переписываю на es5.на

Общие впечатления от es6 – самые теплые. Через пол года повторю эксперимент.

Писал код, прогоняя его через traceur-compiler. Для ноды разработка происходит прозрачно: скрипт инициализации проекта подтягивает traceur, тот умеет переписывать функцию импорта модулей, я указываю какие модули являются es6, и при их импорте traceur, прогоняет содержимое через свою магию. Все преобразования es6-es5 происходят в памяти, дополнительных файлов не создается. Проект стартует-рестартует быстро.

Если не понятно о чем я говорю, и интересно, то тут можно найти список статей, рассказывающих про новшества es6. А тут – посмотреть на слайды с моего выступления на оную же тему. (чтобы увидеть заметки к слайдам, перейди в режим перезентующего, нажав на клаве S)

UPD Поддержка Webstorm-ом es6 на порядок лучше того сетапа, которым я пользовался https://www.youtube.com/watch?v=jbfkcmxLLKY

Модели мира. Часть 2

Часть 1

Профессионалы развенчивают ложные модели непрофессионалов.

http://gutta-honey.livejournal.com/113296.html
Представление обывателя о том, что является нормой, а что патологией, и что все, что не норма, должно быть обязательно вылечено.

http://svictorych.livejournal.com/149809.html
Про ориентацию на цену при выборе товара. Ошибка заключается в том, что покупая самый дешевый товар, покупатель не выигрывает, а зачастую проигрывает (в качестве). Примечательно, что статистика берется из реальной сети розничной торговли.

http://svictorych.livejournal.com/76227.html
Про “плати человеку больше, и он будет работать лучше”. А вот и нет.

http://lurkmore.to/Культ_карго
Культ карго. Встречается и в более сложных формах (будем проводить собеседования как Гугл – будем такими же успешными, как гугл. Будем использовать ту же технологию, что и успешные компании на рынке – будем такими же успешными).

http://www.ellf.ru/cognitive/23406-karel-chapek-o-pravilakh-vedenija-diskussii.html
Некоторые приемы софистов, такие как caput canis (приписывание дурных качеств) – прямая эксплуатация кривых моделей мира. Разве может тот, кто изменяет жене с козой давать дельную критику работы государственного деятеля?

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

Придумывая модель происходящего, и видя, что модель предсказывает будущее корректно, нельзя быть уверенным, что модель будет работать всегда. Что делать в таком случае? Придерживаться модели до тех пор, пока не найдутся ее опровержения или уточнения. Вносить правки, быть готовым пересмотреть убеждения, наслаждаться жизнью.

Earlier Ctrl + ↓