Настольная версия браузера Opera, начиная с версии 11.10, позволяет владельцам сайтов определять, как их сайт будет отображаться в миниатюрах Экспресс-панели. По-умолчанию, для отображения используется скриншот целой веб-страницы. Теперь появилась возможность указывать значок через CSS или в теле веб-страницы.
User
Сквозная авторизация на своем сайте через Twitter
7 min
10KПрошли те времена, когда каждый форум на персональной страничке каждого Васисуалия Свердыщенко требовал отдельной регистрации.
Мы потихонечку привыкаем к тому, что оставить комментарий от имени своего OpenID/OAuth провайдера можно фактически везде. Также для всех популярных CMS давно написаны плагины сквозной авторизации Twitter/Facebook/Google/Яndex/Вконтакте. Кроме того есть DISQUS… Но что делать, если мы хотим предоставить пользователю стороннего сервиса какие-то дополнительные полномочия, не вынуждая его заводить отдельную учетную запись на нашем сайте? Особенно, если для нашей CMS пока нет чудо-плагина?
Я расскажу о том, как быстро и безболезненно прикрутить сквозную авторизацию к экзотической CMS и какие на этом пути встречаются подводные грабли.

Мы потихонечку привыкаем к тому, что оставить комментарий от имени своего OpenID/OAuth провайдера можно фактически везде. Также для всех популярных CMS давно написаны плагины сквозной авторизации Twitter/Facebook/Google/Яndex/Вконтакте. Кроме того есть DISQUS… Но что делать, если мы хотим предоставить пользователю стороннего сервиса какие-то дополнительные полномочия, не вынуждая его заводить отдельную учетную запись на нашем сайте? Особенно, если для нашей CMS пока нет чудо-плагина?
Я расскажу о том, как быстро и безболезненно прикрутить сквозную авторизацию к экзотической CMS и какие на этом пути встречаются подводные грабли.

+48
Android Development Tutorial. Часть 1/?
6 min
121KTranslation
Ларс Вогель — евангелист Eclipse.
Под катом Вы обнаружите перевод его статьи, которая описывает процесс создания Android-приложений с помощью Eclipse. Используется Eclipse 3.6, Java 1.6 и Android 2.3 (Gingerbread).
Часть 2
Под катом Вы обнаружите перевод его статьи, которая описывает процесс создания Android-приложений с помощью Eclipse. Используется Eclipse 3.6, Java 1.6 и Android 2.3 (Gingerbread).
Часть 2
+43
Kohana 3.0 — упрощаем себе жизнь
8 min
10KФреймворк — это хорошо, это здорово, это возможность сэкономить кучу времени на раздумьях над архитектурой будущего приложения, но… Фреймворк как таковой — это каркас. И, на примере Kohana 3.0, о которой в данной статье пойдет речь, каркас этот надо, в той или иной степени, допиливать.
Теперь давайте по-порядку, чем мы сейчас займемся:
Итак, начнем…
Теперь давайте по-порядку, чем мы сейчас займемся:
- -Расширим базовый контроллер, добавив в него жизненно необходимые методы и работу с юзерами (которая присутствует в 99% проектов, хотя бы на уровне административного логина)
- -Создадим свой фронт-контроллер для более удобной и красивой работы с вью-файлами
- -Реализуем вывод ошибок валидации через фронт-контроллер
- -Улучшим базовый класс View
- -Ну и еще кое-какие полезные мелочи
Итак, начнем…
+28
Пишем первое приложение для Android
8 min
561KВ любом деле самое сложное — это начало. Часто бывает тяжело войти в контекст, с чем столкнулся и я, решив разработать свое первое Android-приложение. Настоящая статья для тех, кто хочет начать, но не знает с чего.
Статья затронет весь цикл разработки приложения. Вместе мы напишем простенькую игру “Крестики-Нолики” с одним экраном (в ОС Android это называется Activity).
Отсутствие опыта разработки на языке Java не должно стать препятствием в освоении Android. Так, в примерах не будут использоваться специфичные для Java конструкции (или они будет минимизированы на столько, на сколько это возможно). Если Вы пишете, например, на PHP и знакомы с основополагающими принципами в разработке ПО, эта статья будет вам наиболее полезна. В свою очередь так как, я не являюсь экспертом по разработке на Java, можно предположить, что исходный код не претендует на лейбл “лучшие практики разработки на Java”.
Статья затронет весь цикл разработки приложения. Вместе мы напишем простенькую игру “Крестики-Нолики” с одним экраном (в ОС Android это называется Activity).
Отсутствие опыта разработки на языке Java не должно стать препятствием в освоении Android. Так, в примерах не будут использоваться специфичные для Java конструкции (или они будет минимизированы на столько, на сколько это возможно). Если Вы пишете, например, на PHP и знакомы с основополагающими принципами в разработке ПО, эта статья будет вам наиболее полезна. В свою очередь так как, я не являюсь экспертом по разработке на Java, можно предположить, что исходный код не претендует на лейбл “лучшие практики разработки на Java”.
+143
Заметки об объектной системе языка Python ч.2
10 min
91KВторая часть заметок об объектной системе python'a (первая часть тут). В этой статье рассказывается, что такое классы, метаклассы, type, object и как происходит поиск атрибутов в классе.
+66
Смотрим любое потоковое видео с сайта «ВКонтакте», практически на любом android-смартфоне или планшете без поддержки flash
3 min
101K
Вступление
Не секрет, что на ВКонтакте можно найти огромное количество видео. Это и фильмы, и сериалы в различном качестве, и многое другое. Но посмотреть, например, новую серию House M.D. просто так не получится — необходим полный Flash Player последней версии, который имеет, пожалуй, далеко не каждое android-устройство. Существует также HTML5 версия плеера, но для ее поддержки необходим браузер с поддержкой MPEG-4, которой не имеют в полном объеме даже многие настольные браузеры. В этом топике будет описан метод просмотра любого видео ВКонтакте на практически любом девайсе с андроидом.
+46
Используем console на полную
6 min
459KTranslation
Метод console.log() — отличный способ вывести отладочную информацию, не мешая пользователю. Но знаете ли Вы, что объект console имеет еще уйму других не менее полезных методов? Очень редко разработчики используют этот функционал, ограничиваясь неблокирующим alert'ом. Что-ж, давайте исправим это положение.
+163
API ВКонтакте на Ruby
1 min
5.8K(Пост размещен по просьбе юзера karevn. Все плюсы в карму направляйте ему)
***
На днях в ходе разработки своего проекта возникла нужда в обращении к ВКонтакте API. Ничего подходящего на Ruby не нашёл, поэтому решил написать минималистично-ниндзюцу библиотечку. Библиотечка содержит всего один класс Session, позволяющий обращаться со своими экземплярами как будто это объекты ВКонтакте:
Такой вызов вернёт нам распарсенный JSON, содержащий массив из хешей. Если серверу ВКонтакте что-то не понравится, библиотека выкинет исключение.
Вот, собственно, и всё. Пользуйтесь, предлагайте улучшения.
Репозитарий на GitHub.
***
На днях в ходе разработки своего проекта возникла нужда в обращении к ВКонтакте API. Ничего подходящего на Ruby не нашёл, поэтому решил написать минималистично-ниндзюцу библиотечку. Библиотечка содержит всего один класс Session, позволяющий обращаться со своими экземплярами как будто это объекты ВКонтакте:
session = ::VK::Session.new app_id, api_secret
friends_hash = session.friends.get :uid => 15003575
Такой вызов вернёт нам распарсенный JSON, содержащий массив из хешей. Если серверу ВКонтакте что-то не понравится, библиотека выкинет исключение.
Вот, собственно, и всё. Пользуйтесь, предлагайте улучшения.
Репозитарий на GitHub.
0
Навигация по бесплатным сетам иконок
1 min
3KВместе с борьбой за качество и количество иконок в бесплатных сетах (снимаю шляпу перед gasyoun и Yusuke Kamiyamane) навигация по ним становится все более невыносимой. Особенно в ситуации, когда несколько проектов уже на стадии отладки и в каждом используется свой сет. Начинаешь путать названия для типовых иконок, а поиск нужной иконки в огромных PNG-картах занимает львиную долю времени.
Для того, чтобы сделать этот процесс проще и удобнее, я написал небольшое рельсовое приложение, которое умеет эти иконки сортировать и фильтровать.
Для того, чтобы сделать этот процесс проще и удобнее, я написал небольшое рельсовое приложение, которое умеет эти иконки сортировать и фильтровать.
+75
Почему кнопка «ОК» теперь считается дурным тоном в дизайне
2 min
8.1KTranslation
Когда графический интерфейс пользователя только появился, дизайнеры проектировали диалоговые окна используя двоичный подход: «OK» и «Отмена». Нажатие кнопки «OK» в диалоговом окне означало, что пользователь хотел, чтобы система начала действовать. Нажатие кнопки «Отмена» означало то, что пользователь хотел вернуться обратно к приложению без принятия каких-либо действий. В то время как данный подход, в прошлом, был стандартом для ОС и приложений, сегодня принят более удобный для пользователя подход к проектированию диалоговых окон.
+89
Initializr — генератор проектов на основе HTML5
1 min
6.2KСервис Initializr позволяет всего в несколько кликов получить рыбу для типового проекта. Если более конкретно, то он может
- наполнить страницу базовым контентом;
- подключить jQuery в разных формах;
- подключить библиотеки типа Modernizr;
- сконфигурировать настройки сервера, создав например .htaccess.
+27
Убираем лишние запятые из javascript-кода
1 min
4.2KКогда пишешь на js, часто возникают ситуации, когда то тут, то там остаются строчки вида ",)" или ",}" или ",]". В ff, chrome код с такими фрагментами работает, а вот в IE нет.
Лекарство для вима:
Регулярка написана на коленке, но она работает и фиксит большинство проблем с запятыми по коду.
Дополнения приветствуются!
UPD:
Такой подход хоть и фиксит большинство рядовых случаев, но также может попортить код с регулярками или, например, строками:
превратится в:
Если в вашем коде есть регулярки и/или строки с похожими конструкциями, то лучше использовать jslint для валидации. Для вима можно использовать github.com/hallettj/jslint.vim
Лекарство для вима:
autocmd BufWritePre *.js :%s/\(.*\),\(\s*\n*\s*\)\(\}\|\]\|)\)/\1\2\3/e
Регулярка написана на коленке, но она работает и фиксит большинство проблем с запятыми по коду.
Дополнения приветствуются!
UPD:
Такой подход хоть и фиксит большинство рядовых случаев, но также может попортить код с регулярками или, например, строками:
var a = "[,]";
var a = /[,]/;
превратится в:
var a = "[]";
var a = /[]/;
Если в вашем коде есть регулярки и/или строки с похожими конструкциями, то лучше использовать jslint для валидации. Для вима можно использовать github.com/hallettj/jslint.vim
+20
Кроссдоменный AJAX
1 min
112KНа вопрос, как сделать AJAX запрос к другому домену, я всегда отвечал, что никак, и предлагал в качестве альтернативы jsonp, прокси, флеш, фреймы. Но, оказывается, большинство современных браузеров (IE8+, FF3.5+, Chrome 6+ и Safari 4+) вполне поддерживает кроссдоменный XMLHTTPRequest.
+83
Копируем исходный код без нумерации строк
6 min
26K
Бывает при выводе информации требуется ее декорировать для лучшего восприятия, нередко оформление сопровождается в том числе и текстом. При выделении и копировании этой информации, оформление копировать не нужно, т.к. нужна только сама информация, и желательно в исходном виде. То есть при копировании часть выделенного текста не должна попадать в буфер обмена.
В моем случае это исходный код, который сопровождается нумерацией строк, так нагляднее и есть возможность сослаться на строку кода. Однако, если мы хотим скопировать часть кода, то он должен копироваться без номера строки.
Многие highlighter'ы этим грешат, при копировании кода копируют в том числе и номера строк. Выходят из ситуации по разному: либо используют хитрую верстку, при которой возможно несовпадении нумерации со строками (можно заметить на github например), или используют специальную кнопку, которая показывает в отдельном окне код без форматирования. Мне показались эти подходы неудовлетворительными, потому решил найти другое решение.
В данной заметке я опишу решение, к которому в итоге пришел. Решение, конечно, частное, но может кому то оказаться полезным в решении собственных задач.
+78
B-tree
6 min
215KВведение
Деревья представляют собой структуры данных, в которых реализованы операции над динамическими множествами. Из таких операций хотелось бы выделить — поиск элемента, поиск минимального (максимального) элемента, вставка, удаление, переход к родителю, переход к ребенку. Таким образом, дерево может использоваться и как обыкновенный словарь, и как очередь с приоритетами.
Основные операции в деревьях выполняются за время пропорциональное его высоте. Сбалансированные деревья минимизируют свою высоту (к примеру, высота бинарного сбалансированного дерева с n узлами равна log n). Большинство знакомо с такими сбалансированными деревьями, как «красно-черное дерево», «AVL-дерево», «Декартово дерево», поэтому не будем углубляться.
В чем же проблема этих стандартных деревьев поиска? Рассмотрим огромную базу данных, представленную в виде одного из упомянутых деревьев. Очевидно, что мы не можем хранить всё это дерево в оперативной памяти => в ней храним лишь часть информации, остальное же хранится на стороннем носителе (допустим, на жестком диске, скорость доступа к которому гораздо медленнее). Такие деревья как красно-черное или Декартово будут требовать от нас log n обращений к стороннему носителю. При больших n это очень много. Как раз эту проблему и призваны решить B-деревья!
B-деревья также представляют собой сбалансированные деревья, поэтому время выполнения стандартных операций в них пропорционально высоте. Но, в отличие от остальных деревьев, они созданы специально для эффективной работы с дисковой памятью (в предыдущем примере – сторонним носителем), а точнее — они минимизируют обращения типа ввода-вывода.
+68
Ищем быстро, еще быстрее
3 min
22KНатолкнулся в разделе QA на интересный вопрос. Ответ на него заставил написать эту статью как бОлее полный ответ на вопрос «как организовать поиск по множеству параметров, как в Яндекс-маркете, например».
Я знаю, что на Хабре, да и вообще есть много сторонников noSQL решений (сам не без греха), но все же я сторонник сначала подумать, а уже потом выбирать решение.
Итак, что имеем в «ДАНО»
Я знаю, что на Хабре, да и вообще есть много сторонников noSQL решений (сам не без греха), но все же я сторонник сначала подумать, а уже потом выбирать решение.
Итак, что имеем в «ДАНО»
- Имеем 120 чекбоксов — вариант 1/0
- Имеем 30 «радио» с выбором «да/нет/не важно»
- Имеем 2-3 слайдера для указания диапазона цен/размера чего нить
- Имеем самое главное: 12 млн записей в БД.
- Имеем Select * From tovar Where (wifi=true) and (led=false) and (type=3) and ….остальные параметры …; со временем выполнения близкому к истерике клиента.
+176
Забавные возможности ImageMagick в помощь веб дизайнеру
1 min
3.6KСейчас когда на сайте нужно отобразить много мелких деталей, рамочки и тенюшки или оформления кнопок, делают один большой файл где все картинки идут друг за другом вертикально. Обладатели ImageMagick могут создать его одной командой.
+68
KISS + Ruby = нагрузим сервер по быстрому
8 min
1.7KОпишу я тут историю как на коленках сделал «нагрузочное» тестирование сервиса, и некоторые соображения по поводу Ruby;)
Жила-была себе одна большая система, жила уже не первый год, не первый релиз.
Система представляет из себя центральные сервера, через которые бегает информация и набор desktop приложений которые эту информацию и порождают/потребляют, так сказать gateways и destination.
Однажды с сервером случилась беда, для локализации дефекта нужно было нагрузить сервер — имитировать работу БОЛЬШОГО кол-ва одновременных активных клиентов.
Жила-была себе одна большая система, жила уже не первый год, не первый релиз.
Система представляет из себя центральные сервера, через которые бегает информация и набор desktop приложений которые эту информацию и порождают/потребляют, так сказать gateways и destination.
Однажды с сервером случилась беда, для локализации дефекта нужно было нагрузить сервер — имитировать работу БОЛЬШОГО кол-ва одновременных активных клиентов.
+24
Загрузка файлов с помощью html5 File API, с преферансом и танцовщицами
7 min
45KПредисловие

О трудности оформления стилями <input type=file/> уже сказано немало, почитать об этом можно, например, по ссылкам раз, два, три, четыре, пять, шесть.
Но и сам процесс загрузки файлов нетривиален, есть много разных способов – и ни одного идеального.
Я уже писал о внедрении на нашем проекте Файлы@Mail.Ru silverlight-загрузчика полгода назад. На тот момент у нас подерживались iframe, flash, silverlight и обычная загрузка файлов. Но прогресс не стоит на месте, и вот уже последние бета-версии всеми горячо любимых браузеров в полной мере поддерживают html5 FileAPI (справедливости ради, стоит заметить, что, как обычно, некоторые поддерживают своеобразно, но об этом — ниже).
Пока писалась статья, Chrome 9 был объявлен stable и форсировано обновился уже на 75% установок 8 версии. Так, что празднуем поддержку File API первым стабильным браузером, ура!
Мы подумали, что не использовать такую технологию было бы преступлением против
Подумали — и внедрили html5 загрузку в дополнение к уже существующим вариантам.
В итоге наши пользователи получили множество плюшек:
— прозрачная дозагрузка после обрыва соединения (и даже рестарта браузера!);
— очередь загрузки;
— прогресс-бар (пользователи MacOS и Safari наконец могут видеть прогресс без всяких инородных плагинов), возможность удаления файлов из очереди, если передумал.
+98
Information
- Rating
- Does not participate
- Location
- Минск, Минская обл., Беларусь
- Registered
- Activity