• Идеальное собеседование айтишника

    • Tutorial
    – Папа, а идеальное собеседование существует?
    – Нет, сынок, это фантастика.
    (с)

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

    Читать дальше →
  • How-to: Как купить акции технологических компаний на примере «Яндекса»

      image

      В комментариях к одному из прошлых топиков нашего блога читатели попросили раскрыть тему того, как купить акции российских интернет-компаний. Поэтому сегодня речь пойдет о том, как российскому гражданину это сделать, и какие шаги для этого нужно будет выполнить. В качестве примера такой технологической компании было решено взять «Яндекс» — во-первых, эта компания недавно провела размещение акций на Московской Бирже, а во-вторых, покупка именно её акций чаще всего интересует наших читателей.
      Читать дальше →
    • Трансформации AST — Первый шаг к тяжёлым веществам

        А давайте сделаем magic с вашим Java кодом. Вот такой:


        Берем это:
        import groovy.transform.Canonical
        import groovy.transform.TupleConstructor
        
        @Canonical
        @TupleConstructor
        class Person {
            int id
            String firstName
            String lastName
            Date birthdate
        }
        

        Компилируем, и в байткоде получаем аналог вот этого:
        Адский бойлерплейт на Джаве на 100 с лишним строк
        import java.util.Date;
        import java.util.Map;
        
        public class Person {
            private int id;
            private String firstName;
            private String lastName;
            private Date birthdate;
        
            //Эта штука добавлена @TupleConstructor-ом
            public Person(Map parameters){
                this.id = (int) parameters.get("id");
                this.firstName = (String) parameters.get("firstName");
                this.lastName = (String) parameters.get("lastName");
                this.birthdate = (Date) parameters.get("birthdate");
            }
        
            public Person(int id, String firstName, String lastName, Date birthdate) {
                this.id = id;
                this.firstName = firstName;
                this.lastName = lastName;
                this.birthdate =birthdate;
            }
        
            public Person(int id, String firstName, String lastName) {
                this(id, firstName, lastName, null);
            }
        
            public Person(int id, String firstName) {
                this(id, firstName, null, null);
            }
        
            public Person(int id) {
                this(id, null, null, null);
            }
        
            public Person() {
                this(0, null, null, null);
            }
        
            @Override
            public boolean equals(Object o) {
                if (this == o) return true;
                if (o == null || getClass() != o.getClass()) return false;
        
                Person person = (Person) o;
        
                if (id != person.id) return false;
                if (birthdate != null ? !birthdate.equals(person.birthdate) : person.birthdate != null) return false;
                if (firstName != null ? !firstName.equals(person.firstName) : person.firstName != null) return false;
                if (lastName != null ? !lastName.equals(person.lastName) : person.lastName != null) return false;
        
                return true;
            }
        
            @Override
            public int hashCode() {
                int result = id;
                result = 31 * result + (firstName != null ? firstName.hashCode() : 0);
                result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
                result = 31 * result + (birthdate != null ? birthdate.hashCode() : 0);
                return result;
            }
        
            @Override
            public String toString() {
                return "Person{" +
                        "id=" + id +
                        ", firstName='" + firstName + '\'' +
                        ", lastName='" + lastName + '\'' +
                        ", birthdate=" + birthdate +
                        '}';
            }
        
            public int getId() {
                return this.id;
            }
        
            public void setId(int paramInt) {
                this.id = paramInt;
            }
        
            public String getFirstName() {
                return this.firstName;
            }
        
            public void setFirstName(String paramString) {
                this.firstName = paramString;
            }
        
            public String getLastName() {
                return this.lastName;
            }
        
            public void setLastName(String paramString) {
                this.lastName = paramString;
            }
        
            public Date getBirthdate() {
                return this.birthdate;
            }
        
            public void setBirthdate(Date paramDate) {
                this.birthdate = paramDate;
            }
        }
        



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

        Так зачем именно Groovy, почему AST transformations?
        В этой статье я попробую вкраце обосновать, зачем пользоваться Groovy AST transformations в Java проектах, и (опять-же вкраце) рассказать какие AST transfromations есть в Groovy сегодня. Если вы уже знаете зачем, и хотите только «как и что», смело листайте к «Введение в AST transformations».
        Читать почему и как AST transformations
      • Что будет, если вы задумаете собрать 3D принтер своими руками

        С чего всё начиналось


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

        Немного погодя, оказалось, что все компоненты стоят вместе как готовый принтер и настрой сильно упал (Ох уж эти московские перекупщики), но на помощь пришел Китай со своими сверхдешевыми электроникой и электромеханическими компонентами. В порыве радости был заказан комплект электроники RAMPS 1.4 (Как самый простой в использовании по отзывам), 5 шаговых двигателей типа nema 17 (момент удержания должен быть не меньше 1.5кг/см, но я взял аж 4кг/см), 2 метра приводного ремня размера t2.5 с двумя алюминиевыми шкивами по 20 зубьев, а так же нагревательную платформу (mk2a самая распространенная), так же нужно не забыть взять 12 линейных подшипников lm8uu. На всё я потратил чуть больше 13 тысяч рублей, что, согласитесь, несколько меньше, чем, даже, комплекты для самостоятельной сборки в магазинах.

        Спустя 2 месяца ожидания


        За эти месяцы я успел познакомиться на форуме с несколькими интересными людьми, один из которых любезно распечатал на своем Replicator2 детали для моего принтера (Я выбрал конструкцию Prusa Mendel i2 из-за её дешевизны и простоты сборки). Кстати говоря, точность изготовления деталей мало на что влияет и, в принципе, можно их делать хоть из ложек, я лично сделал часть деталей для рамы из толстой фанеры. Большой проблемой было найти направляющие валы, которые стоят от 600 рублей за метр (Каленые и прочные, т.е. избыточная прочность), но решение было найдено на рынке: обычные прутки из нержавейки диаметром 8мм отлично подошли (Нужно всего 3 метра, как и что резать, написано на Вики), так же 6 метров шпилек м8 и 6 подшипников 608 (Как в роликах и скейтбордах). В качестве блока питания можно использовать что угодно от 400Вт 12-19В. Забрав с почты последнюю посылку (Не буду говорить про нашу почту, все и так всё знают. Битые и мятые коробки, ожидание, потерянные извещения), я понял, что предстоит много работы.

        image
        Читать дальше →
      • rusEfi автомобильный блок управления: улучшили железо, теперь будем писать к нему софт

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

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

          Было no name v3:

          image

          Стало Франкенштейт 0.1:

          image
          Читать дальше →
        • Поработаем с MongoDb

          • Tutorial


          В текущее время появляется всё больше high-load проектов оперирующие колоссальным объемом данных. И уже нельзя обойтись классической реляционной моделью хранения этой информации. Всё более популярными становятся NoSQL базы данных (NoSQL — обозначает Not only SQL). Одной из таких баз данных является MongoDB, которая уже заслужила внимание к себе таких компаний как Disney, craiglist, foursquare. К тому же тут неоднократно писали о ней:
          NoSQL, используя MongoDB, NoRM и ASP.NET MVC
          Шардинг MongoDB на пальцах
          Репликация MongoDB на пальцах

          Это еще одна статья о работе с MongoDb в среде .net.

          Что потребуется:
          1. Скачайте (http://www.mongodb.org/downloads), распакуйте и запустите mongod (это сервер)
          2. Драйвер (https://github.com/mongodb/mongo-csharp-driver/downloads)
          3. Поехали

          Читать дальше →
        • Бан по континентам



            В одно прекрасное утро я просматривал логи и задал себе ряд вопросов:

            1. А жду ли я письма из Юго-Восточной Азии? (когда смотрел логи почты)
            2. И с какого перепугу ко мне стучатся ssh брутфорсеры из Штатов?
            3. Мне надо терпеть сетевые сканеры из Австралии?
            4. Кто мне звонит из Африки? (когда разглядывал логи asterisk)
            5. С какой стати к моему POP-серверу обращаются из Латинской Америки?


            Почему бы не забанить по континентам? Оставив только нужный континент(ы)?


            Под катом bash скрипт, который этим занимается
          • Об особенностях внедрения СПО в малом бизнесе

              Добрый день, уважаемое сообщество!

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

              image


              Слепок типичного заказчика



              Обычно существовавшее изначально положение вещей характеризовалось следующим:

              1. Организации с количеством компьютеров от 1 до 50 предпочитали использовать проприетарные решения для ОС одной хорошо всем известной заатлантической конторы.
              2. Денег на покупку лицензий всегда не было. Предпочитали использовать «пиратчину».
              Читать дальше →
            • Как 45 минут терять по $172 222 в секунду

              • Translation
              Это, пожалуй, самый болезненный отчет об ошибке, который я когда-либо читал. Он красочно описывает шаги, которые привели к потере 465 миллионов долларов компанией Knight Capital в связи с ошибкой программного обеспечения, проявившейся в прошлом году и обанкротившей компанию.

              В этом отчете есть все характеристики технического долга в огромной, лишенной поддержки и запущенной базе кода (ошибка произошла из-за исполнения кода, который не использовали почти 9 лет) и ужасная и грустная история взаимодействия между разработчиками ПО и ИТ-профессионалами.
              Читать дальше →
            • Музыкальная шкатулка на PIC16F753



                Меня в свое время очень впечатлил этот пост о создании светомузыкального устройства на микроконтроллере в подарок любимой. И однажды пришло мое время сделать такой подарок. Учитывая отличия от автора упомянутого проекта в навыках и инструментарии; будучи сильно ограничен во времени подготовки (3-4 дня), я пошел другим путем и разработал свое музыкальное устройство для установки в купленную в сувенирном магазине шкатулку. Оно отличается более простой схемой и легкостью изготовления. В статье описываются подробности моего проекта и их мотивация. Осторожно, фотографии (всего около 1Мб).
                Читать дальше →
              • Самодельный привод штор

                  image
                  В этой статье я расскажу о конструкции автоматического привода штор, установленного у меня на балконе. Там у нас растут цветы, которым вреден прямой солнечный свет. Кроме того, летом, если окна балкона закрыты, при прямом солнечном свете воздух на балконе быстро перегревается. Однако когда прямого света нет, шторы желательно открыть — тень тоже не способствует росту цветов. Поэтому, для поддержания на балконе приемлемой освещенности, я автоматизировал работу штор.
                  Читать дальше →
                • Оптимизация Ubuntu (и прочих Linux-ов) под SSD

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

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

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

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

                  Для тех, кому интересно как у меня это получилось, добро пожаловать под кат.
                  Читать дальше →
                • Воспроизведение MIDI звуков на языке JAVA

                  Прежде, чем перейти к сути, я немного расскажу вам о компьютерном звуке.

                  Существует два основных формата воспроизведения звуков компьютером:
                  цифровой (WAV-формат) и синтезированный (MIDI).

                  Цифровой звук является основным стандартом компьютерного звука сегодня. Именно оцифрованный звук вы слышите, проигрывая композиции в mp3 формате или прослушивая компакт-диски, просматривая фильм или играя в комьютерные игры.

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

                  Но существует и другой вид компьютерного звука — синтезированный (MIDI)
                  Читать дальше →
                • STM32: Clock Security System

                  image
                  Доброго времени суток!
                  В данной статье речь пойдет о системе самодиагностики микроконтроллера STM32, в частности — STM32F100RB, который входит в отладочный комплект STM32-Discovery. Но так как микроконтроллеры STM32 во многом схожи, и отличаются в основном своей периферией — написанное будет верно и для других контроллеров (возможно с небольшими изменениями). Статья расчитана на людей, уже немного знакомых с STM32, но постараюсь рассказывать по возможности подробнее.
                  Читать дальше →
                • Почему я сменил место работы

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

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

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

                  Более того, разработчиков, работающих на Linux более 15 лет начали заставлять использовать другие платформы для разработки. Не стоит и говорить о том, что они не могут их использовать столь же комфортно и продуктивно.

                  Многое еще можно сказать, но все это — история о предательстве. Компания предала не только лояльных пользователей их продукта, но и своих собственных разработчиков. Результат? Потеря мотивации и массовые увольнения. В том числе и мое.
                  Читать дальше →
                • Основы репликации в MySQL

                    С репликацией серверов MySQL я познакомился относительно недавно, и по мере проведения разных опытов с настройкой, записывал, что у меня получалось. Когда материала набралось достаточно много, появилась идея написать эту статью. Я постарался собрать советы и решения по некоторым самым основным вопросам, с которыми я столкнулся. По ходу дела я буду давать ссылки на документацию и другие источники. Не могу претендовать на полноту описания, но надеюсь, что статья будет полезной.
                    Читать дальше →
                  • Не дразните программиста

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

                      Вы устали? Хотите выпустить пар? Вам требуется передышка? Предлагаю вам присоединится ко мне, тем более, что на дворе пятница.
                      Читать дальше →
                    • Crossfilter.js, dc.js и D3.js для визуализации Данных

                        Приветствую ценителей красивой и функциональной визуализации данных! Предлагаю вашему вниманию небольшой обзор нескольких JavaScript библиотек, которые вкупе с D3.js позволят создать интерактивную визуализацию многомерных данных с возможностью применения фильтрации «на лету».


                        Заинтересовались, тогда добро пожаловать под кат.
                        Читать дальше →