вчера в 18:04
Браузерные расширения в последнее время, к сожалению, всё чаще используются не для того, чтобы приносить пользу, а как инструмент мошенников. Сегодня мы хотим поделиться с вами нашим опытом борьбы с вредоносными разработками, рассказать о мерах и технологиях, которые защищают пользователей Яндекс.Браузера.
Весной 2014 года поддержка Яндекс.Браузера обратила внимание на стремительно растущее число обращений от пользователей, в которых говорилось о «заражении браузера вирусом» и агрессивной рекламе, всплывающей на посещаемых сайтах. Наиболее распространенным симптомом была подмена или добавление новых рекламных блоков на популярных в Рунете сайтах (ВКонтакте, Яндекс, ...). При этом разработчики вредоносных расширений не утруждали себя заботой о пользователях и не брезговали откровенно мошеннической или шок-рекламой. Встречались и другие проявления. Например, автоматическое открытие вкладки с определенным сайтом, подмена поиска по умолчанию или даже воровство данных.
В определенный момент количество таких обращений стало достигать 30% от всех сообщений в поддержку. Наблюдения поддержки также подтверждались статистикой основных причин удаления нашего браузера (при удалении пользователям предлагается описать причину). Многие люди искренне считали, что это наша команда решила таким вот способом монетизировать браузер. За короткий период времени количество удалений Яндекс.Браузера, связанных с деятельностью сторонних вредоносных разработок, удвоилось. Нужно было срочно вмешаться и начать работать над этой проблемой.
вчера в 13:20
С выходом Go 1.5 появилась возможность делать go library для сторонних программ на других языках. То есть можно написать package который делает что то интересное и тяжело или просто уже готовое решения и подключить его в другую не Go программу. Это может быть C, android, objective C and etc. Я покажу как это легко можно подключить к Ruby.
вчера в 17:08
Случайно попалось упоминание о хостинге
Scaleway.
Плюсы:
- 4 ядра
- 2 гигабайта оперативки
- 50 гигабайт SSD диск
- bare-metal! (то есть, нет никаких, даже чисто теоретических накладных расходов на виртуализацию)
- за все это всего 3 евро в месяц! Очень дешево!
Но есть особенность: это ARM процессор. Да-да! Это 4-х ядерный ARM процессор.
вчера в 14:48
Когда я зашел в гости к
Робокурс (они учат ребятишек 7-13 лет программированию и робототехнике), то увидел коллекцию раритетных книжек по программированию и вспомнил былое, 286-е без жесткого диска, BASIC из оперативки и прочее.
Я был в восьмом и от одноклассника узнал, что есть «Краевая станция юнных техников» (КСЮТ), где помимо выпиливания лобзиком кордовых авиамоделей есть и инновационный кабинет по программированию. Записался туда. Там были и первые сетевые баталии в NETWARS, и первая порнокартинка, и война за пароль главного администратора. Адекватных книг практически на было, особенно по горячо любимому мной бейсику (только «Программышка» и еще одна розовенькая книга, откуда я узнал, что такое массив и что с ним можно делать).
Хочу спросить хабрачитателей, по каким книжкам они делали первые шаги в программировании.
Под катом кратенький обзор одной современной и нескольких олдскульных советских книжек по робототехнике и программированию для детей из коллекции преподавателей. (
Бонус — обзор манги по электричеству.) А в комментах — ваши первые книги.
сегодня в 00:26
Решил я как-то заняться задачкой сортировки миллиона целых чисел при имеющейся памяти в 1 Мб. Но перед этим мне пришлось подумать над тем, как можно ограничить объём доступной памяти для программы. И вот, что я придумал.
Виртуальная память процесса
Перед тем, как окунуться в разные методы ограничения памяти, необходимо знать, как устроена виртуальная память процесса. Лучшая статья на эту тему — "
Анатомия программы в памяти"
Прочитав статью, я могу предложить две возможности для ограничения памяти: уменьшить виртуальное адресное пространство или объём кучи.
Первое: уменьшение объёма адресного пространства. Это довольно просто, но не совсем корректно. Мы не можем уменьшить всё пространство до 1 Мб — не хватит места для ядра и библиотек.
Второе: уменьшение объёма кучи. Это не так-то просто сделать, и обычно так никто не делает, поскольку это доступно только через возню с компоновщиком. Но для нашей задачи это был бы более корректный вариант.
Также я рассмотрю другие методы, такие, как отслеживание использования памяти через перехват вызовов библиотек и системы, и изменение окружения программы через эмуляцию и введение «песочницы».
Для тестирования будем использовать небольшую программу по имени big_alloc, размещающую, и затем освобождающую 100 MiB.
вчера в 22:00
Так сложилось, что в
Qt4 Embedded, которую мы используем на нашем приборе
Беркут-ММТ, нет поддержки таких устройств ввода, как энкодер. Т.е. если прицепить к прибору мышь — координаты при перемещении обрабатываться будут, а вот колесо прокрутки — нет. Потому что драйвер
linuxinput не обрабатывает события с типом
REL_WHEEL, которое генерит энкодер, а только
REL_X и
REL_Y, которые отвечают за изменение координат.
Кому интересно как эту проблему решить — добро пожаловать под кат.
сегодня в 12:19
В сентябре прошлого года была
опубликована последняя статья о Центрифуге — сервере с открытым исходным кодом для обмена сообщениями в режиме реального времени. Теперь в списке хабов, в которые публикуется этот пост, присутствует Go. И неспроста, как можно понять уже из заголовка, Центрифуга была портирована с Python на Go — так появилась
Centrifugo. О причинах миграции, о плюсах и минусах Go, а также о том, как эволюционировал проект с момента предыдущей публикации – читайте под катом.
вчера в 18:28
… Десять настанет…
И ты задрожишь,
Как осиновый лист задрожишь!
Юринэ "Карас"
Менее всего заметно то, что лежит на поверхности. За привычной обыденностью, мы не видим чудесного. Разработчики настольных игр придумывают всё новые и новые игровые механики, но часто путают «интересность» игры с её «сложностью». Чтобы было понятно, о чём идёт речь, приведу пример:
Игра давленияTAMSK или «Игра давления» была второй игрой, разработанной в рамках инициативы "
GIPF Project". Это, пожалуй, самая странная из всех известных мне игр. В качестве игровых фишек, в ней используется набор песочных часов:
Каждый игрок имеет по три 3-минутных «склянки». Кроме того, в игре используются нейтральные 15-секундные часы, для ограничения времени хода. В начале игры, «фигуры» расставляются в углах шестиугольной доски, с чередованием цвета. Выполняя ход, каждый игрок перемещает одну из склянок на соседнее поле (в любом направлении), переворачивая её. Сразу же после этого, на поле с фигурой надевается кольцо. Правилами запрещается выполнять ход фигурой, песок в которой полностью высыпался (первыми тремя ходами каждый игрок обязан «взвести» все свои часы) и ходить на те поля, среза трубки которых достигли кольца (трубки полей имеют различную высоту). Игра заканчивается, когда ходы становятся невозможными. Побеждает игрок надевший больше всего колец.
Безусловно, эта игра очень сложна (её совершенно точно не удастся описать на
ZRF, а на
Axiom, с её поддержкой таймеров, вряд ли удастся разработать сколь нибудь дружественный интерфейс), но эта сложность выглядит какой-то искусственной, «притянутой за уши». Как разработчика настольных игр, меня интересуют игры, «бросающие вызов» существующим средствам разработки, но я не приветствую «сложность ради самой сложности». Я хочу рассказать про…
сегодня в 10:01
Для затравки, чтобы было желание прочитать дальше: «
So far, … has cost … at least $115 million and annual maintenance costs are approximately $14 million. The project is five years late, incomplete, riddled with deficiencies, and much of the technology may already be out dated.»
И так, как вы могли уже догадаться, речь пойдёт о достаточно не редком явлении, хотя докладчики на многочисленных конференциях стараются скромно о подобном умалчивать, когда ИТ проект (вовсе даже не российский) долго надували-надували, а он взял, да внезапно лопнул.
— Иа, я принёс тебе подарок! Воздушный шар.
— Спасибо, Пятачок, ты настоящий друг, не то, что некоторые! Шар, это такой большой, красивый!
— Интересно, что это так громко бумкнуло! И где мой воздушный шарик, и откуда взялась эта тряпочка?
сегодня в 11:52
На носу было придумывание темы для диплома, на кафедре популярностью пользовались различные варианты идей связанных с генетическими алгоритмами, а мне самому хотелось сделать что-нибудь этакое. Так и родилась идея, давшая начало данному проекту, а именно генетическому оптимизатору программного кода.
Цель была довольно амбициозной — в идеале сделать такую штуку, которой на вход подается программа, а дальше она ее крутит так и сяк и пытается всячески ускорить отдельные ее фрагменты без участия человека, попутно собирая себе базу для последующих оптимизаций. Сразу скажу что хотя в целом задача была решена, практической пользы я из нее извлечь не смог. Однако некоторые полученные в процессе результаты показались мне достаточно интересными чтобы ими поделиться.
Например вот такая забавная оптимизация набора арифметических инструкций (взятых из какой-то подвернувшейся под руку математической библиотеки), соответствующих формулам:
, которая на 6 джаве с выключенным JIT у меня давала около 10% ускорения, при этом на первый взгляд даже не очевидно что эти формулы эквивалентны (ОТКУДА ТУТ OR? ЭТО ВООБЩЕ ЗАКОННО?!), хотя это так. Под катом я расскажу, как именно получались такие результаты и каким образом компьютер придумывал лучший код чем тот, который мог написать я сам.