Category: отзывы

Category was added automatically. Read all entries about "отзывы".

(no subject)

Наверняка, многим серьезным веб-программистом преходилось испытать неприязнь, когда они узнавали, что чтобы выложить веб-сайт надо еще изучать пхп. Все соглашаются (и в интернете я тоже читал) что это очень, очень плохой язык. Это на самом деле глупость и когда я прочитал я долго не мог поверить ходил спрашивал и оказалось не зря. Тепер ьвеб-сайты можно писать на самом популярном в мире языке джаваскрипте. Это революционный переворот и он происходит прямо на наших глазах. Что это значит для нас, ребята? Что мы уже знаем, как писать сйты по сути. Я был шокирован, как там все организовано, но похоже они все вопросы продумали с самого начала и договорились что это будет очень востребованный проект.Более того, умные C++ перцы из гугл которые по утрам ездят в автобусах набитых баскетбольными мечами уже работают над тем, чтобы джаваскрипт работал быстрее С++, потому что он комплируется сразу в результат, минуя стадию вычисления! Вы наверняка заметили это по тому, что gmail.com открывается за 5 секунд, а не 20 как это было в до-интернетную эпоху, может хотя бы самые древние. Его кстати тоже делали в гугл. Что это если не порыв я не знаю. То есть, если вы напишете свой сайт на nodejs, он автоматически будет бытсрым и будет масштабироватсья (обрабатывать столько клиентов, сколько пришло, это настоящая проблема в пхп была и некто не знал как с ней быть). Например, данные между разными запросами не изолированны и вообще можно использовать одни и те же глобальные переменные для всех клиентов и экономить память. В том же пхп это в принципе не возмонжно и засчет этого у ноды такая гиганская производительность. Там даже продумано если вы будете работать с другом или кто-то допустим, то я зык специально за счет очень удобной типизации можно писать так что вы не будете знать что и как вам передает ваш друг. Это очень удобно потому что позволяет меняь програму в одном месте и вообще не парится о том же друге что там у него програма все равно запустится.Только представьте! Любой кусок кода можно насать один раз. Например, функцию, переворачивающущю строку, и вызывать ее из браузера или включать музыку с телефона. Особенно если заморочиться совместимостью северного кода и особеностей разных браузеров. Также они добавили возможность создавать внутри функции другие функции и это очень круто, но я пока не понял как потом вернуться в первую функцию. Но самое главное, что над нодой сейчас работает туча народу просто, они переписывают все что было до них написано на ноду и у них получается лучше потому что они сразу заточились на производительность и чтобы было лучше а так же просто использовать. Например нужно сходить в базу данных создал проект на гитхабе сразу набежали форкнули завтра только пуллреквесты принять и можно заливать в продакшн на свой ноутбук. Сообщество очень дружелюбное, если кому-то удается сделать что-то работающее на ноде его обязательно хвалят и подбадревают потому что это правда успех. Я пока не понял как допустим считать файл но говорят эт из-за безопасности,там все очень надежно, ведь если к тебе вдруг идет миллион клиентов и вы облажаетесь в 10% случаев ты облажаешься перед 100 000 человек. Поэтому например если где-то произошла ошибка лучше сразу аккуратненько завершиться чем пазориться перед остальными, тем более если перезапустить сервер то там и память лишняя освободится и бегать начнет пошустрее, да и перезапускается он очнь бытсро. Иногда бывает быстрее перезапустить сервер чем дождаться окончания сборки мусора. Ктому же nodejs так оптимизирован что никогда не займет больше одного ядра а это значит что базу данных например можно поставить на тот же ноут на другое ядро для экономии ресурсов и надежности (иметь что-то на той же машине всегда надежнее, много ли что, все у кого есть дома интернет вы это итак знаете) и все будет быстро бегать и даже можно во что-нибудь пошпилить или дальше форум по nodejs почитать но тогда надо побольше ядер купить. Но в серверы как раз много ядер и ставят и как видите nodejs прекрасно справляется с этой задачей. Правда что бы писать на ноде нужно купить макбук потому что все примеры в интернете написаны на мак буке но я думаю если выделаете высокопроизводительный веб-сервис, вам всеравно прийдется пройти раунд финансирования у родителей чтобы потом его запускать. Вообщем я в восторге хотя немного напрягает что гдето должны быть проблемы но я пока не понял не столкнулся ая уже очнь долго с ней разбираюсь и пока не понял.

Understanding ClojureScript

Попробовал Кложускрипт (картинка), ощущения интересные — действительно, пишешь почти что на нативной Кложе, а работает всё в браузере. Все коронные плюшки для трансформации данных под рукой, никакому underscore.js не снилось. Уже даже allocation-free reducers [0] можно попробовать.

Однако, когда дело дошло до DOM-а, событий и взаимодействия с браузером, опыт оказался совсем не таким приятным. Google Closure (внимание на буквы — closure и clojure — так уж совпало) вещь не самая дружелюбная — мнгословная, избыточная, незнакомая, с тупой документацией (я больше по jQuery прикалывался, но Рич её заклеймил в презентации), да и в Кложескрипте нормального моста к ней сделали, т.е. еще и интероп в Джаваскрипт получается.

Итак, хорошей получилась Кложаскрипт или нет? Стоит ли всем на нее перебегать, в срочном порядке учить синтаксис Кложи, и т.п.? Эта статья про понимание, коммуникацию, важность наличия цели и наличия правильной цели. Мне кажется, тут закопаны нетривиальные, неочевидные, но важные вещи, которые я для себя открыл и мне хочется, чтобы вы тоже открыли.

Зачем вообще есть кактус? Хрен бы с ней, с Google Closure, почему, действительно, не взять jQuery, на котором минимум половина интернета работает? В интернете почитал таких же недовольных [1], и вроде все правильно, вроде как Рич ошибся, не понимает он в клиент-сайде, взял самое корявое, что можно было взять. Так, да не совсем так.

У Кложескрипты есть на сайте Rationale [2, 3] (и в презентации [4] Рич то же самое проговаривал), которые через бывалый интернет-мозг проскакивают почти не задерживаясь — намерения хорошие и правильные, но не достаточно «вкусные», «модные», да и все в таких вещах пишут, что всё будет хорошо, а на деле у кого что получается. Ну, короче, не показатель, люди вы хорошие, давайте посмотрим, а что вы сделали. Ууууу, неудобно-то как. Пойду выплесну.

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

Рич когда-то сказал [5] очень умную вещь, когда его про Custom reader literals спрашивали, а хрен ли в Кложе нельзя ридер хакать, какой же это Лисп получается? Ответ был, что ему хочется сделать хороший библиотечный язык, чтобы вещи, создаваемые разными разработчиками на Кложе, стыковались в конечном счете друг с другом. Кастомный ридер эту идею намертво бы похоронил, как с оригинальным Лиспом и случилось, все разбежались по своим углам и каждый ковырял свой мотоцикл.

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

Кложаскрипт, к примеру, дает namespaces, а значит, библиотеки совершенно разных людей можно будет собрать и заставить работать вместе. (most boring feature ever, как было в одной презентации [6] — Kevin Lynagh нашел всего три упоминания неймспейсов на ХакерНьюз, мало кто видит их важность).

Дальше, оптимизирующий компилятор из Google Closure — если ты тянешь библиотеку ради одной-двух функций, то ты только их и получишь в итоговом коде. Поклонники jQuery, думающие, что их это не касается, вспомните, как jQueryUI в силу своего размера столкнулись ровно с этой проблемой, пришлось писать себе велосипед. Но самое главное, что неймспейсы и зависимости встроены в семантику языка — то есть ковбойство закончилось, один стандартный способ уже есть.

Дальше, мол, критикуют за то, что кто её знает, Google Closure эту, все на jQuery пишут. Это действительно так, но штука в том, что Кложаскрипт не создавалась ни для какой из существующих ниш — она нацелена на создание новой, еще никем не заполненной ниши — большие и сложные, десктопного класса приложения в браузере, где скоро возникнет потребность в инструментах. Действительно, jQuery удобен для маленьких сайтов, но есть ли примеры его масштабирования до приложений уровня GMail/Google Docs? У Google Closure, получается, есть. И во-вторых, очень правильно открывать новые горизонты для браузерных приложений, это гораздо важнее, чем топтаться по сто лет назад истоптанной земле кнопочко-фреймворков и маленьких сайтов. С маленькими сайтами проблем уже нет, давайте смотреть, где настоящие, нерешенные проблемы еще остались.

То есть, пока обычные люди видят проблемы Джаваскрипта в том, что можно написать == вместо === и получить приведение типов (баги, производительность), хипстеры — в неудобном синтаксисе записи классов (кто бы еще объяснил, зачем они вообще нужны, однако все их переизобретают заново), Рич пилит свой велосипед в сторону объединения усилий разработчиков, которые сейчас тянут телеги в разные стороны, и в сторону расширения возможностей браузерных приложений. Лично я в восторге от того, какой железной рукой он ведет Кложу[скрипт] к цели, которую прекрасно осознает и может сформулировать. Если бы этот человек в свое время придумывал Джаваскрипт, мы сегодня жили бы в куда лучшем мире, поверьте мне. Самое обидное, что мало кто понимает, в чем реальное достижение Кложескрипты состоит.

[0] Пост про allocation-free reducers, еще один.
[1] Обсуждение «недостатков» Кложескрипты. Цитата из топика, Рич:
Seriously, this is like being disappointed an action movie was an action movie instead of a comedy. Your expectations are a complete mismatch for the intentions of ClojureScript.
...
ClojureScript is an action movie, and we're interested in helping people kick butt.
[2] Rationale Кложескрипты
[3] Rationale использования Google Closure
[4] Первая презентация ClojureScript, где моменты из Rationale перечисляются еще раз
[5] Интервью про Clojure 1.4, extensible reader, в котором говорится про «библиотечную» ориентированность Кложи
[6] Выступление Kevin Lynagh про использование Кложескрипт в жизни.

P.S. Передача знаний о работе с Джаваскриптом подрастающему поколению:

Переключение раскладки CapsLock-ом для Мака

Зачем: КапсЛок — бесполезная клавиша в очень удобном месте. Переключать раскладку одной кнопкой очень удобно.

Как: Можно наверное скачать какую-нибудь специальную программу-демона, но я не люблю ставить ничего лишнего — программы как дети, ломаются, болеют, за ними надо смотреть, и чем их больше, тем труднее. К счастью, можно обойтись штатными средствами.

1. Скачиваем PlistEditPro.

2. Открываем с его помощью файл ~/Library/Preferences/ByHost/.GlobalPreferences.000d-что-то там. Учтите, что это скрытый файл, так что так просто его в диалоге не выберешь, проще из терминала:


  cd ~/Library/Preferences/ByHost
  /Applications/PlistEdit\ Pro.app/Contents/MacOS/PlistEdit\ Pro .GlobalPreferences.2ED2F52A-AEF9-56EE-A155-15190BFB7C5F.plist


3. Находим или добавляем раздел com.apple.keyboard.modifiermapping и дописываем туда маппинг 0 → 5 (CapsLock → KeyPad0, см. также БОНУСЫ):

<key>com.apple.keyboard.modifiermapping.1118-219-0</key>
<array>
  <dict>
    <key>HIDKeyboardModifierMappingDst</key>
    <integer>5</integer>
    <key>HIDKeyboardModifierMappingSrc</key>
    <integer>0</integer>
  </dict>
</array>


4. Перелогиниваемся.

5. Идем в System Preferences и ставим комбинацией на переключение раскладки CapsLock (он теперь при нажатии будет генерировать нажатие KeyPad0 — тоже не самая востребованная кнопка).

БОНУСЫ


1. Можно обойтись и без PlistEdit Pro:

  plutil -convert xml1 -o keys-xml.plist .Global…
  vim keys-xml.plist
  plutil -convert binary1 -o .Global… keys-xml.plist


2. Список всех кодов, которые можно перемапить:

None:         −1 (этим можно отключать кнопки)
Caps Lock:     0
Left Shift:    1
Left Control:  2
Left Option:   3
Left Command:  4
Keypad 0:      5
Help:          6
Right Shift:   9
Right Control: 10
Right Option:  11
Right Command: 12

Я не исследовал, возможно там и все остальные кнопки есть.