Обновить
Козлов Василий Иосифович@saintbyteread⁠-⁠only

Пользователь

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

Разработка своей системы биллинга на Django

Время на прочтение4 мин
Охват и читатели37K
При разработке большинства сервисов возникает потребность во внутреннем биллинге для аккаунтов сервиса. Так и в нашем сервисе возникла такая задача. Готовые пакеты для её решения мы так и не смогли найти, в итоге пришлось разрабатывать систему биллинга с нуля.
В статье хочу рассказать о нашем опыте и подводных камнях, с которыми пришлось столкнуться во время разработки.

Задачи

Задачи, которые нам предстояло решить были типичны для любой системы денежного учета: прием платежей, лог транзакций, оплата и повторяющиеся платежи (подписка).
Читать дальше →

Геолокация без GPS (часть 1)

Время на прочтение2 мин
Охват и читатели61K
wifi
Представляю публичную базу геопозиций телефонных вышек и Wi-Fi роутеров. Мне понадобилась стабильная и безлимитная база для приложения Android, в котором нужна была точная геолокация из всех доступных источников (GPS, Wi-Fi, Mobile). Пришлось создать базу данных положений сотовых вышек и Wi-Fi. Всех заинтересовавшихся прошу под кат.
Читать дальше →

Кастомные функции SQLite Android или своя LOWER_FNC()

Время на прочтение5 мин
Охват и читатели9.2K
SELECT * WHERE LOWER_FNC(name) like '%" + filterText + "%'"

При разработке Android приложения столкнулся с проблемой в запросе SQLite фильтра с русскими буквами. Для английской локализации проблем нет. Для других интернациональных раскладок некорректно обрабатывались заглавные буквы в запросе.
Немного разобравшись я наткнулся на следующее описание:

(18) Case-insensitive matching of Unicode characters does not work.

The default configuration of SQLite only supports case-insensitive comparisons of ASCII characters. The reason for this is that doing full Unicode case-insensitive comparisons and case conversions requires tables and logic that would nearly double the size of the SQLite library. The SQLite developers reason that any application that needs full Unicode case support probably already has the necessary tables and functions and so SQLite should not take up space to duplicate this ability.

Instead of providing full Unicode case support by default, SQLite provides the ability to link against external Unicode comparison and conversion routines.

Вероятно текущая реализация SQLite Android и есть
only supports case-insensitive comparisons of ASCII characters


Видел решение через CursorWrapper но решил все таки собрать свою версию SQLite и использовать addCustomFunction

Что из этого получилось читайте под катом
Читать дальше →

QIWI терминалы. Тёмная сторона Луны

Время на прочтение15 мин
Охват и читатели212K
Шёл 2013-й год. Я тихо занимался ремонтом компьютеров в сельской местности. Гоняя чаи и закусывая сезоном очередного сериала. Как-то раз мой начальник предложил заняться платёжными терминалами. Ему их практически даром отдавал знакомый предприниматель, плюс предлагал устанавливать в его же магазинах на безвозмездной основе. Они, кстати, там же и стояли, просто их хозяину надоело с ними возиться.

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

Возразить было нечего, к тому же у меня уже был опыт поддержки подобной системы Windows XP, VPN, файло-помойка, плюс один удаленный клиент на wi-fi, где было важно, чтобы компьютер всегда был включен и доступен.
Читать дальше →

Как я имплантировал RFID себе в руку, а потом еще NFC. Часть 1

Время на прочтение6 мин
Охват и читатели143K


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

Поэтому, как только появилась возможность разместить под собственной кожей RFID, совместимый хоть с чем-нибудь общеупотребимым, я это и сделал, имплантировав метку EM4100 — множество дешевых замков и систем контроля доступа используют его.

А когда обнаружилась метка, совместимая с NFC — и способная быть ключом к ноутбукам, смартфонам и оставшимся замкам — избегать ее встраивания причин решительно не было.
Что я сделал и как это работает

Архитектура Android-приложений… Правильный путь?

Время на прочтение5 мин
Охват и читатели96K
От переводчика: Некоторые термины, которые использует автор, не имеют общепринятого перевода (ну, или я его не знаю:), поэтому я решил оставить большинство на языке оригинала — они всё равно понятны и для тех, кто пишет под android, но не знает английский.
Куда писать об ошибках и неточностях, вы знаете.


За последние несколько месяцев, а также после дискуссий на Tuenti с коллегами вроде @pedro_g_s и @flipper83 (кстати говоря, 2 крутых Android-разработчика), я решил, что имеет смысл написать заметку о проектировании Android-приложений.

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

300 потрясающих бесплатных сервисов

Время на прочтение11 мин
Охват и читатели1.6M


Автор оригинальной статьи Ali Mese добавил ещё 100 новых бесплатных сервисов. Все 400 потрясающих сервисов доступны здесь. И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



A. Бесплатные Веб-Сайты + Логотипы + Хостинг + Выставление Счета

  • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
  • Bootswatch: Бесплатные темы для Bootstrap.
  • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
  • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
  • Strikingly.com Domain: Конструктор веб-сайтов.
  • Logaster: Онлайн генератор логотипов и элементов фирменного стиля (new).
  • Withoomph: Мгновенное создание логотипов (англ.).
  • Hipster Logo Generator: Генератор хипстерских логотипов.
  • Squarespace Free Logo: Можно скачать бесплатную версию в маленьком разрешении.
  • Invoice to me: Бесплатный генератор счета.
  • Free Invoice Generator: Альтернативный бесплатный генератор счета.
  • Slimvoice: Невероятно простой счет.

Читать дальше →

14 вопросов об индексах в SQL Server, которые вы стеснялись задать

Время на прочтение26 мин
Охват и читатели1.2M
Индексы — это первое, что необходимо хорошо понимать в работе SQL Server, но странным образом базовые вопросы не слишком часто задаются на форумах и получают не так уж много ответов.
Роб Шелдон отвечает на эти, вызывающие смущение в профессиональных кругах, вопросы об индексах в SQL Server: одни из них мы просто стесняемся задать, а прежде чем задать другие сначала подумаем дважды.


От переводчика
Данный пост является компиляцией двух статей Роба Шелдона:

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

Перейти к чтению

Беспилотник на базе Raspberry Pi. Часть 1

Время на прочтение2 мин
Охват и читатели116K
Привет, %хабраюзер%. Хочу поделиться историей о своем беспилотнике (БЛА) на малинке.

Перед тем, как начать делать беспилотник, стоял выбор, какую летательную модель брать за основу: квадракоптер или самолет? Так как с коптерами я в свое время наигрался, знаю их основной минус: чаще всего время полета составляет 10-20 минут. Лично для меня это очень мало, поэтому было решено взять за основу самолет.

Читать дальше →

Диапазоны Landsat 8 в работе

Время на прочтение6 мин
Охват и читатели86K
Перед вами изображение Лос-Анджелеса, снятое словно бы обычной цифровой камерой (если бы в ней было в 10 раз больше мегапикселей и она находилась в космосе). Это фотография двухнедельной давности, снятая со спутника Landsat 8, который был запущен NASA в конце зимы. Landsat 8 уже стал одним из наших любимых источников данных, и не только наших: на конференции State of the map на прошлых выходных он проскакивал в разговорах людей, занимающихся самыми разными вещами. Помимо добавления свежих полноцветных фотографий с Landsat 8 в MapBox Satellite мы также используем мультиспектральные данные, которые предоставляет спутник. Данные из невидимых диапазонов спектра позволяют нам анализировать множество разных аспектов, начиная с типов поверхности, заканчивая ростом сельскохозяйственных культур и природными катастрофами по всему миру, иногда в течении нескольких часов. Этот пост описывает некоторые из возможностей Landsat 8 и позволяет взглянуть на мир через его объектив.

image

Читать дальше →

Как я писал клиент PeerJS(WebRTC) под Android

Время на прочтение13 мин
Охват и читатели14K
Недавно пришлось писать клиентское приложение на Android для сервера, который организовал видеосвязь между пользователями с помощью библиотеки PeerJS. Эта библиотека является надстройкой над WebRTC, ну или что-то типо того.

Подошел к делу с энтузиазмом, так как до этого ничего такого сложного не делал.
Естественно, первым шагом был поиск библиотек, проектов, которые реализуют такой функционал.
Нашел sample WebRTC, но потом обнаружил проект, который попроще все это реализовывал.
Читать дальше →

Почему вам НЕ стоит использовать AngularJs

Время на прочтение12 мин
Охват и читатели249K
Много времени прошло с момента появления AngularJs (в масштабах веб-технологий конечно). Сейчас в интернетах есть огромное количество постов восхваляющих этот фреймворк до небес, что это манна небесная не иначе, а критики не так уж и много как он того заслуживает. Но такие статьи уже потихоньку начинают появляться, и меня это радует, надеюсь индустрия переболеет ангуляром так же, как переболела MooTools, Prototype, %какой-нибудь новый язык под JVM%, %другая-супер-революционная-технология%. Не знаю почему, но в IT-области такие революционные технологии, которые поднимают шум, а потом пропадают, появляются довольно часто. Хороший разработчик должен уметь отличать очередную модную технологию, от работающего инструмента. И для этого очень важно критически смотреть на вещи. Моя статья — это компиляция самых весомых выводов из других статей, и моих личных умозаключений. Ангуляр создает хороший вау-эффект, когда видишь его впервые: «ух ты, я написал ng-repeat, и реализовал эту логику одними тегами и все само обновляется!», но как только приходится реализовывать реальные приложения, а не очередной TODO-лист, то все становиться очень печально. Сразу хочу сказать, что фреймворк я знаю хорошо, даже больше чем мне хотелось бы его знать, я программировал на нем в течении 2 лет. И для следующего проекта я его точно не выберу, и это хорошо, все мы учимся на ошибках. Так что же не так с ангуляром? Тут нет однозначного ответа, слишком много разных недостатков, которые создают такой облик фреймворку. Если одним словом – непродуманная архитектура. Под катом я привожу конкретику, так что устраивайтесь поудобнее. ДА НАЧНЕТСЯ ХОЛЛИ ВАР!
Читать дальше →

SuperDuino: миниатюрная плата с цветным дисплеем и акселерометром, совместимая с Arduino

Время на прочтение2 мин
Охват и читатели24K


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

Одним из интересных проектов последнего времени является SuperDuino. Это миниатюрная плата (действительно миниатюрная), которая поставляется с цветным дисплеем и акселерометром. Недавно разработчики запустили кампанию на Kickstarter, по сбору средств на массовый выпуск SuperDuino, и к моменту завершения кампании было собрано в 12 раз больше денег, чем планировалось.

Читать дальше →

Несколько интересных особенностей MySQL

Время на прочтение8 мин
Охват и читатели64K
В не очень далеком прошлом мне пришлось покопаться немного в исходном коде MySQL, и разобраться в некоторых аспектах его работы. В ходе работы лопаткой, и эксперимeнтов, я наткнулся на несколько очень интересных особенностей, часть из которых просто забавна, а в случае некоторых бывает очень интересно понять, чем руководствовался программист, который принимал решение сделать именно так.

Начнем с такого интересного типа, как ENUM.

mysql> CREATE TABLE enums(a ENUM('c', 'a', 'b'), b INT, KEY(a));
Query OK, 0 rows affected (0.36 sec)

mysql> INSERT INTO enums VALUES('a', 1), ('b', 1), ('c', 1);
Query OK, 3 rows affected (0.05 sec)
Records: 3  Duplicates: 0  Warnings: 0


Итак, у нас есть таблица, в ней есть два столбца. У первого, a, тип ENUM, у второго, b, INT. В таблице три строки, у всех трех значение b равно 1. Интересно, чему равны минимальный и максимальный элементы в столбце a?

mysql> SELECT MIN(a), MAX(a) FROM enums;
+--------+--------+
| MIN(a) | MAX(a) |
+--------+--------+
| c      | b      |
+--------+--------+
1 row in set (0.00 sec)


Кажется странным, было бы разумно, если бы самым маленьким был 'a', а самым большим — 'c'.
А что если выбрать минимум и максимум только среди тех строк, где b = 1? То есть, среди всех строк?

mysql> SELECT MIN(a), MAX(a) FROM enums WHERE b = 1;
+--------+--------+
| MIN(a) | MAX(a) |
+--------+--------+
| a      | c      |
+--------+--------+
1 row in set (0.00 sec)


Вот так мы заставили MySQL поменять свое мнение о том, как сравнивать поля в ENUM, просто добавив предикат.
Разгадка такого поведения заключается в том, что в первом случае MySQL использует индекс, а во втором нет. Это, конечно, не объясняет, почему MySQL сравнивает ENUMы по разному для сортировки в индексе, и при обычном сравнении.

Второй пример проще и лаконичнее:

mysql> (SELECT * FROM moo LIMIT 1) LIMIT 2;
+------+
| a    |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)


Когда я показал этот запрос своему коллеге, который занимается разработкой парсера SQL, его вопрос был не «почему этот запрос возвращает две строки», а «как надо написать SQL парсер так, чтобы такой запрос был валидным, без того, чтобы написать правило, специально разрешающее такой запрос».

Интересно, что далеко не любой SELECT в скобках сработает, в частности, UNION в скобках — это синтаксическая ошибка:

mysql> (SELECT * FROM moo UNION ALL SELECT * FROM hru) LIMIT 2;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION ALL SELECT * FROM hru) LIMIT 2' at line 1


Еще несколько интересных примеров под катом
Читать дальше →

W for Wikipedia

Время на прочтение11 мин
Охват и читатели14K
Что такое «BigData»? Это те данные, которые нельзя просто так переварить. Или нельзя просто так приготовить. Или это вы думаете что нельзя.
Особо сильный «перекос», в этом понимании бигдаты спрятался в web-картографии, в картах на различных сайтах.
И так уж получилось — на протяжении нескольких лет я катался по различным конференциям, и рассказывал про организацию передачи данных с сервера на Карту. Иногда меня спрашивали — «а где же взять эти ваши много данных».
Это не правильные вопросы, правильные вопросы это:
— как данные хранить
— какие данные, когда и почему передавать на клиент
— что такое серверная кластеризация, как она выглядит и почему она нужна
— что с данными делать
— и зачем это все нужно %username%

А насчет откуда взять данные… Есть один такой детский стишок

Весь покрытый метками
Абсолютно весь
Остров Википедии
В океане есть


И на этом острове растет примерно десять миллионов геотегированных статей, которыми мы и воспользуемся.
Но с флорой и фауной там не все так просто — статьи растут на разных языках, в разных местах, и их на само деле много…
Поэтому мы, как настоящие герои, немного усложним задачу и добавим немного агрегатных функций, Левенштайна, Мorton кодов, esosedi и немного здравого смысла.

Поехали!

Что такое утечки памяти в android, как проверить программу на их отсутствие и как предотвратить их появление

Время на прочтение14 мин
Охват и читатели91K
В этой статье для начинающих android-разработчиков я постараюсь рассказать о том, что такое «утечки памяти» в android, почему о них стоит думать на современных устройствах, выделяющих по 192МБ на приложение, как быстро найти и устранить эти утечки в малознакомом приложении и на что нужно обращать особое внимание при разработке любого приложения.


Конечная цель этой статьи — ответ на простой вопрос:
Куда нажать, чтобы узнать, какую строчку в приложении поправить?

Читать дальше →

Делаем собственную индикацию о входящем звонке

Время на прочтение4 мин
Охват и читатели49K
После последнего поста о нашем Android-приложении у некоторых читателей статьи возник вопрос, как именно показать собственную информационную плашку во время звонка? Ну что же, сегодня мы ответим на этот вопрос.
Пст, хотите немного java-кода?

Транслируем звук по сети с помощью Java

Время на прочтение5 мин
Охват и читатели36K
Стало мне интересно поэкспериментировать с передачей звука по сети.
Выбрал для этого технологию Java.
В итоге написал три компоненты — передатчик для Java SE, приемник для Java SE и приемник для Android.

В Java SE для работы со звуком использовались классы из пакета javax.sound.sampled, в Android — классы android.media.AudioFormat, android.media.AudioManager и android.media.AudioTrack.
Для работы с сетью — стандартные Socket и ServerSocket.

С помощью этих компонент удалось успешно провести сеанс голосовой связи между Дальним Востоком России и Нидерландами.

И еще одно возможное применение — если установить виртуальную звуковую карту, например, Virtual Audio Cable, можно транслировать музыку на другие устройства, и, таким образом, слушать музыку одновременно в нескольких комнатах квартиры (при наличии соответствующего количества девайсов).

Читать дальше →

100 приемов по управлению временем, вниманием и энергией

Время на прочтение15 мин
Охват и читатели299K
Примечание переводчика: Перевод первой статьи из блога «A Year of Productivity» был благосклонно встречен хабра-сообществом, и меня попросили перевести еще несколько статей из этого блога. Приведенная ниже статья — самая большая и самая близкая к практике, её перевод затянулся у меня на несколько месяцев. Как и прошлый раз рекомендую читать комфортными порциями, записывая (или копируя куда-нибудь) советы, которые хочется попробовать применить на практике.

«Хаки» времени


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

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

Для начала вот несколько моих любимых приемов по тому как:
-  получить больше времени;
-  тратить время на правильные вещи.
Читать дальше →

Рецепты Django. Part 1 — AJAX формы

Время на прочтение3 мин
Охват и читатели59K
Здравствуй, хабраюзер!

Возможно, у меня уже начался кризис среднего возраста, но летом я начал работу над крупным Open Source проектом. Впрочем, о нём немного позже, когда за код не будет стыдно. Итак, хочу поделиться рядом сниппетов, которые мне приходилось писать, чтобы соответсовать концепции DRYDon't Repeat Youself. Посему собираюсь написать несколько статей.
Кстати, можете обратить внимание на предыдущую мою статью.

Начну с реализации AJAX.


Сразу хочу оговориться — не так давно я нашёл на сайте джанги пример для реализации ajax формы. Как выяснилось, я сделал практически то же самое, однако я это сделал сам и я доволен=) Ниже я приведу свой пример и разберу его.
image

Прошу под кат.
Отследить полёт мысли

Информация

В рейтинге
Не участвует
Откуда
Екатеринбург, Свердловская обл., Россия
Дата рождения
Зарегистрирован
Активность