• AngularJS 1.x – перевод курса от CodeSchool

    Данная публикация является переводом оригинального курса CoodSchool с небольшими дополнениями, которые показались мне уместными в данном контексте. Публикация рассчитана на тех, кто только начинает знакомится с Angular.

    Введение


    AngularJS — популярная JavaScript библиотека, предназначенная, главным образом, для создания одностраничных веб-приложений с динамически обновляемым содержимым. Библиотека была написана словацким программистом Мишкой Хевери, который, работая в Google, получил от своего шефа задание выучить JavaScript. Он решил, что лучший способ изучить язык — это создать на его основе собственный фреймворк. Angular (звучит как «Ангула» и дословно переводится как «Угловатый») использует концепцию разделения данных и их представления, известную как MVC (M — model (данные), V — view (представление), С — controller (контролер, управляющая прослойка между ними обеспечивающая логику работы приложения).
    Читать дальше →
  • LUA в nginx: слегка интеллектуальный firewall


      Данный пост является продолжением применения lua в nginx.

      Там обсуждалось кеширование в памяти, а тут lua будет использоваться для фильтрации входящих запросов в качестве этакого фаервола на nginx-балансере. Нечто подобное было у 2GIS. У нас свой велосипед :) В котором разделяем динамику и статику, стараемся учесть NAT и белый список. И, конечно же, всегда можно навернуть еще специфичной логики, что не выйдет при использовании готовых модулей.
      Данная схема сейчас спокойно и ненапряжно (практически не сказывается на использовании cpu) обрабатывает порядка 1200 запросов/сек. На предельные величины не тестировалось. Пожалуй, к счастью :)
      Читать дальше →
    • Алгоритм Улучшенной Самоорганизующейся Растущей Нейронной Сети (ESOINN)


        Введение


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

        В этой статье будет рассмотрен алгоритм An Enhanced Self-Organizing Incremental Neural Network, являющийся расширением базовой модели SOINN и частично решающий озвученные проблемы.
        Читать дальше →
      • Удаленное редактирование файлов в Sublime Text 2 по SSH

        • Tutorial
        Речь пойдет об использовании rmate, небольшого скрипта позволяющего из консоли открыть удаленный документ в локальном текстовом редакторе, вместо nano или vim, он был написан для TextMate и те кто перешел на ST2 с этого редактора, наверняка пользуются этим инструментом, да и «матерые разрабы» не найдут в посте много нового, но если вы только начали пользоваться ST2 и единственный инструмент удаленного редактирования о котором вы слышали, это плагин SFTP, добро пожаловать под кат за подробностями.
        Читать дальше →
      • NoSQL базы данных: понимаем суть

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


        Читать дальше →
      • Подробно о генераторах случайных и псевдослучайных чисел

        На Хабре и в сети часто начали появляться статьи, посвященные уязвимостям генераторов случайных чисел. Данная тема крайне обширна и является одной из основных в криптографии. Под катом находится описание случайных чисел от A до Z. Статья является результатом свободного перевода цикла статей из одного западного блога и личных дополнений автора. Основная цель — получить feedback и поделиться знаниями.
        image
        Читать дальше →
      • Изучение OpenCL на примере взлома паролей

        Вступление


        Недавно, почитав различных статей и презентаций про GPGPU, я решил тоже попробовать для себя программирование под видеокарты. Фактически, выбор технологий в этой области не велик — сейчас живы и развиваются только CUDA (проприетарный стандарт nVidia) и OpenCL (свободный стандарт, работает на GPU от ATI, nVidia, а также на центральных процессорах). В связи с тем, что мой ноутбук располагает видеокартой ATI (Mobility Radeon 5650 HD), то выбор и вовсе свёлся к одному варианту — OpenCL. В этой статье речь пойдёт о процессе изучения OpenCL с нуля, а также о том, что из этого получилось.
        Читать дальше →
        • +31
        • 8,1k
        • 2
      • Классификатор kNN

        kNN расшифровывается как k Nearest Neighbor или k Ближайших Соседей — это один из самых простых алгоритмов классификации, также иногда используемый в задачах регрессии. Благодаря своей простоте, он является хорошим примером, с которого можно начать знакомство с областью Machine Learning. В данной статье рассмотрен пример написания кода такого классификатора на python, а также визуализация полученных результатов.
        Читать дальше →
        • +24
        • 56,9k
        • 9
      • Yet another classifier

          Вместо вступления


          Лень — двигатель прогресса. Не хочешь сам молоть зерно — сделай мельницу, не хочешь сам кидать во врагов камни — сооруди катапульту, надоело гореть на кострах инквизиции и гнуть спину под феодалом — замути с ребятами ренессанс… впрочем, о чем это я.
          Автоматизация, господа. Берешь какой-нибудь полезный процесс, в котором участвует человек, заменяешь человека на сложный механизм, получаешь профит. Относительно недавно также стало модно заменять человека куском кода. О, сколько благородных профессий может пасть под натиском информатизации. Особенно если учесть, что кусок кода в наше время способен не только на заранее определенное поведение, но и на «обучение» какому-то поведению.
          Читать дальше →
        • Сокеты в Python для начинающих

            Предисловие


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



            Что это


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

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

            Читать дальше →
          • PyBrain работаем с нейронными сетями на Python


              В рамках одного проекта столкнулся необходимостью работать с нейронными сетями, рассмотрел несколько вариантов, больше всего понравилась PyBrain. Надеюсь её описание будет многим интересно почитать.

              PyBrain — одна из лучших Python библиотек для изучения и реализации большого количества разнообразных алгоритмов связанных с нейронными сетями. Являет собой удачный пример совмещения компактного синтаксиса Python с хорошей реализацией большого набора различных алгоритмов из области машинного интеллекта.

              Предназначен для:

              • Исследователей — предоставляет единообразную среду для реализации различных алгоритмов, избавляя от потребности в использовании десятков различных библиотек. Позволяет сосредоточится на самом алгоритме а не особенностях его реализации.
              • Студентов — с использованием PyBrain удобно реализовать домашнее задание, курсовой проект или вычисления в дипломной работе. Гибкость архитектуры позволяет удобно реализовывать разнообразные сложные методы, структуры и топологии.
              • Лекторов — обучение методам Machine Learning было одной из основных целей при создании библиотеки. Авторы будут рады, если результаты их труда помогут в подготовке грамотных студентов и специалистов.
              • Разработчиков — проект Open Source, поэтому новым разработчикам всегда рады.

              Читать дальше →
            • Понимаем декораторы в Python'e, шаг за шагом. Шаг 2

              • Перевод
              • Tutorial

              И снова доброго времени суток всем читателям!
              Спасибо, за проявленый интерес к первой части перевода, надеюсь, вторая вас так же не разочарует.


              Итак, в первой части данной статьи мы совершили базовое знакомство с декораторами, принципами их работы и даже написали свой вручную.
              Однако, все декораторы, которые мы до этого рассматривали не имели одного очень важного функционала — передачи аргументов декорируемой функции.
              Что ж, исправим это недоразумение!
              Читать дальше →
            • Понимаем декораторы в Python'e, шаг за шагом. Шаг 1

              • Перевод
              • Tutorial

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

              Итак, что же такое «декоратор»?


              Впереди достаточно длинная статья, так что, если кто-то спешит — вот пример того, как работают декораторы:
              def makebold(fn):
                  def wrapped():
                      return "<b>" + fn() + "</b>"
                  return wrapped
               
              def makeitalic(fn):
                  def wrapped():
                      return "<i>" + fn() + "</i>"
                  return wrapped
               
              @makebold
              @makeitalic
              def hello():
                  return "hello habr"
               
              print hello() ## выведет <b><i>hello habr</i></b>

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

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

                Итак, вуаля!


                За источник информации была взята статья из вики. В блок-схеме «UTF-16 → CP 866» означает, что исходная кодировка была «UTF-16», а распозналась она как «CP 866».

                Как всегда — кликабельно. Исходник в .docx: здесь.
              • Метаклассы в Python

                • Перевод
                Как сказал один из пользователей StackOverflow, «using SO is like doing lookups with a hashtable instead of a linked list». Мы снова обращаемся к этому замечательному ресурсу, на котором попадаются чрезвычайно подробные и понятные ответы на самые различные вопросы.

                В этот раз мы обсудим, что такое метаклассы, как, где и зачем их использовать, а также почему обычно этого делать не стоит.

                Читать дальше →
              • Нейросети для чайников. Начало



                  Так получилось, что в университете тема нейросетей успешно прошла мимо моей специальности, несмотря на огромный интерес с моей стороны. Попытки самообразования несколько раз разбивались невежественным челом о несокрушимые стены цитадели науки в облике непонятных «с наскока» терминов и путанных объяснений сухим языком вузовских учебников.

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

                  Заинтересовавшихся прошу под кат.
                  Читать дальше →
                • Преодолеваем языковой барьер – уже шесть лет!

                  • Из RSS
                  Франц Оч, научный исследователь команды Google Translate

                  Благодаря развитию Интернета все мировые знания доступны более чем двум миллиардам пользователей. Короткий запрос в поисковой системе – и вы уже на интернет-странице, которая хранится на сервере за тысячи километров от вас. Пара кликов – и вы читаете сообщение от человека, который находится на другом конце Земли. Но что делать, если необходимая вам информация есть на хинди, исландском или африкаансе, а вы говорите только на русском — или наоборот?

                  В 2001 году у Google появился сервис, который позволял делать перевод с восьми языков на английский и обратно. Его основной была ультрасовременная на тот момент платная система машинного перевода, однако качество было не на высоте, и в течение еще нескольких лет эта система улучшалась лишь незначительно. В 2003 году инженеры Google решили повысить качество перевода и увеличить количество языков. Именно тогда я начал работу над этим проектом. В то время я еще был исследователем на проектах Управления перспективными исследованиями и разработками Министерства обороны (DARPA), где мы изучали новый подход к машинному переводу – самообучаемую систему, которая была признана довольно перспективной и должна была значительно повысить качество перевода. Мне позвонили из Google и убедили (а я был настроен весьма скептически!), что данный подход, основанный на анализе данных, будет работать именно в Google.

                  Я присоединился к команде, и мы начали перерабатывать систему перевода. Мы участвовали в аттестации машинных переводов, проводимых Национальным Институтом стандартов и технологий (США). Это своеобразное гран-при среди исследовательских институтов и компаний, призванное улучшить систему машинного перевода. Благодаря вычислительным мощностям Google и возможности обрабатывать большие объемы информации мы добились хороших результатов. Этот момент стал поворотным: стало очевидно, насколько эффективным может быть подход, основанный на анализе данных.

                  Но в то же время наша система работала слишком медленно и была непрактична: над переводом 1000 предложений “трудились” 1000 единиц вычислительной техники, а по времени он занимал 40 часов. Мы сфокусировались на скорости, и год спустя наша система уже могла перевести предложение менее чем за секунду, а качество стало заметно выше. В начале 2006 года эта технология стала использоваться в англо-китайском и англо-арабском перевода и наоборот.

                  Мы анонсировали статистический машинный перевод 28 апреля 2006 года. Последние шесть лет мы уделяли самое большое внимание качеству перевода и увеличению количества языков. Теперь Переводчик Google работает с 64 языками, включая те, которые слабо представлены в сети – например, бенгальский, язык басков, суахили, идиш и даже эсперанто.

                  Сегодня на страницу translate.google.com заходят более 200 миллионов активных пользователей в месяц (и даже больше с учетом других программ, поддерживающих сервис – например, Chrome, YouTube, мобильные приложения и т.д.). Пользователям также нравится использовать Переводчик на ходу, ведь языковой барьер особенно актуален, когда вы путешествуете: по нашей статистике, из года в год использование мобильного траффика вырастало более, чем в 4 раза. Аудитория Переводчика действительно глобальна – 92% трафика мобильного переводчика идет из-за пределов США.

                  Объем текста, который мы переводим каждый день, примерно равен миллиону книг – или практически всему объему профессиональных переводов за год. Из этих цифр ясно, что большая часть всех переводов на нашей планете сегодня делается Переводчиком Google (пожалуй, что в галактике нас могла бы опередить «вавилонская рыбка» Дугласа Адамса). Конечно, ничто не сможет конкурировать с профессиональными переводчиками в передаче нюансов и точности в деталях. Мы уверены, что машинный перевод поможет большему количеству людей принять участие в глобальном диалоге на своем родной языке. В этом случае роль профессиональных переводчиков станет еще более значимой.

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

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

                  Будущее машинной обработки естественно-язычных текстов, безусловно, видится в создании и развитии надлингвистических технологий, способных осуществлять анализ содержания информации на уровне смыслового понимания контекста подобно тому, как это умеет делать человек. Однако, созданию «мыслящих машин» (Thinking Machine) длительное время препятствовали два основных фактора – отсутствие необходимой методологии и должного инструментария для решения двух фундаментальных задач — это нахождение «формулы смысла» и построения «модели знаний о мироздании» в некотором формализованном доступном для компьютера виде, без чего, собственно, невозможно повторить на программном уровне естество человеческого мышления.

                  Лингвисты вкупе с кибернетиками эти проблемы так и не смогли преодолеть, поскольку последнее лежит уже вне границ их предметной специализации, из-за чего, собственно, существенно затормозилось развитие таких давно затребованных прикладных направлений текстовой обработки, как, например, создание «умных» диалоговых систем или «смысловых Интернет-поисковиков». Да и тот же машинный перевод по-прежнему оставляет желать много лучшего.

                  Опыт развития научно-технического прогресса говорит о том, что прорывной искомый результат в итоге получается, как правило, на стыке разных технологических областей и предметных дисциплин. По всей видимости, проблема «машинного мышления» будет решена ровно тогда, когда мы точно поймём, как именно в процедурном плане работает наше естественное сознание, и когда достоверно сможем узнать, поддадутся ли эти процедуры мышления, проявленные нам в необходимом и достаточном количестве, своей окончательной компьютерной алгоритмизации.
                  Читать дальше →
                • Где в России обучают компьютерной лингвистике?

                  Речь пойдет не об единичных курсах, посвященных этой интересной науке, а о том, как специалист, уже имеющий диплом мат-меха или другого технического факультета, может получить полноценное образование, связанное с компьютерной лингвистикой. Самый простой способ — поступить в профильную магистратуру. Но это только кажется простым, потому что такую магистратуру еще нужно найти. Потратив некоторое время на изучение проблемы, мне удалось выбрать несколько вариантов. Своими находками я хочу поделиться с уважаемыми хабровчанами. Думаю, это будет интересно в особенности будущим бакалаврам и специалистам, которые размышляют над проблемой «куда пойти учиться дальше?».
                  Читать дальше →
                  • +13
                  • 11,7k
                  • 9
                • Могло ли слово «браузер» (и его производные формы) звучать в русской речи иначе?

                    Утром во вторник 10 апреля 2012 года я увидел, что некий аноним в моём формспринге задал вопрос о том, что я думаю о статьях «Межсистемность» и «Межобозревательность», появившихся в сетевой вики-энциклопедии «Викиреальность» в феврале трудами участника, действовавшего под псевдонимом «Five Dollars».

                    А так как сообщество Хабрахабра проявляет заметный и неослабный интерес к вопросу о выборе между варваризмом и словородностью при переводе иностранных терминов (чего стоит хотя бы обсуждение перевода «Retina display», перевалившее далеко за сотню комментариев!), то я счёл формат Хабрахабра куда более подходящим для изложения своих воззрений, нежели формат Формспринга, где даже редактирование не предусмотрено.

                    Начну прежде всего с того, что термины «межсистемность» и «межобозревательность» представляются мне шагом, совершённым в правильном направлении — от варваризмов «кросс-платформенность» и «кросс-браузерность» к языку несколько более русскому.

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

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