Как стать автором
Обновить
179
0
Алексей @Scratch

Системный архитектор, криптоманьяк

Отправить сообщение

OpenVPN на Android: прозрачное переключение между WiFi и «Мобильными данными» без разрыва соединений

Время на прочтение4 мин
Количество просмотров35K
Здравствуйте, разрешите поделиться своим опытом.

Есть приложения критичные к разрывам связи, переподключение происходит мучительно и вообще не всегда. Поставил перед собой цель, сделать прыжки маршрутов и физических подключений прозрачными, что бы связь была постоянной и TCP коннект не рвался.
Читать дальше →
Всего голосов 26: ↑22 и ↓4+18
Комментарии5

Маленькая хитрость для отображения большого объёма данных в ListView

Время на прочтение4 мин
Количество просмотров41K


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

Проблема


Стандартный механизм отображения списков из базы данных в Android выглядит примерно так:
  • Activity содержит ListView
  • ListView обращается к экземпляру CursorAdapter
  • CursorAdapter получает данные из объекта, реализующего интерфейс Cursor
  • Cursor получен либо из ContentProvider, либо сразу из SQLiteDatabase


Всё работает нормально ровно да тех пор, пока количество строк в Cursor сравнительно небольшое. Но если в нём 50 тысяч, 100 тысяч и более строк (хотя дело не только в количестве строк, но об этом чуть позже), время от времени список будет притормаживать. Особенно это заметно при «быстрой прокрутке», если у ListView установлено в true свойство fastScrollEnabled.
Читать дальше →
Всего голосов 49: ↑46 и ↓3+43
Комментарии26

Doppio — JVM, Компилятор и дизассемблер в JavaScript

Время на прочтение2 мин
Количество просмотров9K
На сегодняшний день мы не испытываем недостатка в прекрасных вещах, которые написаны на JavaScript. Да и реализации JVM в JavaScript мы уже видели. Теме не менее, Doppio представляет собой наиболее полную и активно развивающуюся JVM.


Читать дальше →
Всего голосов 29: ↑26 и ↓3+23
Комментарии23

Радиоприемник 60-1700 МГц на RTL2832 за 20 баксов или SDR для начинающих

Время на прочтение4 мин
Количество просмотров326K
В этой статье я расскажу о том, как, потратив совсем небольшие деньги и немного времени, получить радиоприемник, способный принимать что угодно в диапазоне 60-1700 МГц (радиостанции, звуковое сопровождение ТВ, радиолюбителей, карманные радиостанции и многое другое). Для этого
мы используем DVB-тюнер на чипе RTL2832, работающий в специальном режиме, который можно приобрести за $20 или даже дешевле.


Читать дальше →
Всего голосов 94: ↑91 и ↓3+88
Комментарии108

Запускаем Java-программы на GPU

Время на прочтение1 мин
Количество просмотров17K
На Github выложен исходный код компилятора Rootbeer, с помощью которого можно почти любой Java-код запустить на графическом процессоре, а также легко разделить Java-программу на фрагменты для CPU/GPU.

Компилятор опубликован под лицензией MIT, он прошёл тщательное тестирование и вполне пригоден для использования. По словам автора, это самый продвинутый транслятор байткода Java на платформу CUDA. Судя по всему, OpenCL тоже поддерживается.

Автор программы — преподаватель Сиракузского университета Фил Пратт-Желига (Phil Pratt-Szeliga).
Читать дальше →
Всего голосов 41: ↑39 и ↓2+37
Комментарии37

Темный Eclipse Juno?

Время на прочтение1 мин
Количество просмотров36K
Вы — любитель темных тем для Eclipse?
Да и не только Eclipse, а вообще по жизни?

Я думаю, вам знакома проблема: после обновления с Eclipse 3.X на Eclipse 4.2 Juno, он выглядел, мягко говоря, хреново:


А все почему? А потому-что у нас велосипеда не было.
Но в Juno появился прекрасный байк: CSS стили для SWT виджетов.
Читать дальше →
Всего голосов 39: ↑28 и ↓11+17
Комментарии20

Я переучиваю людей на Java-программистов

Время на прочтение8 мин
Количество просмотров134K

Когда я вижу друзей, которые вкалывают в два раза больше, а зарабатывают в четыре раза меньше, каждый раз начинается разговор:
— А ты бы не хотел поработать программистом? Ты же реально умный. Может ты просто не на своем месте?

В результате я переучиваю своих друзей и знакомых на программистов. Весь процесс занимает от двух до трех месяцев. 25 уроков по 4 часа. Потом все смогли устроиться программистами.
Эта статья не о том, как надо учить, скорее просто описание процесса, который работает.
Читать дальше →
Всего голосов 351: ↑232 и ↓119+113
Комментарии464

Командный паттерн вызова удаленных процедур (RPC) в Android

Время на прочтение15 мин
Количество просмотров7.5K

Предисловие



Недавно я начал свое знакомство с платформой Android. На определенном этапе необходимо было проверить, как тут обстоят дела с удаленным вызовом процедур или, проще говоря, клиент-серверным взаимодействием.

Поначалу была надежда, что платформа позволит использовать технологию EJB. После некоторых поисков в Интернете, я убедился, что это не так просто. Большинство источников рекомендовало использовать вебсервисы как альтернативу, т.к. EJB слишком тяжеловесна для Android. Для вебсервисов же рекомендовался фреймворк ksoap2-android.

Понатыкавшись на различные грабли при первоначальном изучении ksoap2, я дошел до этапа, когда необходимо было послать и получить с сервера объект своего кастомного типа. Воспользовавшись поиском нашел вот эту статью. Оттуда почерпнул, что каждый кастомный объект должен реализовать интерфейс KvmSerializable. Это же подразумевало, что мы должны реализовать методы для сериализации и десериализации объекта. Поскольку в теории предполагалось использовать больше сотни собственных объектов, идея писать реализацию KvmSerializable для каждого из них как-то не вызывала у меня энтузиазма.
Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Комментарии21

Firefox 15 поддерживает свободный аудиоформат Opus

Время на прочтение2 мин
Количество просмотров5.2K
В браузере Firefox 15 (бета-версия) реализована поддержка свободного аудиоформата Opus. Этот кодек недавно приняли для рассмотрения в качестве стандарта организацией IETF, он качественно превосходит любые другие стандарты кодирования и передачи звука.


Читать дальше →
Всего голосов 66: ↑59 и ↓7+52
Комментарии122

Простой многопоточный тип доступа к данным и атомарные переменные

Время на прочтение6 мин
Количество просмотров20K
Автор: Alexander Sandler, оригинал статьи (23 декабря 2008)

Введение


В этой статье мне бы хотелось продолжить тему, начатую в моих предыдущих постах (см. ниже — прим. пер.). Вопрос, на который я попытаюсь ответить — что является наиболее эффективным и безопасным способом доступа к переменным простого типа данных из двух или более потоков. То есть, как изменить переменную из двух потоков одновременно, не нарушив ее значения.
Читать дальше →
Всего голосов 18: ↑17 и ↓1+16
Комментарии2

FLAC-декодер на Javascript

Время на прочтение1 мин
Количество просмотров5.9K
Ребята из Official.fm Labs задумали совершить настоящую звуковую революцию в вебе: две недели назад они выпустили FLAC.js — декодер аудиофайлов формата FLAC (Free Lossless Audio Codec), а также Aurora.js — фреймворк на CoffeeScript для простого подключения декодеров и создания веб-приложений, работающих со звуком. Таким образом, через Web Audio API теперь можно слушать музыку в идеальном качестве, и все веб-приложения могут обращаться к звуковой карте стандартным образом.

Демо

JavaScript уже так могуч, что браузер декодирует звук, потребляя менее 5% ресурсов CPU. Можно представить, какие крутые звуковые редакторы, миксеры и прочие аудиоприложения появятся в вебе в ближайшее время.
Всего голосов 97: ↑89 и ↓8+81
Комментарии62

Тестовое задание для Связного FixedThreadPool на C#. Что здесь не так? UPD

Время на прочтение25 мин
Количество просмотров11K
UPDATE: Я не мог отказать себе в удовольствии исправить свой ошибочный код. Добавил раздел «Работа над ошибками», в котором привожу исправленный код и описание исправлений, основанное на полученных комментариях.

Это скорее пост-вопрос к специалистам, нежели просто кусок полезной информации. Приглашаю к дискуссии.
Недавно я имел счастье послать своё резюме в Связной на позицию .NET разработчика. В ответ меня попросили сделать тестовое задание на знание многопоточности. Я не могу назвать себя экспертом в этой области, но, тем не менее, прекрасно понял, как мне показалось, как реализовать следующие требования:

Требуется реализация класса на языке C#, аналогичного FixedThreadPool в Java, со следующими требованиями:
  • В конструктор этого класса должно передаваться количество потоков, которые будут выполнять задачи.
  • Интерфейс класса должен предоставлять методы: boolean execute(Task task, Priority priority) и void stop()
  • Интерфейс Task должен содержать один метод: void execute(), который вызывается в произвольном потоке.
  • Тип Priority — это перечисление из трёх приоритетов: HIGH, NORMAL, LOW. При этом во время выбора следующего задания из очереди действуют такие правила: на три задачи с приоритетом HIGH выполняется одна задача с приоритетом NORMAL, задачи с приоритетом LOW не выполняются, пока в очереди есть хоть одна задача с другим приоритетом.
  • До вызова метода stop() задачи ставятся в очередь на выполнение и метод boolean execute(Task task, Priority priority) сразу же возвращает true, не дожидаясь завершения выполнения задачи; а после вызова stop() новые задачи не добавляются в очередь на выполнение, и метод boolean execute(Task task, Priority priority) сразу же возвращает false.
  • Метод stop() ожидает завершения всех текущих задач (не очищая очередь).


Поскольку в задании не было сказано какими примитивами я должен пользоваться, должен ли сделать всё на простейших Thread или же использовать ThreadPool, TPL и т.п., я решил, что задание предполагает использование самых базовых элементов: Thread, ManualResetEvents и т.п. Написал за несколько часов, отослал. Сегодня позвонил и получил ответ через кадровика, который звучал примерно так: «это даже не близко к том, что надо». Это меня озадачило, ибо код работает и протестирован, явных огрехов, на мой взгляд нету.

Итак, на ваш суд представляю мою реализацию FixedThreadPool и сопутствующих классов. Сразу предупреждаю, что, по их мнению реализация ошибочна, и, соответственно, брать мою идею за основу не стоит. Некоторые коментарии по коду:

  • я решил инкапсулировать потоки задач в самом классе задачи,
  • два параметра с типом ILog нужны только для тестовых целей, к основной функциональности они, понятное дело, отношения не имеют,
  • весь проект, включая тестовое приложение можно загрузкить по ссылке (27 килобайт): тестовый проект на ifolder

Читать дальше →
Всего голосов 41: ↑27 и ↓14+13
Комментарии51

Статья Ади Шамира ID-Based

Время на прочтение3 мин
Количество просмотров3.9K
Предисловие

Шамир Ади – израильский криптоаналитик, профессор информатики и прикладной математики института Вейцмана, лауреат премии Тьюринга. Является одним их трех создателей знаменитой криптосистемы RSA.В 1984 году Шамир пишет статью о новой криптосистеме, называемой ID-Based Cryptography ( личностная криптография).
Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии8

Что нужно знать про арифметику с плавающей запятой

Время на прочтение14 мин
Количество просмотров969K


В далекие времена, для IT-индустрии это 70-е годы прошлого века, ученые-математики (так раньше назывались программисты) сражались как Дон-Кихоты в неравном бою с компьютерами, которые тогда были размером с маленькие ветряные мельницы. Задачи ставились серьезные: поиск вражеских подлодок в океане по снимкам с орбиты, расчет баллистики ракет дальнего действия, и прочее. Для их решения компьютер должен оперировать действительными числами, которых, как известно, континуум, тогда как память конечна. Поэтому приходится отображать этот континуум на конечное множество нулей и единиц. В поисках компромисса между скоростью, размером и точностью представления ученые предложили числа с плавающей запятой (или плавающей точкой, если по-буржуйски).

Арифметика с плавающей запятой почему-то считается экзотической областью компьютерных наук, учитывая, что соответствующие типы данных присутствуют в каждом языке программирования. Я сам, если честно, никогда не придавал особого значения компьютерной арифметике, пока решая одну и ту же задачу на CPU и GPU получил разный результат. Оказалось, что в потайных углах этой области скрываются очень любопытные и странные явления: некоммутативность и неассоциативность арифметических операций, ноль со знаком, разность неравных чисел дает ноль, и прочее. Корни этого айсберга уходят глубоко в математику, а я под катом постараюсь обрисовать лишь то, что лежит на поверхности.
Читать дальше →
Всего голосов 245: ↑242 и ↓3+239
Комментарии75

Кортежи объектов в Java и их коллекции

Время на прочтение8 мин
Количество просмотров34K
Достаточно часто на практике возникает необходимость воспользоваться такими конструкциями как «пара» (Pair<First, Second>), менее часто «тринарными» объектами (Triplet<First, Second, Third>) и более длинными цепочками ассоциированных объектов. В связи с чем всегда удивлялся, почему в JDK (в java.lang.* или java.util.*) до настоящего момента нет стандартной Pair<First, Second> или более длинных конструкций. Думаю многие программисты практикующие на Java имеют свою реализацию «пары». Не исключением являюсь и я.

И вот в очередной раз наткнувшись на необходимость работать с большим количеством различных кортежей, решил взяться за эту проблему системно. Придумал название проекту, определил цели и после экспериментов, занявших некоторое время, выложил код ( git://github.com/telesik/rumba.git ).

Чего хотелось достичь:
  • Необходима удобная конструкция (назовем ее кортеж) для ассоциации нескольких объектов, типы которых определялись бы из позиции в полученном кортеже;
  • Кортеж должен быть неограниченным по длине и типу;
  • Типы элементов должны быть относительно контролируемым (как минимум ограничен дженериками);
  • Описание структуры кортежа должно быть простым;
Читать дальше →
Всего голосов 18: ↑12 и ↓6+6
Комментарии30

Вычисление CRC32 строк в compile-time

Время на прочтение5 мин
Количество просмотров19K
По своей программистской природе я очень не люблю неоптимальность и избыточность в коде. И вот, читая в очередной раз на работе исходный код нашего проекта, вновь наткнулся на одну особенность в способе реализации перевода строк продукта на разные языки.

Локализация здесь осуществляется довольно нехитро. Все строки, требующие перевода, оборачиваются в макрос _TR():
wprintf(L"%s\n", _TR("Some translating string"));

Макрос возвращает нужную версию текста в зависимости от текущего используемого языка. Определён он следующим образом:
#define _TR(x) g_Translator.Translate(x)

Здесь происходит обращение к глобальному объекту g_Translator, который в функции Translate() считает в рантайме crc32 от указанной строки, ищет в своей xml-базе перевод с совпадающей контрольной суммой и возвращает его.

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

Немного погуглив по запросу «compile-time crc32» я быстро понял, что задача это не самая тривиальная, а готовых решений мне найти так и не удалось.
Читать дальше →
Всего голосов 60: ↑53 и ↓7+46
Комментарии35

davfs2 и encfs на box.com

Время на прочтение6 мин
Количество просмотров17K
Здравствуй хабраменш,

Хочу поделиться с тобой сокровенными знаниями, а также пополнить запасы своих. Так вот, все началось с того, что проект syncany.org умер не родившись, ну или по крайней мере, судя по активности, разродится еще не скоро. Так как сил ждать больше не было, то решил я воспользоваться уже существующими и работающими методами для организации удаленного облачного файлохранилища (в дальнейшем УФХ) с открытым клиентом, а также с шифрацией на стороне клиента. Все что написано дальше имеет отношение к юниксоподобным операционным системам, поэтому пользователям ОС Виндовс дальнейшее изложение можно пропустить.
Читать дальше →
Всего голосов 20: ↑17 и ↓3+14
Комментарии15

О детектировании атак типа drive-by download и новых векторах распространения вредоносного ПО через Flash-баннеры

Время на прочтение8 мин
Количество просмотров13K
Сегодня мы хотим рассказать вам о новом виде drive-by download атаки с помощью Flash-баннеров, и о том, как с ним бороться. Такая атака позволяет злоумышленникам распространять вирусы через сайт, не взламывая его. Вредоносное ПО распространяется через рекламные Flash-баннеры, с помощью которых веб-мастера хотят монетизировать свой сайт. При этом они сами могут не подозревать, что установленный на веб-странице баннер сделал их портал частью сети распространения вирусов.

Вредоносный код
Выполнение вредоносного JavaScript-кода, например, в контексте веб-браузера, возможно благодаря принадлежащего классу ExternalInterface методу call(), который появился в версии ActionScript 3.0. Процесс выполнения JavaScript-кода в контексте веб-браузеров, поддерживающих возможность работы с ActiveX, реализуется через компонент ActiveX для Shockwave Flash. А для веб-браузеров без такой возможности используется плагин для Shockwave Flash. Компонент ActiveX или плагин разбирает байткод переданного ему на обработку Flash-файла и формирует JavaScript-код, который будет выполнен в контексте веб-браузера, если во Flash-файле присутствует такой функционал. После того как JavaScript-код сформирован, происходит его дальнейшая передача на обработку через функции JavaScript, заранее заложенные в компоненте ActiveX или плагине для Shockwave Flash. На рисунке 1 показан список таких функций.

image

Рис.1 – JavaScript-функции, с использованием которых происходит формирование и дальнейшее выполнение кода, переданного в ExcternalInterface.call()

Ниже показан безвредный JavaScript-код тестового Flash-баннера, сформированный для выполнения в контексте веб-браузера компонентом ActiveX или плагином для Shockwave Flash.

Читать дальше →
Всего голосов 49: ↑42 и ↓7+35
Комментарии14

Android портирован на C#

Время на прочтение1 мин
Количество просмотров32K
В разгар битвы между Oracle и Google за право использовать Java/Dalvik в системе Android, компания Xamarin представила альтернативу — более производительную и энергоэффективную версию Android на С#. Тесты производительности говорят сами за себя.



В отличие от Sun и языка Java, компания Microsoft направила C# и .NET VM для стандартизации в ECMA, система защищена от патентных исков строгими требованиями ISO, а также обязательством Microsoft.
Читать дальше →
Всего голосов 224: ↑201 и ↓23+178
Комментарии294

Функциональное программирование для всех

Время на прочтение33 мин
Количество просмотров353K

Доброго времени суток. Это статья — перевод заинтересовавшего меня поста в блоге аспиранта Университета штата Нью-Йорк в Стоуни-Брук. Статья в доступной форме описывает основные концепции функционального программирования, их преимущества и недостатки. Думаю она будет полезна широкому кругу читателей, которые сомневаются, нужно ли им углубляться в мир функционального программирования или нет. Пожелания, предложения и замечания по переводу и терминологии принимаются по личной почте.

Мнение переводчика может иногда не совпадать с мнением автора, но переводить статью было крайне занимательно.

UPD: альтернативный вариант перевода вы можете найти на rsdn (спасибо flamingo за ссылку).
Читать дальше →
Всего голосов 188: ↑181 и ↓7+174
Комментарии151

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность