В JavaScript существует множество разных способов наследования, классового и прототипного, фабричного и через примеси, прямого и непрямого, а так же гибриды нескольких методов. Но у Node.js есть его родной способ с применением util.inherits(ChildClass, ParentClass). До недавнего времени я использовал нодовский способ только для встроенных классов (когда нужно сделать своего наследника для EventEmitter, Readable/Writable Stream, Domain, Buffer и т.д.), а для моделирования предметной области применял общеупотребительные для всего JavaScript практики. И вот, впервые, понадобилось реализовать собственную иерархию системных классов, не наследников от встроенных, но и не классов предметной области, а классов, массово поражаемых в системном коде сервера приложений Impress. И простого использования util.inherits уже как-то не хватило, поискал я статьи и не найдя полностью всего, что мне нужно, изучил примеры наследования в исходниках самой ноды, подумал и сделал пример родного нодовского наследования себе на память и написал эту небольшую заметку, чтобы она, надеюсь, помогла еще и вам. Сразу предупреждаю, что реализация вызова метода родительского класса из переопределенного в дочернем классе метода, мне не очень нравится из-за громоздкости, поэтому, приветствую альтернативные способы и приглашаю коммитить их в репозиторий или в комментарии к этой заметке.
Сергей @bo883
Пользователь
58 признаков хорошего интерфейса
16 min
381KTranslation
У хорошего интерфейса пользователя высокая конверсия и его просто использовать. То есть, он хорош и для бизнеса, и для использующих его людей. Вот список опробованных нами идей.
Один столбец точнее отражает то, что вы хотите донести. Пользователи проходят сверху вниз по более предсказуемому пути. В дизайне с несколькими колонками есть риск отвлечения пользователя от основной задачи страницы.
1 Один столбец вместо нескольких
Один столбец точнее отражает то, что вы хотите донести. Пользователи проходят сверху вниз по более предсказуемому пути. В дизайне с несколькими колонками есть риск отвлечения пользователя от основной задачи страницы.
+138
Интеграция Fail2ban с CSF для противодействия DDoS на nginx
12 min
34KTutorial
Набор скриптов ConfigServer Security & Firewall (CSF) изначально обладает достаточно богатыми возможностями по организации защиты сервера хостинга Web с помощью фильтра пакетов iptables. В частности с его помощью можно противостоять затоплению атакуемого хоста пакетами TCP SYN, UDP и ICMP слабой и средней силы. Дополняет CSF встроенный Login Failure Daemon (lfd), который осуществляет мониторинг журналов на предмет наличия многочисленных неудачных попыток авторизации в различных сетевых сервисах с целью подбора пароля. Такие попытки блокируются путем внесения адреса IP злоумышленника в черный список CSF.
+24
Numcap — npm для определения оператора и региона по номеру телефона
2 min
24KТем, кто работает с телефонией, приложениями связанных со звонками и т.п. время от времени приходится сталкиваться с вопросами: «а можно определять с какого региона этот звонок?» и «а этот номер какого мобильного оператора?»
В общем-то, ответы найти легко. На сайте Федерального агентства связи есть данные о ресурсе нумерации всех операторов связи. Заходишь на сайт, скачиваешь нужный CSV файл и находишь нужную информацию.
Но ведь можно автоматизировать этот поиск? Конечно. И многие аккуратно парсят этот CSV и складывают к себе в базу данных. А затем используют. Я тоже так делаю.
Но недавно с моим коллегой мы решили немного это упаковать и сделать npm для быстрого подключения ресурса нумерации к проекту на node.js.
Ссылка на гитхаб, ссылка на npm.
Далее немного деталей.
В общем-то, ответы найти легко. На сайте Федерального агентства связи есть данные о ресурсе нумерации всех операторов связи. Заходишь на сайт, скачиваешь нужный CSV файл и находишь нужную информацию.
Но ведь можно автоматизировать этот поиск? Конечно. И многие аккуратно парсят этот CSV и складывают к себе в базу данных. А затем используют. Я тоже так делаю.
Но недавно с моим коллегой мы решили немного это упаковать и сделать npm для быстрого подключения ресурса нумерации к проекту на node.js.
Ссылка на гитхаб, ссылка на npm.
Далее немного деталей.
+10
Проблемы даты и времени в JS
3 min
88KРедкому программисту случается избежать работы с датой и временем. Вообще, дата/время — базовое понятие и в основной массе языков существуют встроенные механизмы работы с этим типом данных. Казалось бы, JS не исключение, есть встроенный тип Date, есть куча функций в прототипе, однако…
+24
AngularJS 1.x – перевод курса от CodeSchool
12 min
75KДанная публикация является переводом оригинального курса CoodSchool с небольшими дополнениями, которые показались мне уместными в данном контексте. Публикация рассчитана на тех, кто только начинает знакомится с Angular.
AngularJS — популярная JavaScript библиотека, предназначенная, главным образом, для создания одностраничных веб-приложений с динамически обновляемым содержимым. Библиотека была написана словацким программистом Мишкой Хевери, который, работая в Google, получил от своего шефа задание выучить JavaScript. Он решил, что лучший способ изучить язык — это создать на его основе собственный фреймворк. Angular (звучит как «Ангула» и дословно переводится как «Угловатый») использует концепцию разделения данных и их представления, известную как MVC (M — model (данные), V — view (представление), С — controller (контролер, управляющая прослойка между ними обеспечивающая логику работы приложения).
Введение
AngularJS — популярная JavaScript библиотека, предназначенная, главным образом, для создания одностраничных веб-приложений с динамически обновляемым содержимым. Библиотека была написана словацким программистом Мишкой Хевери, который, работая в Google, получил от своего шефа задание выучить JavaScript. Он решил, что лучший способ изучить язык — это создать на его основе собственный фреймворк. Angular (звучит как «Ангула» и дословно переводится как «Угловатый») использует концепцию разделения данных и их представления, известную как MVC (M — model (данные), V — view (представление), С — controller (контролер, управляющая прослойка между ними обеспечивающая логику работы приложения).
+38
Размышления о стандартной библиотеке JavaScript. Core.js
64 min
105KОдин пацан писал все на JavaScript, и клиент, и сервер, говорил что нравится, удобно, читабельно. Потом его в дурку забрали, конечно.
— С просторов интернета
К чему это я? Занятная штука — JavaScript. Основа современного web и на фронтэнде альтернатив как таковых не имеет.
JavaScript это, в том числе, и стандартная библиотека, о которой здесь и пойдёт речь. Под стандартной библиотекой я подразумеваю модули, конструкторы, методы, что должны присутствовать на любой платформе, будь то браузер или сервер, без лишних действий со стороны программиста, не включая API, специфичный для платформы. Даже если вы пишите не на JavaScript, а на языке в него компилируемом, скорее всего, вам придется иметь дело с его стандартной библиотекой.
Ванильная стандартная библиотека JavaScript, в целом, неплоха. Это не только стандартная библиотека по спецификации языка ECMA-262 актуальных версий — от 3 до черновика 6. Часть API вынесена в отдельные спецификации, например, API интернационализации ECMA-402. Многие возможности, без которых сложно представить JavaScript, например,
setTimeout
, относятся к web-стандартам. Консоль не стандартизована вовсе — приходится полагаться на стандарт де-факто.Вот только не такая уж она и стандартная — везде разная. Есть старые IE, в которых из коробки мы получаем стандартную библиотеку ES3 90-бородатого года даже без
Array#forEach, Function#bind, Object.create
и консоли, и есть, например, Node.js, на которой многие уже вовсю используют возможности грядущего ES6.Хочется иметь универсальную, действительно стандартную библиотеку, как на сервере, так и в любом браузере, максимально соответствующую современным стандартам, а также реализующую необходимый функционал, что (пока?) не стандартизован. Статья посвящена библиотеке core.js — реализация моих соображений по поводу стандартной библиотеки JavaScript. Кроме того, эта статья еще и шпаргалка по современной стандартизованной стандартной библиотеке JavaScript и заметки о её перспективах.
Содержание, или что получим на выходе:
Подходы
-
Часть первая: Костыли
- ECMAScript 5
- ECMAScript 6
- ECMAScript 6: Символы
- ECMAScript 6: Коллекции
- ECMAScript 6: Итераторы
- ECMAScript 6: Обещания
- Mozilla JavaScript: Статические версии методов массива
- Отложенное исполнение: setTimeout, setInterval, setImmediate
- Консоль
-
Часть вторая: Велосипеды
- Классификация данных
- Словари
- Частичное применение
- Форматирование даты
- Объектное API
- Массивы
- Числа
- Экранирование спецсимволов
Заключение
+77
Лицензия для вашего open-source проекта
98 min
186KВ этой статье я хочу немного поговорить об авторском праве и свободных лицензиях на ПО. Текст является результатом самостоятельного выбора лицензий и их применения к своим проектам.
Статья будет полезна тем, кто хочет:
— в общих чертах понять, что такое авторское право (но лучше обратиться к юристу);
— подобрать свободную лицензию для своего проекта;
— разобраться, что нужно писать в шапке файла исходного кода.
Статья будет полезна тем, кто хочет:
— в общих чертах понять, что такое авторское право (но лучше обратиться к юристу);
— подобрать свободную лицензию для своего проекта;
— разобраться, что нужно писать в шапке файла исходного кода.
+128
Codeship.io: бесплатный CI сервер для приватного репозитория Github/Bitbucket
3 min
28KTutorial
Сразу заинтригую: в результате мы получим связку бесплатного приватного git репозитория на Bitbucket и бесплатный* Continious Integration сервер (SAAS), который будет собирать проект и прогонять все тесты после каждого пуша.
* — бесплатная подписка дает возможность тестировать 5 приватных репозиториев и максимум 100 билдов в месяц.
Мне этого для личного проекта достаточно.
Приведу пример для PHP, проект на Symfony2, но данный сервис поддерживает ещё и Ruby, Node.js, Python.
+16
ECMAScript 6 Promises
5 min
52KTutorial
На Хабре уже встречались статьи о замечательной технологии Promises, которая в будущем станет частью стандарта ECMAScript 6, однако, в этих статьях не было подробного описания, почему же они так полезны и в чем таки их преимущества. Дабы заполнить этот пробел, я решил написать эту статью.
+19
Семь принципов создания современных веб-приложений
19 min
188KTutorial
Translation
Эта статья основана на моей презентации с конференции BrazilJS в августе 2014 года. Она базируется на идеях, о которых я писал в блоге недавно, в основном, в связи с UX и производительностью.
Я хочу представить 7 действенных принципов для веб-сайтов, которые хотят применить JavaScript для управления UI. Эти принципы являются результатом моей работы как веб-дизайнера, но также как давнего пользователя WWW.
JavaScript бесспорно стал незаменимым инструментом для разработчиков фронтенда. Сейчас сфера его применения расширяется на другие области, такие как серверы и микроконтроллеры. Этот язык программирования выбрали престижные университеты, чтобы обучать студентов основам информатики.
В то же время существует ряд вопросов относительно его роли и конкретного использования, на которые многие затрудняются ответить, в том числе авторы фреймворков и библиотек.
Я хочу представить 7 действенных принципов для веб-сайтов, которые хотят применить JavaScript для управления UI. Эти принципы являются результатом моей работы как веб-дизайнера, но также как давнего пользователя WWW.
JavaScript бесспорно стал незаменимым инструментом для разработчиков фронтенда. Сейчас сфера его применения расширяется на другие области, такие как серверы и микроконтроллеры. Этот язык программирования выбрали престижные университеты, чтобы обучать студентов основам информатики.
В то же время существует ряд вопросов относительно его роли и конкретного использования, на которые многие затрудняются ответить, в том числе авторы фреймворков и библиотек.
- Должен ли JavaScript использоваться как замена функциям браузера: история, навигация, рендеринг?
- Умирает ли бэкенд? Нужно ли вообще рендерить HTML?
- Правда ли, что будущее за приложениями на одной странице (Single Page Applications, SPA)?
- Должен ли JS генерировать страницы на веб-сайте и рендерить страницы в веб-приложениях?
- Нужно ли использовать техники вроде PJAX или TurboLinks?
- Каково точное отличие между веб-сайтом и веб-приложением? Должно ли остаться что-то одно?
+90
Тонкости nodejs. Часть I: пресловутый app.js
5 min
42KTutorial
Я работаю с node.js более трех лет и за это время успел хорошо познакомиться с платформой, ее сильными и слабыми сторонами. За это время платформа сильно изменилась, как, собственно, и сам javascript. Идея использовать одну среду и на сервере и на клиенте пришлась многим по душе. Еще бы! Это удобно и просто! Но, к сожалению, на практике все оказалось не так радужно, вместе с плюсами платформа впитала в себя и минусы используемого языка, а разный подход к реализации практически свел на нет плюсы от использования единой среды. Так все попытки реализовать серверный js до ноды не взлетели, взять тот же Rhino. И, скорее всего, node ждала та же участь, если бы не легендарный V8, неблокирующий код и потрясающая производительность. Именно за это его так любят разработчики. В этой серии статей, я постараюсь рассказать о неочевидных на первый взгляд проблемах и тонкостях работы, с которыми вы столкнетесь в разработке на nodejs.
+41
Генерация HTML: удобнее чем хелперы и чистый HTML
6 min
37KПисать чистый HTML часто неудобно, особенно если нужно делать динамические вставки.
Шаблонизаторы частично решают эту проблему, но их причудливый синтаксис нужно изучать, мириться с ограничениями, вкладывать одни шаблоны в другие для повторного использования, в целом попытка хороша, но что-то не то.
В некоторых фреймворках есть хелперы, в частности написать эту статью меня вынудила Aura.Html. С хелперами иная история — они изначально задуманы для реального упрощения, поскольку одной командой могут генерировать хороший кусок HTML кода, но они в большинстве заточены под определённое использование, и что-то дальше этого выглядит слишком криво.
Как более универсальное решение было бы не плохо не изобретать причудливый синтаксис, а использовать самый обычный PHP и всем знакомые примитивные CSS-селекторы.
Размышляя в таком духе некоторое время назад я принялся пилить свой велосипед. Велосипед получился, использовался в рамках другого велосипеда, потом отделился, много раз обновлялся, и сейчас я хотел бы поделиться им с сообществом.
Шаблонизаторы частично решают эту проблему, но их причудливый синтаксис нужно изучать, мириться с ограничениями, вкладывать одни шаблоны в другие для повторного использования, в целом попытка хороша, но что-то не то.
В некоторых фреймворках есть хелперы, в частности написать эту статью меня вынудила Aura.Html. С хелперами иная история — они изначально задуманы для реального упрощения, поскольку одной командой могут генерировать хороший кусок HTML кода, но они в большинстве заточены под определённое использование, и что-то дальше этого выглядит слишком криво.
Как более универсальное решение было бы не плохо не изобретать причудливый синтаксис, а использовать самый обычный PHP и всем знакомые примитивные CSS-селекторы.
Размышляя в таком духе некоторое время назад я принялся пилить свой велосипед. Велосипед получился, использовался в рамках другого велосипеда, потом отделился, много раз обновлялся, и сейчас я хотел бы поделиться им с сообществом.
+10
Pirate Bay начал продвигать новый бесплатный VPN
2 min
138KПоследние несколько дней на главной странице «Пиратской бухты» вместо их собственного лого висит промо нового бесплатного VPN — FrootVPN. На странице проекта написано, что сервис базируется в Швеции и находится под защитой шведских законов, предоставляет свои услуги бесплатно, используя несколько 10-гигабитных каналов и не ведёт никаких логов.
Что мы знаем о тех, кто разместил эту ссылку, кроме удивительной толерантности к jpg-артефактам на логотипах?
Что мы знаем о тех, кто разместил эту ссылку, кроме удивительной толерантности к jpg-артефактам на логотипах?
+49
Продвинутое использование объектов в JavaScript
15 min
50KTranslation
Этот пост выходит за рамки повседневного использования объектов в JavaScript. Основы работы с объектами по большей части так же просты, как использование JSON-нотации. Тем не менее, JavaScript дает возможность использовать тонкий инструментарий, с помощью которого можно создавать объекты некоторыми интересными и полезными способами и который теперь доступен в последних версиях современных браузеров.
+52
Не лей мне соль в реактор или не-импульсные ядерные ракетные двигатели
8 min
169KИдея бросать за корму атомные бомбы в проекте «Орион» оказалась слишком брутальной, но объемы энергии, которые дает реакция ядерного расщепления, не говоря уже о синтезе, крайне привлекательны для космонавтики. Поэтому было создано множество не-импульсных систем, избавленных от проблем с хранением сотен ядерных бомб на борту и циклопических амортизаторов. О них сегодня мы и поговорим.
+126
500 слов в минуту без подготовки
1 min
518KОбычная скорость чтения на русском языке составляет 120—180 слов в минуту. С помощью долгих тренировок можно повысить её где-то до 600 слов в минуту. Совсем недавно небольшой стартап из Бостона представил новую технологию под названием Spritz.
Мне удалось без подготовки читать со скоростью 500 слов в минуту. Разработчики утверждают, что можно достигнуть 1000; без ущерба для смысла. Более того, утверждается, что использование Spritz также увеличивает скорость чтения обычных текстов.
Вероятно, теперь можно ожидать появления устройств с крошечными экранами, которые составят конкуренцию традиционным электронным книгам. Очень рекомендую ознакомиться с демкой на сайте.
+177
Почему я не верю в отечественный космос — взгляд изнутри
5 min
88KУже несколько лет я работаю программистом на одном из предприятий РосКосмоса — ФГУП ХХХХХ и в этом посте мне бы хотелось поделиться своими впечатлениями об этой организации.
Главной проблемой отечественных высокотехнологичных отраслей 90-х годов было повальное отсутствие средств. Применительно к настоящему времени эта проблема практически отсутствует. Зарплаты выплачиваются, ремонты проводятся, закупается новое дорогостоящее оборудование и даже иногда лицензионное ПО. На этом положительные моменты заканчиваются.
Главной проблемой отечественных высокотехнологичных отраслей 90-х годов было повальное отсутствие средств. Применительно к настоящему времени эта проблема практически отсутствует. Зарплаты выплачиваются, ремонты проводятся, закупается новое дорогостоящее оборудование и даже иногда лицензионное ПО. На этом положительные моменты заканчиваются.
+169
Устанавливаем последний (4.2.2) Android на старичка HTC Desire S
4 min
380KHTC Desire S можно справедливо назвать старичком, продается он уже более двух лет. У меня аппарат более полутора лет. Тем не менее — это аппарат с очень неплохой «начинкой», качественным экраном и металлическим корпусом.
Наверняка, как и все поклонники HTC, я тащился от их фирменной оболочки «Sense». Стоковый аппарат включал в себя Android 2.3.5 и Sense 3.0.
Потом была целая эпопея в ожидании официальной прошивки на Android 4, завершенный вариант которой так и не вышел. Еще до выхода этой прошивки «для разработчиков» мои нервы подкосились и «кастомные», неофициальные сборки начали заливаться в телефон одна за другой. Была опробована и официальная с Android 4.0.4. Прошло некоторое время и выбор остановился на CM10.1 с Android 4.2.2 и всеми его прелестями, для которых аппаратного обеспечения устройства вполне хватает.
Наверняка, как и все поклонники HTC, я тащился от их фирменной оболочки «Sense». Стоковый аппарат включал в себя Android 2.3.5 и Sense 3.0.
Потом была целая эпопея в ожидании официальной прошивки на Android 4, завершенный вариант которой так и не вышел. Еще до выхода этой прошивки «для разработчиков» мои нервы подкосились и «кастомные», неофициальные сборки начали заливаться в телефон одна за другой. Была опробована и официальная с Android 4.0.4. Прошло некоторое время и выбор остановился на CM10.1 с Android 4.2.2 и всеми его прелестями, для которых аппаратного обеспечения устройства вполне хватает.
-9
IT-эмиграция: Сингапур
10 min
66KПосле обеда, развалившись в кресле, я почитывал интернеты, как неожиданно на моем телефоне высветился странный, незнакомый номер. «Хмм, странно» — подумал, я — «Кому еще я так внезапно понадобился?». Конечно, я решил поднять трубку, мало ли что… «Саша, привет! Это Кирилл, помнишь? А ты не хотел бы поработать в Сингапуре?» — в трубке раздался голос моего старого друга, которого я уже не видел года три. «А почему бы и нет?» — ответил я.
Как вы понимаете эти строки я пишу уже из Сингапура. Ниже будет моя история с переездом, стоимостью аренды, налогах и условиях жизни.
Как вы понимаете эти строки я пишу уже из Сингапура. Ниже будет моя история с переездом, стоимостью аренды, налогах и условиях жизни.
+108
Information
- Rating
- Does not participate
- Location
- Минеральные Воды, Ставропольский край, Россия
- Date of birth
- Registered
- Activity