• О столе для работы стоя, здоровье позвоночника и личной эффективности

      С недавних пор я снова перешёл на 100% работу из дома и стал использовать стол для работы стоя. Хочу поделиться дампом своего опыта на тему здоровья, призвать закончить прокрастинировать и начать работать стоя.



      Сначала, о том, почему стол для работы стоя — не панацея...

      Читать дальше →
    • О простых вещах-сложно. «Cпящая сталь». Чем смазать заржавевшие болты или Не WD-40 единым…

      • Tutorial
      Посвящается всем отчаявшимся и потерявшим надежду… открутить заржавевшую гайку!

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

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

      Ну и, традиционно — не забудь закинуть в закладки, %USERNAME%, пригодится! :)


      Читать дальше →
    • Takari: Maven на стероидах

      Предыстория


      Уже довольно давно я работаю в проекте, в котором используется система сборки Maven. По началу, когда проект был ещё не таких размеров как сейчас, время его полной компиляции было относительно разумным и не вызывало нареканий. Но со временем код разросся, количество подпроектов резко увеличилось и среднее время полной компиляции выросло до 6 — 10 минут. Что служило постоянным источником упрёков со стороны разработчиков.

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

      Так продолжалось довольно долго, пока я не наткнулся на довольно любопытный сайт компании Takari, на котором предлагаются способы по усовершенствованию методов работы с Maven.

      Самыми интересными там являются три вещи:

      Так же на GitHub у них выложен Maven Wrapper (аналог враппера из Gradle).

      Забегая вперёд отмечу, что описываемые здесь инструменты не только решают проблему некорректной работы Maven, но и дают существенный прирост скорости сборки.
      Но обо всём по порядку
    • Алан Кей: «Могли ли древние римляне построить компьютер?»

      • Translation
      Это очень интересный вопрос — похож на тот, что я обычно задавал на уроке по компьютерному дизайну: «Какой компьютер капитан Немо разработал бы для «Наутилуса»? — Нарисуйте его дизайн!»

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

      image

      Hublot's miniature replica of the Antikythera mechanism

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

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

      Доброго времени суток, хабровчане!

      Про эту компанию знают все. Кто-то в ней даже работал или продолжает работать. Я думаю, сложно найти в РФ, да и на территории СНГ, человека который не слышал о холдинге Сбербанка. Именно холдинг, так как очень много компаний которые обслуживают Сбербанк и контролируются им же. Так вот я поработал в двух таких компаниях за один год — это Сбербанк-Технологии (далее СБТ) и Сбербанк.
      Читать дальше →
    • Субподряд? Круто, ты попал

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

        image
        Читать дальше →
      • 42 оператора расширенного поиска Google (полный список)

        • Translation
        • Tutorial
        Те, кто давно занимается поисковой оптимизацией, хорошо знают об операторах расширенного поиска Google. Например, почти все знают об операторе site:, который ограничивает поисковую выдачу одним сайтом.

        Большинство операторов легко запомнить, это короткие команды. Но уметь эффективно их использовать — совсем другая история. Многие специалисты знают основы, но немногие по-настоящему овладели этими командами.

        В этой статье я поделюсь советами, которые помогут освоить поисковые операторы для 15 конкретных задач.
        Читать дальше →
      • DIY тепловизор на Raspberry PI или «Кажется теперь я знаю, чем займусь этим летом»

          image

          Всем привет!

          Пришла зима, а с ней и задача проверить теплоизолирующие свойства построек загородной резиденции дачи. А тут ещё оказалось, что на известном китайском сайте появились вполне доступные тепловизионные модули. Не собрать ли себе экзотическую и, возможно, даже полезную вещь — самодельный тепловизор? Почему бы и нет, вроде и Raspberry где-то валялась… Что из этого вышло — расскажу под катом.
          Читать дальше →
        • 10 смертных грехов спикера



          Прелюдия


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

          Читать дальше →
        • Шизотипическое расстройство: взгляд изнутри


            На Хабре уже писали о различных расстройствах, но как-то так получается, что тема шизотипического расстройства остается не раскрытой. Да и в сети сложно найти информацию для широкого круга людей по этой теме. Часто можно встретить много раз скопированные копирайтерами тексты со множеством неточностей и откровенными мифами, а еще чаще — полную противоположность, заумные тексты, написанные врачами для врачей. Так, согласно DSM, шизотипическое расстройство — это демонстрация пациентом первазивной модели социального и межличностного дефицита, отмеченного острым дискомфортом и сниженной способностью к формированию близких отношений, который испытывает когнитивное и перцептивное искажение, а также проявляет эксцентричность в поведении, начинающеюся с ранней юности и представленную в различных контекстах. Если вы ни слова из этого не поняли — добро пожаловать под кат. Сегодня мы посмотрим, как все это выглядит изнутри.

            Читать дальше →
          • Почему «Юному технику» не удастся построить лазер

              Приветствую всех снова. В комментариях к моей первой статье про cамодельную лазерную установку снова вспомнили статью из журнала «Юный техник», которая называлась «Строим лазер». В ней предложено поэтапное описание сборки импульсного лазера, работающего на жидком растворе органического красителя. Текст статьи доступен через 2 минуты гугления.

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

              image
              Читать дальше →
            • Как сделать солнечный фонарик своими руками (часть 1)



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


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


                  Но данная техника, на мой взгляд, практически универсальна, и понимание основных принципов разработки интерпретаторов пригодится не только создателю очередного претендента на звание "Язык года" по версии TIOBE, но вообще любому программисту.


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

                  Читать дальше →
                • Диалекты английского: как понять собеседника, не сломав себе мозг

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

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

                    И как же сильно удивляются туристы, которые приезжают в Великобританию. Ведь только 3% от всего населения говорят на том английском, который мы учим в школах и слышим на английских телеканалах вроде BBC.

                    Остальные 97% разговаривают со всеми возможными акцентами и на тех диалектах, о которых мы часто слышали только вскользь.

                    Но так ли это неожиданно? Ведь в России тоже полным-полно диалектов, которые иногда очень сильно отличаются от литературного языка. Они разнятся по произношению слов, строению предложений и даже лексике.

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

                    • Tutorial


                    Представьте, что у вас есть абзац текста. Можно ли понять, какую эмоцию несет этот текст: радость, грусть, гнев? Можно. Упростим себе задачу и будем классифицировать эмоцию как позитивную или как негативную, без уточнений. Есть много способов решать такую задачу, и один из них — свёрточные нейронные сети (Convolutional Neural Networks). CNN изначально были разработаны для обработки изображений, однако они успешно справляются с решением задач в сфере автоматической обработки текстов. Я познакомлю вас с бинарным анализом тональности русскоязычных текстов с помощью свёрточной нейронной сети, для которой векторные представления слов были сформированы на основе обученной Word2Vec модели.

                    Статья носит обзорный характер, я сделал акцент на практическую составляющую. И сразу хочу предупредить, что принимаемые на каждом этапе решения могут быть неоптимальными. Перед прочтением рекомендую ознакомиться с вводной статьей по использованию CNN в задачах обработки естественных языков, а также прочитать материал про методы векторного представление слов.
                    Читать дальше →
                    • +34
                    • 22k
                    • 9
                  • Основные структуры данных. Матчасть. Азы

                    • Translation
                    Все чаще замечаю, что современным самоучкам очень не хватает матчасти. Все знают языки, но мало основы, такие как типы данных или алгоритмы. Немного про типы данных.

                    Еще в далеком 1976 швейцарский ученый Никлаус Вирт написал книгу Алгоритмы + структуры данных = программы.

                    40+ лет спустя это уравнение все еще верно. И если вы самоучка и надолго в программировании пробегитесь по статье, можно по диагонали. Можно код кофе.


                    Читать дальше →
                  • Непрофессиональное видеонаблюдение квартиры занятно и недорого

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

                    • Translation

                    Если вы родились в 80-х или 90-х, то наверняка слышали о Snake. То есть, скорее всего, вы потратили безумное количество времени на своём Nokia 3310, выращивая огромную змею на мелком экранчике. Что ещё мы помним о телефонах Nokia?

                    Их неразряжающийся аккумулятор, правда? Как такой «примитивный» телефон выдерживал долгие часы игры в «Змейку» без разрядки аккумулятора?

                    Короткий (и неполный) ответ: всё дело в методе скользящего окна.

                    Мы бы с радостью написали целую статью о Snake, но в этом посте мы всё-таки рассмотрим менее зрелищный, но тем не менее очень важный метод, и ответим на вопросы типа:

                    • Почему мы и другие программисты считаем его фундаментальным алгоритмом?
                    • Почему он так часто используется на технических собеседованиях?
                    • Как он использовался в Snake и других «реальных» областях применения?
                    • На какие самые популярные вопросы собеседований можно (лучше) ответить с помощью метода скользящего окна?

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

                    NB: Если вас волнует только «Змейка» (и мы вас вполне понимаем), то можете перейти к самому концу поста.
                    Читать дальше →
                  • Класс дедлоков про дедлок классов



                      Знаете ли вы, как избежать дедлоков в своей программе? Да, этому учат, про это спрашивают на собеседованиях… И тем не менее, взаимные блокировки встречаются даже в популярных проектах серьёзных компаний вроде Google. А в Java есть особый класс дедлоков, связанный с инициализацией классов, простите за каламбур. Такие ошибки легко допустить, но трудно поймать, тем более, что сама виртуальная машина вводит программиста в заблуждение.

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

                      Читать дальше →
                    • Пузырьки, кэши и предсказатели переходов

                        Эта заметка написана по мотивам одного любопытного поста, краткий коммент её же автора к которому сподвиг меня разобраться в происходящем поподробнее. Предлагается сравнить две вариации алгоритма сортировки пузырьком. Первая из них – обычный пузырёк, с небольшой оптимизацией — внутренний цикл можно закончить немного раньше, зная, что оставшаяся часть массива уже отсортирована:
                        for (i=0; i<N; i++)
                          for (j=0; j<N - (i+1); j++)
                            if (a[j] > a[j+1])
                              swap(a[j], a[j+1]);


                        Во втором варианте внутренний цикл проходит по другой части массива, однако алгоритмически этот вариант эквивалентен первому (подробности ниже):
                        for (i=0; i<N-1; i++)
                            for (j=i; j>=0; j--)
                                if (a[j] > a[j+1])
                                    swap(a[j], a[j+1]);


                        Запускаем (код), например, для N=100 000 на массиве int'ов, и получаем около 30 секунд в первом случае, и меньше 10 секунд — во втором, то есть отличие в 3 раза! Откуда же тогда берётся такая разница?
                        Читать дальше →