• Забудьте о DAO, используйте Repository

      Недавно задумался о том, чем отличаются паттерны, позволяющие абстрагироваться от работы с хранилищем данных. Много раз поверхностно читал описания и различные реализации DAO и Repository, даже применял их в своих проектах, видимо, до конца не понимая концептуальных отличий. Решил разобраться, закопался в Google и нашел статью, которая для меня разъяснила все. Подумал, что неплохо было бы перевести ее на русский. Оригинал для англочитающих здесь. Остальным интересующимся добро пожаловать под кат.
      Читать дальше →
    • Chatbot на базе рекуррентной нейронной сети своими руками за 1 вечер/6$ и ~ 100 строчек кода

      • Translation
      • Tutorial
      В данной статье я хочу показать насколько просто сегодня использовать нейронные сети. Вокруг меня довольно много людей одержимы идеей того, что нейронки может использовать только исследователь. И что бы получить хоть какой то выхлоп, нужно иметь как минимуму кандидатскую степень. А давайте на реальном примере посмотрим как оно на самом деле, взять и с нуля за один вечер обучить chatbot. Да еще не просто абы чем а самым что нинаесть ламповым TensorFlow. При этом я постарался описать все настолько просто, что-бы он был понятен даже начинающему программисту! В путь!

      image
      Читать дальше →
    • Хотят ли разработчики работать в стартапах и быть их основателями — инфографика по результатам опроса

        image

        На этот раз «Мой круг» совместно с Cofoundit постарались узнать, как разработчики участвуют в стартапах: как с позиции сотрудника, так и с позиции основателя компании. Мы опросили более 3500 человек, пользователей «Моего круга» и «Хабрахабра». Более 90% опрошенных имеют свой аккаунт на «Моём круге» — это именно те ИТ-специалисты, которые откликаются на вакансии или размещают их на нашем сервисе.

        Сначала мы узнаем немного об отрасли в целом: кто где работает, сколько зарабатывает, чем занимается, у кого есть опыт сотрудника, а у кого — основателя стартапа. Затем мы просим вспомнить самый интересный стартап, в котором довелось участвовать и сравним опыт сотрудников и создателей стартапов, у последних дополнительно узнаем про их опыт инвестирования и монетизации. Наконец, выясним у тех, у кого до сих пор не было опыта стартапа, что их мотивирует, а что останавливает от приобретения подобного опыта.

        Отчёт получился довольно большим, но, на наш взгляд, крайне интересным и познавательным. Скучные цифры оформлены симпатичной инфографикой.
        Читать дальше →
      • Асинхронные API и объект Deferred в деталях

        Большинство современных языков программирования позволяют использовать асинхронно выполняемые блоки кода. Вместе с гибкостью, получаемой при использовании асинхронного подхода, рискнувший его применить также получает более сложный для понимания и поддержки код. Однако, любое усложнение, с которым сталкиваются программисты, как правило, находит практическое решение в виде нового подхода или повышения уровня абстракции. В случае асинхронного программирования таким средством служит объект типа отложенный результат или deferred (англ. deferred — отложенный, отсроченный).

        В статье будет рассказано о базовых подходах к возврату асинхронных результатов, функциях обратного вызова, объектах deferred и их возможностях. Будут приведены примеры на языке JavaScript, а также произведён разбор типового объекта deferred. Статья будет полезна программистам, начинающим постигать асинхронное программирование, а также знакомым с ним, но не владеющим объектом deferred.
        Окунуться в мир асинхронного программирования
      • Создаем расширения для Google Chrome

          Вчера задался себе таким вопросом: как можно обезопасить мой профиль в Google Chrome и вообще все данные, которые в нем хранятся? Немножко погуглив, я нашел ссылки на кучу расширений (типа этого), которые позволяют устанавливать пароль как на браузер так и на отдельные его профиле (это логично, если знать как работает Chrome в режиме мультипрофильности). Я начал их устанавливать и сразу тесты на баги. И как оказалось ни один из них не хочет адекватно работать в режиме мультипрофильности. Не очень-то долго думая я решил написать собственное расширение и заодно разобраться в Google Chrome API.
          Как я создавал своё расширение читайте под катом
        • Создание веб-сайта. Курс молодого бойца

          Как-то меня попросили провести небольшой семинар в лицее, где я когда-то учился, по созданию веб-сайта. В процессе написания речи я подумал, что она может вылиться в материал, который, возможно, будет полезен многим начинающим в области веб-дизайна, вёрстки веб-страниц и пр. Я не претендую на истину в первой инстанции и всё изложенное носит чисто личностный взгляд на работу с дизайном и кодом. Статья даёт поверхностный взгляд на понятия и средства, которые, на мой взгляд, могут стать неплохим стартом для того, кто готов идти дальше.
          Читать дальше →
        • 10+ полезных jQuery сниппетов на каждый день

          • Translation
          • Tutorial


          Спустя годы библиотека jQuery стала неотъемлемой частью в работе каждого web-разработчика. Ведь она простая в использовании, быстрая и имеет очень широкие возможности. В этой статье я собрал список из более чем десяти сниппетов, которые вы можете свободно брать для использования. Их очень легко адаптировать под нужды ваших собственных проектов.
          Читать дальше →
        • Где jQuery хранит обработчики событий

            В «интернетах» я не нашел подробного ответа на этот вопрос. Как правило, рекомендуется использовать стандартный метод для получения обработчиков:
            $(elem).data('events')
            

            Но в моем случае он работать не хотел, поэтому пришлось немного разобраться в коде jQuery и найти где же все-таки они хранятся.
            Читать дальше →
          • Внутренности jQuery. Поиск кода, выполняемого по событию

              Чем дальше в лес, тем толще партизаны. Нет, не так. Чем старше веб, тем больше джаваскрипта

              Клиентского кода в веб-приложениях с каждым годом действительно становится все больше. Подчас это десятки файлов с сотнями функций. И что делать, когда нам нужно поменять код, выполняемый по событию (например, клик по ссылке). Как его найти? Задавшись решением этой задачи, я придумал несколько разных вариантов. Каждый из них имеет свои плюсы и минусы. И в конце статьи я предлагаю метод, который мне кажется оптимальным.
              Читать дальше →
            • Как я ушёл с InDesign'а в LaTeX

              InDesign, безусловно, является флагманом в индустрии вёрстки. Но, проработав в нём немалое количество времени, я вернулся к старому доброму TeX'у, с которым познакомился ещё во время своей учёбы в университете. Почему так вышло? Почему от понятного WYSIWYG-редактора я ушёл к языку разметки, и от продукта, поддерживаемого мощнейшей компанией Adobe — к программе, код которой давно заморожен, и лишь появляются новые пакеты, написанные волонтёрами?

              История началась с того, что InDesign меня обидел тем, что начал нагло врать в глаза.
              Читать дальше →
            • Кодировки и веб-страницы

              Возвращаясь к избитой проблеме с кодировками русских букв, хотелось бы иметь под рукой некий единый справочник или руководство, в котором можно найти решения различных сходных ситуаций. В своё время сам перелопатил множество статей и публикаций, чтобы находить причины ошибок. Задача этой публикации — сэкономить время и нервы читателя и собрать воедино различные причины ошибок с кодировками в разработке на Java и JSP и способы их устранения.

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

              Итак, поехали.
              Читать дальше →
            • Вероятностное программирование

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



                Лекция была прочитана Борисом hr0nix Янгелем на факультете компьютерных наук, открытом в Высшей школе экономики при поддержке Яндекса. Сам Борис окончил ВМиК МГУ и Школу анализа данных Яндекса. Работал в Microsoft Research Cambridge в группе Кристофера Бишопа над фреймворком Infer.NET. Сейчас Борис — ведущий разработчик поиска Яндекса.

                Под катом — расшифровка рассказа.
                Читать дальше →
              • Иерархическая классификация сайтов на Python

                  Привет, Хабр! Как упоминалось в прошлой статье, немаловажной частью нашей работы является сегментация пользователей. Как же мы это делаем? Наша система видит пользователей как уникальные идентификаторы cookies, которые им присваиваем мы или наши поставщики данных. Выглядит этот id, например, так:

                  42bcfae8-2ecc-438f-9e0b-841575de7479

                  Эти номера выступают ключами в различных таблицах, но первоначальным value является, в первую очередь, URL страниц, на которых данная кука была загружена, поисковые запросы, а также иногда некоторая дополнительная информация, которую даёт поставщик – IP-адрес, timestamp, информация о клиенте и прочее. Эти данные довольно неоднородные, поэтому наибольшую ценность для сегментации представляет именно URL. Создавая новый сегмент, аналитик указывает некоторый список адресов, и если какая-то кука засветится на одной из этих страничек, то она попадает в соответствующий сегмент. Получается, что чуть ли не 90% рабочего времени таких аналитиков уходит на то, чтобы подобрать подходящий набор урлов – в результате кропотливой работы с поисковиками, Yandex.Wordstat и другими инструментами.
                  logo
                  Получив таким образом более тысячи сегментов, мы поняли, что этот процесс нужно максимально автоматизировать и упростить, при этом иметь возможность мониторинга качества алгоритмов и предоставить аналитикам удобный интерфейс для работы с новым инструментом. Под катом я расскажу, как мы решаем эти задачи.
                  Читать дальше →
                • MediaInsight — мониторинг традиционных СМИ

                    Доброго пинга, интернет имеющие



                    Я хочу спросить вас — а есть ли у вас телевизор? И не дожидаясь ответа, предположу что есть :) У меня у самого его нет, но это не суть важно. Важно иметь представление о этом виде СМИ. Зачем это надо? А затем что хочу я вам рассказать об одном очень интересно проекте. Я тут узнал что есть ребятишки, что занимаются мониторингом СМИ — телевидением, радио, газет. То есть примерно как яндекс отслеживает активность в блогах, они мониторят эфир.
                    Читать дальше →
                  • Обналичиваем Bitcoin по хорошему курсу в Таиланде

                      Пост не рекламы сервиса, но радости за постепенную интеграцию криптовалют в жизнь. Недавно я задался вопросом, можно ли в Таиланде вывести биткойны в наличные быстро и удобно. И нашёлся сервис, который делает это по хорошим курсам и в течение буквально пары часов, а получить наличку можно в любом банкомате голубого банка без всякой карты, просто по коду. Делюсь с вами инструкцией-фотоотчётом.


                      Читать дальше →
                    • Боль. Или дизайн крупных проектов

                        Боль


                        Как не странно, но по самому процессу разработки визуальной части мы в компании отстаем как минимум на года 2-3. Во-первых, классическая, изолированная, универсальная модель: Проектирование — Дизайн — Верстка. Во-вторых, один и тот же подход остается как для страниц мелких акций (заглушек), так и для масштабных сервисов вроде, где трудно предугадать сценарий развития. Но мы метем все под одну гребенку. Я лично не знаю в нашей компании персонажа, который глобально бьется над улучшением процесса и самой системы разработки визуальной части. В основном звучат умелые фразы, по поводу сроков и складывается впечатление, что все мастера по тайм менеджменту. Многие из резких фраз, как «Процент времени», напрочь убивают всю логику, и наивно полагаться на сохранение продуктивности на том же уровне. Когда разрабатываешь крупный проект, 5-7 глобальных переключений в день на другие задачи, полностью парализуется и сбивает весь процесс разработки основного проекта. Ну, впрочем, это менеджерская магия с выгодой в одну сторону.

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

                        Теперь о вытекающее из этого «боли»…. Ситуация, которая сейчас выглядит так:
                        Читать дальше →
                      • Статистика Хабрахабра

                          Почти неделя прошла с исполнения хабрахабру 6 лет. Было бы очень интересно посмотреть на графики роста показателей сайта. Т.к. стандартная статистика малоинформативная, решено было собрать всю информацию своими руками и проанализировать. И так, почти неделя парсинга и сбора информации и получены следующие интересные данные(скрытые/удаленные посты/пользователи и их комментарии не учтены):
                          • Больше всего постов написал alizar — 4298, рекорд 12 постов в день поставлен 18 октября 2006
                          • Больше всего комментариев написал VolCh — 19323, установив личный рекорд 27 июля 2011 года в количестве 140 комментариев.
                          • Больше всех опубликовал постов в день freetonik —21 топик 26 августа 2007
                          • Максимальная активность хабры в день — опубликовано 105 топиков: 18 февраля 2010 и 22 июня 2008 года.
                          • Максимальная активность хабры в месяц — опубликовано 2055 топиков в марте 2010
                          • Среднее значение кармы: +7,83
                          • Средний рейтинг топика: +24,75
                          • Всего комментариев: 3 703 022.
                          • Средний рейтинг комментария: +0,98
                          • Максимальное количество оставленных комментариев — 1 июля 2011 в количестве 4936 штук.
                          • 25% из всех опубликованных топиков были перенесены в черновики
                          • Самый комментируемый топик habrahabr.ru/post/123157 собрал 2252 комментария

                          Красивые графики, методы измерения, база с полученными данными, «хаброаномалии» — все это под катом.
                          Читать дальше →
                        • Граф интересов (Interest graph): новый принцип взаимодействия в сети

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

                            Я хочу продолжить и уточнить его мысль, озвучить несколько важных и плодотворных, на мой взгляд, концептов («граф интересов» — один из них), вокруг которых сегодня ведётся дискуссия о будущем развитии сети, а также привести в качестве примера несколько проектов (над одним из которых я сам сейчас работаю), уже реализующих на практике новые принципы социального взаимодействия: те самые принципы, которые могут стать доминирующими в самом ближайшем будущем.
                            Читать дальше →
                          • Презентация средствами HTML5

                              image
                              Обратил внимание, что в настоящее время программисты Google начали использовать новую форму представления своих презентаций.

                              Типичный пример, еще пример — мы видим фреймы, эффекты, изображения, общий стиль.

                              Несложный поиск привел к удобному шаблону, который при своей простоте позволяет создавать неплохие презентации с легко внедряемыми элементами
                              Читать дальше →
                            • Как преодолевать Facebook EdgeRank и попадать в ленту новостей

                                Данная статья посвящена алгоритму EdgeRank, который отвечает за фильтрацию новостей в Facebook-ленте.

                                Все вы помните, что в разделе новостей вам предлагают прочитать самые популярные новости («Top News») и все недавние обновления («Most Recent»). Исходя из вашего поведения, Facebook решает, какие новости для вас будут интересны, а какие – нет, и именно этим отбором занимается алгоритм EdgeRank.

                                Однако немногие знают, что Facebook EdgeRank фильтрует не только «Top News», но и общую ленту новостей. В общую ленту алгоритм в хронологическом порядке включает посты от определенного списка друзей и страниц — только тех, от которых ожидается интересная для получателя информация. Как вы можете догадаться, в «Популярных новостях» этот ценз еще более строг.

                                Что это значит для вас? Если вы постоянно поддерживаете контакт со своими друзьями, комментируете и «лайкаете» их посты – то вы останетесь на связи и не пропустите важных новостей.

                                А что, если вы ведете свою специальную страничку, на которую с большим трудом набираете новых читателей, однако отдача крайне мала? Знакома ли вам ситуация: у вашей страницы несколько сотен читателей, но к каждому посту вы получаете 1-2 лайка? Конечно, дело может быть в вашем контенте и способе подачи информации, но свою «руку» к этому приложил и EdgeRank, который, увидев, что читатель не проявил интереса к обновлениям вашей страницы, просто «убрал» ее из ленты новостей.

                                В статье будет рассказано об алгоритме EdgeRank и советах по преодолению его фильтров.
                                Читать дальше →
                                • +32
                                • 5.7k
                                • 9