Pull to refresh
43
0
Сергей @SSiarhei

User

Send message

Ресурсы, о которых должен знать каждый Android-разработчик

Reading time6 min
Views189K
Сегодня я хочу поделиться с вами моим вольным переводом статьи, написанной Сергеем Повзнером (Sergey Povzner). Сергей ведёт блог bongizmo.com и занимается разработкой туристических гидов под общим названием Citybot.

В то время как Android продолжает свой невероятный рост, всё больше и больше программистов начинают разрабатывать приложения на этой платформе. Если ты начинаешь свой путь сегодня, то ты определенно — счастливчик. За последние годы Android значительно повзрослел и избавился от множества детских болезней. Информации по платформе более чем достаточно. Я же расскажу о самых важных ресурсах.

Статья будет полезна как новичкам, так и опытным разработчикам. Это гид по миру Android-разработки.
Читать дальше →
Total votes 133: ↑128 and ↓5+123
Comments33

Пятничный датамайнинг

Reading time2 min
Views71K
Каждую пятницу мы заботливо собираем для наших пользователей рассылку. Эта рассылка не обычная, а только для тех, кто отметил в интересах эротику. Называется она “Пятничные сиськи”.

Каждую пятницу мы выбираем 15 лучших девушек, заворачиваем и отправляем нашим серферам. Работа всего офиса останавливается, чтобы оценить каждую по достоинству. Конечно же, у нас часто случается срач на тему “жопа у неё толстая vs жопа нормальная”, “большие сиськи vs маленькие сиськи” и т.д. Чтобы решать все наши споры, мы время от времени делаем внутреннюю аналитику. В сегодняшней статье мы расскажем тебе, хабраюзер, о нашем последнем исследовании и выводах из него.

image
Читать дальше →
Total votes 285: ↑165 and ↓120+45
Comments64

Знаешь ли ты JAVA, %username%?

Reading time11 min
Views148K
JAVA Evil EditionНедавно я сдавал экзамен Oracle Certified Professional Java Programmer (бывший Sun Certified), и за время подготовки прорешал огромное количество различных задачек. Отдельные задачки по джаве иногда появляются на хабре и вызывают немалый интерес, поэтому я решил поделиться накопленным и сделать небольшую подборку.

Итак, ниже представлен десяток наиболее, на мой взгляд, интересных задач по Java SE из более чем 1000, проработанных мной. Сложность варьируется от средней до ооооооочень сложной. Решение большинства задач практически не требует знания API, достаточно логики и фундаментальных основ Java.

К слову, сложность экзамена Oracle Certified Professional Java Programmer гораздо ниже чем сложность данного теста, поэтому все, кто правильно ответит хотя бы на половину этих вопросов, может смело сдавать этот экзамен без всякой подготовки.

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

ВНИМАНИЕ: во второй половине статьи — ответы и подробные пояснения по соответствующим нюансам JAVA.

Читать дальше →
Total votes 136: ↑124 and ↓12+112
Comments85

Интерактивная обучалка ветвлению в Git

Reading time1 min
Views79K
Некий Питер Коттл (Peter Cottle) сделал интерактивную обучалку по основам ветвления в Git. Есть несколько простых обучающих уровней, где нужно сделать пару коммитов, а затем merge или rebase, есть и сложные уровни, над которыми придется подумать. Можно также сохранять уровни и делиться ими с друзьями.

Хотя сам автор утверждает, что приложение еще сырое, я советую всем, кто интересуется гитом, взглянуть на эту прикольную штуку.

image
Читать дальше →
Total votes 162: ↑156 and ↓6+150
Comments38

В поисках идеального css-фреймворка. Требования, реализация, maxmertkit

Reading time14 min
Views70K


Я обожаю twitter bootstrap. Прост, местами логичен, достаточно красив, подходит для быстрого прототипирования веб-интерфейсов. Но этого оказалось недостаточно. Взяв twitter bootstrap в большой проект, мне пришлось целиком его разобрать и переосмыслить css-фреймворки как боевые единицы в веб-проектах. В результате переосмысления родились требования к любому css-фреймворку, удобному как верстальщику, так и frontent-разработчику.
Требования и реализация
Total votes 208: ↑199 and ↓9+190
Comments135

Опции JVM. Как это работает

Reading time7 min
Views93K
С каждым днем слово java все больше и больше воспринимается уже не как язык, а как платформа благодаря небезызвестному invokeDynamic. Именно поэтому сегодня я бы хотел поговорить про виртуальную java машину, а именно — об так называемых Performance опциях в Oracle HotSpot JVM версии 1.6 и выше (server). Потому что сегодня почти не встретить людей, которые знают что-то больше чем -Xmx, -Xms и -Xss. В свое время, когда я начал углубляться в тему, то обнаружил огромное количество интересной информации, которой и хочу поделится. Отправной точкой, понятное дело, послужила официальная документация от Oracle. А дальше — гугл, эксперименты и общение:

-XX:+DoEscapeAnalysis


Начну, пожалуй, с самой интересной опции — DoEscapeAnalysis. Как многие из Вас знают, примитивы и ссылки на объекты создаются не в куче, а выделяются на стеке потока (256КБ по умолчанию для Hotspot). Вполне очевидно, что язык java не позволяет создавать объекты на стеке на прямую. Но это вполне себе может проделывать Ваша JVM 1.6 начиная с 14 апдейта.

Про то, как работает сам алгоритм можно прочитать тут (PDF). Если коротко, то:

  • Если область видимости объекта не выходит за область метода, в котором он создается, то такой объект может быть создан на фрейме стека вместо кучи (на самом деле не сам объект, а его поля, на совокупность которых заменяется объект);
  • Если объект не покидает область видимости потока, то к такому объекту другие потоки не имеют доступа и следовательно все операции синхронизации над объектом могут быть удалены.


Для реализации данного алгоритма строится и используется так называемый — граф связей (connection graph), по которому на этапе анализа (алгоритмов анализа — несколько) осуществляется проход для нахождения пересечений с другими потоками и методами.
Таким образом после прохода графа связей для любого объекта возможно одно из следующих следующих состояний:

  • GlobalEscape — объект доступен из других потоков и из других методов, например статическое поле.
  • ArgEscape — объект был передан как аргумент или на него есть ссылка из объекта аргумента, но сам он не выходит из области видимости потока в котором был создан.
  • NoEscape — объект не покидает область видимости метода и его создание может быть вынесено на стек.


После этапа анализа, уже сама JVM проводит возможную оптимизацию: в случае если объект NoEscape, то он может быть создан на стеке; если объект NoEscape или ArgEscape, то операции синхронизации над ним могут быть удалены.

Следует уточнить, что на стеке создается не сам объект а его поля. Так как JVM заменяет цельный объект на совокупность его полей (спасибо Walrus за уточнение).

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

    for (int i = 0; i < 1000*1000*1000; i++) {
        Foo foo = new Foo();
    }

скорость выполнения может увеличится в 8-15 раз. Хотя, на казалось бы, очевидных случаях из практики о которых недавно писалось (тут и тут) EscapeAnalys не работает. Подозреваю, что это связано с размером стека.

Кстати, EscapeAnalysis как раз частично ответственен за известный спор про StringBuilder и StringBuffer. То есть, если Вы вдруг в методе использовали StringBuffer вместо StringBuilder, то EscapeAnalysis (в случае срабатывания) устранит блокировки для StringBuffer'а, после чего StringBuffer вполне превращается в StringBuilder.
Читать дальше →
Total votes 72: ↑70 and ↓2+68
Comments18

Whois: практическое руководство пользователя

Reading time32 min
Views168K
Статья рассказывает о работе whois протокола, о существующих клиентских решениях и об особенностях коммуникации с различными whois серверами (а также о выборе правильного whois сервера). Ее основная задача — помочь в написании скриптов для получения whois информации для IP адресов и доменов.

Что такое whois?


Что такое и для чего нужен whois можно прочитать, например, здесь: http://en.wikipedia.org/wiki/Whois.

В нескольких словах, whois (от английского «who is» — «кто такой») – сетевой протокол, базирующийся на протоколе TCP. Его основное предназначение – получение в текстовом виде регистрационных данных о владельцах IP адресов и доменных имен (главным образом, их контактной информации). Запись о домене обычно содержит имя и контактную информацию «регистранта» (владельца домена) и «регистратора» (организации, которая домен зарегистрировала), имена DNS серверов, дату регистрации и дату истечения срока ее действия. Записи об IP адресах сгруппированы по диапазонам (например, 8.8.8.0 — 8.8.8.255) и содержат данные об организации, которой этот диапазон делегирован.

Читать дальше →
Total votes 101: ↑97 and ↓4+93
Comments31

Светодиодная лента в качестве освещения комнаты

Reading time15 min
Views1.3M
Изначально для основного освещения одной из комнат, где шёл капитальный ремонт, планировалась обычная люстра. Но недавно мне на глаза попалась суперяркая светодиодная лента Ultra 5000 со светодиодами smd 5630 торговой марки Arlight. Решение было принято быстро, окончательно и бесповоротно — хочу такую ленту в качестве основного света в комнате.



О реализации светодиодного периметра освещения далее
Total votes 420: ↑415 and ↓5+410
Comments329

Система уведомлений о событиях на сайте (на примере аудиоплеера ВКонтакте)

Reading time2 min
Views37K
Приветствую.

Думаю, многие, кто имеет аккаунт ВКонтакте и слушает там музыку, замечали, что если на одной вкладке включить трек, а затем уже на другой включить второй, первый трек уйдет в паузу. Примерно то же самое происходит с различными уведомлениями (новое сообщение, ответ на комментарий/запись и т.д.) — отображается оно только в активной вкладке. Кому интересно как это работет и каким образом сделать подобное у себя на сайте, милости просим за хабракат.
Читать дальше →
Total votes 94: ↑90 and ↓4+86
Comments38

Введение в HTML5 History API

Reading time4 min
Views239K
До появления HTML5 единственное, что мы не могли контролировать и управлять (без перезагрузки контента или хаков с location.hash) — это история одного таба. С появлением HTML5 history API все изменилось — теперь мы можем гулять по истории (раньше тоже могли), добавлять элементы в историю, реагировать на переходы по истории и другие полезности. В этой статье мы рассмотрим HTML5 History API и напишем простой пример, иллюстрирующий его возможности.

Основные понятия и синтаксис


History API опирается на один DOM интерфейс — объект History. Каждый таб имеет уникальный объект History, который находится в window.history. History имеет несколько методов, событий и свойств, которыми мы можем управлять из JavaScript. Каждая страница таба(Document object) представляет собой объект коллекции History. Каждый элемент истории состоит из URL и/или объекта состояния (state object), может иметь заголовок (title), Document object, данные форм, позиция скролла и другую информацию, связанную со страницей.

Основные методы объекта History:
  1. window.history.length: Количество записей в текущей сессии истории
  2. window.history.state: Возвращает текущий объект истории
  3. window.history.go(n): Метод, позволяющий гулять по истории. В качестве аргумента передается смещение, относительно текущей позиции. Если передан 0, то будет обновлена текущая страница. Если индекс выходит за пределы истории, то ничего не произойдет.
  4. window.history.back(): Метод, идентичный вызову go(-1)
  5. window.history.forward(): Метод, идентичный вызову go(1)
  6. window.history.pushState(data, title [, url]): Добавляет элемент истории.
  7. window.history.replaceState(data, title [, url]): Обновляет текущий элемент истории
Читать дальше →
Total votes 51: ↑51 and ↓0+51
Comments22

Удивительно простой, но красивый CSS-эффект

Reading time4 min
Views67K
Наткнулся на очень простой в реализации, но интересный rollover-эффект для кнопок на CSS. Автор — некий японец ksk1015.



Демонстрация эффекта и процесс написания.
Читать дальше →
Total votes 141: ↑130 and ↓11+119
Comments31

Удачная модель ветвления для Git

Reading time10 min
Views978K
Перевод статьи Vincent Driessen: A successful Git branching model

В этой статье я представляю модель разработки, которую использую для всех моих проектов (как рабочих, так и частных) уже в течение года, и которая показала себя с хорошей стороны. Я давно собирался написать о ней, но до сих пор не находил свободного времени. Не буду рассказывать обо всех деталях проекта, коснусь лишь стратегии ветвления и управления релизами.



В качестве инструмента управления версиями всего исходного кода она использует Git.

Читать дальше →
Total votes 180: ↑171 and ↓9+162
Comments105

Музыка в ванной своими руками

Reading time5 min
Views291K
Доброго дня.

Весной наконец-то дошли руки до ремонта в ванной комнате. При сборе требований к будущему функционалу родилась мысль, а не добавить ли в ванну возможность слушать музыку? Например, проигрывать медиаконтент с домашнего NAS. Сама идея «музыки в ванной» мне понравилась, и я пошел в гугл смотреть, какие решения существуют.

По итогам всего мероприятия решил поделиться информацией и результатами своего труда.
Людям, которые любят работать руками, посвящается
Total votes 115: ↑112 and ↓3+109
Comments181

JavaScript — полезные материалы

Reading time2 min
Views79K
Хочу поделиться набором ссылок на нексолько полезных, интересных и, возможно, не самых известных материалов по JavaScript. Из них вы узнаете немного больше об истории появления языка, о его настоящем, тонкостях реализации в различных браузерах, и о будущем развития стандарта ECMAScript. О различных способах наследования в том числе об эмуляции «классического» ООП, множественном наследовании и миксинах. О функциональном стиле программирования в JavaScript: чистые функции, map, reduce, частичное применение и композиции функций. И, наконец, что если бы Хемингуэй писал на JavaScript?
Читать дальше →
Total votes 137: ↑130 and ↓7+123
Comments29

Безопасность OAuth2

Reading time5 min
Views117K
Данная блогозапись на хабр прежде всего обусловлена появлением «Ключницы» — хороший повод связать и перевести накопленное.


У нас в программе: вольный пересказ спек OAuth2, слабые стороны и Threat Model, 0day на хабретрюк с аутенфикацией.
image
Читать дальше →
Total votes 168: ↑160 and ↓8+152
Comments65

UICloud: Самая большая база пользовательских интерфейсов

Reading time1 min
Views34K


UICloud — это база бесплатных пользовательских интерфейсов с поисковой системой, рейтингом и каталогизатором в которой собрано все от исходников в формате PSD, до готовых решений на HTML, CSS или jQuery: формы, слайдеры, кнопки, календари, элементы и полноценные интерфейсы для мобильных и веб приложений. В проекте уже сейчас можно найти практически все что нужно для облегчения процесса разработки дизайнерам и разработчикам.

На данный момент в базе 23586 элементов и почти тысяча UI-сэтов включающие в себя готовые решения в едином стиле. Проект создан Британской студией Double-J Design целью проекта является создание самой обширной UI базы.
Total votes 163: ↑161 and ↓2+159
Comments40

Удобный сервис для учета личных финансов

Reading time3 min
Views6.7K

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

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

Кому интересно — сразу скажу, что написано это все на Python/Django.

Читать дальше →
Total votes 85: ↑66 and ↓19+47
Comments191

Наполовину пустой стакан

Reading time4 min
Views8.1K
На Хабре уже упоминалась новая рубрика What if Рендела Манро (xkcd). Каждый вторник он отвечает на разные дурацкие вопросы читателей с точки зрения законов физики. Ниже перевод одного из выпусков.

Что, если внезапно стакан станет буквально наполовину пустым?
—Витторио Иаковелла


Как выяснится далее, пессимист в данном случае окажется прав. Когда говорят «стакан наполовину пуст» обычно имеют ввиду, что стакан содержит поровну воды и воздуха.

Считается, что оптимисту стакан кажется наполовину полным, тогда как пессимист находит его наполовину пустым. Эта притча породила целую кучу шутливых вариаций (инженер видит стакан, который спроектирован с двукратным запасом емкости; сюрреалист видит жирафа, жующего галстук и т.п.)
Читать дальше →
Total votes 173: ↑162 and ↓11+151
Comments59

Eviterra.com: Куда улететь дешево или Карта цен

Reading time2 min
Views42K
Привет, Хабр!

Буквально совсем недавно мы рассказали об обновленном интерфейсе нашей Эвитерры (с помощью которой можно дешево и быстро покупать любые авиабилеты).

Но в этом посте речь пойдет не совсем про него. По правде говоря, в течение года в любом посте про нас мы получали более 9000 комментариев, содержащих примерно такой текст: «Вот я хочу куда-нибудь улететь дешево, мне все равно куда и все равно когда, сделайте пожалуйста» (а писем с просьбами сделать такое — вообще не счесть, причем некоторые пищущие искренне считают, что первыми додумались до такого и великодушно дарят идею нам, хе-хе).

Вдобавок, после обновления интерфейса многие стали нас спрашивать: «А зачем вам такой календарь?», «А зачем вам такая большая карта, если на ней показывается только путь от пункта отправления в пункт назначения?».


А вот зачем
Total votes 76: ↑67 and ↓9+58
Comments199

Изучить Github за 15 минут

Reading time1 min
Views127K
TryGit — интерактивный обучающий курс по Github в стиле Codecademy. Курс состоит из 25 мини-уроков, которые знакомят пользователя с базовыми понятиями и основными командами git, при этом ученик своими руками вводит команды в консоль, смотрит результат и читает сопровождающие надписи с объяснением происходящего.



Вот таким в будущем должно стать обучение в школах!

Конечно, 15-минутное введение не заменит полноценного учебника. Для обучения можно рекомендовать бесплатную книгу Pro Git и видеокурс Getting Git.
Total votes 173: ↑155 and ↓18+137
Comments56

Information

Rating
Does not participate
Location
Минская обл., Беларусь
Date of birth
Registered
Activity