Обновить
256K+

JavaScript *

Прототипно-ориентированный язык программирования

256,12
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

NeDB: аналог SQLite для NodeJS

Время на прочтение2 мин
Охват и читатели37K


NeDB (Node.js Embedded Database) — встраиваемая база данных для NodeJS, реализующая подмножество MongoDB API. Эта легкая NoSQL СУБД написана на чистом JavaScript, не имеет бинарных зависимостей и, помимо NodeJS, может использоваться в NW.js, Electron или прямо в браузере.
Читать дальше →

Язык описания шаблонов Snakeskin

Время на прочтение13 мин
Охват и читатели9.8K
Snakeskin

This is Frank, a snake-cowboy who loves templates.




Привет! Хочу рассказать о своей разработке — языке программирования текстовых шаблонов «Snakeskin». Проекту больше трех лет, всеми детскими болезнями, я полагаю, он благополучно переболел (и излечился), поэтому хочу поделиться результатом.


Демка


Основной репозиторий


Документация


Плагины для Gulp, Grunt, Webpack и прочее


Gitter — здесь можно задать любой интересующий вопрос

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

Как решить семейные разногласия с помощью 4 контроллеров и 2 умных часов за 1 месяц

Время на прочтение12 мин
Охват и читатели56K
image

«Умный дом» всё увереннее мигрирует из сферы гик-экзотики в направлении достаточно доступных технологий, с помощью которых можно сделать своё жильё комфортнее, удобнее, энергоэффективнее и вообще «ничоси!». И в этой статье я хотел бы поделиться с вами собственным опытом создания системы «умного дома» в своей квартире.

Немного о розетках


Моя жена очень любит выключать всё из розеток. Уходя, она всё выдергивает, а я потом возвращаюсь домой и вставляю обратно. Мне это не нравится. Я пробовал разное: просил, уговаривал, убеждал, угрожал — ничто не помогло. И тогда я решил, что надо найти высокотехнологичный способ уладить конфликт: каким-то образом коммутировать розетки, чтобы не нужно было физически вытаскивать штекеры по всей квартире.
Читать дальше →

JavaScript-only: гомогенная архитектура веб-проектов

Время на прочтение8 мин
Охват и читатели18K
Работа фронтенд-разработчика наполнена задачами по оптимизации кода, переносу готовых фрагментов между версиями проектов и т.п., сложность которых зачастую определяется исторически сложившимся подходом к самой разработке. В своём докладе на конференции HolyJS, которая пройдет 5 июня в Санкт-Петербурге, фронтенд-разработчик Алексей Иванов расскажет, как объем этих проблем можно сократить отказом от привычного подхода, когда приложение состоит из разрозненных частей, в пользу «всё-в-JS». Мы же в преддверии конференции поговорили с Алексеем о том, от каких именно сложностей избавляют предлагаемые им идеи (сами идеи будут подробнее раскрыты в докладе).



— Расскажи вкратце о себе и своей работе.

— Меня зовут Алексей Иванов, я фронтенд-разработчик в компании «Злые марсиане» (Evil Martians). Это распределенная группа разработчиков, помогающая крупным компаниям, вроде eBay или Groupon, а также различным стартапам в короткие сроки и без проблем запускать интернет-проекты с расчётом на быстрый рост.
В Марсианах я сейчас занимаюсь фронтендом сервиса под названием eBay Social для российского офиса eBay. Это классическое приложение на Ruby on Rails с отдельными интерактивными частями, написанными на React.
До Марсиан я делал первую версию SPA-приложения для ridero.ru на Backbone, помогал запускать пару сервисов для Яндекса с использованием bem-tools, а также занимался разработкой других серверных и SPA-приложений разного размера, что позволило мне потрогать кучу разных инструментов и методологий разработки. Мне нравится изучать и сравнивать разные способы организации кода, работы с зависимостями и разрешения конфликтов, используемые в разных методологиях и инструментах.

Откуда вообще появилась идея о каком-то глобальном изменении подхода к разработке?

— Фронтендеры Марсиан работают с двумя основными типами проектов.
Во-первых, мы создаем классические проекты на Ruby on Rails. В таких проектах рендер шаблонов происходит на сервере внутри самих Rails, а сборка CSS и JavaScript живет отдельно в Node.js и Gulp'е или другом сборщике. Мы пользуемся  пре- и постпроцессорами, собираем отдельные файлы в общие бандлы и сжимаем код Clean CSS и UglifyJS, но при этом CSS и JavaScript друг о друге знают очень мало, а про HTML, с которым они работают, вообще ничего не знают.
Читать дальше →
31 мая и 1 июня в кампусе бизнес-школы Сколково будет жарко вне зависимости от погоды - на одной площадке соберутся около 1500 участников. Повод собраться более чем подходящий - профессиональный фестиваль "Российские интернет-технологии". Это событие, по масштабам не просто превосходящее конференцию, а включающее в себя целых 7 конференций, объединённых вокруг отраслевой выставки. На фестивале не будет скучно никому: от уставшего от опыта системного администратора или программиста высоконагруженных систем до начинающих тестировщиков и прожжённых продажников. Почти как на обновлённом Хабре :-) Участников будут встречать конференции: по серверной и фронтенд-разработке, по управлению и предпринимательству, по разработке мобильных приложений, по эксплуатации и devops, по высоконагруженным системам и конференция на стыке enterprise и web-культур. Кстати, кто дочитает до конца, кроме примеров, видео и бесплатного учебного курса получит неплохую скидку по волшебному коду HabrCode2016.
Читать дальше

Web scraping при помощи Node.js

Время на прочтение10 мин
Охват и читатели148K

Это первая статья в цикле про создание и использование скриптов для веб-скрейпинга при помощи Node.js.


  1. Web scraping при помощи Node.js
  2. Web scraping на Node.js и проблемные сайты
  3. Web scraping на Node.js и защита от ботов
  4. Web scraping обновляющихся данных при помощи Node.js

Тема веб-скрейпинга вызывает всё больше интереса как минимум потому, что это неисчерпаемый источник небольших, но удобных и интересных заказов для фрилансеров. Естественно, что всё больше людей пытаются выяснить, что это такое. Однако, довольно трудно понять, что такое веб-скрейпинг по абстрактным примерам из документации к очередной библиотеке. Гораздо проще разобраться в этой теме наблюдая за решением реальной задачи шаг за шагом.


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


Цель этой статьи – показать весь процесс создания и использования такого скрипта от постановки задачи и до получения конечного результата. В качестве примера я рассмотрю реальную задачу вроде тех, какие часто можно найти, например, на биржах фриланса, ну, а в качестве инструмента для веб-скрейпинга будем использовать Node.js.

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

Релиз jQuery 3.0 Release Candidate

Время на прочтение3 мин
Охват и читатели5.1K


UPD: по просьбам читателей добавлен список ключевых изменений.

В прошедшую пятницу, 20 мая вышел jQuery 3.0 Release Candidate – практически финальная версия jQuery 3.0, которую уже можно испробовать в деле. После релиза третьей версии jQuery, ветки 1.12 и 2.2 будут некоторое время получать критические патчи, но новых функций или серьезных изменений не получат. jQuery 3.0 не будет поддерживать IE 6, 7 и 8 версии, поэтому если вам важна поддержка этих браузеров – можете использовать последний релиз 1.12.

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

Ссылки для скачивания jQuery 3.0 Release Candidate:

Полная версия: https://code.jquery.com/jquery-3.0.0-rc1.js
Минифицированная: https://code.jquery.com/jquery-3.0.0-rc1.min.js
Читать дальше →

Планировщик путешествий своими руками за пару часов

Время на прочтение8 мин
Охват и читатели14K

Автор: Сергей Матвеенко

Однажды ко мне пришел инвестор одного проекта и сказал: «Давай сделаем планировщик путешествий по картам Google!» Я согласился. Тогда инвестор стал рассказывать, как техдиректор представлял себе архитектуру этого планировщика: он говорил что-то про связь с сервером, про ключ API, про запросы в Google, про деньги за запросы, которых будет много и т. д. Все выглядело сложно и красиво. Однако затем мы стали внимательно читать документацию Google API и вдруг поняли, что на самом деле нам сервер не нужен. Вообще! Весь планировщик можно сделать на клиенте. А самое интересное — мы можем обойтись даже без API-ключа (при условии, что мы будем использовать JS API). В итоге я за два дня смог написать такой планировщик, с логикой на стороне клиента, на основе Google API, без использования сервера. Все оказалось очень просто.

Я расскажу, как можно сделать простейший планировщик такого рода буквально за пару часов. Конечно, за это время можно собрать только прототип, но главное — он будет работать! Его главной функцией будет прокладка оптимального маршрута между достопримечательностями в интересующем нас городе; может присутствовать разбивка плана поездки по дням. Все будет сделано на AngularJS с использованием Google Maps/Places API. Я расскажу об особенностях работы с этим API и о некоторых его возможностях, которые не указаны в документации. Также мы поговорим о выделении логики в клиентские приложения.
Читать дальше →

Запуск NodeJS-приложения на Android

Время на прочтение3 мин
Охват и читатели91K
Без сомнения, вам понравится запускать NodeJS на своем Android-устройстве. Благодаря эмулятору терминала и Linux-окружения для Android, разработка веб-приложений на смартфоне перестанет быть для вас проблемой.
Читать дальше →

Дайджест свежих материалов из мира фронтенда за последнюю неделю №212 (16 — 22 мая 2016)

Время на прочтение5 мин
Охват и читатели24K
Предлагаем вашему вниманию подборку с ссылками на полезные ресурсы, интересные материалы и IT-новости


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

Конкурс по программированию на JS: Классификатор слов (дополнение)

Время на прочтение3 мин
Охват и читатели18K
Спасибо всем, кто уже поучаствовал или собирается участвовать в нашем конкурсе по программированию!

Мы решили опубликовать ряд важных разъяснений к правилам, чтобы помочь участникам избежать типичных ошибок. Обидно было бы дисквалифицировать интересное решение из-за чисто технической ошибки.

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

Для отправки работ осталась ещё неделя. Если этот пост помог Вам найти ошибку, ещё есть время её исправить.

Английская версия этого поста размещена на GitHub.

Часто задаваемые вопросы

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

Опыт перехода сайта на Single Page Application с упором на SEO

Время на прочтение5 мин
Охват и читатели56K

Привет всем.


Мы классический web 2.0 сайт сделаный на Drupal. Можно сказать, что мы медиа сайт, т.к. у нас очень много всевозможных статей, и постоянно выходят новые. Мы уделяем много внимания SEO. У нас для этого даже есть специально обученные люди, которые работают полный рабочий день.


К нам заходит более 400k уникальных пользователей в месяц. Из них 90% приходит из поиска Google.


И вот уже почти полгода мы разрабатывали Single Page Application версию нашего сайта.


Как вы уже наверное знаете, JS это вечная боль сеошников. И нельзя просто так взять и сделать сайт на JS.


Перед тем как начать разработку мы начали исследовать этот вопрос.
И выяснили, что общепринятым способом является отдача google боту уже отрисованой версии страницы.
Making AJAX applications crawlable


Также выяснилось, что этот способ более не рекомендуется Google и они уверяют, что их бот умеет открывать js сайты, не хуже современных браузеров.


We are generally able to render and understand your web pages like modern browsers.

Т.к. на момент принятия нашего решения Google только-только отказались от подобного метода, и еще никто не успел проверить как Google Crawler на самом деле индексирует сайты сделаные на JS. Мы решили рискнуть и сделать SPA сайт без дополнительной отрисовки страниц для ботов.

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

Strelki.js — еще одна библиотека для работы с массивами

Время на прочтение8 мин
Охват и читатели7.6K
При программировании на JavaScript часто возникает проблема выбора оптимального представления данных в программе: массивы, хеши, массивы хешей, хеши массивов и т.д. Одни и те же данные могут быть загружены в различные комбинации структур, но трудность выбора обычно заключается в том, как найти компромисс между простотой кода для доступа к этим данным, скоростью работы и количеством требуемой памяти.



В статье рассказано о моей попытке поиска универсального решения.
Читать дальше →

Ближайшие события

Для чего вообще нужна изоморфность?

Время на прочтение3 мин
Охват и читатели17K
На Хабре есть несколько статей про изоморфность, которые на вопрос, что такое изоморфность, отвечают: “Изоморфность — это когда один и тот же код используют и на клиенте, и на сервере”. Да, это так, но не совсем понятно, для чего она вообще нужна. Собственно на этой почве и была рождена эта статья.
Читать дальше →

Что браузеры делают с вашим JavaScript-кодом: об оптимизациях в JS-движках на примере V8

Время на прочтение7 мин
Охват и читатели40K
Оптимизация кода начинается не столько с изучения особенностей языка программирования, сколько с понимания схемы работы всей «технологической цепочки», задействованной при создании приложения — от алгоритма программы до компилятора.

Мы поговорили с Вячеславом Егоровым aka mraleph, инженером из Google, компиляторщиком до мозга костей, который работал над JavaScript движком под названием V8, встроенным в Chromium (и, как следствие в Chrome, Android версию браузера, облачную операционную систему Chrome OS) и в менее известный Maxthone.
JavaScript-программистам Вячеслав, скорее всего, известен как автор постов про внутренности V8 и как докладчик, увлеченно показывающий машинный код на конференциях для Web-разработчиков.

В настоящее время Вячеслав активно работает в Google над Dart VM.
В этом интервью он рассказал о том, что происходит внутри движка, выполняющего динамический JS-код и поделился примерами, как выполняются некоторые оптимизации и почему важно глубоко понимать работу движка, чтобы обеспечить быстрое выполнение кода.

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

Анализ типов с помощью Proxy

Время на прочтение5 мин
Охват и читатели6.1K

В процессе описания очередного набора тестов для модуля Node.js поймал себя на мысли "опять проверка типов". Каждый параметр метода класса, каждое свойство устанавливаемое с помощью сеттера надо проверять. Можно конечно просто забить или дополнять все кодом реализующим проверки или попробовать описать все декораторами. Но в этот раз поступим немного иначе.

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

Фундамент масштабируемости javascript приложения

Время на прочтение6 мин
Охват и читатели15K

"Если хочешь идти быстро — иди один. Если хочешь идти далеко — идите вместе." (с)


С этой лирической строки в данной статье я буду рассуждать о том, как правильно организовать код в вашем приложении, чтобы оно могло расти в высоту и в ширь. Если вы хотите, чтобы продукт вашей мозговой активности был мощнее, чем у ваших конкурентов, то вам неизбежно придется приглашать новых программистов в вашу команду. А если не положить вектор масштабируемости, то порывы энтузиазма через год превратятся в лапшу-код и командная работа превратит каждого сотрудника от злости в маленького сатану.


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

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

Основы синтаксиса TypeScript

Время на прочтение8 мин
Охват и читатели62K


В 2012 году разработчики C# из компании Microsoft создали язык TypeScript — надмножество JavaScript. Он предназначен для разработки больших приложений, от100 тысяч строк. Давайте на примерах рассмотрим синтаксис TypeScript, его основные достоинства и недостатки, а также разберём способ взаимодействия с популярными библиотеками.

Кому это будет полезно: Web-разработчикам и разработчикам клиентских приложений, интересующимся возможностью практического применения языка TypeScript.
Читать дальше →

String.raw: некоторые возможности и ограничения

Время на прочтение3 мин
Охват и читатели11K

I. Возможности


Когда я прочитал на MDN: «The static String.raw() method is a tag function of template literals, similar to the r prefix in Python or the @ prefix in C# for string literals» — я здорово обрадовался, потому что мне часто не хватало в JavaScript чего-то вроде одиночных кавычек в Perl.

Я сразу придумал несколько видов использования и стал активно применять их в скриптах.

1. Определение путей к файлам Windows без двойного экранирования.

const r = String.raw;

const test_module = require(r`e:\DOC\prg\js\node\-lib\test.js`);

2. Определение путей к ключам реестра Windows.

const r = String.raw;

const Winreg = require('winreg');

const regKey = new Winreg({
  hive: Winreg.HKCU,
  key: r`\Software\MPC-HC\MPC-HC\Settings`
});

3. Создание сложных регулярных выражений из составных литералов.

См. пример кода в одной из недавних статей.

II. Ограничения


Однако со временем я стал натыкаться на неожиданные ограничения. Написав об одном из них в багтрекер V8, я получил отрезвляющее объяснение. Оказывается, хоть String.raw и выдаёт строку без интерпретации экранированных литералов, на стадии парсинга кода анализатор всё равно требует, чтобы литералы соответствовали правилам. Из этого следуют неочевидные ограничения для упомянутых случаев применения.
Читать дальше →

Уменьшаем размер публикуемых npm модулей

Время на прочтение6 мин
Охват и читатели8.5K
По умолчанию npm публикует в registry весь модуль целиком. За исключением явно указанных в .gitignore файлов. Это отбрасывает зависимости, но все равно позволяет куче не очень нужных файлов просочиться в опубликованное. После чего благодарные пользователи ждут, пока все это скачается. Для grunt, кстати, ждать придется порядка 6 мегабайт. А он такой обычно не один.

Я решил разобраться, как измерить размер своих модулей после публикации и, по возможности, этот размер уменьшить. В качестве примера буду использовать модуль check-more-types, который содержит всего несколько файлов. Плюс юнит тесты и документацию, которая собирается в README markdown файл.
Читать дальше →