Как стать автором
Обновить
0
0

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

Отправить сообщение

Как исправить ошибку в Node.js и нечаянно поднять производительность в 2 раза

Время на прочтение 8 мин
Количество просмотров 44K
Началось все с того, что я оптимизировал отдачу ошибки HTTP 408 Request Timeout в сервере приложений Impress, работающем на Node.js. Как известно, у нодовского http.Server есть событие timeout, которое должно вызываться для каждого открытого сокета, если тот не закрылся за указанное время. Хочу уточнить, что не для каждого запроса т.е. не для каждого события request, функция которого имеет два аргумента (req, res), а именно для каждого сокета. Через один сокет может последовательно поступить много запросов в режиме keep-alive. Если мы задаем это событие, через server.setTimeout(2 * 60 * 1000, function(socket) {...}) то должны сами уничтожать сокет socket.destroy(). Но если не установить свой обработчик, то http.Server имеет встроенный, который уничтожит сокет через 2 минуты автоматически. На этом самом таймауте можно отдать ошибку 408 и считать инцидент исчерпанным. Если бы не одно но… С удивлением я обнаружил, что событие timeout вызывается и для тех сокетов, которые подвисли и для уже получивших ответ и для закрытых клиентской стороной, вообще для всех, находящихся в режиме keep-alive. Это странное поведение оказалось достаточно сложным, и я расскажу об этом ниже. Можно было бы вставить одну проверку в событие timeout, но со своим идеализмом я не удержался и полез исправлять баг на уровень глубже. Оказалось, что в http.Server режим keep-alive реализован не то что не по RFC, а откровенно не дописан. Вместо отдельного timeout для соединения и отдельного keep-alive timeout, там все на одном таймауте, который реализован на быстрых псевдо-таймерах (enroll/unenroll), но задан по умолчанию в 2 минуты. Это было бы не так страшно, если бы браузеры хорошо работали с keep-alive и переиспользовали его эффективно или закрывали бы неиспользуемые соединения.
Читать дальше →
Всего голосов 98: ↑97 и ↓1 +96
Комментарии 36

Безумный PHP. Фьюри код

Время на прочтение 7 мин
Количество просмотров 64K

Сборник PHP ненормальностей или что надо знать чтобы не сойти с ума и не прострелить себе что-нибудь


Прочитал статью mnv: "Приведение типов в PHP == табурет о двух ножках?" и захотелось в комментариях добавить немного дополнений, но… Но потом увидел комментарий и понял, что лучше дополню статью тем, про что мало кто пишет и мало где это имеется в централизованном виде. Вроде бы всем известная тема, а все же кому-то в новинку. Это не совсем про приведение типов, но они тоже есть. Это про особенности, зная которые можно делать меньше ошибок. Если интересно, го под кат, я создал!
Читать дальше →
Всего голосов 91: ↑82 и ↓9 +73
Комментарии 74

Что такого особенного в Nim?

Время на прочтение 7 мин
Количество просмотров 80K


Язык программирования Nim (ранее именовался Nimrod) — захватывающий! В то время как официальная документация с примерами плавно знакомит с языком, я хочу быстро показать вам что можно сделать с Nim, что было бы труднее или невозможно сделать на других языках.

Я открыл для себя Nim, когда искал правильный инструмент для написания игры, HoorRace, преемник моей текущей DDNet игры/мода Teeworlds.

(прим. пер. На синтаксис Nim имели влияние Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.)

Запускаем!


Да, эта часть всё ещё не захватывает, но просто следите за продолжением поста:

for i in 0..10:
  echo "Hello World"[0..i]

Читать дальше →
Всего голосов 63: ↑57 и ↓6 +51
Комментарии 93

RefluxJS — альтернативный взгляд на Flux архитектуру от Facebook

Время на прочтение 15 мин
Количество просмотров 29K
От переводчика: посмотрев на ReactJS и вдохновившись его простотой, начал искать библиотеку, которая бы обеспечивала такой же простой обмен данными внутри моего приложения. Наткнулся на Flux, увидел примеры кода и пошел искать альтернативу. Набрел на RefluxJS, немедленно полюбил и пошел переводить официальную доку. Она написана как раз в стиле статьи, поэтому в первую очередь решил поделиться ей с Хабрасообществом. Перевод несколько вольный. Кое-где, если мне казалось, что что-то нуждается в дополнительном пояснении или примере, я не стеснялся.

В переводе ниже в качестве перевода для термина Action из Reflux иногда используется термин «событие», а иногда — термин «экшен», в зависимости от контекста. Более удачного перевода мне подобрать не удалось. Если у вас есть варианты, жду предложений в комментариях.

Обзор


image image image image image

RefluxJS — простая библиотека, обеспечивающая в вашем приложении однонаправленный поток данных, использующая концепцию Flux от Facebook.
Читать дальше →
Всего голосов 31: ↑27 и ↓4 +23
Комментарии 29

Хекслет 3.0: практические уроки по программированию в браузере

Время на прочтение 5 мин
Количество просмотров 52K
Привет, Хабр!

Мы уже не раз писали о запуске, перезапуске и развитии образовательного проекта Хекслет. Проект стал возможным во многом именно благодаря поддержке Хабрасообщества и администрации (особенно deniskin). Спасибо вам!

Примерно месяц назад вышла бета-версия нового Хекслета! Есть несколько важных нововведений, но главная идея Hexlet.io это полноценная практика по программированию в браузере. Главное отличие от других проектов (например, Codecademy или CodeSchool) в том, что на Хекслете нет симуляторов: в каждом уроке вы работаете с полноценной машиной, подключенной к сети. Это позволяет обучать и обучаться не только программированию, но и работе с базами данных, серверами, сетью, фреймворками и так далее. Грубо говоря, если это запускается на Unix-машине – этому можно обучать на Хекслете.

В этой статье я расскажу немного об итерациях разработки (как мы пришли к такому формату и почему считаем его правильным), о новой версии, а также о технической реализации. Но сначала – о доступных сейчас уроках.
Читать дальше →
Всего голосов 41: ↑39 и ↓2 +37
Комментарии 16

86 бесплатных площадок для продвижения стартапов на международном рынке

Время на прочтение 4 мин
Количество просмотров 102K


Мы дополнили и адаптировали оригинальную подборку, выбрав исключительно бесплатные ресурсы для продвижения стартапов на международном рынке. Помимо этого мы переработали первоначальную классификацию, ввели ранжирование по потенциальному охвату аудитории (для площадок с обозначенным охватом) и распределили соответствующие ресурсы в тематические категории.
Читать дальше →
Всего голосов 33: ↑32 и ↓1 +31
Комментарии 9

300 потрясающих бесплатных сервисов

Время на прочтение 11 мин
Количество просмотров 1.6M


Автор оригинальной статьи Ali Mese добавил ещё 100 новых бесплатных сервисов. Все 400 потрясающих сервисов доступны здесь. И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



A. Бесплатные Веб-Сайты + Логотипы + Хостинг + Выставление Счета

  • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
  • Bootswatch: Бесплатные темы для Bootstrap.
  • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
  • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
  • Strikingly.com Domain: Конструктор веб-сайтов.
  • Logaster: Онлайн генератор логотипов и элементов фирменного стиля (new).
  • Withoomph: Мгновенное создание логотипов (англ.).
  • Hipster Logo Generator: Генератор хипстерских логотипов.
  • Squarespace Free Logo: Можно скачать бесплатную версию в маленьком разрешении.
  • Invoice to me: Бесплатный генератор счета.
  • Free Invoice Generator: Альтернативный бесплатный генератор счета.
  • Slimvoice: Невероятно простой счет.

Читать дальше →
Всего голосов 341: ↑325 и ↓16 +309
Комментарии 107

Паттерны в AngularJS

Время на прочтение 27 мин
Количество просмотров 60K

Краткий обзор


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

Введение


Статья начинается с краткого обзора фреймворка AngularJS. Обзор объясняет основные компоненты AngularJS: directives, filters, controllers, services, scope. Во втором разделе перечислены и описаны различные конструкции и архитектурные шаблоны, которые реализованы внутри фреймворка. Шаблоны сгруппированы по компонентам AngularJS, в которых они используются. Если некоторые шаблоны используются в нескольких компонентах, это будет указано.
Последний раздел включает несколько архитектурных шаблонов, которые обычно используются в SPA построенных на AngularJS.
Читать дальше →
Всего голосов 35: ↑30 и ↓5 +25
Комментарии 11

Трансдьюсеры в JavaScript. Часть первая

Время на прочтение 5 мин
Количество просмотров 30K
Рич Хикки, автор языка Clojure, недавно придумал новую концепцию — Трансдьюсеры. Их сразу добавили в Clojure, но сама идея универсальна и может быть воспроизведена в других языках.

Сразу, зачем это нужно:

  • трансдьюсеры могут улучшить производительность, т.к. позволят не создавать временные коллекции в цепочках операций map.filter.takeWhile.etc
  • могут помочь переиспользовать код
  • могут помочь интегрировать библиотеки между собой, например underscore/LoDash могут уметь создавать трансдьюсеры, а FRP библиотеки (RxJS/Bacon.js/Kefir.js) могут уметь их принимать
  • могут упростить FRP библиотеки, т.к. можно будет выбросить кучу методов, добавив один метод для поддержки трансдьюсеров


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

Читать дальше →
Всего голосов 56: ↑52 и ↓4 +48
Комментарии 56

Суперсилы Chrome DevTools

Время на прочтение 6 мин
Количество просмотров 70K


Я работаю в команде Онлайн. Мы делаем веб-версию справочника 2ГИС. Это долгоживущий активно развивающийся проект, в котором JavaScript используется как основной язык как на клиенте, так и на сервере.

Важное место в работе занимают инструменты анализа и отладки приложения. Популярные JavaScript фреймворки как правило обладают собственным инструментарием, заточенным под конкретную идеологию. Наша ситуация осложняется тем, что под капотом Онлайна гудит фреймворк собственного производства — Slot — также находящийся в стадии активной доработки.

В этой статье я расскажу, как мы используем стандартные браузерные инструменты разработчика для эффективной отладки и исследования. Эти рецепты направлены в первую очередь на изучение приложения снаружи-внутрь, поэтому подойдут для любого проекта.
Читать дальше →
Всего голосов 83: ↑78 и ↓5 +73
Комментарии 13

Black Swift: зачем мы его сделали

Время на прочтение 7 мин
Количество просмотров 126K
Как уважаемые хабровчане знают, вот уже почти год мы разрабатываем маленький компьютер (примерно с SD-карточку), работающий под OpenWRT, со встроенным Wi-Fi, USB, Ethernet, азартными играми и доступными женщинами. Дмитрий dzhe уже несколько раз писал про него — и, в общем, с каждым разом собирал в комментариях один и тот же вопрос: а зачем вы вообще его делаете? Ну ведь есть же Raspberry Pi, стоит он столько же, есть VoCore, Carambola, Edison, в конце концов, — зачем нужен ещё один «нанокомпьютер»?

Пожалуй, надо наконец на этот вопрос ответить — заодно отметив этим ответом появление у нас своего корпоративного блога (спасибо, Хабр!), а также запуск отдельного веб-сайта, посвященного только этому проекту.



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

Читать дальше →
Всего голосов 122: ↑120 и ↓2 +118
Комментарии 228

webpack: 7 бед — один ответ

Время на прочтение 12 мин
Количество просмотров 179K
После моего недавнего выступления на MoscowJS #17 с одноимённым докладом у многих возник интерес к этому инструменту. В рамках 11-го выпуска RadioJS, Миша Башкиров bashmish рассказал, что решился попробовать его в своём новом проекте, об успешном опыте и множестве положительных эмоций. Но были озвучены вопросы и возникла дискуссия, в результате которой я решил написать эту статью, чтобы раскрыть основные тезисы с доклада и рассказать о том, что тогда не успел.
Статья ориентирована, как на профессионалов, так и на тех, кто с похожими технологиями ещё не сталкивался.
Итак, начнём.
Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 13

Покупаем новые Kindle и Nexus 4,7 без посредников

Время на прочтение 1 мин
Количество просмотров 249K
Мне кажется, многие хабражители не знают, что жизнь потихоньку налаживается.
Долгое время, чтобы приобрести новинку раньше всех, нужно было прибегать к ухищрениям вроде использования VPN\Tor и услугам посредников. Теперь же когда ситуация с работой Почты РФ понемногу нормализовывается, Амазон тоже приготовил маленький приятный сюрприз. Новые Kindle и Nexus 7 можно просто купить с доставкой в Россию. Стоимость доставки 20-40 баксов. Обращаю внимание, что в этом случае налоги штата платить не придется.

image

Kindle Paperwhite, 6"
139$
High Resolution Display with Built-in Light, Wi-Fi
image
Google Nexus 7
16 gb -229$, 32 gb — 289 269$
FHD Tablet (7-Inch, 32GB, Black) by ASUS (2013)
image
LG E960 Google Nexus 4

От $267.99 В РФ отправляет магазин BESTDEAL TECH.

Пруфпик


UPD В комментариях утверждают, что доставка будет в обход Почты РФ.
UPD 2 Доставляется только Киндл без встроенной рекламы и без аксессуаров. Чехлы, к примеру, можно взять тут.
UPD 3 Альтернативная ссылка для тех, у кого не получается приобрести Киндл.
UPD 4 Список городов с беспроблемной доставкой грузов дороже 200 евро через UPS: Москва, Санкт-Петербург, Краснодар, Владивосток, Ставрополь, Новороссийск и Нижний Новгород.
UPD 5 Добавил Нексус 4, тоже есть доставка. не самая выгодная цена, но зато «заказал-забыл-получил».
UPD 6 В Москву пришло за 5 дней.
Читать дальше →
Всего голосов 88: ↑69 и ↓19 +50
Комментарии 168

Обзор нетбука MSI S12

Время на прочтение 19 мин
Количество просмотров 107K
AMD A4-5000 / 11.6" / 1366x768 / глянец / 4Gb / 500Gb / Wi-Fi / Bluetooth / DOS / ~ 11-14 т.р.
MSI S12
Решил написать этот обзор, так как был заворожен этим нетбуком сразу, как только нашел его.

Набор моих обязательных требований к портативным компьютерам, как оказалось, был очень взыскателен:

  1. Матрица 11.6" – даже 13.3" мне уже многовато.
  2. Минимум 16Gb DDR3-3L 1600 (12800).
  3. Вес вместе с блоком питания до 1.5 кг. — это просто Must Have, так как это очень комфортно.
  4. 4 Core CPU, желательно AMD Kabini\Kaveri.
    Не то, чтобы я «не люблю» Intel Core i5-i7.
    Но для работы мне столько не нужно.
    Хотя, впрочем, да — я фанат AMD уже лет 15.
    Мне нравится Intel как инноватор.
    Но конкуренция должна быть свободной.
  5. Наличие Legacy режима работы BIOS.
    Не то, чтобы я «не люблю» Microsoft.
    Хотя, впрочем, да — у меня Linux, уже лет 10.
    Поэтому присутствие UEFI Secure Boot или других ограничений меня бы очень сильно расстроило.
    Мне всё таки работать нужно, а не разбираться почему оно тормозит\упало\ограничено и тому подобное.
  6. Нормальная графическая подсистема, так как на работе я подключаюсь к Full HD монитору. Соответственно и желание посмотреть что-нибудь в High Res тоже иногда возникает. Да и дома на телевизоре есть HDMI, которому иногда что-нибудь нужно показать.
  7. Полноценная клавиатура. Я давно не смотрю на клавиши. Но тот человек, который придумал в моём старом Acer избавить меня от полноценных стрелочек и клавиш Home, End, PgDn и PgUp — он явно желал сделать мне плохо. Больше НИКОГДА! Потому, что привыкнуть к этому убожеству за два года я так и не смог.


Мои ожидания от MSI S12 полностью оправдались, поэтому захотелось обязательно поделиться, вдруг кому-нибудь тоже пригодится. Под катом, конечно же, будут какие-то фотки, ролики YouTube, агитация, провокации и другие сведения о том, каким я вижу «правильный нетбук» и почему данный экземпляр — это именно «оно».

Читать дальше →
Всего голосов 105: ↑72 и ↓33 +39
Комментарии 109

Классификация 3D принтеров (7 технологий 3D печати)

Время на прочтение 4 мин
Количество просмотров 227K
На хабре уже были статьи о технологиях печати, которые используют 3D принтеры, однако в данной статье я постарался подойти к вопросу системно, чтобы в голове у читателя сложилась четкая картина о том, какие принципы заложены в технологии 3D печати, какие материалы используются и в конечном итоге какую технологию лучше использовать для получения определенного результата, будь то деталь из титана, или мастер-модель для последующего тиражирования.
Статья основана на книге Fabricated: The New World of 3D printing

image

Читать дальше →
Всего голосов 61: ↑57 и ↓4 +53
Комментарии 8

Восстанавливаем запоротый SSD

Время на прочтение 5 мин
Количество просмотров 186K
Мне подумалось, что вдруг кого-то из владельцев SSD устройства этот топик наведёт на мысль о backup'е, кого-то о в целом более осторожном отношении, а кого-то избавит от общения с не слишком торопливой службой поддержки. Всё написанное относится не тдоолько к устройствам той серии и производителя, что у меня.

Дней 10 назад мне случилось оставить на ночь ноут с батареей в критическом состоянии без зарядки. Я не слишком беспокоюсь о жизни батареи, но удар последовал с другой стороны. Утром, включив ноутбук в зарядку и включив его я с удивлением обнаружил, что:
Operating system not found.

В ВIOS'е винчестер определялся. Схватив имевшийся под рукой Ubuntu Live CD на flash'ке и вооружившись командной строкой, я приготовился к дебагу.
Читать дальше →
Всего голосов 72: ↑67 и ↓5 +62
Комментарии 40

У сокращалки ссылок от Google появился полноценный API

Время на прочтение 1 мин
Количество просмотров 8.5K
В сентябре, когда мы запустили сервис сокращения ссылок, для него ещё не было сопутствующего API, чтобы позволить людям интегрировать goo.gl в свои приложения и веб странички. Однако, как мы говорили, что работаем над этим, и сегодня рады вам сообщить, что запустили полноценный goo.gl API доступный в Google Code Labs. Документация расположена на сайте Google Code, с примерами кода в секции Getting Started.

С этим API, разработчики могут программно получить доступ ко всем быстрым, гладким вкусняшкам, которые доступны через веб интерфейс. Вы можете сокращать и разворачивать URLы используя API, а также получать историю и аналитику. Вы сможете использовать эти возможности для широкого спектра приложений, начиная от автоматического сокращения ссылок в Twitter или Google Buzz клиентов запуская процесс мониторинга статистики и данные трафика. Для начала вы можете ознакомится с консолью Google API.

Мы очень рады возможности предоставить вам наш API для доступа к одному из самых быстрых сервисов сокращения ссылок. Мы продолжаем работать над некоторыми улучшениями юзабилити и возможностью автоматического определения спама или вредоносного контента. Мы надеемся, что с новым API, вы найдете место для goo.gl в своей будущей деятельности. Если вы являетесь разработчиком, ознакомьтесь с документацией по goo.gl API и посмотрите как это все работает.
Читать дальше →
Всего голосов 60: ↑53 и ↓7 +46
Комментарии 13

Рунетология (77): Scrum и Agile в веб-бизнесе

Время на прочтение 1 мин
Количество просмотров 1.7K
Управляющий партнер компании ScrumTrek Асхат Уразбаев — о внедрении гибких методологий программирования в российских IT-компаниях, о принципах Agile и их эффективности в веб-бизнесе, об ошибках использования Scrum и Agile и о том, как относятся к применению Scrum разработчики, менеджеры и заказчики.
Читать дальше →
Всего голосов 36: ↑36 и ↓0 +36
Комментарии 9

Система отзывов и рейтингов для товара в интернет-магазинах

Время на прочтение 2 мин
Количество просмотров 6.2K
Для покупателя в интернет-магазине (ИМ) очень важны рекомендации уже купивших, рейтинг товара, отзывы о нем. Наверняка, каждый пользовался Яндекс.Маркетом и представляет, что это такое.

Небольшой скриншотик для понимания
image

Читать дальше →
Всего голосов 10: ↑7 и ↓3 +4
Комментарии 14

Обзор сервиса Sports Tracker

Время на прочтение 2 мин
Количество просмотров 6.3K
image

Совсем недавно новоиспеченный сервис Sports Tracker перешел из стадии тестирования в полноценный режим работы. Проект сделает занятия спортом интересными, позволит сохранять и анализировать результаты чтобы добиваться новых высот. Под катом – краткий обзор сервиса и официальное видео.
Читать дальше →
Всего голосов 28: ↑25 и ↓3 +22
Комментарии 45

Информация

В рейтинге
Не участвует
Откуда
Луганская обл., Украина
Дата рождения
Зарегистрирован
Активность