Pull to refresh
53
0.1
maeris @maeris

User

Send message

Шестерни и рейки на ЧПУ фрезере без дополнительной оснастки и модульной фрезы

Reading time2 min
Views59K
Наверное, многие, просматривающие раздел «DIY или сделай Сам» сталкивались с необходимостью найти/подобрать подходящую пару шестерней или готовый редуктор под свой проект. А так же сталкивались с трудностями данного поиска.

Возможность изготовлять шестерни самостоятельно давно меня интересовала. Заводские методы нарезки шестерней модульными фрезами и пр. промышленными способами мало применимы в домашних условиях. А изготовить на заказ стоит безумные деньги за одну штуку или хотят партию от 1000 шт.
Читать дальше →
Total votes 36: ↑36 and ↓0+36
Comments25

Ara, да? Или модульный смартфон будущего

Reading time5 min
Views28K
В конце января в Сингапуре прошла конференция Google, посвященная Project Ara.

Любителям конструкторов будет интересно узнать о свежем состоянии проекта, а остальным читателям напомню, что Project Google Ara (название не я придумал) — это модульный смартфон будущего, в котором пользователь сам выбирает компоненты не только по стоимости, но и по функционалу.

image
Работа смартфона будущего с модулем измерения радиации.

Темы конференции: текущее состояние Project Ara, планы по выходу на рынок модульного смартфона Ara, изменение аппаратной платформы Spiral, программные средства управления и проектирования, презентация модулей разработчиков, программа поддержки разработчиков, каналы продаж смартфона и модулей к нему.

Конференцию мы посетили, как официально признанные разработчики собственного устройства DO-RA.Module.

Далее, по-порядку.
Читать дальше →
Total votes 41: ↑31 and ↓10+21
Comments34

Опыт маскировки OpenVPN-туннеля с помощью obfsproxy

Reading time9 min
Views105K
Примечание: приведённая в статье информация во многом устарела, и предназначена скорее для общего ознакомления. Сейчас можно попробовать использовать утилиты вроде ptproxy для создания туннеля с помощью любого актуального pluggable transport для Tor.

Преамбула


В связи с наметившимися тенденциями решил я обфусцировать свой скромный OpenVPN-туннель, просто чтобы набить руку — мало ли пригодится…

Дано: дешевая VPS с белым IP, работающая под Ubuntu Trusty Server Edition и служащая OpenVPN сервером.
Требуется: по-возможности скрыть OpenVPN туннель, желательно без изобретения велосипедов.
Ну и что дальше?
Total votes 32: ↑32 and ↓0+32
Comments37

Хабраэффект для 130 000 камер Москвы

Reading time2 min
Views133K
Привет, Хабр! Спасибо за неожиданно теплый приём. Высокий рейтинг нашей первой публикации и бурное обсуждение в комментариях окончательно убедили нас в том, что вы довольно отзывчивая аудитория и из этой затеи обязательно выйдет что-то полезное. Сегодня расскажем подробнее о том, как вы можете помочь городу стать лучше.


Читать дальше →
Total votes 88: ↑84 and ↓4+80
Comments132

Ресайз картинок в браузере. Все очень плохо

Reading time10 min
Views104K
Если вы когда-нибудь сталкивались с задачей ресайза картинок в браузере, то вы наверное знаете, что это очень просто. В любом современном браузере есть такой элемент, как холст (<canvas>). На него можно нанести изображение нужных размеров. Пять строчек кода и картинка готова:

function resize(img, w, h) {
  var canvas = document.createElement('canvas');
  canvas.width = w;
  canvas.height = h;
  canvas.getContext('2d').drawImage(img, 0, 0, w, h);
  return canvas;
}

Из холста картинку можно сохранить в JPEG и, например, отправить на сервер. Можно было на этом закончить статью, но сперва давайте взглянем на результат. Если вы поставите рядом такой холст и обычный элемент <img>, в который загружена та же картинка (исходник, 4 Мб), то вы увидите разницу.

img
Читать дальше →
Total votes 156: ↑152 and ↓4+148
Comments90

Общаемся с SIM-картой на низком уровне

Reading time5 min
Views49K

f: не могу представить, как крусач может работать) Наши курсачи обычно пыляться где-то на полках
m: Вот у меня есть плата. К ней нужно подрубить сим-карту, и эта плата должна прочитать смс оттуда)
m: плата покупная, а вот программируем ее мы)
f: а нельзя смс с телефона прочитать?

— из жизни, орфография сохранена





Ну а если вам все-таки интересно узнать больше о сим-картах, протоколах передачи и их файловой структуре, прошу под кат. Ну и куда же без кода…

Читать дальше...
Total votes 197: ↑191 and ↓6+185
Comments37

Сделай шаг к ПЛИС

Reading time7 min
Views264K


Ты ждал знак? Вот он!

Много лет я не решался начать программировать ПЛИС, потому что это сложно, дорого и больно (как мне казалось). Но хорошо, когда есть друзья, которые помогают сделать первый шаг. И теперь я не понимаю одного — ПОЧЕМУ Я ЖДАЛ ТАК ДОЛГО?

Сейчас я помогу сделать первый шаг и тебе!

Я готов!
Total votes 69: ↑60 and ↓9+51
Comments90

Чтобы распознавать картинки, не нужно распознавать картинки

Reading time18 min
Views236K
Посмотрите на это фото.



Это совершенно обычная фотография, найденная в Гугле по запросу «железная дорога». И сама дорога тоже ничем особенным не отличается.

Что будет, если убрать это фото и попросить вас нарисовать железную дорогу по памяти?

Если вы ребенок лет семи, и никогда раньше не учились рисовать, то очень может быть, что у вас получится что-то такое:
Осторожно, тяжелые гифки
Total votes 263: ↑258 and ↓5+253
Comments104

Как растаращить class-файл

Reading time4 min
Views45K
Обычно при компиляции Java-файла получаются .class-файлы примерно того же размера, что и исходник. Меня заинтересовало, можно ли по небольшому исходнику сделать .class-файл, который больше, сильно больше исходника.

Можно поискать какие-то короткие конструкции языка, которые компилируются в длинные цепочки байткода, но линейный прирост меня не устраивал. Я сразу подумал про компиляцию finally-блоков: про неё уже писали на Хабре. Если вкратце, то для каждого finally-блока при непустом try-блоке создаётся минимум два варианта в байткоде: для случая нормального завершения try-блока и для случая завершения с исключением. В последнем случае исключение сохраняется в новую локальную переменную, выполняется код finally, затем исключение достаётся из локальной переменной и перебрасывается. А что если внутри finally снова разместить try-finally и так далее? Результат превзошёл все ожидания.
Читать дальше →
Total votes 111: ↑106 and ↓5+101
Comments63

Пару слов о конвейерах в FPGA

Reading time12 min
Views47K
Всем привет!

Многим известно, что во всех современных процессорах есть вычислительный конвейер. Бытует заблуждение, что конвейер — это какая-то фишка процессоров, а в чипах для других приложений (к примеру, сетевых) этого нет. На самом деле конвейеризация (или pipelining) — это ключ к созданию высокопроизводительных приложений на базе ASIC/FPGA.

Очень часто для достижения высокой производительности выбирают такие алгоритмы, которые легко конвейеризируются в чипе. Если интересно узнать о низкоуровневых подробностях, добро пожаловать под кат!
Читать дальше →
Total votes 46: ↑46 and ↓0+46
Comments54

Cхема > плата > ПЛИС

Reading time10 min
Views39K
На Хабре есть статьи для начинающих ПЛИСоводов, есть статьи с обзорами средств трассировки печатных плат. На некоторые из них я уже ссылался в своей первой статье о создании печатных плат. Во второй статье про SimBank в комментариях у меня состоялся диалог о сложности разработки ПЛИС и поддержки проектов с ней. Было высказано мнение, что легче собрать несколько простых устройств вместо одного сложного. Иногда так действительно проще. Когда речь идёт о двух, четырёх, восьми устройствах. Ряд можно продолжать с привычной вам кратностью. До преодоления порога комфорта. Два — это куча? А что делать, если есть желающие на 100 или 200 однотипных устройств?
Использовать или не использовать ПЛИС в той или другой задаче каждый решает сам (или с коллегами).
Сегодня хочу предложить вашему вниманию статью об особенностях создания печатной платы с ПЛИС. За основу возьмём инструмент «IO Designer» от компании Mentor Graphics.

Кому-то может материал оказаться полезным, кому-то просто интересным, а кто-то может и не согласиться со мной.
Читать дальше →
Total votes 27: ↑25 and ↓2+23
Comments16

Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция

Reading time6 min
Views151K
Каким образом повысить количество российских инженеров, которые были бы знакомы и с разработкой хардвера, и с разработкой софтвера, и могли бы строить системы, в которых часть функциональности находится в специализированном железе, а часть — в программном обеспечении, с соблюдением баланса между ними?

Для этого вовсе не обязательно выбрасывать несуразные деньги а-ля сделка Сколкова и MIT.

Есть масса дешевых и эффективных мер по апгрейду российской образовательной системы. Одна из них — широко ввести практические классы ПЛИС / ППВМ / FPGA среди старших школьников и студентов. Это то, на чем учатся и инженеры, которые потом разрабатывают микросхемы внутри Apple iPhone в Купертино, Калифорния.
Читать дальше →
Total votes 55: ↑50 and ↓5+45
Comments91

Вышел Unreal Engine 4.7 с поддержкой HTML5 и WebGL

Reading time2 min
Views28K


Компания Epic Games объявила о «самом крупном релизе» в истории.

В Unreal Engine 4.7 сделано такое количество важных нововведений, оптимизаций и улучшений, что даже странно, почему ему не присвоен номер версии 5.0.
Читать дальше →
Total votes 34: ↑34 and ↓0+34
Comments10

Siege — утилита для нагрузочного тестирования веб-серверов

Reading time7 min
Views81K
Надеюсь, что данный материал будет кому-нибудь полезен.

Siege – это утилита для нагрузочного тестирования веб-серверов. Она была создана для того чтоб дать разработчикам возможность проверить ресурсоёмкость своего кода в условиях, максимально приближенных к реальным. Так же Siege может имитировать обращения к сайту сразу нескольких пользователей. Это позволяет держать сервер как бы «под осадой» долгое время. Количество запросов, произведённых при «осаде», рассчитывается из общего количества пользователей и количества их обращений к серверу. Например 20 пользователей, обратившись по 50 раз, создают в общей сложности 1000 запросов. Результат, выводимый программой после тестирования, включает в себя время затраченное на проверку, общее количество переданной информации ( включая заголовки ), среднее время ответа сервера, его пропускную способность и число запросов на которые пришёл ответ с кодом 200. Эти данные формируются и выдаются при каждой проверке. Подробно они описываются ниже. Siege имеет 3 основных модели работы – режим регрессионного тестирования, режим имитации Интернета и режим грубой силы. Программа считывает порцию ссылок из конфигурационного файла и обращается к ним по очереди ( режим регрессионного тестирования ) или случайно ( имитация интернета ). Или же пользователь может указать один единственный адрес к которому будут производиться все обращения – режим грубой силы.

UPD: спасибо за плюсы, перенес в тематический блог.
Читать дальше →
Total votes 76: ↑74 and ↓2+72
Comments67

Слежение за изменениями в директории: как это делается в разных ОС

Reading time3 min
Views73K
Я бы хотел посвятить статью обзору API, предоставляемых разными ОС для слежения за изменениями в директории. Статья появилась как результат моей работы над демонами слежения за изменениями для утилиты dklab_realsync (статья на хабре, github репозиторий) и своей собственной, которую я пока что не хочу анонсировать.
Читать дальше →
Total votes 93: ↑88 and ↓5+83
Comments76

Правильно ли работает ваш дизассемблер?

Reading time3 min
Views14K
Сегодня я хочу рассказать об одной интересной сложности декодирования/дизассемблирования IA-32 инструкций.

Перед прочтением этой статьи рекомендую обратиться в статье «Префиксы в системе команд IA-32», описывающей общую структуру IA-32 команды и существующие префиксы. В этой статье я подробнее расскажу про обязательные префиксы (англ. mandatory prefixes) и некоторые нюансы, связанные с ними.
Читать дальше →
Total votes 49: ↑47 and ↓2+45
Comments18

Как я выбирал копирайтера методом ёжика – и сколько стоит написать треш и угар

Reading time14 min
Views131K


Дело в том, что магазин с кефиром — в двух кварталах от моего дома в Астрахани. Осенью темнело рано, на улицах удваивалась популяция шпаны, и потому мы ходили туда для надёжности небольшой толпой. Так вот, когда возвращались, Стас увидел ежа. В ноябре. Перебегающим дорогу. И, на всякий случай, поймал.

Рассматриваем. Ёж – не жилец. Слишком худой, не откормится, нет гнезда – да и вообще вылезать в локальное потепление ноября перед первым снегом было не лучшей идеей. «Ну, хочешь спасать – держи» — Стас отодрал шар от вязаной перчатки.

Вечером я чуть не убил зверя молоком по незнанию (на фото). И дальше выяснил сразу много и внезапно. Сейчас расскажу, какое это имеет отношение к выбору копирайтера и вообще написанию нормальных текстов.
Читать дальше →
Total votes 200: ↑190 and ↓10+180
Comments146

Dr. Tariff 2.0: новые возможности для абонентов Билайн, МегаФон и МТС

Reading time2 min
Views56K


Здравствуй, Хабр!

Наше мобильное приложение по оптимизации затрат на сотовую связь существенно преобразилось. Под катом можно узнать какие новые возможности для экономии в нем появились.
Читать дальше →
Total votes 97: ↑90 and ↓7+83
Comments147

Как мы запрос в 100 раз ускоряли, или не все хеш-функции одинаково плохи

Reading time4 min
Views37K
Мы разрабатываем базу данных. Однажны к нам обратилась компания, которая столкнулась со следующей задачей:

Есть некоторое множество объектов, и некоторое множество тегов. Каждый объект может содержать несколько тегов. Какие-то теги очень редкие, а какие-то встречаются часто. Одному объекту один тег может быть сопоставлен несколько раз.
Новые объекты, теги и связи между ними непрерывно добавляются.
Задача — очень быстро отвечать на вопросы вида: «сколько есть объектов, у которых есть тег А или B, но нету тега С» и похожие. На такие запросы хотелось бы отвечать за десятые доли секунды, при этом не останавливая загрузку данных.

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

SELECT 
    COUNT(*) 
FROM (
    SELECT 
        object_id, 
        (MAX(tag == A) OR MAX(tag == B)) AND MIN(tag != C) AS good
    FROM tags
    WHERE tag IN (A, B, C)
    GROUP BY object_id
) WHERE good == 1;


Чтобы такой запрос выполнялся быстро, мы разбили данные между серверами кластера по object_id, а внутри каждого сервера отсортировали их по тегам. Таким образом сервер, выполняющий запрос, может отправить запрос без изменений на все сервера с данными, а затем просто сложить их результаты. На каждом сервере с данными для выполнения запроса достаточно найти строки для тегов A, B и C (а так как данные по тегу отсортированы, это быстрая операция), после чего выполнить запрос за один проход по этим строкам. Худший тег имеет несколько десятков миллионов объектов, несколько десятков миллионов строк обработать за десятые доли секунды видится возможным.
Стоит отметить, что подзапрос содержит GROUP BY object_id. GROUP BY в данной ситуации можно выполнить несколькими способами, например, если данные после тега отсортированы по object_id, то можно выполнить что-то похожее на merge sort. В данной ситуации, однако, мы данные по object_id не отсортировали, и оптимизатор разумно решил, что для выполнения GROUP BY надо построить хеш-таблицу.

Мы загрузили все данные в кластер, и запустили запрос. Запрос занял 25 секунд.
Читать дальше →
Total votes 107: ↑104 and ↓3+101
Comments4
2

Information

Rating
2,755-th
Registered
Activity