• Программисты, говорите правильно!

    Здравствуйте, господа!

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

    А я поведу речь о произношении в мире IT. Потому что сил больше нет. Кровь из ушей льется на работе каждый день. Здесь представлена моя десятка наиболее ужасных вариантов произношения терминов из нашей сферы.

    1. Key ~ [kiː] = «кей» «киии»
      Да, друзья, сейчас я многих удивлю, но это слово читается именно так. По-моему, это даже не исключение. Monkey, donkey, turkey, whiskey — можно ориентироваться по этим словам. Я работаю в области криптографии, так что весь день сношу бесконечные «приватные кеи», «кей контэйнеры», «кей протоколы» и тому подобное. К слову, keygen тоже должен бы читаться по-другому: как «кииджен», а не "кейген". Но это слово нынче во многом живет своей жизнью, возможно, здесь бороться уже и не стоит.
    Весь топ-10
  • Как нужно и не нужно писать чат ботов на примере моего бота для игры в «Тайный Санта»

      image

      Предыстория


      Год назад решил я создать телеграм бот для того, чтобы поиграть в достаточно популярную новогоднюю игру «Тайный Санта». Вдохновился я тем, что пару лет назад мы на работе компанией решили сыграть в эту игру (это показалось очень круто), и плюс я давно следил за клубом АДМ на Хабре. В октябре-ноябре прошлого года, я понял, что нужно сыграть между своей же компанией в этом году снова, но в этот раз не вытягивая имена написанные на листочке с шапки Деда Мороза, а более технологично, что ли. Поскольку все сидели в телеграме и мне было очень интересно написать туда бота, я решил это сделать именно на этой платформе
      Читать дальше →
    • Распознавание русской речи для колл-центров и параноиков

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



        Анализировать записи можно как «на лету» (что делается редко), так и постфактум, например, разыскивая конкретные звонки для анализа живым человеком. Я работал с несколькими программно-аппаратными решениями для этого, и сейчас поделюсь опытом.


        Автоматическое распознавание уже начинает справляться с русским языком, за исключением некоторых особо сложных случаев

        Сразу отмечу — да, эти решения могут сочетаться с определением конкретного человека по «голосовому отпечатку пальца», но это немного другая история и подробно останавливаться на этом здесь я не буду.
        Читать дальше →
      • Разработка чат-бота (laravel+botman)

        • Tutorial

        Welcome! Я, как junior full stack разработчик, при попытке написать бота с использованием laravel и botman’а столкнулся с многими проблемами. Во-первых, я плохо знаю английский, а на русском статей очень мало на эту тему, а те, что есть не помогли мне решить мои проблемы. В статье будет рассказано и показано, как разработать чат-бота на laravel+botman для telegram. Сам я разрабатывал ботов(коммерческих) под viber и telegram. Как разработчику telegram мне нравится больше всего.


        image


        Я не буду показывать как установить laravel и настроить сервер для его работы. Если вы никогда этого не делали, то проще будет установить openserver, в него встроен composer(пакетный менеджер для php) и уже настроен локальный сервер для laravel’a. Вам останется лишь прописать немного кода в .htaccess. Дома я именно так и работаю. В статье покажу один из способов разработки чат-бота, настроим бота для работы в телеграм, а так же, в конце, оставлю ссылки на полезные статьи о laravel’e и botman’e.


        Проектирование/подготовка


        Разработку бота предлагаю, как и все нормальные разработчики, начать с проектирования, постановки задачи и объяснения как работает laravel. Перед этим скажу, что я пишу код в phpStrom. Можно писать в любом другом IDE, но я пользуюсь именно им.


        В laravel реализован паттерн MVC(Model View Controller). Это не значит, что нужно писать только под mvc, можно и говнокодить, но лучше пользоваться теми преимуществами, которые предоставляет фреймворк. Если вы знакомы с mvc, но не применяли его, как я, то разработка с помощью laravel’a это лучший способ закрепить знания.

        Читать дальше →
      • Оптимизация ORDER BY — о чем многие забывают

          На тему оптимизации MySQL запросов написано очень много, все знают как оптимизировать SELECT, INSERT, что нужно джоинить по ключу и т.д. и т.п.

          Но есть один момент, тоже неоднократно описанный во всех мануалах, но почему-то про него все забывают.
          Читать дальше →
        • HappySecretSantaBot — Телеграм бот для игры «Тайный Санта»

            Привет, хаброжители!



            Немного истории


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

            На прошлый Новый Год у меня на работе также прошла такая акция, где каждому человеку в комнате выпал случайный человек, и ты должен был подарить подарок выпавшему тебе человеку, а этот человек в свою очередь тоже дарит другому человеку. В итоге все остаются при подарках и довольными.
            Читать дальше →
            • +12
            • 9.2k
            • 7
          • Деплой php+MySQL на heroku

            Всем доброго времени суток. Хочу поделиться с вами своим опытом развертывания php+mysql приложения на сервисе heroku. Если вы первый раз о таком слышите, вам сюда.

            Поехали


            Итак, представим, что у нас есть уже готовое php+mysql приложение. Для начала регистрируемся здесь. На почту придет письмо с подтверждением регистрации. Далее переходим по ссылке, вводим пароль и подтверждение, жмем save. Первый этап пройден, идем дальше.
            Читать дальше →
            • –1
            • 17k
            • 7
          • Как работают браузеры: принципы работы современных веб-браузеров

              Просматривая одно из обучающих видео "Школы разработки интерфейсов" Яндекса, наткнулся на ссылку на офигенный труд израильской веб-программистки Тали Гарсиэль (Tali Garsiel) "How browsers work" (Как работают браузеры).

              Она в течение нескольких лет отслеживала всю издаваемую информацию о внутреннем устройстве браузеров, изучала исходный код WebKit и Gecko и, в конце концов, собрала все воедино. Вот что пишет сама Тали:
              Когда на 90% компьютеров был установлен IE, приходилось мириться с тем, что это загадочный «черный ящик», однако теперь, когда более половины пользователей выбирает браузеры с открытым исходным кодом, пришло время разобраться, что скрывается у них внутри, в миллионах строк программного кода на C++...
              Пролистав, я был поражен — отличная работа. Внутреннее устройство браузеров, алгоритмы разбора — все хорошо иллюстрировано, доступно и понятно. И без излишних подробностей, страниц на 30-40. Как раз то, что нужно. Решил — это надо обязательно перевести. Покопался еще немного — оказалось перевод уже как 1,5 года есть!

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

              Под катом содержание перевода, чтобы решить стоит ли читать.
              Читать дальше →
            • [LibGDX] Создаем клон Flappy Bird — Zombie Bird

              • Translation
              • Tutorial
              Доброго времени суток %username%. Не давно наткнулся на хороший туториал по созданию клона игры Flappy Bird используя LibGDX и этот туториал мне понравился своей простотой и детализацией.

              Я отдаю себе отчет, что тема создания клонов данной игрушки изъела себя, но возможно кому-то пригодится еще один хороший туториал.

              Туториал разбит на 12 дней, содержит множество картинок, полотен кода и исходный код разбит по дням. Кому интересно, добро пожаловать под кат.
              Подробнее
            • За что блокируют разработчиков Google Play



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

                Тема очень серьёзная. Если гугл заблокирует вас однажды — обратно пути уже не будет. По всей видимости, отслеживается взаимосвязь аккаунта с вашим ФИО, IP, Mac-адресом и прочими личными данными. Испортите отношение с Google один раз — потом не отмоетесь никогда.

                Чтобы не потерять аккаунт, зарегистрированный лично на вас — нужно следовать определённым принципам. Давайте попытаемся вместе их вывести.
                Читать дальше →
              • Просто о списках, словарях и множествах или ТОП 5 структур данных



                  Привет. Ей! Не говорите “Да блин! Я знаю, чем отличается список от вектора, мне не нужна эта статья”. Прошу, загляните под кат и освежите свои знания. Я надеюсь, однако, что вы сможете почерпнуть из этой статьи намного больше и, некоторые, возможно, наконец-то разберутся, почему существует так много типов данных для коллекций объектов.
                  Читать дальше →
                • Основы Hibernate



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

                    Долго думал, о чем же написать свой «первый» топик… Слово первый не зря взял в кавычки, так как первый топик на самом деле уже был, опыт был к сожалению неудачный — дело закончилось баном.  Решил больше не копипастить. Уверенности тому, что надо написать что-то свое, придал вот этот топик. Решил твердо — пусть это будет и редко, но буду писать сам.

                    Ну, едем дальше!

                    Совсем недавно, по роду свой деятельности, мне пришлось столкнуться с таким понятием как ORM — (англ. Object-relational mapping). В двух словах ORM — это отображение объектов какого-либо объектно-ориентированного языка в структуры реляционных баз данных. Именно объектов, таких, какие они есть, со всеми полями, значениями, отношениями м/у друг другом.
                    Читать дальше →
                  • Java собеседование. Коллекции

                      С недавнего времени у меня появилась настойчивая мысль, что профессиональное развитие сильно замедлилось и это хочется как-то исправить. Да, читаю книги, слушаю курсы, но в то же время приходит и понимание того, что возможно пришло время сменить работу, здесь вроде как все изучено, плавно уходим в рутину. Данная мысль сподвигла меня на рассылку своего резюме в несколько компаний — лидеров рынка. После прохождения собеседования в 3 из них, я решил, как водится внести свои 5 копеек в освещение обширной темы собеседования, а именно технических вопросов по Java коллекциям, с которыми приходится сталкиваться. Да, знаю, читатель скажет: «коллекции — избитая тема, сколько можно», но часть из приведенных ниже вопросов, я задавал своим знакомым разработчикам, которые занимают именно позиции разработчиков («крепких середнячков», по меркам недалекой от Москвы глубинки, которые уверенно справляются со своей работой на практике, а вот в теории скажем так есть пробелы, потому, что работа не требует решения каких-то нетривиальных задач, да и потому что не всем это интересно — изучать как внутри работает структура данных), вызывало растерянность. Думаю, что рассмотренный материал будет не очень интересен разработчикам выше уровня Junior (я попрошу их комментировать, дополнять и критиковать изложенный здесь материал), а вот Junior`ы уверен, найдут в этой статье интересное для себя.
                      Читать дальше →
                    • Маленькие хитрости Java

                      Я уже достаточно много лет занимаюсь разработкой на java и повидал довольно много чужого кода. Как это не странно, но постоянно от одного проекта к другому я вижу одни и те же проблемы. Этот топик — попытка ликбеза в наиболее часто используемых конструкциях языка. Часть описанного — это довольно банальные вещи, тем не менее, как показывает мой опыт, все эти банальности до сих пор актуальны. Надеюсь, статья пригодится многим java программистам. Итак, поехали:

                      new vs valueOf

                      //медленно
                      Integer i = new Integer(100);
                      Long l = new Long(100);
                      String s = new String("A");
                      
                      //быстро
                      Integer i = Integer.valueOf(100);
                      Long l = 100L;//это тоже самое что Long.valueOf(100L);
                      String s = "A";


                      Старайтесь всегда использовать метод valueOf вместо конструктора в стандартных классах оболочках примитивных типов, кроме случаев, когда вам нужно конкретно выделить память под новое значение. Это связано с тем, что все они, кроме чисел с плавающей точкой, от Byte до Long имеют кеш. По умолчанию этот кеш содержит значения от -128 до 127. Следовательно, если ваше значение попадает в этот диапазон, то значение вернется из кеша. Значение из кеша достается в 3.5 раза быстрее чем при использовании конструктора + экономия памяти. Помимо этого, наиболее часто используемые значения могут также быть закэшированы компилятором и виртуальной машиной. В случае, если ваше приложение очень часто использует целые типы, можно увеличить кеш для Integer через системное свойство «java.lang.Integer.IntegerCache.high», а так же через параметр виртуальной машины -XX:AutoBoxCacheMax=<size>.
                      Читать дальше →
                    • Сериализация в Java

                      • Translation
                      Сериализация это процесс сохранения состояния объекта в последовательность байт; десериализация это процесс восстановления объекта, из этих байт. Java Serialization API предоставляет стандартный механизм для создания сериализуемых объектов. В этой статье вы увидите как сериализовать объект, и почему сериализация иногда необходима. Вы узнаете об алгоритме сериализации используемом в Java и увидите пример, который иллюстрирует сериализованый формат объекта. В конце у вас должно сложиться чёткое представление о том, как работает алгоритм сериализации, а так же каким образом представлены части объекта в сериализованном виде.
                      Читать дальше →
                    • Размер Java объектов

                        Знаете сколько в памяти занимает строка? Каких только я не слышал ответов на этот вопрос, начиная от «не знаю» до «2 байта * количество символов в строке». А сколько тогда занимает пустая строка? А знаете сколько занимает объект класса Integer? А сколько будет занимать Ваш собственный объект класса с тремя Integer полями? Забавно, но ни один мой знакомый Java программист не смог ответить на эти вопросы… Да, большинству из нас это вообще не нужно и никто в реальных java проектах не будет об этом думать. Но это, ведь, как не знать объем двигателя машины на которой Вы ездите. Вы можете быть прекрасным водителем и даже не подозревать о том, что значат цифры 2.4 или 1.6 на вашей машине. Но я уверен, что найдется мало людей, которые не знакомы со значением этих цифр. Так почему же java программисты так мало знают об этой части своего инструмента?

                        Integer vs int

                        Все мы знаем, что в java — everything is an object. Кроме, пожалуй, примитивов и ссылок на сами объекты. Давайте рассмотрим две типичных ситуации:
                        //первый случай
                        int a = 300;
                        //второй случай
                        Integer b = 301;
                        

                        В этих простых строках разница просто огромна, как для JVM так и для ООП. В первом случае, все что у нас есть — это 4-х байтная переменная, которая содержит значение из стека. Во втором случае у нас есть ссылочная переменная и сам объект, на который эта переменная ссылается. Следовательно, если в первом случае мы определено знаем, что занимаемый размер равен:
                        sizeOf(int)
                        

                        то во втором:
                        sizeOf(reference) + sizeOf(Integer)
                        

                        Забегая вперед скажу — во втором случае количество потребляемой памяти приблизительно в 5 раз больше и зависит от JVM. А теперь давайте разберемся, почему разница настолько огромна.

                        Из чего же состоит объект?

                        Прежде чем определять объем потребляемой памяти, следует разобраться, что же JVM хранит для каждого объекта:
                        • Заголовок объекта;
                        • Память для примитивных типов;
                        • Память для ссылочных типов;
                        • Смещение/выравнивание — по сути, это несколько неиспользуемых байт, что размещаются после данных самого объекта. Это сделано для того, чтобы адрес в памяти всегда был кратным машинному слову, для ускорения чтения из памяти + уменьшения количества бит для указателя на объект + предположительно для уменьшения фрагментации памяти. Стоит также отметить, что в java размер любого объекта кратен 8 байтам!

                        Читать дальше →
                      • Eclipse for Java Developers. Навигация и редактирование


                        Наблюдая за со своими знакомыми, которые недавно начали изучать программирование или перешли на Eclipse c другой IDE, я часто замечаю что они почти не используют вспомогательные инструменты среды разработки. Они либо не знают о них вообще, либо не понимают какую практическую пользу они могут принести.
                        Данная статья предназначена в основном для начинающих в работе с Eclipse. Но в процессе подготовки статьи я сам узнал о нескольких простых и удобных инструментах, которые за два года активной разработки ни разу не использовал.
                        В данной статье речь пойдет о навигации и редактировании.
                        Внутри скриншоты.
                        Читать дальше →
                      • Хабраиндекс для статей по программированию под Android

                          С чего начать?


                          Пишем своё первое приложение на Android
                          Пишем первое приложение для Android
                          Создаем файловый менеджер
                          Основы программирования под Android на примере игры Судоку
                          Создание приложения в стиле Android
                          Спокойной ночи!

                          Читать дальше →
                          • +188
                          • 93.3k
                          • 43
                        • Пишем своё первое приложение на Android


                          Предисловие


                          Цель данного поста — с одной стороны поделиться своим успешным опытом старта разработки приложений на платформе Android и с другой стороны поспособствовать развитию рынка софта для этой замечательной и бурно растущей платформы за счёт (без ложной скромности скажу) возможно Вас, прочитавших данный пост. В сети, конечно, можно найти материалы на тему разработки приложения «чуть сложнее, чем helloworld», но как правило они разрозненные и в них не описываются различные мелкие подводные камешки. В данном посте мы рассмотрим полный цикл разработки приложения, начиная с чистого компьютера до готового apk-файла. Под катом скрины.
                          Читать дальше →
                          • +108
                          • 1662k
                          • 96
                        • Начинающим Java программистам

                            Программирую на Java вот уже 7 лет. Но на работе часто приходится обучать новое поколение. В связи с этим и решил сделать некоторую шпаргалку, которая, надеюсь, пригодится и для хабрчан. Если кто-то может помочь дополнить чем-то информацию из этой статьи, то пишите! Итак:

                            Основные ресурсы для начального обучения


                            • www.javable.com — сайт со статьями и tutorial'ом по Java. Все в основном на русском.
                            • www.exampledepot.com — очень полезный ресурс, где собраны краткие примеры использования классов для тех или иных пакетов
                            • java.sun.com — без первоисточника не обойтись. Для любого Java программиста JavaDoc должен быть истиной в последней инстанции. Так же здесь можно найти серию tutorial'ов на все возможные темы.

                            Читать дальше →
                            • +106
                            • 1143k
                            • 58