Pull to refresh
52
0
Максим @BugMaker

User

Send message

Как работает реляционная БД

Reading time 51 min
Views 534K
Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
Читать дальше →
Total votes 232: ↑229 and ↓3 +226
Comments 134

19 советов по повседневной работе с Git

Reading time 14 min
Views 285K


Если вы регулярно используете Git, то вам могут быть полезны практические советы из этой статьи. Если вы в этом пока новичок, то для начала вам лучше ознакомиться с Git Cheat Sheet. Скажем так, данная статья предназначена для тех, у кого есть опыт использования Git от трёх месяцев. Осторожно: траффик, большие картинки!

Содержание:
  1. Параметры для удобного просмотра лога
  2. Вывод актуальных изменений в файл
  3. Просмотр изменений в определённых строках файла
  4. Просмотр ещё не влитых в родительскую ветку изменений
  5. Извлечение файла из другой ветки
  6. Пара слов о ребейзе
  7. Сохранение структуры ветки после локального мержа
  8. Исправление последнего коммита вместо создания нового
  9. Три состояния в Git и переключение между ними
  10. Мягкая отмена коммитов
  11. Просмотр диффов для всего проекта (а не по одному файлу за раз) с помощью сторонних инструментов
  12. Игнорирование пробелов
  13. Добавление определённых изменений из файла
  14. Поиск и удаление старых веток
  15. Откладывание изменений определённых файлов
  16. Хорошие примечания к коммиту
  17. Автодополнения команд Git
  18. Создание алиасов для часто используемых команд
  19. Быстрый поиск плохого коммита

Читать дальше →
Total votes 152: ↑149 and ↓3 +146
Comments 62

Вариант реализации MVP + DI(Dagger 2) в Android

Reading time 5 min
Views 51K
С недавних пор заинтересовался данной темой и порылся в дебрях сети на эту тему. На англоязычных ресурсах есть раскиданная по разным местам информация. Прочитал все, что есть в рунете на эту тему. Ссылки приведу в конце статьи. В итоге, стал применять этот подход в своих приложениях.

Для начала, вспомним, что такое MVP. MVP — это паттерн, который позволяет «разбивать» приложение на три основных слоя (компонента):
  1. Модель (Model) — где сосредоточены данные;
  2. Представление (View) — интерфейс приложения (UI — элементы);
  3. Presenter — промежуточный компонент, который реализует связь между Моделью и Представлением.

image

MVP паттерн — это наследник более известного шаблона — MVC. Применение такого подхода позволяет отделить в приложении логику от интерфейса.
Читать дальше →
Total votes 14: ↑12 and ↓2 +10
Comments 6

Класс дедлоков про дедлок классов

Reading time 5 min
Views 38K


Знаете ли вы, как избежать дедлоков в своей программе? Да, этому учат, про это спрашивают на собеседованиях… И тем не менее, взаимные блокировки встречаются даже в популярных проектах серьёзных компаний вроде Google. А в Java есть особый класс дедлоков, связанный с инициализацией классов, простите за каламбур. Такие ошибки легко допустить, но трудно поймать, тем более, что сама виртуальная машина вводит программиста в заблуждение.

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

Читать дальше →
Total votes 45: ↑45 and ↓0 +45
Comments 16

Прототип. От идеи до опытной партии. Литье в силикон

Reading time 2 min
Views 182K
В прошлой статье я описал мой путь по созданию опытной партии изделия, в ней я литье в силикон отдал на аутсорс. Пока я ждал выполнения моего заказа, потихоньку сам начал осваивать это ремесло. Статья будет полезна тем, у кого допустим есть плата какого-нибудь девайса, но нету красивого корпуса, 3д-печать не подходит по характеристикам, а делать сразу промышленную пресс-форму очень дорого.


Читать дальше →
Total votes 168: ↑166 and ↓2 +164
Comments 75

Автоматизация процесса разработки под Android: начало

Reading time 4 min
Views 25K

Две недели назад закончилась Школа Автоматизации Процессов Разработки (ШАПР) в санкт-петербургском Яндексе.
Забегая вперёд, скажу, что преподавателям удалось главное: за неполных три месяца они «испортили» наше восприятие процесса разработки, как и обещали в начале Школы. Ручное тестирование и сборка начали жутко раздражать, вызывая мысли вроде «а ведь сейчас, вместо выполнения рутинных операций, я бы мог писать красивый код ...».

Подробнее о том, как им это удалось, можно прочитать здесь и ещё немного здесь.

В практической части обучения мы реализовали web-блог, на базе перечисленных по ссылке выше технологий.
Меня, как android-разработчика, заинтересовала возможность применения этих технологий и инструментов для организации Continuous Integration для Android.
Вдохновлённый докладом Алексея Коровянского на MBLTDev, и, особенно, результатами Google Test Automation Conference 2014 касательно тестирования Android-приложений, я реализовал упрощенный аналог нашего учебного проекта под другую платформу, перенеся туда всё что смог и успел. На этом предисловие заканчивается и начинается собственно описание автоматизации.
Читать дальше →
Total votes 22: ↑20 and ↓2 +18
Comments 3

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 5 из 6

Reading time 11 min
Views 66K

Содержание основного курса




Улучшение кода






Official translation (with a bit of polishing) is available here.




Пришла пора веселья, давайте для начала смотреть размер текущего кода:
  • geometry.cpp+.h — 218 строк
  • model.cpp+.h — 139 строк
  • our_gl.cpp+.h — 102 строки
  • main.cpp — 66 строк


Итого 525 строк. Ровно то, что я обещал в самом начале курса. И заметьте, что отрисовкой мы занимаемся только в our_gl и main, а это всего 168 строк, и нигде мы не вызывали сторонних библиотек, вся отрисовка сделана нами с нуля!
Я напоминаю, что мой код нужен только для финального сравнения с вашим работающим кодом! По-хорошему, вы всё должны написать с нуля, если следуете этому циклу статей. Очень прошу, делайте самые безумные шейдеры и выкладывайте в комментарии картинки!!!


Читать дальше →
Total votes 103: ↑98 and ↓5 +93
Comments 41

OEM-активация Windows Vista/7/8/8.1 под гипервизором QEMU

Reading time 6 min
Views 196K
OEM-версии ОС от Microsoft, начиная с Vista, используют проверку подлинности, основанную на сличении трех компонентов:

  • OEM-сертификата, вшитого в дистрибутив ОС
  • бинарного ключа, вшитого в BIOS, а конкретно — в таблицу ACPI SLIC
  • лицензионного 25-значного ключа производителя, вшитого в дистрибутив ОС

При успешном сличении трех этих компонентов происходит оффлайн-активация ОС. На корпусе ПК в этом случае имеется наклейка, содержащая лицензионный ключ конкретного экземпляра ОС (а не производителя), которым можно произвести онлайн-активацию ОС в случае ее установки не с образа, предоставляемого производителем ПК, а с «чистого» (MSDN) OEM-образа от Microsoft.

Кроме того, лицензионный ключ конкретного экземпляра ОС может быть вшит в текстовом виде в BIOS, в таблицу ACPI MSDM. В этом случае, при установке ОС ключ будет извлечен из BIOS и вшит в конкретный экземпляр ОС. OEM-наклейка на корпусе ноутбука в этом случае может уже не содержать лицензионный ключ. Такой способ используется для активации Windows 8/8.1
Читать дальше →
Total votes 30: ↑30 and ↓0 +30
Comments 22

Новый трек на Coursera: Mobile Cloud Computing with Android

Reading time 1 min
Views 7.6K
7 января на Coursera начинается трек курсов по специальности «Mobile Cloud Computing with Android». В текущем году аналогичный трек состоял из 3-х курсов — было интересно и полезно. В 2015 году их аж 6 (плюс дипломный проект) — судя по программам, изменений и дополнений много.

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

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

В общем, рекомендую!

Ссылка на трек: www.coursera.org/specialization/mobilecloudcomputing2/36
Total votes 16: ↑13 and ↓3 +10
Comments 12

[LibGDX] Создаем клон Flappy Bird — Zombie Bird

Reading time 127 min
Views 197K
Доброго времени суток %username%. Не давно наткнулся на хороший туториал по созданию клона игры Flappy Bird используя LibGDX и этот туториал мне понравился своей простотой и детализацией.

Я отдаю себе отчет, что тема создания клонов данной игрушки изъела себя, но возможно кому-то пригодится еще один хороший туториал.

Туториал разбит на 12 дней, содержит множество картинок, полотен кода и исходный код разбит по дням. Кому интересно, добро пожаловать под кат.
Подробнее
Total votes 111: ↑102 and ↓9 +93
Comments 29

Software renderer — 1: матчасть

Reading time 29 min
Views 83K
Программный рендеринг (software rendering) — это процесс построения изображения без помощи GPU. Этот процесс может идти в одном из двух режимов: в реальном времени (вычисление большого числа кадров в секунду — необходимо для интерактивных приложений, например, игр) и в «оффлайн» режиме (при котором время, которое может быть потрачено на вычисление одного кадра, не ограничено настолько строго — вычисления могут длиться часы или даже дни). Я буду рассматривать только режим рендеринга в реальном времени.

У этого подхода существуют как недостатки так и достоинства. Очевидным недостатком является производительность — CPU не в состоянии конкурировать с современными видеокартами в этой области. К достоинствам стоит причислить независимость от видеокарты — именно поэтому он используется как замена аппаратного рендеринга в случаях, когда видеокарта не поддерживает ту или иную возможность (так называемый software fallback). Существуют и проекты, цель которых — полностью заменить аппаратный рендеринг программным, например, WARP, входящий в состав Direct3D 11.

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

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

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

В конце статьи будет ссылка на гитхаб проекта, который можно рассматривать как пример реализации.
Читать дальше →
Total votes 95: ↑90 and ↓5 +85
Comments 51

RippleDrawable для Pre-L устройств

Reading time 9 min
Views 15K
image

Доброго времени суток!


Те, кто следил за Google IO/2014, знают о новом Material Design и новых фишках. Одной из них является пульсирующий эффект при нажатии. Вчера я решил его портировать для старых устройств.
Читать дальше →
Total votes 27: ↑26 and ↓1 +25
Comments 16

Увеличиваем новый таможенный лимит в 6,(6) раз

Reading time 2 min
Views 174K
image

Есть еще люди в селениях, которые получают рассылку от динозавра mail-forwarding'а — Shipito. Недавно их CEO — Джон Ванхара — развел руками перед грядущим приговором всем «пересыльщикам и доставщикам», о чем на хабре уже написали.

К сожалению, а может и к счастью, Джон не смог адаптироваться к быстро меняющемуся рынку интернет-доставки, в итоге Шипито сейчас пользуются лишь крайне инерционные люди, остальные же успели перейти к форвардерам с русскими корнями.
Ну а наши соотечественники не подкачали! Как многие уже могут знать, компания Shopfans анонcировала новый метод доставки Алтын-Экспресс с уже привычным лимитом €1000 через Казахстан.

Мне удалось взять небольшой комментарий у основателя сервиса, и вот, что он рассказал
Читать дальше →
Total votes 142: ↑134 and ↓8 +126
Comments 80

Действительно мощный и компактный ПК

Reading time 2 min
Views 197K
Некоторые новинки очень настораживают. Это то открытый ноутбук без клавиатуры и без диска за $1'995 на базе слабого ARM процессора, то «универсальный» и «мощный» ПК Tango размером со смартфон за $350, фактически совершенно бесполезный без второй док-станции, которая стоит как половина этого ПК, в том случае если всё-таки носить вычислительный модуль между работой и домом.

Я давно присматриваюсь заменить свой ноутбук на что-то, причём ноутбуки с момента появления планшета меня как таковые интересовать совершенно перестали.
Хотелось что-то совсем компактное, и я начал копать в сторону форм-фактора nano-ITX и pico-ITX, но ничего достаточно производительного за разумные деньги так и не нашлось.

Зато нашлась вот такая буквально поллитровка, несущая в себе 4е поколение Intel Core, Haswell.



Если по картинке не понятно, то этот ПК всё же чуть меньше, чем уже упоминавшаяся док-станция для Tango (108mm x 115mm x 30mm vs 135mm x 135mm x 27mm).

Поставляется с вмонтированным в материнскую плату процессором. Линейка процессоров:

— Intel® Core™ i7-4500U 1.8 GHz – 3.0GHz (turbo), Intel HD 4400
— Intel® Core™ i5-4200U 1.6 GHz – 2.6GHz (turbo), Intel HD 4400
— Intel® Core™ i3-4010U 1.7 GHz, Intel HD 4400
— Intel® Celeron™ 2955U 1.4 GHz, Intel HD

Существует также и модель на базе AMD A8-5545M 1.7G/2.7GHz.

Продаётся такое чудо как модель для сборки, для полной комплектации которой необходима память (можно вставить до 16ГБ, осторожно, подходит только DDR3 на 1.35В, не 1.5В) и диск mSATA.
Стоимость в зависимости от процессора колеблется на зарубежных сайтах от $250 до $500. Комплект из двух планок памяти общим объёмом 8ГБ можно приобрести приблизительно за $100, примерно столько же обойдётся и mSATA SDD на 128ГБ. WiFi b/g/n и Bluetooth 4.0/3.0 уже на борту, занимают единственный PCIe порт.

Ещё о нескольких моделях той же серии и пара картинок
Total votes 107: ↑102 and ↓5 +97
Comments 103

VIZIO. Недорогой ноутбук с Full HD IPS экраном

Reading time 5 min
Views 171K
Краткая справка:
VIZIO — довольно известная американская фирма. Существует с 2002 года. Производит в основном ЖК телевизоры и мониторы. В последнее время предпринимаются попытки вырваться на рынок ультрабуков и планшетов. Разработка устройств производится в США. При этом разрабатывается не только дизайн, но и внутреннее устройство всей техники и ничего не отдается в аутсорс индусам или китайцам. Производственные мощности находятся в Мексике, Китае и на Тайване. Все заводы, производящие технику, частично или полностью принадлежат собственно фирме VIZIO. Отличается агрессивной маркетинговой политикой, обвиняет крупнейшие мировые бренды в нанесении вреда экологии, использовании копеечной полурабской рабочей силы и кичится своей политикой разработки всего до «последнего винтика» грамотными американскими инженерами. Планов выхода на Российский рынок нет. Вероятность появления у нас продуктов VIZIO или сервис центров стремится к нулю.

Из этого следует что простому российскому гражданину для знакомства с техникой VIZIO придется взять на себя расходы по пересылке довольно увесистого агрегата из США и риски связанные с почтой России и гарантией действительной только в Калифорнии.
image
Вот он какой из себя — весь такой типично металлический минималистский американец.
Всех кто еще не окончательно потерял интерес к описываемой теме, прошу под кат
Total votes 55: ↑45 and ↓10 +35
Comments 111

Мифы нашего времени: генетически модифицированные организмы. Так ли страшен черт?

Reading time 21 min
Views 573K
Человеку давно свойственно интересоваться окружающим миром и находить объяснения тому окружающим вещам и событиям. Собственно, без этого человек не стал бы человеком. На базе верований, мифов развивалась сначала религия, а потом — и современная наука, которая уже весьма успешно объясняет окружающий мир от очень малых до впечатляющих масштабов. Но всегда оставались люди, которые противились прогрессу и распространяли устоявшиеся мифы, уверяя, что они отвечают на все вопросы и незачем двигаться дальше. Гром гремит — это Перун-громовержец злится; кто-то заболел — это Бог его наказывает, вот тебе объяснения, отстань, не задавай вопросов, а лучше помолись.
Современные мифы более глубоки и обычно связаны с наукой. Причины понятна — наука развилась (особенно в последнее время) до такой степени, что часто нужен колоссальный объем знаний, чтобы просто понять, о чем вообще идет речь. У многих людей этого объема нет или безвозвратно потерян, что и снижает их сопротивляемость к разного рода мифам нашего времени. Миф про вредность пищевых добавок Exxx; миф про полезность натурального и вредность «химии»; миф про врачей-убийц, травящих людей прививками; миф про настолько страшное ГМО, что наклейки с надписью «без ГМО» надо клеить даже на салфетки и на пачки с солью.
Картинка для привлечения внимания
Что такое ГМО? Зачем они нужны? Как велика опасность и польза от их использования? Есть ли доказательства безопасности этих организмов?
Рассуждения дилетанта на тему - под катом
Total votes 319: ↑291 and ↓28 +263
Comments 832

Ускорение загрузки Windows for fun and profit

Reading time 4 min
Views 803K
image Пожалуй, начну с того, что если перегружаться 15 раз в год, то любой «тюнинг» процесса загрузки отнимает больше времени, чем будет выиграно на перезагрузках за все время жизни системы. Однако, спортивный интерес берет свое, тем более, что люди интересуется процессом оптимизации быстродействия. А загрузка оказалась самым очевидным кандидатом в примеры того, как на мой взгляд должен выглядеть этот самый процесс. Сразу скажу, что грузиться будем с 5400 rpm винта, грузиться будем в «рабочую» систему: помимо недобитой вендорской крапвари там стоит еще куча всякого типа вижуал студии, антивируса, скайпа, стима, гуглапдейтера и пр…

Про то, почему отключение pagefile-а скорее вредно, чем полезно — как нибудь в другой раз, а пока…
Под катом много однообразных картинок и немножко унылого текста
Total votes 532: ↑516 and ↓16 +500
Comments 365

Борьба с утечками памяти в Android. Часть 1

Reading time 6 min
Views 49K
Этой статьей мы открываем цикл статей на Хабре о нашей разработке под Android.
Согласно докладу компании Crittercism от 2012 года, OutOfMemoryError — вторая по распространенности причина «крашей» мобильных приложений.
Честно говоря, и в Badoo эта ошибка была в топе всех крашей (что неудивительно при том объеме фотографий, которые просматривают наши пользователи). Борьба с OutOfMemory — занятие кропотливое. Мы взяли в руки Allocation Tracker и начали играться с приложением. Наблюдая за данными зарезервированной памяти, мы выявили несколько сценариев, при которых выделение памяти росло с подозрительной стремительностью, забывая при этом уменьшаться. Вооружившись несколькими дампами памяти после этих сценариев, мы проанализировали их в MAT (http://www.eclipse.org/mat/).
Результат был занимательный и позволил нам в течение нескольких недель снизить количество крашей в разы. Что-то было специфично для нашего кода, но также выявились типичные проблемы, присущие большинству Android приложений.
Сегодня поговорим о конкретном случае утечки памяти. О нем многие знают, но часто закрывают на это глаза (а зря).
Читать дальше →
Total votes 59: ↑55 and ↓4 +51
Comments 18

oDesk (Upwork). Мой опыт за полтора года

Reading time 12 min
Views 445K
Вот уже полтора года я зарабатываю фрилансом на бирже oDesk. За это время у меня накопилось много материалов по данной теме. В данном топике я собрал все в одну статью и адаптировал для аудитории хабра.
image
Читать дальше →
Total votes 192: ↑185 and ↓7 +178
Comments 321

Банки vs Биржи: где выгоднее покупать валюту

Reading time 6 min
Views 104K
image

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

На самом деле это не совсем верный подход, поскольку финансовые рынки в некоторых аспектах предоставляют большие возможности, чем могут предложить банки (в том числе в области сохранения финансов). Сегодня мы рассмотрим конкретный пример такой ситуации — покупку и продажу валюты.
Читать дальше →
Total votes 47: ↑37 and ↓10 +27
Comments 37

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity