• Хорошее публичное выступление: 11 простых советов

      Дисклеймер


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

      1. Структура доклада


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

      Ключевая проблема для слушателя – отсутствие вводной части. Выводы он может сделать и сам, а вот стартовать с опозданием сложно и неприятно. Он ещё не понял, что вы будете про пищеварение, а уже нужно вникать в строение эпителия тонкого кишечника. Результат – ваш доклад попадает в слушателя не на все 100%, а имеет шансы и вовсе пролететь мимо.
      Читать дальше →
    • Справочник по синхронизаторам java.util.concurrent.*

      • Tutorial
      Целью данной публикации не является полный анализ синхронизаторов из пакета java.util.concurrent. Пишу её, прежде всего, как справочник, который облегчит вхождение в тему и покажет возможности практического применения классов для синхронизации потоков (далее поток = thread).

      В java.util.concurrent много различных классов, которые по функционалу можно поделить на группы: Concurrent Collections, Executors, Atomics и т.д. Одной из этих групп будет Synchronizers (синхронизаторы).



      Синхронизаторы – вспомогательные утилиты для синхронизации потоков, которые дают возможность разработчику регулировать и/или ограничивать работу потоков и предоставляют более высокий уровень абстракции, чем основные примитивы языка (мониторы).
      Читать дальше
    • Генератор своими руками на 220 вольт. Теперь отключения света не страшны

      • Tutorial
      Я покажу как собрать простой, но достаточно мощный, генератор на 220 вольт.



      Потребуется:


      — коллекторный мотор, можно другой на 12 вольт
      — насадка на ось мотора — патрон от дрели
      — бесперебойник UPS или инвертор с 12 на 220
      — диод на 10 ампер: Д214, Д242, Д215, Д232, КД203 и т. д.
      — провода
      — велосипед
      — и желательно аккумулятор на 12 вольт

      Сборка:


      — закрепляем велосипед так, что бы заднее колесо крутилось свободно, вывешиваем его
      — прикручиваем патрон на ось мотора
      — крепим мотор так, что бы патрон плотно прижимался к колесу, можно подтянуть его пружиной
      — подключаем мотор к аккумулятору: минусовой провод мотора к минусу аккумулятора, плюсовой провод мотора к аноду диода, катод диода к плюсу аккумулятора
      — аккумулятор соединяем с бесперебойником или с инвертором
      Всё! К бесперебойнику можно подключать потребители на 220 вольт и пользоваться электричеством! Как только аккумулятор разрядится, достаточно будет покрутить педали и примерно через час аккумулятор зарядится.
      Читать дальше →
    • Поиск самых длинных цепочек слов в русском языке с помощью языка Wolfram Language (Mathematica)


        Скачать перевод в виде документа Mathematica, который содержит весь код использованный в статье, можно здесь (архив, ~5 МБ).

        Введение


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

        Предположим, что у нас есть несколько последовательных метаграмм, скажем:

        мнение-мление-тление-трение-прение-поение-роение-рдение-бдение-биение

        они образуют цепь метаграмм, или цепочку слов.

        Отсюда проистекает игра под названием цепь слов (word ladder), которую придумал в далеком 1879 году Льюис Кэрролл.

        Ясно, что далеко не для каждого начального слова может быть составлена такого рода цепь, а некоторые слова, по-видимому, должны порождать довольно длинные цепи.

        В этом посте мы постараемся проанализировать цепочки слов, которые могут быть построены в русском языке, а также найдем цепочки наибольшей длины.
        Читать дальше →
      • BabelFish — полиглот в мире JavaScript

          BabelFish


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

          Например, в REG.RU на сегодня в словарях более 15000 фраз, из которых порядка 200 используют склонение, и более 2000 используют подстановку переменных. Каждый день добавляется не менее 10 фраз. И это при том, что мы пока только начали локализацию сайта и впереди планы на новые языки.

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

          DON'T PANIC.

          Недавно был опубликован пакет BabelFish 1.0, предназначенный для интернационализации JavaScript-приложений.

          Идеи, лежащие в его основе, настолько пришлись нам по душе, что мы даже перенесли их на Perl в виде CPAN-модуля Locale::Babelfish, и используем это для Perl-приложений. Но вернёмся к JavaScript-реализации.
          Читать дальше →
        • «Never say never» или Работаем с таймзонами правильно

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

            TL;DR: Работа с таймзонами — это боль и унижение. Никогда не работайте с таймзонами!

            Итак, все кругом твердят вам, что при получении времени от пользователя нужно сразу же переводить его в UTC, работать со временем нужно только в UTC и хранить время тоже нужно строго в UTC. Совет, на первый взгляд, выглядит разумным, и следование ему делает вашу жизнь проще… Если только ваша программа не предполагает сложной работы с датами. Записать в базу данных дату и время регистрации пользователя на сайте? Сохранить время отправки сообщения или дату создания заказа в интернет-магазине? Вывести сообщение в лог с указанием даты-времени? Используйте UTC и всё будет в порядке, можете даже не читать эту статью дальше. Любое текущее время можно совершенно спокойно конвертировать в UTC и забыть о проблемах. Но что, если мы хотим работать с временем в будущем? Или в прошлом? Например, если мы пишем сервис календаря, или сервис для отложенной отправки сообщений?

            Читать дальше →
          • Сверхбыстрое распознавание речи без серверов на реальном примере

            • Tutorial

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

            Прикручиваем Pocketsphinx к своему Андроиду
          • Как работают рекомендательные системы. Лекция в Яндексе

              Привет, меня зовут Михаил Ройзнер. Недавно я выступил перед студентами Малого Шада Яндекса с лекцией о том, что такое рекомендательные системы и какие методы там бывают. На основе лекции я подготовил этот пост.



              План лекции:
              1. Виды и области применения рекомендательных систем.
              2. Простейшие алгоритмы.
              3. Введение в линейную алгебру.
              4. Алгоритм SVD.
              5. Измерение качества рекомендаций.
              6. Направление развития.

              Под катом вы найдете конспект лекции и презентацию
            • 0 dB Бесшумный компьютер. Версия 1.0

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

              Итак, настала пора отступить от стереотипов и поменять хорошее на лучшее!

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

              Цель статьи — поделиться исследовательским и практическим опытом в компоновке компьютера, который при работе не издавал бы ни единого звука.
              Читать дальше →
            • Dropclock для xscreensaver или как верстальщик писал заставку под Linux

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

              =>

              Но вот беда: авторы собрали её только для Win и Mac. Несмотря на это, желание было сильнее ограничений, и я решил во что бы то ни стало собрать собственную реализацию.
              Читать дальше →
            • Голосовое управление Arduino средствами Processing и Google Speech API

                Идея:


                Пришла как-то идея сделать голосовое управление Arduino, но одного Arduino мало, т.к. для системы умного дома нужно еще и общение с компьютером и его системами.
                Читать дальше →
              • Превращаем ноутбук в видеорегистратор

                  Если вы подозреваете, что у вас дома завёлся полтергейст, хотите приглядеть за ребёнком, интересуетесь, чем занят кот в ваше отсутствие или хотите застукать Деда Мороза прямо под ёлкой, то всё, что для этого нужно — ноутбук или ПК с веб-камерой и бесплатная программа Ivideon Server.



                  Обычное дело, когда сперва появляется какое-нибудь изобретение, а потом находятся самые неожиданные способы и сценарии его применения. До сих пор использовал веб-камеру на своём ноутбуке исключительно для редких видеозвонков. В остальное время она была чем-нибудь заклеена.
                  Читать дальше →
                • Универсальный web-GUI для произвольных RESTful сервисов

                  Во многих компаниях, как и моей, есть много проектов и продуктов. И у продуктов бывают веб-интерфейсы, чтобы этими продуктами как-то манипулировать. В нашем случае это простенькие RESTful веб-сервисы, а поверх них ещё более простенькие веб-странички с формочками и кнопочками. Все эти веб-странички до того похожи друг на друга, что возникла мысль написать унифицированный продукт, который бы спрашивал сервер о поддерживаемых сервисах, и получал бы полное описание параметров к этим сервисам, так чтобы можно было нарисовать те самые простенькие формочки. То есть, веб-сервисы должны описывать себя, достаточно исчерпывающе, чтобы наш клиент мог построить GUI для них, и ничего не надо было бы делать руками. Как раз такая картинка гуглится по запросу «REST»:


                  Читать дальше →
                • Распознавание номеров: от А до 9

                    Уже пару раз на Хабре возникали дискуссии на тему того, как сейчас работает распознавание номеров. Но статьи, где были бы показаны разные подходы к распознаванию номеров, на Хабре пока не было. Так что здесь попробуем разобраться, как все это работает. А потом, если статья вызовет интерес, продолжим и выложим работающую модель, которую можно будет поисследовать.

                    image
                    Читать дальше →
                  • JSR 133 (Java Memory Model) FAQ (перевод)

                      Добрый день.
                      В рамках набора на курс «Multicore programming in Java» я делаю серию переводов классических статей по многопоточности в Java. Всякое изучение многопоточности должно начинаться с введения в модель памяти Java (New JMM), основным источником от авторов модели является «The Java Memory Model» home page, где для старта предлагается ознакомится с JSR 133 (Java Memory Model) FAQ. Вот с перевода этой статьи я и решил начать серию.
                      Я позволил себе несколько вставок «от себя», которые, по моему мнению, проясняют ситуацию.
                      Я являюсь специалистом по Java и многопоточности, а не филологом или переводчиком, посему допускаю определенные вольности или переформулировки при переводе. В случае, если Вы предложите лучший вариант — с удовольствием сделаю правку.
                      Этот статья также подходит в качестве учебного материала к лекции «Лекция #5.2: JMM (volatile, final, synchronized)».

                      Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

                      Ну и да, приходите учиться ко мне!


                      JSR 133 (Java Memory Model) FAQ


                      Jeremy Manson и Brian Goetz, февраль 2004

                      Содержание:
                      Что такое модель памяти, в конце концов?
                      Другие языки, такие как C++, имеют модель памяти?
                      Что такое JSR 133?
                      Что подразумевается под «переупорядочением» (reordering)?
                      Что было не так со старой моделью памяти?
                      Что вы подразумеваете под «некорректно синхронизированы»?
                      Что делает синхронизация?
                      Как может случиться, что финальная поля меняют значения?
                      How do final fields work under the new JMM?
                      Что делает volatile?
                      Решила ли новая модель памяти «double-checked locking» проблему?
                      Что если я пишу виртуальную машину?
                      Почему я должен беспокоиться?
                      Читать дальше →
                    • Шпаргалка по шаблонам проектирования


                        Перевод pdf файла с сайта http://www.mcdonaldland.info/ с описанием 23-х шаблонов проектирования GOF. Каждый пункт содержит [очень] короткое описание паттерна и UML-диаграмму. Сама шпаргалка доступна в pdf, в виде двух png файлов (как в оригинале), и в виде 23-х отдельных частей изображений. Для самых нетерпеливых — все файлы в конце статьи.

                        Под катом — много картинок.

                        Читать дальше →
                      • Не все комментарии одинаково полезны

                          Все животные равны, но некоторые животные равнее других. Скотный Двор, Джордж Оруэлл (оригинал).

                          Достаточно много статей на хабре набирает существенное количество комментариев, e.g. в статьях "лучшее за месяц" их, как правило, более сотни. За годы чтения хабра, создалось впечатление, что примерно в половине случаев для комментариев первого уровня получается вот такая вот картина

                          (картинка сделана на основе хабра-статьи «Список скептика»).

                          Под катом рассказ, какие бывают сортировки комментариев, где они применяются и краткое рассуждение о том, как вообще можно сортировать комментарии (и зачем).
                          Читать дальше →
                        • Мошеннические методы монетизации в free-to-play играх

                          • Translation
                          Примечание переводчика: После публикации статьи с автором связался коммерческий директор из King.com, создателя Candy Crush Saga, и прояснил несколько моментов, после чего автор добавил пару замечаний. Добавленные абзацы отмечены курсивом.

                          Принудительная монетизация


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

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

                          Этот дополнительный стресс часто подаётся в форме того, что Роджер Дики из Zynga называет «весёлыми мучениями». Приём заключается в том, чтобы поставить потребителя в очень неудобное или неприятное положение в игре, а потом предложить ему убрать эти «мучения» в обмен на деньги. Эти деньги всегда замаскированы в слоях принудительной монетизации, поскольку потребитель, столкнувшийся с «реальной» покупкой, скорее всего не поведётся на трюк.
                          Читать дальше →
                        • Подготовка к экзамену Oracle Java SE 7 Programmer II (1Z0-804)


                          Приветствую уважаемых хабражителей и Java-программистов!
                          Cтатья посвящена подготовке к сдаче экзамена Oracle Java SE7 Professional с кодовым номером 1Z0-804. Про это на Хабре уже было написано множество постов (например здесь, здесь, тут, здесь, здесь, тут, тут, и вот тут), поэтому постараюсь не повторяться и дополнить заметками о том что наиболее часто встречалось, важными нюансами, которые на мой взгляд были пропущены или недостаточно хорошо освещены в указанных статьях, и вообще в общедоступной литературе (сразу отмечу, что материал не претендует на полноту, здесь я лишь старался обозначить каверзные вопросы с экзамена и лаконично изложить некоторые сложные вещи). Так же поделюсь своими соображениями насчет того, по каким материалам лучше готовиться. С первого раза экзамен сдать не получилось, поэтому начал сохранять для себя различные заметки, где записывал всё что мне казалось сложным или трудно-запоминаемым. Которыми теперь и решил с вами поделится. Заранее прошу проявить понимание, если вы вдруг заметите ошибку, недочёт или очепятку — пишите в комментарии.

                          Читать дальше →
                        • Эффективная сегментация изображений на графах


                            Сегментация изображений и выделение границ объектов (edge detection) играют важную роль в системах Computer Vision и применяются для задач распознавания сцен и выделения (определения) объектов. По большому счету, это такой же инструмент, как, например, сортировка, предназначенный для решения более высокоуровневых задач. И поэтому понимание устройства данного класса алгоритмов не будет лишним при построении подобных систем с учетом предъявляемых требований (в плане качество/производительность) и специфики поставленных задач.

                            В данной статье кратко описан алгоритм «Efficient Graph-Based Image Segmentation» авторов Pedro F. Felzenszwalb (MIT) и Daniel P. Huttenlocher (Cornell University), опубликованный в 2004 году. Да, алгоритм относительно старенький, но, несмотря на это, он до сих пор остается весьма популярным, демонстрируя неплохие результаты в плане производительности.

                            Под катом – большая смесь картинок и текста, не требовательная к текущему уровню знаний тематики. Любопытство приветствуется.

                            Мсье хочет знать толк в сегментации