Всем привет! Сегодня хочу рассказать о своем «семейном» проекте на Raspberry Pi. Путешествуя по миру, я постоянно сталкиваюсь с потребностью подключаться к быстрому и, что не менее важно, безопасному интернету.
User
Быстрый старт Data Binding в Android
8 min
66KВведение
Профессионально андроид-разработкой занимаюсь чуть больше года, до этого разрабатывал по Windows Phone и мне понравилась возможность связывать данные из вью модели с самим View при помощи механизма Bindings. А после изучения RX, многие задачи стали решаться более чисто, вью-модель полностью отделилась от View. Она стала оперировать только моделью, совсем не заботясь о том, как она будет отображаться.
В Android такой строгости я не заметил, Activity или Fragment как простейшие представители контроллера чаще всего имеют полный доступ как ко View, так и к модели, зачастуя решая, какой View будет видим, решая таким образом чисто вьюшные задачи. Поэтому я довольно радостно воспринял новость о появлении Data Binding в Android на прошедшем Google IO.
Пока что это только бета релиз, но уже можно протестировать функционал и увидеть направление, в котором двигаются разработчики из Google.
+18
Недо-дополненная реальность, или как нам домоверить Moverio
6 min
15KМесяц назад я получила посылку с любопытным девайсом. Вы слышали про проект AR-Go? Но уж про очки Google Project наверняка слышали? Так вот, пока наши с Гуглом команды изобретают чудо-очки, Epson выпустил в продажу любопытное устройство — Moverio BT-100. Да, у него отсутствует многое, что сделало бы гаджет осмысленней и востребованнее, но в любом случае железка получилась уникальная — и по цене, и в плане возможностей.
+45
Исследование защищенности карты Тройка
18 min
203KКарта Тройка представляет из себя универсальный пополняемый электронный кошелек, широко используемый в системах оплаты общественного транспорта Москвы с 2013 года.
Цель данного исследования — выяснить защищенность системы электронного кошелька от подделки баланса, оценить безопасность инфраструктуры, работающей с картой. Вся работа была выполнена без использования специальных технических средств. Использовался дешевый смартфон на платформе Android и персональный компьютер. Общее время, затраченное на исследование, составило 15 дней.
В ходе работы был успешно проведен реверс-инжиниринг мобильного приложения «Мой проездной», что позволило получить доступ к памяти карты и изучить структуру хранения данных. Были найдены уязвимости, позволяющие выполнить подделку баланса, записанного на электронном кошельке карты Тройка. В результате чего стало возможным использование систем, поддерживающих карту, без оплаты.
Итогом исследования стала разработка приложения TroikaDumper, позволяющего эксплуатировать уязвимости системы электронного кошелька.
Внимание! Данные материалы представлены исключительно в ознакомительных целях. Подделка проездных билетов является уголовным преступлением и преследуется по закону.
+368
Настройка и оптимизация MySQL сервера
9 min
315KВ этой статье будут описаны различные настройки MySQL, преимущественно те, которые влияют на производительность. Для удобства все переменные разделены по разделам (базовые настройки, ограничения, настройки потоки, кэширование запросов, тайминги, буферы, InnoDB). Сначала уточним имена некоторых переменных, которые изменились в версии 4 MySQL, а в сети продолжают встречаться и старые и новые варианты имен, что вызывает вопросы.
+162
Моментальный клей и сода: дополнительные штрихи
3 min
154KПро моментальный клей с содой разве что ещё анекдотов не насочиняли, но все молчат про одну интересную особенность. Итак, смесь цианоакрилата с содой моментально полимеризуется (твердеет), выделяя тепло и отлично схватываясь молекулярными связями с близлежащими слоями. Но не с любыми. С ABS-пластиком — хорошо, а с полипропиленом — плохо. Ну и что с того? При послойной заливке (точнее, «закапке») соблюдать точную форму детали непросто. Много излишков в конце приходится удалять механически (напильником). А как насчёт «опалубки» из таких же подручных материалов? Кустарная 3D-печать из кармана.
+20
PROLOG для программистов
9 min
91KTutorial
Язык логического программирования PROLOG (далее – ПРОЛОГ) большинству программистов представляется чем-то запутанным и малопригодным для практического применения. В то же время, Интернет основан на символьной информации, поэтому практически все современные программисты сталкиваются с необходимостью обрабатывать символьные структуры данных, а ведь для этого и предназначен язык логического программирования ПРОЛОГ. Этот язык – идеальный для работы с символьными структурами, текстовыми файлами и для построения интеллектуальных программ.
+12
Быстрый полнотекстовый поиск ElasticSearch
6 min
219KПри разработке высоконагруженных сайтов или корпоративных систем частенько возникает проблема с разработкой быстрого и удобного поискового движка. Ниже перечислены наиболее важные, на мой взгляд, требования к такому движку:
- Скорость
- Простота установки и настройки
- Цена (желательно бесплатно и с открытым кодом)
- Обмен информацией в формате JSON (по HTTP)
- Масштабируемость (возможность распределения на несколько серверов)
- Индексация в режиме реального времени
- Multi-tenancy (гибкость в настройках под индивидуального пользователя)
- Возможность переноса системы в облако
Хочу рассказать вам о новом поисковом движке Elasticsearch, который полностью удовлетворяет всем этим требованиям. В статье будет краткое описание, ссылка на авторитетную презентацию, а также описание установки и работы с ним.
+57
Портал Технопарка: как мы это делали
10 min
11KВсем привет. Данная статья описывает портал «Технопарк»: его функции и возможности, историю разработки и использованные технические и архитектурные решения. Статья написана разработчиками портала — студентами самого Технопарка. Мы надеемся, что опыт разработки, которым мы делимся, будет полезен читателям.
+23
Android. Автозапуск приложения при загрузке: теория и практика
7 min
97KПростой поиск на stackoverflow.com показывает, что тема получения сообщения ACTION_BOOT_COMPLETED остается актуальной и по сей день. Как видно, многие новички сталкиваются с проблемой: они не получают в своих приложениях сообщение ACTION_BOOT_COMPLETED. В этой статья я попробую резюмировать данные из официальной документации, опыт многих разработчиков из stackoverflow.com, а также свой опыт. Итак, как же победить этого «коварного врага» под названием «ACTION_BOOT_COMPLETED»?
+24
+18
Поразрядная сортировка с человеческим лицом
8 min
40KНесмотря на известность алгоритма поразрядной сортировки, в интернете сложно найти приличную его реализацию на языке C++ (честно говоря, думаю, что и на других языках тоже). Почти всё, что находится поисковиками, чудовищно либо в плане кода, либо в плане эффективности. А чаще всего плохо и то, и другое.
Основная ошибка в том, что авторы пытаются навернуть универсальность там, где это не нужно, и не обеспечивают универсальность там, где это действительно необходимо. В результате получается нечто, что работает медленно и чем невозможно пользоваться.
Возможно, именно поэтому многие люди до сих пор считают поразрядку алгоритмом, представляющим исключительно академический интерес, и малоприменимым в реальности. Однако, это заблуждение.
Основная ошибка в том, что авторы пытаются навернуть универсальность там, где это не нужно, и не обеспечивают универсальность там, где это действительно необходимо. В результате получается нечто, что работает медленно и чем невозможно пользоваться.
Возможно, именно поэтому многие люди до сих пор считают поразрядку алгоритмом, представляющим исключительно академический интерес, и малоприменимым в реальности. Однако, это заблуждение.
+24
Как учёные с помощью Twitter бесплатно скачивают исследования
3 min
30KЕсли вы — учёный, и вам для работы нужно получить результаты определённого исследования, то у вас есть два пути: либо вы платите за него долларов тридцать, либо пишете в Twitter сообщение с «волшебным» хештегом, идентификационным кодом исследования и адресом электронной почты.
Я проверил. В течение получаса после моего твита я получил документ по почте. Моё сообщение ретвитнул аккаунт Shecanhazpdf, в описании к которому сказано: «С 2014 года не делает ничего, кроме ретвитов #icanhazpdf целый день».
По негласным правилам твит нужно удалить, но я этого делать не буду — я специально дал ссылку на документ, который не требует оплаты подписки. Поэтому я получил письмо с фразой: «Мне файл доступен без логина, но всё равно я прикладываю его к письму».
Андреа Кужевски — учёная, придумавшая распространять работы с помощью Twitter. Фото из Google+
Я проверил. В течение получаса после моего твита я получил документ по почте. Моё сообщение ретвитнул аккаунт Shecanhazpdf, в описании к которому сказано: «С 2014 года не делает ничего, кроме ретвитов #icanhazpdf целый день».
По негласным правилам твит нужно удалить, но я этого делать не буду — я специально дал ссылку на документ, который не требует оплаты подписки. Поэтому я получил письмо с фразой: «Мне файл доступен без логина, но всё равно я прикладываю его к письму».
Will you help? #icanhazpdf https://t.co/X1R1trWtGQ sychev.i.p@gmail.com
— Иван Сычев (@ivan_sychev) 24 октября 2015
Андреа Кужевски — учёная, придумавшая распространять работы с помощью Twitter. Фото из Google+
+38
Вакцина от малярии стала кандидатом в лекарства от рака
2 min
17KДатские биологи из Копенгагенского университета и Университета Британской Колумбии,
изучая действие, оказываемое вакциной от малярии на организм беременных женщин, случайно обнаружили многообещающее свойство этой вакцины, которое может помочь в борьбе с раком.
Учёные, тестируя вакцину от малярии на людях, по их словам, наткнулись на интересный факт – паразитические малярийные одноклеточные организмы (протисты) цепляются к плаценте точно такими же белками, какие можно встретить в раковых клетках.
«Десятилетиями учёные искали общие признаки у процессов роста плаценты и опухоли. Плацента за несколько месяцев вырастает из нескольких клеток до органа весом в 600-700 гр., функционируя при этом относительно автономно. В каком-то смысле опухоли ведут себя схожим образом»,- утверждает Али Саланти [Ali Salanti] из Департамента иммунологии и микробиологии Копенгагенского университета.
Саланти пояснил, что команде биологов удалось выяснить: и в плаценте, и в опухоли означенный белок отвечает за быстрый рост. В одном из экспериментов малярийный паразит повёл себя с клетками опухоли точно так же, как с плацентой, то есть присоединился к ним.
изучая действие, оказываемое вакциной от малярии на организм беременных женщин, случайно обнаружили многообещающее свойство этой вакцины, которое может помочь в борьбе с раком.
Учёные, тестируя вакцину от малярии на людях, по их словам, наткнулись на интересный факт – паразитические малярийные одноклеточные организмы (протисты) цепляются к плаценте точно такими же белками, какие можно встретить в раковых клетках.
«Десятилетиями учёные искали общие признаки у процессов роста плаценты и опухоли. Плацента за несколько месяцев вырастает из нескольких клеток до органа весом в 600-700 гр., функционируя при этом относительно автономно. В каком-то смысле опухоли ведут себя схожим образом»,- утверждает Али Саланти [Ali Salanti] из Департамента иммунологии и микробиологии Копенгагенского университета.
Саланти пояснил, что команде биологов удалось выяснить: и в плаценте, и в опухоли означенный белок отвечает за быстрый рост. В одном из экспериментов малярийный паразит повёл себя с клетками опухоли точно так же, как с плацентой, то есть присоединился к ним.
+17
Отладочная плата Orange Pi PC Allwinner H3 всего за $15
2 min
70KРанее компания Shenzhen Xunlong Software CO. использовала процессоры Allwinner A20 и Allwinner A31s в отладочный платах Orange Pi. Но недавно компания представила модель Orange Pi PC на базе процессора Allwinner H3, которая стоит существенно дешевле предыдущих, и составляет $15. Низкая стоимость платы была достигнута, благодаря низкой цены самого процессора Allwinner H3, и составляет $6.
+17
Внешняя сортировка с O(1) дополнительной памяти
9 min
36KПрочитав эту статью, я вспомнил, как писал внешнюю сортировку, которая использовала O(1) внешней памяти. Функция получала бинарый файл и максимальный размер памяти, которую она могла выделить под массив:
Я использовал алгоритм из Effective Performance of External Sorting with No Additional Disk Space:
Преимущество такого алгоритма, кроме отсутствия буфера на диске, это то, что с диска мы читаем данные относительно большими порциями, что ускоряет алгоритм.
Реализуем алгоритм на C++.
void ext_sort(const std::string filename, const size_t memory)
Я использовал алгоритм из Effective Performance of External Sorting with No Additional Disk Space:
- Разделим файл на блоки, которые помещаются в доступную память. Обозначим эти блоки Block_1, Block_2, …, Block_(S-1), Block_S. Установим P = 1.
- Читаем Block_P в память.
- Отсортируем данные в памяти и запишем назад в Block_P. Установим P = P + 1, и если P ≤ S, то читаем Block_P в память и повторяем этот шаг. Другими словами, отсортируем каждый блок файла.
- Разделим каждый блок на меньшие блоки B_1 и B_2. Каждый из таких блоков занимает половину доступной памяти.
- Читаем блок B_1 блока Block_1 в первую половину доступной памяти. Установим Q = 2.
- Читаем блок B_1 блока Block_Q во вторую половину доступной памяти.
- Объеденим массивы в памяти с помощью in-place слияния, запишем вторую половину памяти в блок B_1 блока Block_Q и установим Q = Q + 1, если Q ≤ S, читаем блок B_1 блока Block_Q во вторую половину доступной памяти и повторяем этот шаг.
- Записываем первую половину доступной памяти в блок B_1 блока Block_1. Так как мы всегда оставляли в памяти меньшую половину элементов и провели слияние со всеми блоками, то в этой части памяти хранятся M минимальных элементы всего файла.
- Читаем блок B_2 блока Block_S во вторую половину доступной памяти. Установим Q = S −1.
- Читаем блок B_2 блока Block_Q в первую половину доступной памяти.
- Объеденим массивы в памяти с помощью in-place слияния, запишем первую половину доступной памяти в блок B_2 блока Block_Q и установим Q = Q −1. Если Q ≥ 1 читаем блок B_2 блока Block_Q в первую половину доступной памяти и повторяем этот шаг.
- Записываем вторую половину доступной памяти в блок B_2 блока Block_S. Аналогично шагу 8, тут хранятся максимальные элементы всего файла.
- Начиная от блока B_2 блока Block_1 и до блока B_1 блока Block_S, определим новые блоки в файле и снова пронумеруем их Block_1 to Block_S. Разделим каждый блок на блоки B_1 и B_2. Установим P = 1.
- Читаем B_1 и B_2 блока Block_P в память. Объеденим массивы в памяти. запишем отсортированный массив назад в Block_P и установим P = P +1. Если P ≤ S, повторяем этот шаг.
- Если S > 1, возвращаемся к шагу 5. Каждый раз мы выделяем M минимальных и максимальных элементов, записываем их в начало и конец файла соответственно, а потом делаем то же самое с оставшимися элементами, пока не дойдем до середины файла.
Преимущество такого алгоритма, кроме отсутствия буфера на диске, это то, что с диска мы читаем данные относительно большими порциями, что ускоряет алгоритм.
Реализуем алгоритм на C++.
+18
«Мы можем лучше протестировать Java, чем Oracle» — интервью с Андреем Паньгиным из Одноклассников
14 min
24KСегодня я приготовил для вас большое интервью с Андреем Паньгиным aka apangin, ведущим инженером Одноклассников. Андрей больше 6 лет проработал JVM-инженером в Sun Microsystems, в том числе, в команде HotSpot, а последние 5 лет работает в Одноклассниках, решая там вопросы, связанные с JVM и производительностью. Так что Андрей по праву считается одним из сильнейших JVM-щиков в России.
Андрей — эксперт в системном программировании, занимался системами хранения и системами передачи информации. Складывал кирпичики, которые лежат в основе портала Одноклассники и обеспечивают надежность и быстродействие сервисов.
Вот о чем мы поговорили с Андреем:
(Я знаю, что начало затянутое. Будем работать над тем, чтобы быстрее раскачиваться и входить в тему.)
Для тех, кому опять некогда смотреть видео, под катом расшифровка интервью.
Андрей — эксперт в системном программировании, занимался системами хранения и системами передачи информации. Складывал кирпичики, которые лежат в основе портала Одноклассники и обеспечивают надежность и быстродействие сервисов.
Вот о чем мы поговорили с Андреем:
- чего стоит переезд с Java 7 на Java 8;
- что происходит с sun.misc.Unsafe;
- архитектура Одноклассников;
- инженерные компромиссы, шардинг и GC;
- системы хранения данных и Cassandra;
- в чем Одноклассники впереди планеты всей, а чему еще стоит поучиться у Google;
- как стать крутым системным программистом.
(Я знаю, что начало затянутое. Будем работать над тем, чтобы быстрее раскачиваться и входить в тему.)
Для тех, кому опять некогда смотреть видео, под катом расшифровка интервью.
+46
Патчим mysqldump в домашних условиях
2 min
14KБекапы это хорошо, а еще лучше когда они работают так как надо когда они нужны. На одном из проектов понадобилось восстановить дамп из 745 триггеров и накатить их на рабочую MySQL базу.
MySQL позволяет использовать любые имена триггеров, в том числе с использованием точек (например:
analitica.cron.indeg.y.run.a_insert
). А mysqldump при создании дампа не учитывает это обстоятельство и добавляет конструкцию для их дропа следующего вида:/*!50032 DROP TRIGGER IF EXISTS analitica.cron.indeg.y.run.a_insert */;
Подвох ожидает при попытке эти дампы накатить на базу где эти триггеры уже созданы. С точки зрения MySQL этот запрос не дропнет триггер, потому что не найдет триггер с таким именем. Для корректной работы имя триггера должно быть заключено в апострофы.
+10
Как HTTPS обеспечивает безопасность соединения: что должен знать каждый Web-разработчик
9 min
365KTranslation
Как же все-таки работает HTTPS? Это вопрос, над которым я бился несколько дней в своем рабочем проекте.
Будучи Web-разработчиком, я понимал, что использование HTTPS для защиты пользовательских данных – это очень и очень хорошая идея, но у меня никогда не было кристального понимания, как HTTPS на самом деле устроен.
Как данные защищаются? Как клиент и сервер могут установить безопасное соединение, если кто-то уже прослушивает их канал? Что такое сертификат безопасности и почему я должен кому-то платить, чтобы получить его?
+153
Доступна Android Studio 1.4
4 min
45KНесколько дней назад стала доступна Android Studio 1.4 на Stable Channel, привнёсшая ряд удобных новшеств в инструментарий Android разработчика. Тех, кто еще не успел ознакомиться с нововведениями, прошу под кат.
+28
Information
- Rating
- Does not participate
- Registered
- Activity