Как стать автором
Обновить
34
0
Андрей Рягузов @aeryaguzov

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

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

oDesk (Upwork). Мой опыт за полтора года

Время на прочтение12 мин
Количество просмотров445K
Вот уже полтора года я зарабатываю фрилансом на бирже oDesk. За это время у меня накопилось много материалов по данной теме. В данном топике я собрал все в одну статью и адаптировал для аудитории хабра.
image
Читать дальше →
Всего голосов 192: ↑185 и ↓7+178
Комментарии321

[Перевод] Проблема конструкторов JavaScript и три способа её решения

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

Введение


Как известно, создать новый объект в JavaScript можно используя функцию-конструктор следующего вида:

function Fubar (foo, bar) {
  this._foo = foo;
  this._bar = bar;
}

var snafu = new Fubar("Situation Normal", "All Fsked Up");


Когда мы вызываем функцию-конструктор при помощи ключевого слова new , то получаем новый объект, а контекст его конструктора устанавливается на сам объект. Если мы явно не возвращаем ничего из конструктора, то получаем сам объект в качестве результата. Таким образом, тело функции конструктора используется для инициализации вновь созданного объекта, прототипом которого будет содержимое свойства prototype конструктора, так что можно писать следующим образом:

Fubar.prototype.concatenated = function () {
  return this._foo + " " + this._bar;
}

snafu.concatenated()
  //=> 'Situation Normal All Fsked Up'


Используя оператор instanceof можно убедиться в том, что объект был создан при помощи определенного конструктора:

snafu instanceof Fubar
  //=> true


(Заставить работать instanceof «неправильно» возможно при в случаях с более продвинутыми идиомами, или же если вы — вредный тролль, собирающий исключения языка программирования и получающий наслаждение, истязая ими соискателей на собеседованиях. Однако, для наших целей instanceof работает достаточно хорошо.)
Читать дальше →
Всего голосов 38: ↑23 и ↓15+8
Комментарии39

Сверхбыстрое распознавание речи без серверов на реальном примере

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

В этой статье я подробно расскажу и покажу, как правильно и быстро прикрутить распознавание русской речи на движке Pocketsphinx (для iOS порт OpenEars) на реальном Hello World примере управления домашней техникой.
Почему именно домашней техникой? Да потому что благодаря такому примеру можно оценить ту скорость и точность, которой можно добиться при использовании полностью локального распознавания речи без серверов типа Google ASR или Яндекс SpeechKit.
К статье я также прилагаю все исходники программы и саму сборку под Android.

Прикручиваем Pocketsphinx к своему Андроиду
Всего голосов 185: ↑182 и ↓3+179
Комментарии87

Отказоустойчивый IP-адрес с помощью ucarp

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

Задача


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

В статье для этой цели будут использованы Debian Linux, протокол CARP и утилита ucarp.
Читать дальше →
Всего голосов 30: ↑29 и ↓1+28
Комментарии25

10 шагов планирования проекта за 25 минут

Время на прочтение1 мин
Количество просмотров53K
В прошлом видео мы попросили нашего Ивана Селиховкина (selikhovkin) рассказать, что по шагам нужно делать, когда тебе достается чужой ношеный уже какое-то время идущий проект. В этот раз, как и обещали, о проектах, которые начинаются с нуля. 10 шагов, которые хорошо бы пройти в рамках планирования проекта:



Чем планирование софтверных проектов похоже на написание книги, как гуры экспертного управления планировали бы написание продолжения “Войны и мира”, и что такое метод оценки трех П — обо всем этом в новом видео.
Читать дальше →
Всего голосов 39: ↑33 и ↓6+27
Комментарии6

Эволюция языка расширений: история Lua

Время на прочтение23 мин
Количество просмотров27K
от пер. Исходный материал датируется 2001 годом, так что некоторые моменты могут показаться забавными. Так же все отсылки на «сегодня», «в настоящий момент» и т.п. относятся к тому периоду.
Изложение ведется от лица автора, как и в оригинале.
Все ссылки добавлены мною.


Изложение организовано в хронологическом порядке. Мы начнем с наших экспериментов, легших в основу создания Lua в 1993, и пройдемся через восемь лет обсуждений, решений, работы и развлечений.
Читать дальше →
Всего голосов 39: ↑39 и ↓0+39
Комментарии8

Управленческие инструменты: Набор мебельных ключей или как придумывать конструктивные аргументы

Время на прочтение8 мин
Количество просмотров37K
Друзья, спасибо за такой большой интерес к нашему видео про троллинг, картины мира и прочие неконструктивные приемы коммуникаций (на текущий момент его посмотрели более 6,000 человек). Если вдуматься, то 24 мин. видео * 6,000 = 2,400 часов времени — надеемся, что это было для вас полезно.

Как и обещали, переходим обратно в конструктив: сегодня мы хотели бы разобрать тему, как подбирать конструктивные аргументы, которые меняют модели поведения людей. Если в реальной жизни возникали ситуации, когда было тяжело убедить другого человека в своей точке зрения, когда собеседник НЕ ПОНИМАЕТ очевидных вещей, то сегодня мы разберем простой алгоритм, как это до людей доносить. И, как водится, закрепим материал примерами из реальной жизни.

P.S. Поскольку хабраопрос в предыдущей статье показал, что текст лучше чем видео, в этот раз есть и видео, и текст.
Как подбирать аргументы для обсуждения
Всего голосов 36: ↑33 и ↓3+30
Комментарии17

NodeSchool — интерактивные уроки по Node.Js

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

Все мы знаем теоретический курс по node.js, недавно выпущенный Ильей Кантором. Отличный материал, свежий, полный и к тому же на русском. Но он теоретический, а нам-то хочется все потрогать, попробовать самим, получая реальный опыт. В этом нам поможет, недавно стартовавший, бесплатный проект NodeSchool.
Читать дальше →
Всего голосов 52: ↑43 и ↓9+34
Комментарии5

Скорости разработки и исполнения, не достижимые на С

Время на прочтение20 мин
Количество просмотров59K
В продолжении статьи о кроссплатформенной и кросс-аппаратной оптимизации, на примере задачи поиска полным проходом по таблице из 5 полей и 10 000 000 строк, и неизбежности этой задачи даже при индексном поиске, я покажу как ускорить такой поиск в 3.5-5.3 раза с использованием C++ независимо от аппаратной платформы.
В предыдущей статье нам удалось ускорить поиск в 1.3 раза: GitHub.com
Мы не будем банально описывать конструкции языка, а покажем преимущества C++ при решении одного из этапов реальной задачи.
Мы по-прежнему пишем кроссплатформенно под MSVC11(MSVS2012) и GCC 4.7.2, и используем в них C и частично реализованный стандарт C++11.
Для упрощения понимания мы все ещё пишем без индексного поиска, но это решение в дальнейшем будет использоваться при индексном поиске.
Читать дальше →
Всего голосов 165: ↑150 и ↓15+135
Комментарии41

Основной цикл в Javascript

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


Все мы слышали про ajax и node.js. Они прочно обосновались уже не просто в словарном запасе, но и в наборе инструментов веб-разработчика. Ajax — асинхронное подтягивание данных с сервера на страницу, node — фреймворк с асинхронным IO. Но как в таком однопоточном языке, как Javascript, реализуется та самая асинхронность?

Вы, наверное, уже догадались из заголовка, речь пойдет об основном цикле («main loop»).
Читать дальше →
Всего голосов 190: ↑186 и ↓4+182
Комментарии41

Как сэкономить деньги в Amazon Web Services — выбор эффективной архитектуры

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

Сегодня поговорим на тему как «профессионально сэкономить» деньги при использовании облачных сервисов Amazon Web Services при размещении веб-решений, адаптированных для России. Мы активно используем сервисы данного облачного провайдера для проектов компании почти 2 года и постоянно занимаемся оптимизацией расходов. Довольно странно, что важная тема оптимизации расходов на Amazon Web Services, очищенная от маркетингового булшита, как-то не особо представлена в сети. Постараюсь предметно поделиться опытом и обозначить явные выгоды и ошибки, которые следует учесть при проектировании веб-систем.

Читать дальше →
Всего голосов 60: ↑54 и ↓6+48
Комментарии19

Консольные команды на PHP

Время на прочтение4 мин
Количество просмотров37K
У многих, равно как и у меня, периодически возникает потребность в реализации каких-то небольших задач. Например распарсить сайт/API и сохранить данные в xml/json/csv, произвести какие-либо расчеты/пересчеты, перегнать данные из одного формата в другой, собрать статистику и т.д. и т.п. Замечу, что речь о задачах не связанных с текущими проектами.



Собирать тяжелый фреймворк ради удобных фич, лень, а реализовывать в рамках кода текущих проектов как-то не эстетично. Поэтому для экономии своего времени приходится создавать скрипт, копипастить в него куски кода из предыдущих наработок, подключать разнообразные библиотеки и запускать скрипт из консоли. При этом часто требуется некоторая интерактивность работы скрипта: обработка опций/аргументов, а то и диалоговое взаимодействие. Здесь главное чтобы не было настроения, которое хорошо описывается выражением «Аппетит приходит во время еды», тогда вообще не понятно к чему приведет работа над простой задачкой =)

В такие моменты я вспоминал удобную симфоническую консоль, к которой успел привыкнуть работая с проектами на
Symfony 2. Не в обиду другим консолям (zend, yii, django, ror etc), все хороши, просто так сложилось.

Когда в очередной раз потребовалось что-то распарсить, я опять вспомнил про консоль Symfony (Console Component) и тот факт, что это независимый компонент все больше подтолкнул меня к мысли использовать ее возможности.

За пару часов получилась простая тулза, в основе которой:

и менеджер зависимостей Composer, который нам поможет все это быстро собрать, добавлять новые либы, а также возьмет на себя автозагрузку классов.
Написать команду
Всего голосов 53: ↑40 и ↓13+27
Комментарии30

Видеокурс по DevTools от Google и Codeschool

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

Известные нам по гениальным обучающим скринкастам Rails for Zombies, Try Ruby и Try Git — команда Codeschool объединилась с корпорацией добра для создания Try DevTools — подробнейшего обучающего курса из семи глав, который, конечно же, является абсолютно бесплатным.
Читать дальше →
Всего голосов 39: ↑36 и ↓3+33
Комментарии18

Web-сервер на базе Cowboy

Время на прочтение10 мин
Количество просмотров34K
Привет!
В этом туториале я планирую показать тем, кто еще не знаком с веб-сервером Cowboy, как им пользоваться. Для людей, которые имеют опыт работы с ним, данный туториал врядли будет интересен, а вот для тех, кто знает о Ковбое лишь по наслышке — welcome!

Что мы будем делать:
  1. Простейшая установка и запуск сервера
  2. Краткий обзор роутинга, обслуживание статики
  3. Шаблонизация с помощью ErlyDTL (Django Template Language для Erlang)

Читать дальше →
Всего голосов 42: ↑37 и ↓5+32
Комментарии41

Канбан в IT (Kanban Development)

Время на прочтение7 мин
Количество просмотров282K
Я собираюсь написать несколько статей про новую методологию гибкой разработки Канбан (Kanban Development) в целях подготовки к Scandinavian Agile Conference 2009, где я буду делать один из докладов (кстати, заодно приглашаю всех на конференцию).
Сегодня публикую первую из статей.
Основная задача первой статьи — это как можно проще описать основы Канбан: что это такое, в чем отличие от других гибких методологий и зачем это нужно.
Также я хотел бы собрать как можно больше вопросов и сомнений в комментариях, чтобы ответить на них в следующих статьях, так что пишите всё, что вам непонятно, или что ещё вы хотели бы узнать про Канбан.
Я не то, чтобы большой специалист по этой новой методологии, но мы внутри команды пришли к Канбану самостоятельно и последовательно прошли все этапы мутации от SCRUM до Канбан, так что практический опыт есть.

Читать дальше →
Всего голосов 61: ↑58 и ↓3+55
Комментарии91

WebKit для разработчиков

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


Для многих из нас, разработчиков, WebKit — черный ящик. Мы бросаем в него HTML, CSS, JS и кучу изображений, и WebKit, как-то… магически, выдает нам веб-страницу, которая выглядит и работает хорошо.
Но на самом деле, как говорит мой коллега Илья Григорик:
Веб-кит не является черным ящиком. Это — белый ящик. И не просто белый, но и открытый ящик.
Так-что, давайте попробуем разобраться в некоторых вещах:
Всего голосов 97: ↑86 и ↓11+75
Комментарии29

Анализ применения SVG в качестве background-image

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

В последнее время все чаще появляются статьи, в которых авторы рекомендуют использовать SVG для backgroud-image. Действительно, применение SVG приносит большую пользу. Во всех прочитанных статьях очень вскользь упоминалось про производительность отрисовки SVG, что это более затратная операция, так как браузеру необходимо каждый раз заново отрисовывать растр.

И вот в один прекрасный день, открыв одно веб-приложение, я заметил, что мой браузер безумно «пожирает» память — одна вкладка «ела» около 600 МиБ. На МacBook с ретиной дела обстояли еще хуже. С этого момента началось расследование, куда же течет память. Кому интересно, добро пожаловать под кат.
Читать дальше →
Всего голосов 47: ↑45 и ↓2+43
Комментарии29

О тонкостях работы foreach в PHP

Время на прочтение9 мин
Количество просмотров60K
В недавнем дайджесте интересных ссылок о PHP я обнаружил ссылку на комментарий Никиты Попова на StackOverflow, где он подробно рассказывает о механизме «под капотом» управляющей конструкции foreach.
Поскольку foreach действительно иногда работает более, чем странным образом, я счел полезным сделать перевод этого ответа.


Внимание: этот текст подразумевает наличие базовых знаний о функциональности zval'ов в PHP, в частности вы должны знать что такое refcount и is_ref.
foreach работает с сущностями разных типов: с массивами, с простыми объектами (где перечисляются доступные свойства) и с Traversable-объектами (вернее, объектами, у которых определен внутренний обработчик get_iterator). Здесь мы, в основном, говорим о массивах, но я скажу и об остальных в самом конце.

Прежде чем приступить, пара слов о массивах и их обходе, важная для понимания контекста.

Как работает обход массивов
Всего голосов 86: ↑74 и ↓12+62
Комментарии56

Полезные техники HTML, CSS и JavaScript

Время на прочтение8 мин
Количество просмотров101K
Техника – это способ справиться с заданием, и у нас, разработчиков и дизайнеров фронтэнда, этих способов бывает достаточно много. При это, будучи погруженными в рутинную работу, мы порой не всегда замечаем как стремительно меняется окружающая нас сфера. В период с 2002 по 2010 годы сообщество фронтэнд-разработчиков буквально покрывалось язвами избыточного кода и ресурсов, от которых страдали и работа сайтов, и удобство их использования. Чтобы с этим справиться, мы придумали уйму хаков, трюков и уловок под кодовым названием «техника». Мы по-прежнему продолжаем выполнять поставленные перед нами задания, просто используем не самые эффективные способы.



Оборачиваясь назад, отметим, что в последние несколько лет установились новые, лучшие, стандарты и способы их применения, позволяя нам создавать более продвинутые «техники». Этот новый мир, открытый перед нами, называется «modern web». Web 2.0, которым восхищались в свое время, сегодня для нас стал запутанным и застойным. С одной стороны нет сомнений в том, что подобная судьба постигнет и то, что мы называем «modern web». С другой — пока что мы можем использовать этот термин и злоупотреблять им сколько угодно, пока понимаем, что он означает.



В 2010 появился стандарт HTML5, обеспечивающий совершенно новую, полустандартизованную веб-среду. Такие браузеры, как Opera, Firefox, Chrome и Safari приняли нововведения, и их разработчики вышли за пределы реализации стандартов и изучения интерфейса программирования приложений. Чтобы представить себе, насколько автономны эти браузеры, можно ознакомиться с отличной наглядной демонстрацией поддержки HTML5 на www.html5readiness.com.
Читать дальше →
Всего голосов 110: ↑98 и ↓12+86
Комментарии37

От JQuery до Backbone

Время на прочтение23 мин
Количество просмотров28K
imageВ данной статье будет показано как можно реорганизовывать код написанный в «простом» JQuery стиле в код на Backbone, с использованием представлений, моделей, коллекций и событий. Реорганизация будет постепенной, так чтобы этот процесс дал четкое понимание основных абстракций в Backbone. Статья рассчитана на тех кто использует JQuery и хотел бы познакомится со схемой MVC для клиентского кода.
Читать дальше →
Всего голосов 90: ↑80 и ↓10+70
Комментарии43

Информация

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