• Ускоряем angular.js или как не выстрелить себе в ногу



      Всем доброго времени суток. Релиз Angular.js 2.0 приближается, а проблемы с производительностью первой версии все еще остаются. Эта статья посвящена оптимизации Angular.js приложений и будет полезна как начинающим, так и тем, кто уже использует этот фреймворк, но еще не сталкивался с проблемами его производительности.
      Читать дальше →
    • Детский лагерь: биссектрально-пифагоровы треугольники, перепрограммирование мозга, радар-детектор и взлом наручников

        Все события и имена вымышленные


        Часть вещей, которые я взял с собой на смену

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

        Вот как Алексей Савватеев анонсировал свою лекцию:
        В журнале «Квант» номер 8 за 1983 год в статье «Вокруг биссектрисы» на странице 36 И.Ф.Шарыгин формулирует такую задачу:
        «Про данный треугольник известно, что треугольник, образованный основаниями его биссектрис — равнобедренный. Можно ли утверждать, что и данный треугольник равнобедренный?»

        Ответ отрицательный, но в статье далее сказано:
        «К сожалению, автор не сумел построить конкретный пример треугольника (то есть точно указать величины всех его углов или длины сторон) со столь экзотическим свойством. Может быть, это удастся сделать читателям журнала?»

        С тех пор построены три примера. Последний пример выводит нас на теорию эллиптических кривых и операцию сложения точек.

        В лекции мы построим ЦЕЛОЧИСЛЕННЫЙ треугольник, обладающий требуемым свойством. Вопрос о бесконечности таких треугольников пока ещё остаётся открытым. Школьная задача, таким образом, приведёт нас в самое сердце одной из красивейших ветвей современной математики.


        Смена в самом разгаре, кое-что интересное мы уже успели сделать, а что-то еще в планах.
        Читать дальше →
        • +24
        • 29.6k
        • 5
      • 93 видео-лекции по Scala

        • Tutorial
        В ходе подготовки спецкурса «Scala for Java Developers» под платформу онлайн-обучения UDEMY, я анализирую другие «лекционные» видео. В библиотеке накопилось какое-то количество ссылок на дельных учебные материалы по Scala (видео на английском).

        Для большинства видео указано количество просмотров. Надо сделать несколько замечаний:
        1. Количество просмотров не является главным критерием качества и полезности видео, но этот может служить каким-то указателем на ценность.
        2. Здесь не все популярное видео, что я встречал, а лишь то, что ценно по моему личному мнению.
        3. Если кто-то знает еще хорошее видео — пишите, добавлю в списки.


        Читать дальше →
        • +17
        • 35.1k
        • 5
      • Алгоритм Quickhull для нахождения выпуклой оболочки

          Как гласит определение, выпуклая оболочка некоторого множества — это наименьшее выпуклое множество , содержащее в себе множество . Выпуклой оболочкой конечного множества попарно различных точек является многогранник.
          Для реализации одномерного случая алгоритма Quickhull годится функция std::minmax_element. В сети можно найти множество реализаций алгоритма Quickhull для плоского случая. Однако, для случая произвольной размерности сходу находится лишь одна тяжёловесная реализация с сайта qhull.org.
          Читать дальше →
        • Бинарные операции над упорядоченными множествами

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

          Читать дальше →
          • +22
          • 21.2k
          • 9
        • Настольная игра для самых маленьких программистов (от 7 лет)

            Мы тут весь год общались с детскими психологами и вообще много думали о теме детского образования. Как один из результатов — сделали игру на развитие логики.



            В общем, юному программисту нужно будет написать стек действий для таксиста. Чтобы довезти пассажира куда надо с первого раза. Сразу говорю — можно играть и с 4-5 лет. Как обычно, если ребёнок — сын инженера, смело вычитайте 2 года из минимального возраста.
            Читать дальше →
          • Беззнаковая арифметика в Java

              Как известно, в Java нет беззнаковых типов. Если в Си вы могли написать unsigned int (char, long), то в Java так не получится. Однако нередко возникает необходимость в выполнении арифметических операций именно с числами без знака. На первый взгляд кажется, что беззнаковые типы в принципе-то и не особо нужны (подумаешь, MaxInt для чисел со знаком меньше в два раза, если нужны числа больше, я просто возьму long и далее BigInteger). Но основное различие на самом деле не в том, сколько различных неотрицательных чисел можно положить в signed или unsigned int, а в том, как над ними производятся арифметические операции и сравнения. Если вы работаете с бинарными протоколами или с двоичной арифметикой, где важен каждый используемый бит, нужно уметь выполнять все основные операции в беззнаковом режиме. Рассмотрим эти операции по порядку:

              Преобразование byte в short (int, long)


              Обычный каст (int) myByte выполнит расширение до 32 бит со знаком — это означает, что если старший бит байта был установлен в 1, то результатом будет то же самое отрицательное число, но записанное в 32-битном формате:

              0xff -> 0xffffffff (-1)

              Часто это не то, чего бы мы хотели. Для того, чтобы выполнить расширение до 32 бит без знака и получить 0x000000ff, в Java можно записать:

              int myInt = myByte & 0xff;
              short myShort = myByte & 0xff;
              

              Сравнение без учёта знака


              Для беззнакового сравнения есть лаконичная формула:

              int compareUnsigned(int a, int b) {
                  return Integer.compare( a ^ 0x80000000, b ^ 0x80000000 );
              }
              

              Для byte, short и long, соответственно, константы будут 0x80, 0x8000 и 0x8000000000000000L.
              Читать дальше →
            • Чистый код с Google Guava

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

              StringBuilder sb = new StringBuilder();
              for (Iterator<String> i = debtors.iterator(); i.hasNext();) {
                if (sb.length() != 0) {
                  sb.append(", ");
                }
                sb.append(i.next());
              }
              out.println("Debtors: " + sb.toString());
              

              Понятно, что этот код мог бы быть более прямолинейным, например, в Java 8 можно написать так:

              out.println("Debtors: " + String.join(", ", debtors));
              

              Вот так сразу гораздо понятнее, что происходит. Google Guava – это набор open-source библиотек для Java, помогающий избавиться от подобных часто встречающихся шаблонов кода. Поскольку Guava появилась задолго до Java 8, в Guava тоже есть способ конкатенации строк: Joiner.on(", ").join(debtors).
              Рассмотрим часто встречаемые шаблоны кода
            • Построение параллельных кривых в картографических веб-приложениях

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


              Читать дальше →
            • Оптимизируем VPS за 5$ (512MB RAM / 1 CPU) так, что сайт на wordpress выдерживает нагрузку в 42,735,587 хитов в день

              Когда вы приобретаете сервер VPS с 256MB или 512MB оперативной памяти на борту и лишь часть мощности процессора, то использовать для таких сервисов как MySQL/PHP/Apache настройки по умолчанию является очень плохой идеей. В настоящее время у меня запущено 3 сайта на самом дешевом тарифном плане с 512MB RAM/1 CPU. Не уверен полностью, но посещаемость составляет порядка 5-10 тысяч посетителей в день. Далее я хочу поделиться инструкцией как оптимизировать LAMP используя всего лишь 512 MB и при этом не уходя в swap. Обычно при такой настройки используется 256 – 378Mb памяти и все работает довольно быстро.

              Определяем доступную память и активность swap.

              Перед началом оптимизации давайте взглянем на количество используемой памяти. Для этого необходимо выполнить следующую команду:

              $ free -m

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

              $ ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r | less


              Настраиваем LAMP сервер для потребления малого количества оперативной памяти. Останавливаем, отключаем ненужные сервисы

              Первый и очевидный вопрос, который необходимо задать — это «какие сервисы мне не нужны в использовании?». Недавно, я обнаружил очень удобную утилиту для управления сервисами. Она называется "sysv-rc-conf" и управляет сервисами при помощи псевдографики и флажками. Выгдялит вот так:



              Здесь представлен список сервисов, которые я изменил.

              • Postfix. Этот сервис позволяет отправлять и получать почтовые email сообщения для домена. Я использую для этих целей Google Apps для отправки почты и mailchimp для новостных подписчиков. Таким образом я остановил и отключил этот сервис.
              • Bind9. Он нужен для управления DNS записями Вашего домена. Его можно отключить, так как все DNS записи хранятся у хостера.
              • SSHD. Имеются и другие реализации, которые используют гораздо меньше памяти, но они не поддерживают sftp, поэтому данный сервис я оставил без изменений.


              Не запускайте X-сервер, выключите все ненужные сервисы и настройте Apache, MySQL, PHP только с базовой необходимой функциональностью.
              Читать дальше →
            • Квантовая механика для всех, даром, и пусть никто не уйдёт обиженным: часть первая

              Здравствуйте! Я хотел бы представить вашему вниманию отличное введение в квантовую механику, написанное Элиезером Юдковским; быть может, он известен вам по своему сайту lesswrong.com, посвящённому рационализму, предрассудкам, когнитивным парадоксам и ещё многим интересным вещам.
              Читать дальше →
            • BlackHole.js с привязкой к картам leaflet.js

              • Tutorial
              Приветствую вас, сообщество!

              Хочу предложить вашему вниманию, все таки доведенную до определенной точки, свою библиотеку для визуализации данных blackHole.js использующую d3.js.
              Данная библиотека позволяет создавать визуализации подобного плана:
              картинки кликабельные
              image или

              Статья будет посвящена примеру использования blackHole.js совместно с leaflet.js и ей подобными типа mapbox.
              Но так же будут рассмотрено использование: google maps, leaflet.heat.

              Получится вот так =)

              Поведение точки зависит от того где я находился по мнению google в определенный момент времени

              Посмотрите, а как перемещались вы?...
              Детали...
              • +34
              • 21.4k
              • 4
            • Как я проект в OpenSCADA сделал

              image

              Речь в статье пойдет о той самой OpenSCADA, которая под Linux и с oscada.org.

              Зачем:
              • потому что SCADA на самом деле достойна внимания и популяризации;
              • в некоторых малобюджетных или маленьких проектах просто безальтернативная;
              • судя по статьям про АСУТП на хабре, многим читателям АСУТП представляется черной магией, недо-IT или чем-то похожим (ломают несчастный modbus, мучают WinCC, которая и так еле тарахтит… Люди читают и охают: «Как так можно…. дырявое ПО в промышленности», но никого не удивляет ломание Win95 и 6го ослика. Поломали бы LON шифрованный, OPC, OPC_UA…… А WinCC сама расшаривает папку с проектом с именем вида WinCC_Project_xxxxxx при первом открытии + это вы еще не видели как ее плагин к Excel может намертво винду подвесить при неаккуратной вставке ячеек чуть больше, чем он может за раз осилить!) – добавим ликбеза;
              Читать дальше →
            • Fail2ban [incremental]: Лучше, быстрее, надежнее

                fail2ban image
                Про fail2ban написано уже много, в том числе и на хабре. Эта статья немного о другом — как сделать защиту им еще надежнее и о еще пока неизвестных в широких кругах новых функциях fail2ban. Добавлю сразу — речь пойдет пока про development branch, хотя уже долго проверенный в бою.

                Краткое вступление


                В большинстве своем fail2ban устанавливается из дистрибутива (как правило это какая-нибудь стабильная старая версия) и настраивается по манам из интернета за несколько минут. Затем годами работает, без вмешательства админа. Нередко даже логи, за которыми вроде как следит fail2ban, не просматриваются.
                Так вот, сподвигнуть на написание этого поста меня заставил случай, произошедший с одним сервером моего хорошего знакомого. Классика жанра — пришла абуза, за ней вторая и пошло поехало. Хорошо еще злоумышленник попался ленивый — логи не потер, да и повезло еще крупно, что logrotate был настроен, чтобы хранить логи месяцами.
                Как дальше жить
              • Сверхбыстрое распознавание речи без серверов на реальном примере

                • Tutorial

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

                Прикручиваем Pocketsphinx к своему Андроиду
              • По следам Spring Pet Clinic. Maven/ Spring Context/ Spring Test/ Spring ORM/ Spring Data JPA

                • Tutorial

                Здравствуйте!
                Spring MVC, согласно обзору инструментов и технологий Java за 2014 г. от RevbelLabs, является самым популярным веб фреймворком.
                Далее тот же обзор называет лидера ORM — Hibernate и лидера веб-контейнеров — Apache Tomcat. Добавим сюда самую используемую java script библиотеку jQuery, самый популярный css фреймворк Bootstrap, до сих пор самую популярную (несморя на наступление Gradle) инструмент сборки Maven, абсолютный лидер среди тестовый фреймворков JUnit и получим пример приложения на Spring от его создателей:
                Spring Pet Clinic (демо приложение).
                Кроме перечисленного, в этот достаточно несложный по функциональности проект влючены также Spring-Jdbc, Spring-ORM,
                Spring Data JPA,
                Hibernate Validator,
                SLF4J,
                Json Jackson,
                JSP,
                JSTL,
                WebJars,
                Dandelion DataTables,
                HSQLDB,
                Hamcrest,
                Mockito и десятки других зависимостей.
                Читать дальше →
                • +11
                • 39.5k
                • 9
              • Как создать легенду

                  Много лет назад я участвовал в бреветах: велосипедных марафонах, где поодиночке и неспеша (но с ограничением по времени) нужно проехать от 200 до 1200 километров. Медитативное занятие, когда есть время насладиться природой, напеть все песни, рассмотреть легенду и карту маршрута… Которые удручают: часто это обычная таблица из экселя с беспорядочным оформлением, а карта факультативна. Петербуржский клуб «Балтийская звезда» продвинутее многих: участники его бреветов всегда получали карту — правда, тёмно-серую, с тёмно-серым маршрутом и КП на чёрных выносках. Не очень удобно. А поскольку я увлёкся OpenStreetMap, я почувствовал, что в силах улучшить дизайн легенд. И приступил ко второй попытке (первую, шестилетней давности, стыдно вспоминать).


                  Читать дальше →
                • Что такое grep и с чем его едят

                    Эта заметка навеяна мелькавшими последнее время на хабре постами двух тематик — «интересные команды unix» и «как я подбирал программиста». И описываемые там команды, конечно, местами интересные, но редко практически полезные, а выясняется, что реально полезным инструментарием мы пользоваться и не умеем.
                    Небольшое лирическое отступление:
                    Года три назад меня попросили провести собеседование с претендентами на должность unix-сисадмина. На двух крупнейших на тот момент фриланс-биржах на вакансию откликнулись восемь претендентов, двое из которых входили в ТОП-5 рейтинга этих бирж. Я никогда не требую от админов знания наизусть конфигов и считаю, что нужный софт всегда освоится, если есть желание читать, логика в действиях и умение правильно пользоваться инструментарием системы. Посему для начала претендентам были даны две задачки, примерно такого плана:
                    — поместить задание в крон, которое будет выполняться в каждый чётный час и в 3 часа;
                    — распечатать из файла /var/run/dmesg.boot информацию о процессоре.

                    К моему удивлению никто из претендентов с обоими вопросами не справился. Двое, в принципе, не знали о существовании grep.

                    image

                    Поэтому… Лето… Пятница… Перед шашлыками немного поговорим о grep.
                    Читать дальше →
                  • ElasticSearch — агрегация данных

                    • Tutorial

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

                    Для всех, кому интересно как сделать свои запросы в ES интереснее и посмотреть на обычной поиск с другой стороны, прошу под кат.
                    Читать дальше →
                    • +18
                    • 32.5k
                    • 8
                  • Структура данных проекта OpenStreetMap, заглянем под юбку сервису

                    Пролог



                    Проект OpenStreetMap (OSM) открытых геоинформационных данных под свободной лицензией CC-BY-SA (а в скором времени под Open Database Licence) известен достаточно широко, что бы не тратить время на его подробное представление. Главной особенностью проекта и его основным преимуществом по сравнению с любыми другими аналогами являлся принцип полностью открытых географических данных, которые могут быть использованы кем угодно и и как угодно (в рамках лицензии CC-BY-SA) и могут свободно дополняться и уточняться любым участником проекта. Как и любые другие данные, географические данные точно так же подлежат структурированию при хранении и обработке. В данной статье я постараюсь описать основные части структуры данных OSM остановившись больше на принятых типах данных и представлении их в пространственном виде. Работая постоянно с данными проекта OSM очень часто приходится уточнять или пояснять не которые базовые аспекты, поэтому возникла необходимость кратко изложить их в виде одного текста.
                    Читать дальше →