- PVSM.RU - https://www.pvsm.ru -
На данный момент на хабре около 350 хабов [1]. Функционал сайта позволяет сортировать их по имени [2] и по индексу [1]. А по другим параметрам — например по количеству постов [3] — нет, а хотелось бы.
Меня вдохновила статья рейтинг постов хаба [4], и я решил сделать похожую, но составить уже рейтинг самих хабов.
В первой половине статьи я представлю вам рейтинги хабов и компаний, а также небольшой их анализ. А во второй — подробно распишу, как я на Java с помощью библиотеки JSoup [5] парсил HTML страницы хабры, с какими интересными явлениями и проблемами столкнулся. И в конце статьи выложу полный исходный код программы.
Когда я отсортировал хабы, обнаружились интересные вещи. Например я не знал, что существуют хабы с нулевым количеством постов. А их оказалось целых 4 штуки! Причём на каждый из них подписано более 500 человек. Наверно это очень перспективные направления — не имея постов на них уже набежало столько народу. У хаба MySpace [354] нету ни одного поста/события, зато более 55К подписчиков — это о чём-то говорит!
Тройка хабов — Чулан [6], Я пиарюсь [7] и Веб-разработка [8] — лидируют как по количеству постов, так и по количеству читателей. И в этом нет ничего удивительного — первые два хаба весьма общие и свободные, а уж веб-разработка интересна многим. Далее идёт Информационная безопасность [9], которая пользуется на хабре бешеной популярностью. За ней — Google [10], которую можно считать компанией №1 в области IT — по ней больше всего постов, по сравнению с другими. Отчасти благодаря её ОС Android [15], которой выпало 4 место по количеству подписчиков.
К сожалению, я так и не понял, почему хаб Хабрахабр [18] — оффтопик. По количеству постов он будет на 13 месте, да и подписчиков у него >80К. Получается, что писать на сайте об этом же сайте — отход от темы?
Огорчило, что хаб Java [30] находится не так высоко, как хотелось бы.
Хотя изначально я планировал построить рейтинг только для хабов, в коммпентариях к статье выдвинули хорошую идею — сделать тоже самое и для компаний. Код при этом сильно менять не пришлось.
Компаний очень много — 1343. Поэтому я выложу только ТОП-30 и последние 10 компаний. Вот ведь интересный момент — хабра почему-то показывает Все (1331), хотя моя программа насчитала их 1343 — и, собственно, это правильно. Если вручную их сосчитать — умножить количество страниц 67 на 20 компаний да ещё 3 — получается 1343.
Вот интересно, а почему компании Студия Артемия Лебедева [355], Adobe [356], ВКонтакте [357] и Skype [358] деактивировали свой профиль? Вроде как много подписчиков, в ТОП они попали. Блоги остальных компаний из ТОП-30 рабочие.
Очень долго я пытался разобраться в Хабрахабр Api. Как выяснилось, он закрыт и пока что в процессе разработки. Однако в переписке с support@habrahabr.ru мне сказали, что они не имеют ничего против парсинга их страниц. Собственно, именно так и работают хабраклиенты для Android (на данный момент).
Когда речь идёт о проектах «для себя», я выбираю любимую Джаву. Она и на этот раз меня не подвела — библиотека JSoup позволила в несколько строчек получить необходимые данные с HTML страницы. Но давайте сперва обсудим, как устроены хабы.
Страницы с хабами расположены по адресам habrahabr.ru/hubs/pageN/, где N — номер от 1 и далее. Посему, если мы хотим получить полный список из всех хабов — нам нужно загружать и анализировать эти страницы, пока они не закончатся. На каждой странице присутствует список из хабов. Формат элемента списка довольно простой и легко анализируется. Выглядит он так:
<div class="hub " id="hub_50">
<div class="habraindex">1 280,58</div>
<div class="info">
<div class="title">
<a href="http://habrahabr.ru/hub/infosecurity/">Информационная безопасность</a>
<span class="profiled_hub" title="Профильный хаб"></span>
</div>
<div class="buttons">
<input type="button" class="mini blue subscribeHub" value="Подписаться" data-id="50">
<input type="button" class="mini hidden unsubscribeHub" value="Подписан" data-id="50" "="">
</div>
<div class="clear"></div>
<div class="stat"><a href="http://habrahabr.ru/hub/infosecurity/subscribers/" class="members_count">91741 подписчик</a>, <a href="http://habrahabr.ru/hub/infosecurity/posts/">3385 постов</a><a></a></div><a>
</a></div><a>
</a></div>
Давайте напишем метод, который возвращает нам список из всех хабов на сайте:
static List<Hub> getAllHubs() {
ArrayList<Hub> fullHubsList = new ArrayList<>();
String urlHubsIncomplete = "http://habrahabr.ru/hubs/page";
int pageNum = 1;
do {
String urlHubs = urlHubsIncomplete + pageNum;
try {
Document doc = Jsoup.connect(urlHubs).get();
Elements hubs = doc.select(".hub");
if (hubs.size() == 0) {
break;
}
for (Element hubElem : hubs) {
Hub hub = new Hub(hubElem);
fullHubsList.add(hub);
}
pageNum++;
} catch (Exception e) {
e.printStackTrace();
break;
}
} while (true);
return fullHubsList;
}
Мы крутим бесконечный цикл while, формируя с каждой итерацией новый URL. Затем, с помощью Jsoup.connect(urlHubs).get() получаем непосредственно HTML-документ со списком хабов и их параметрами. Как несложно заметить — div с информацией о хабе имеет класс hub — и, вызвав doc.select(".hub"), мы получаем список из этих элементов. Если его размер равен нулю — значит мы прошли последнюю страницу и уже проанализировали все хабы — тогда мы выходим из цикла.
Далее — проходим по всем хабам-элементам и для каждого создаём объект типа Hub, передав в конструктор наш org.jsoup.nodes.Element. В нём располагается HTML-код такого же формата, как указан выше. Теперь давайте абстрагируемся от всего. Для этого и существует ООП. Перед нами есть только тот кусочек HTML, представленный выше, и класс, в который его нужно запихнуть. Напишем каркас для нашего класса:
import org.jsoup.nodes.Element;
public class Hub {
String title;
int posts;
boolean profiled;
int membersCount;
float habraindex;
String url;
public Hub(Element hubElem) {
}
}
Напишем конструктор. Для начала сделаем самое простое — получим данные из заголовочного тега. Для этого мы сначала извлекаем сам div вида
<div class="title">
<a href="http://habrahabr.ru/hub/infosecurity/">Информационная безопасность</a>
<span class="profiled_hub" title="Профильный хаб"></span>
</div>
Парсим через
Element titleDiv = hubElem.select(".title").get(0);
Element tagA = titleDiv.getElementsByTag("a").get(0);
title = tagA.text();
url = tagA.attr("href");
profiled = (hubElem.select(".profiled_hub").size() != 0);
Далее, мы хотим пропарсить количество подписчиков и постов — собственно те параметры, по которым мы и будем сортировать. Но сразу же сталкиваемся с первой проблемой — тег содержит строку «91741 подписчик», которую мы не можем просто так взять и преобразовать в Integer — она содержит буквы! Тут нам на помощь приходят регулярные выражения [395]. Быстренько пишем ловкий метод, который получает строку и вырезает из неё всё, кроме цифр, да ещё и преобразует результат в int. D — это НЕ цифра, а + — «встречается 1 или более раз». Т.е. мы в данном случае заменяем буквы на пустоту.
private int getNumbers(String str) {
String numbers = str.replaceAll("\D+", "");
return Integer.valueOf(numbers);
}
Вот теперь мы уже можем со спокойной душой получить наши значения:
String membersCountFullStr = hubElem.select(".members_count").get(0).text();
membersCount = getNumbers(membersCountFullStr);
String statFullStr = hubElem.select(".stat").get(0).getAllElements().get(2).text();
posts = getNumbers(statFullStr);
В принципе, на этом можно было остановится, но я решил ради интереса извлечь всю возможную информацию о хабе. Тут возникла весьма интересная вторая проблема, которая будет изюминкой статьи. Как пропарсить хабраиндекс?
Для начала, следует заменить запятую на точку и убрать лишние пробелы. Но этого не достаточно! Парсер всё равно выдаёт ошибку, если скопировать и вставить хабраиндекс в код — Double.valueOf("–1.11"). А если ввести вручную то же самое число — всё окей. Причём визуально в моей IDEA [396] они абсолютно идентично выглядят!
Оказывается, дизайнеры хабры просто использовали dash [397] вместо minus [398] — c иным кодом символа, и парсер его, понятное дело, не ест. Возьмите на заметку. Суть проблемы в следующем [399]:
System.out.println((int)'-');//45
System.out.println((int)'–');//8211
Когда-то в своей статье Хитрые задачи по Java [400] я рассмотрел подвох, когда L маленькую можно не отличить от 1. Собственно, сейчас я напоролся на аналогичную проблему.
Посему, код для извлечения хабраиндекса будет чуть сложнее:
String rawHabraIndex = hubElem.select(".habraindex").get(0).text();//1 265,92
char minus = 45;//'-'
char dash = 8211;//'–'
String niceHabraIndex = rawHabraIndex.replaceAll(" ", "").replace(",", ".").replace(dash,minus);//1266.72
habraindex = Float.valueOf(niceHabraIndex);
Далее, пишем компаратор по постам как вложенный статический класс для Hub
public static class ComparePosts implements Comparator<Hub> {
@Override
public int compare(Hub o1, Hub o2) {
return o2.posts - o1.posts;
}
}
И сортируем по нему где-нибудь в main
List<Hub> hubs = getAllHubs();
Collections.sort(hubs, new Hub.ComparePosts());
Всё, задача выполнена! С количеством подписчиков аналогично. Далее я написал код, который выводит в консоль два списка в таком виде, чтобы их сразу можно было вставить в статью — и сделал это вначале.
На получение всех хабов уходит примерно 10 секунд. Исходный код можно скачать здесь [401]. Собираем и запускаем вот так, не забыв установить Jsoup [5] и заменить путь на ваш:
javac -cp .;"C:proglibjsoup-1.7.3.jar" com/kciray/habrahubs/Main.java
java -cp .;"C:proglibjsoup-1.7.3.jar" com.kciray.habrahubs.Main
Автор: kciray
Источник [402]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/54558
Ссылки в тексте:
[1] около 350 хабов: http://habrahabr.ru/hubs/
[2] по имени: http://habrahabr.ru/hubs/?order=title
[3] по количеству постов: http://habrahabr.ru/hubs/?order=posts
[4] рейтинг постов хаба: http://habrahabr.ru/post/204706/
[5] JSoup: http://jsoup.org/
[6] Чулан: http://habrahabr.ru/hub/closet/
[7] Я пиарюсь: http://habrahabr.ru/hub/i_am_advertising/
[8] Веб-разработка: http://habrahabr.ru/hub/webdev/
[9] Информационная безопасность: http://habrahabr.ru/hub/infosecurity/
[10] Google: http://habrahabr.ru/hub/google/
[11] Железо: http://habrahabr.ru/hub/hardware/
[12] Гаджеты. Устройства для гиков: http://habrahabr.ru/hub/gadgets/
[13] Программирование: http://habrahabr.ru/hub/programming/
[14] Linux: http://habrahabr.ru/hub/linux/
[15] Android: http://habrahabr.ru/hub/android/
[16] JavaScript: http://habrahabr.ru/hub/javascript/
[17] Apple: http://habrahabr.ru/hub/apple/
[18] Хабрахабр: http://habrahabr.ru/hub/ilhh/
[19] .NET: http://habrahabr.ru/hub/net/
[20] PHP: http://habrahabr.ru/hub/php/
[21] Системное администрирование: http://habrahabr.ru/hub/sys_admin/
[22] DIY или Сделай Сам: http://habrahabr.ru/hub/DIY/
[23] Разработка: http://habrahabr.ru/hub/development/
[24] Управление проектами: http://habrahabr.ru/hub/pm/
[25] Интерфейсы: http://habrahabr.ru/hub/ui/
[26] Microsoft: http://habrahabr.ru/hub/microsoft/
[27] Game Development: http://habrahabr.ru/hub/gdev/
[28] Open source: http://habrahabr.ru/hub/open_source/
[29] Смартфоны и коммуникаторы: http://habrahabr.ru/hub/smartphones/
[30] JAVA: http://habrahabr.ru/hub/java/
[31] Дизайн в IT: http://habrahabr.ru/hub/design/
[32] Алгоритмы: http://habrahabr.ru/hub/algorithms/
[33] Копирайт: http://habrahabr.ru/hub/copyright/
[34] Социальные сети и сообщества: http://habrahabr.ru/hub/social_networks/
[35] GTD: http://habrahabr.ru/hub/gtd/
[36] Windows: http://habrahabr.ru/hub/windows/
[37] Учебный процесс в IT: http://habrahabr.ru/hub/study/
[38] Python: http://habrahabr.ru/hub/python/
[39] Робототехника: http://habrahabr.ru/hub/robot/
[40] Разработка под Android: http://habrahabr.ru/hub/android_dev/
[41] Разработка под iOS: http://habrahabr.ru/hub/ios_dev/
[42] Хостинг: http://habrahabr.ru/hub/hosting/
[43] C++: http://habrahabr.ru/hub/cpp/
[44] Законодательство и IT-бизнес new: http://habrahabr.ru/hub/business-laws/
[45] Медиа: http://habrahabr.ru/hub/mass_media/
[46] Mobile Development: http://habrahabr.ru/hub/mobiledev/
[47] Научно-популярное: http://habrahabr.ru/hub/popular_science/
[48] CSS: http://habrahabr.ru/hub/css/
[49] Веб-дизайн: http://habrahabr.ru/hub/web_design/
[50] Firefox: http://habrahabr.ru/hub/firefox/
[51] Облачные вычисления: http://habrahabr.ru/hub/cloud_computing/
[52] Убунтариум: http://habrahabr.ru/hub/ubuntu/
[53] Софт: http://habrahabr.ru/hub/soft/
[54] ИТ-Инфраструктура: http://habrahabr.ru/hub/it-infrastructure/
[55] Opera: http://habrahabr.ru/hub/opera/
[56] Космонавтика: http://habrahabr.ru/hub/space/
[57] Сетевые технологии: http://habrahabr.ru/hub/network_technologies/
[58] Ненормальное программирование: http://habrahabr.ru/hub/crazydev/
[59] Peer-to-Peer: http://habrahabr.ru/hub/p2p/
[60] *nix: http://habrahabr.ru/hub/nix/
[61] Тестирование: http://habrahabr.ru/hub/testing/
[62] Карьера в IT-индустрии: http://habrahabr.ru/hub/hr/
[63] Google Chrome: http://habrahabr.ru/hub/google_chrome/
[64] Браузеры: http://habrahabr.ru/hub/browsers/
[65] Операционные системы: http://habrahabr.ru/hub/os/
[66] Обработка изображений: http://habrahabr.ru/hub/image_processing/
[67] Яндекс: http://habrahabr.ru/hub/yandex/
[68] iPhone: http://habrahabr.ru/hub/iphone/
[69] Высокая производительность: http://habrahabr.ru/hub/hi/
[70] История ИТ: http://habrahabr.ru/hub/history/
[71] Ruby: http://habrahabr.ru/hub/ruby/
[72] Искусственный интеллект: http://habrahabr.ru/hub/artificial_intelligence/
[73] jQuery: http://habrahabr.ru/hub/jquery/
[74] Поисковые машины и технологии: http://habrahabr.ru/hub/search_engines/
[75] Планшеты: http://habrahabr.ru/hub/iTablet/
[76] Электроника для начинающих: http://habrahabr.ru/hub/easyelectronics/
[77] Windows Phone: http://habrahabr.ru/hub/windows_mobile/
[78] Виртуализация: http://habrahabr.ru/hub/virtualization/
[79] Анимация и 3D графика: http://habrahabr.ru/hub/3d_graphics/
[80] HTML: http://habrahabr.ru/hub/html5/
[81] Математика: http://habrahabr.ru/hub/maths/
[82] Платежные системы: http://habrahabr.ru/hub/pay_system/
[83] C#: http://habrahabr.ru/hub/csharp/
[84] Работа с видео: http://habrahabr.ru/hub/video/
[85] Энергия и элементы питания: http://habrahabr.ru/hub/energy/
[86] IP-телефония: http://habrahabr.ru/hub/voip/
[87] Twitter: http://habrahabr.ru/hub/twitter/
[88] Блогосфера: http://habrahabr.ru/hub/blogosphere/
[89] CMS: http://habrahabr.ru/hub/cms/
[90] Программинг микроконтроллеров: http://habrahabr.ru/hub/controllers/
[91] Старое железо: http://habrahabr.ru/hub/antikvariat/
[92] Криптография: http://habrahabr.ru/hub/crypto/
[93] Node.JS: http://habrahabr.ru/hub/nodejs/
[94] Финансы в IT-индустрии: http://habrahabr.ru/hub/finance/
[95] Беспроводные технологии: http://habrahabr.ru/hub/wireless/
[96] Qt Software: http://habrahabr.ru/hub/qt_software/
[97] IM: http://habrahabr.ru/hub/im/
[98] Домены: http://habrahabr.ru/hub/domains/
[99] Фриланс: http://habrahabr.ru/hub/freelance/
[100] Facebook: http://habrahabr.ru/hub/facebook/
[101] Работа со звуком: http://habrahabr.ru/hub/sound_and_music/
[102] Игровые приставки: http://habrahabr.ru/hub/game_consoles/
[103] Django: http://habrahabr.ru/hub/django/
[104] Исследования и прогнозы в IT: http://habrahabr.ru/hub/research/
[105] MySQL: http://habrahabr.ru/hub/mysql/
[106] Ruby on Rails: http://habrahabr.ru/hub/ror/
[107] Краудсорсинг: http://habrahabr.ru/hub/crowdsourcing/
[108] Mac OS X: http://habrahabr.ru/hub/macosx/
[109] Adobe: http://habrahabr.ru/hub/adobe/
[110] Типографика: http://habrahabr.ru/hub/typography/
[111] Электронное правительство: http://habrahabr.ru/hub/e_gov/
[112] Skype: http://habrahabr.ru/hub/skype/
[113] IT-стандарты: http://habrahabr.ru/hub/itstandarts/
[114] Мобильный веб: http://habrahabr.ru/hub/mobile/
[115] Flash-платформа: http://habrahabr.ru/hub/Flash_Platform/
[116] Вирусы (и антивирусы): http://habrahabr.ru/hub/virus/
[117] Статистика в IT: http://habrahabr.ru/hub/statistics/
[118] Краудфандинг: http://habrahabr.ru/hub/crowdfunding/
[119] Бизнес студии: http://habrahabr.ru/hub/studiobusiness/
[120] Телефония: http://habrahabr.ru/hub/telephony/
[121] Серверное администрирование: http://habrahabr.ru/hub/s_admin/
[122] Visual Studio: http://habrahabr.ru/hub/vs/
[123] Спортивное программирование: http://habrahabr.ru/hub/sport_programming/
[124] Фототехника: http://habrahabr.ru/hub/photo/
[125] YouTube: http://habrahabr.ru/hub/youtube/
[126] Arduino: http://habrahabr.ru/hub/arduino/
[127] SQL: http://habrahabr.ru/hub/sql/
[128] Drupal: http://habrahabr.ru/hub/drupal/
[129] Cisco: http://habrahabr.ru/hub/cisconetworks/
[130] Perl: http://habrahabr.ru/hub/perl/
[131] Data Mining: http://habrahabr.ru/hub/data_mining/
[132] Usability: http://habrahabr.ru/hub/usability/
[133] Электронные книги: http://habrahabr.ru/hub/ebooks/
[134] Проектирование и рефакторинг: http://habrahabr.ru/hub/refactoring/
[135] Сетевое оборудование: http://habrahabr.ru/hub/Network_hardware/
[136] Git: http://habrahabr.ru/hub/Git/
[137] WordPress: http://habrahabr.ru/hub/wordpress/
[138] Wikipedia: http://habrahabr.ru/hub/wikipedia/
[139] Ноутбуки: http://habrahabr.ru/hub/notebooks/
[140] Спам (и антиспам): http://habrahabr.ru/hub/spam/
[141] Киберпанк: http://habrahabr.ru/hub/cyberpunk/
[142] Офисы IT-компаний: http://habrahabr.ru/hub/office/
[143] Разработка под Windows Phone: http://habrahabr.ru/hub/wp_dev/
[144] Байнет: http://habrahabr.ru/hub/bynet/
[145] Анализ и проектирование систем: http://habrahabr.ru/hub/sysan4dummies/
[146] Биотехнологии: http://habrahabr.ru/hub/biotech/
[147] NoSQL: http://habrahabr.ru/hub/nosql/
[148] Amazon Web Services: http://habrahabr.ru/hub/aws/
[149] Патенты: http://habrahabr.ru/hub/patents/
[150] ASP: http://habrahabr.ru/hub/asp/
[151] Symfony: http://habrahabr.ru/hub/symfony/
[152] Занимательные задачки: http://habrahabr.ru/hub/zadachki/
[153] Клиентская оптимизация: http://habrahabr.ru/hub/client_side_optimization/
[154] Oracle: http://habrahabr.ru/hub/oracle/
[155] Нетбуки: http://habrahabr.ru/hub/netbook/
[156] Совершенный код: http://habrahabr.ru/hub/complete_code/
[157] Delphi: http://habrahabr.ru/hub/delphi/
[158] Геоинформационные сервисы: http://habrahabr.ru/hub/geo/
[159] Silverlight: http://habrahabr.ru/hub/silverlight/
[160] Unity3D: http://habrahabr.ru/hub/unity3d/
[161] 3D-принтеры: http://habrahabr.ru/hub/3d-printers/
[162] Windows Azure: http://habrahabr.ru/hub/azure/
[163] PostgreSQL: http://habrahabr.ru/hub/postgresql/
[164] Zend Framework: http://habrahabr.ru/hub/zend_framework/
[165] Coworking: работа 2.0: http://habrahabr.ru/hub/coworking/
[166] Веб-аналитика: http://habrahabr.ru/hub/web_analytics/
[167] Серверная оптимизация: http://habrahabr.ru/hub/server_side_optimization/
[168] Agile: http://habrahabr.ru/hub/agile/
[169] Nginx: http://habrahabr.ru/hub/nginx/
[170] Системное программирование: http://habrahabr.ru/hub/system_programming/
[171] API: http://habrahabr.ru/hub/api/
[172] Yii: http://habrahabr.ru/hub/yii/
[173] ERP-системы: http://habrahabr.ru/hub/erp/
[174] Haskell: http://habrahabr.ru/hub/Haskell/
[175] Asterisk: http://habrahabr.ru/hub/Asterisk/
[176] 3G: http://habrahabr.ru/hub/3g/
[177] Системы управления версиями: http://habrahabr.ru/hub/cvs/
[178] Инфографика: http://habrahabr.ru/hub/infographics/
[179] Процессоры: http://habrahabr.ru/hub/cpu/
[180] MODX: http://habrahabr.ru/hub/modx/
[181] Internet Explorer: http://habrahabr.ru/hub/ie/
[182] Big Data: http://habrahabr.ru/hub/bigdata/
[183] Хабрахабр — Анонсы: http://habrahabr.ru/hub/announcements/
[184] Assembler: http://habrahabr.ru/hub/asm/
[185] Mozilla: http://habrahabr.ru/hub/mozilla/
[186] C: http://habrahabr.ru/hub/c/
[187] Дополненная реальность: http://habrahabr.ru/hub/augmented_reality/
[188] GPS: http://habrahabr.ru/hub/gps/
[189] VIM: http://habrahabr.ru/hub/vim/
[190] ECM/СЭД: http://habrahabr.ru/hub/ecm/
[191] Накопители: http://habrahabr.ru/hub/storages/
[192] Google App Engine: http://habrahabr.ru/hub/gae/
[193] Objective C: http://habrahabr.ru/hub/ObjectiveC/
[194] Администрирование баз данных: http://habrahabr.ru/hub/db_admins/
[195] Презентации: http://habrahabr.ru/hub/presentation/
[196] Восстановление данных: http://habrahabr.ru/hub/data_recovery/
[197] Ajax: http://habrahabr.ru/hub/AJAX/
[198] Gmail: http://habrahabr.ru/hub/GMail/
[199] Microsoft SQL Server: http://habrahabr.ru/hub/mssql/
[200] Иконосказ: http://habrahabr.ru/hub/iconoskaz/
[201] Erlang/OTP: http://habrahabr.ru/hub/erlang/
[202] SharePoint: http://habrahabr.ru/hub/sharepoint/
[203] Yahoo: http://habrahabr.ru/hub/yahoo/
[204] LTE: http://habrahabr.ru/hub/LTE/
[205] PowerShell: http://habrahabr.ru/hub/powershell/
[206] OpenStreetMap: http://habrahabr.ru/hub/openstreetmap/
[207] Mail.Ru: http://habrahabr.ru/hub/mailru/
[208] Векторная графика: http://habrahabr.ru/hub/svg/
[209] IT-Биографии: http://habrahabr.ru/hub/it_bigraphy/
[210] Bitcoin: http://habrahabr.ru/hub/bitcoin/
[211] Canvas: http://habrahabr.ru/hub/canvas/
[212] LiveJournal: http://habrahabr.ru/hub/livejournal/
[213] Функциональное программирование: http://habrahabr.ru/hub/funcprog/
[214] Библиотека ExtJS/Sencha: http://habrahabr.ru/hub/extjs/
[215] BlackBerry: http://habrahabr.ru/hub/blackberry/
[216] ВКонтакте: http://habrahabr.ru/hub/vkontakte/
[217] ООП: http://habrahabr.ru/hub/oop/
[218] Биоинформатика: http://habrahabr.ru/hub/bioinformatics/
[219] Компиляторы: http://habrahabr.ru/hub/compilers/
[220] TDD: http://habrahabr.ru/hub/tdd/
[221] Оценка и экспертиза IT-проектов: http://habrahabr.ru/hub/lynch/
[222] Creative Commons: http://habrahabr.ru/hub/creative_commons/
[223] Параллельное программирование: http://habrahabr.ru/hub/parallel_programming/
[224] IPv6 new: http://habrahabr.ru/hub/ipv6/
[225] Графические оболочки: http://habrahabr.ru/hub/desktop_environment/
[226] WiMAX: http://habrahabr.ru/hub/WiMAX/
[227] Семантическая Сеть: http://habrahabr.ru/hub/sw/
[228] AngularJS: http://habrahabr.ru/hub/angularjs/
[229] Видео-техника: http://habrahabr.ru/hub/video_tech/
[230] IPTV: http://habrahabr.ru/hub/IPTV/
[231] Scala: http://habrahabr.ru/hub/scala/
[232] SaaS / S+S: http://habrahabr.ru/hub/saas/
[233] iPad: http://habrahabr.ru/hub/ipad/
[234] Радиосвязь: http://habrahabr.ru/hub/radio/
[235] CodeIgniter: http://habrahabr.ru/hub/codeigniter/
[236] SmartTV: http://habrahabr.ru/hub/SmartTV/
[237] Микроформаты: http://habrahabr.ru/hub/microformats/
[238] Maps API: http://habrahabr.ru/hub/map_api/
[239] Kohana: http://habrahabr.ru/hub/kohanaphp/
[240] ГЛОНАСС: http://habrahabr.ru/hub/glonass/
[241] Открытые данные: http://habrahabr.ru/hub/opendata/
[242] Нанотехнологии: http://habrahabr.ru/hub/nano/
[243] Go: http://habrahabr.ru/hub/go/
[244] CAD/CAM: http://habrahabr.ru/hub/cad_cam/
[245] GreaseMonkey: http://habrahabr.ru/hub/GreaseMonkey/
[246] Рамблер: http://habrahabr.ru/hub/rambler/
[247] КодоБред: http://habrahabr.ru/hub/code_wtf/
[248] Lisp: http://habrahabr.ru/hub/lisp/
[249] Демосцена: http://habrahabr.ru/hub/demoscene/
[250] Регулярные выражения: http://habrahabr.ru/hub/regex/
[251] Google API: http://habrahabr.ru/hub/google_api/
[252] Mono и Moonlight: http://habrahabr.ru/hub/mono/
[253] INFOLUST: http://habrahabr.ru/hub/infolust/
[254] Eclipse: http://habrahabr.ru/hub/eclipse/
[255] Периферия: http://habrahabr.ru/hub/Peripheral/
[256] Emacs: http://habrahabr.ru/hub/emacs/
[257] Моддинг: http://habrahabr.ru/hub/modding/
[258] Wiki-технология: http://habrahabr.ru/hub/wiki/
[259] Настольные компьютеры: http://habrahabr.ru/hub/desktops/
[260] Яндекс API: http://habrahabr.ru/hub/yandex_api/
[261] Мониторы и ТВ: http://habrahabr.ru/hub/displays/
[262] Отладка: http://habrahabr.ru/hub/debug/
[263] MongoDB: http://habrahabr.ru/hub/MongoDB/
[264] Вконтакте API: http://habrahabr.ru/hub/vkontakte_api/
[265] LiveStreet: http://habrahabr.ru/hub/livestreet/
[266] Sony PlayStation: http://habrahabr.ru/hub/playstation/
[267] LaTeX: http://habrahabr.ru/hub/latex/
[268] Хабрахабр API: http://habrahabr.ru/hub/habrahabr_api/
[269] Fidonet: http://habrahabr.ru/hub/fido/
[270] Sphinx: http://habrahabr.ru/hub/sphinx/
[271] GPGPU: http://habrahabr.ru/hub/GPGPU/
[272] Accessibility: http://habrahabr.ru/hub/accessibility/
[273] Groovy & Grails: http://habrahabr.ru/hub/groovy_grails/
[274] XSLT: http://habrahabr.ru/hub/xslt/
[275] Разработка под Java ME: http://habrahabr.ru/hub/javame_dev/
[276] Apache: http://habrahabr.ru/hub/apache/
[277] DNS: http://habrahabr.ru/hub/DNS/
[278] SQLite: http://habrahabr.ru/hub/sqlite/
[279] Tizen: http://habrahabr.ru/hub/tizen/
[280] Safari: http://habrahabr.ru/hub/safari/
[281] 1С-Битрикс: http://habrahabr.ru/hub/bitrix/
[282] Amazon Kindle: http://habrahabr.ru/hub/Kindle/
[283] CRM-системы: http://habrahabr.ru/hub/crm/
[284] Умный дом: http://habrahabr.ru/hub/home_automation/
[285] Microsoft Kinect: http://habrahabr.ru/hub/kinect/
[286] R: http://habrahabr.ru/hub/r/
[287] Bing: http://habrahabr.ru/hub/bing/
[288] Бегун: http://habrahabr.ru/hub/begun/
[289] Медиаплееры: http://habrahabr.ru/hub/nmt/
[290] CakePHP: http://habrahabr.ru/hub/cakephp/
[291] Google Web Toolkit: http://habrahabr.ru/hub/gwt/
[292] Google Analytics: http://habrahabr.ru/hub/google_analytics/
[293] XML: http://habrahabr.ru/hub/xml/
[294] Action Script: http://habrahabr.ru/hub/action_script/
[295] UML Design: http://habrahabr.ru/hub/uml/
[296] Оболочки: http://habrahabr.ru/hub/shells/
[297] Lua: http://habrahabr.ru/hub/Lua/
[298] Суп: http://habrahabr.ru/hub/sup_fabrik/
[299] MooTools: http://habrahabr.ru/hub/mootools/
[300] Brainfuck: http://habrahabr.ru/hub/brainfuck/
[301] Google Plus: http://habrahabr.ru/hub/google_plus/
[302] Doctrine ORM: http://habrahabr.ru/hub/doctrine/
[303] Mercurial: http://habrahabr.ru/hub/Mercurial/
[304] Видеокарты: http://habrahabr.ru/hub/videocards/
[305] Facebook API: http://habrahabr.ru/hub/facebook_api/
[306] Meteor.JS new: http://habrahabr.ru/hub/meteorjs/
[307] Prolog: http://habrahabr.ru/hub/prolog/
[308] Системы охлаждения: http://habrahabr.ru/hub/cooling/
[309] PDF: http://habrahabr.ru/hub/pdf/
[310] Визуализация данных: http://habrahabr.ru/hub/data_visualization/
[311] Sun Microsystems: http://habrahabr.ru/hub/Sun/
[312] Derby.js: http://habrahabr.ru/hub/derbyjs/
[313] D: http://habrahabr.ru/hub/d/
[314] ASCII: http://habrahabr.ru/hub/ascii/
[315] WebGL new: http://habrahabr.ru/hub/webgl/
[316] Flex: http://habrahabr.ru/hub/flex/
[317] I2P: http://habrahabr.ru/hub/i2p/
[318] Разработка под e-commerce new: http://habrahabr.ru/hub/ecommerce_development/
[319] Twitter API: http://habrahabr.ru/hub/twitter_api/
[320] Корпуса и блоки питания: http://habrahabr.ru/hub/cases/
[321] Dart: http://habrahabr.ru/hub/Dart/
[322] Help Desk Software: http://habrahabr.ru/hub/helpdesk/
[323] Joomla: http://habrahabr.ru/hub/joomla/
[324] GTK+: http://habrahabr.ru/hub/gtk/
[325] Cocoa: http://habrahabr.ru/hub/Cocoa/
[326] Mesh-сети: http://habrahabr.ru/hub/mesh_networking/
[327] Хабракамп: http://habrahabr.ru/hub/habracamp/
[328] GitHub new: http://habrahabr.ru/hub/github/
[329] Google AdSense: http://habrahabr.ru/hub/adsense/
[330] Firebird/Interbase: http://habrahabr.ru/hub/Firebird/
[331] IIS: http://habrahabr.ru/hub/iis/
[332] Разработка под Bada: http://habrahabr.ru/hub/bada_dev/
[333] LabVIEW: http://habrahabr.ru/hub/LabVIEW/
[334] Системные платы: http://habrahabr.ru/hub/mainboards/
[335] Физика new: http://habrahabr.ru/hub/physics/
[336] Linkedin: http://habrahabr.ru/hub/Linkedin/
[337] Twisted: http://habrahabr.ru/hub/twisted/
[338] Cobol: http://habrahabr.ru/hub/Cobol/
[339] Laravel new: http://habrahabr.ru/hub/laravel/
[340] Резервное копирование new: http://habrahabr.ru/hub/backup/
[341] Raspberry Pi new: http://habrahabr.ru/hub/raspberrypi/
[342] Fortran: http://habrahabr.ru/hub/Fortran/
[343] Small Basic: http://habrahabr.ru/hub/smallbasic/
[344] Tumblr: http://habrahabr.ru/hub/Tumblr/
[345] Cubrid: http://habrahabr.ru/hub/cubrid/
[346] Промышленное программирование new: http://habrahabr.ru/hub/industrial_control_system/
[347] Julia new: http://habrahabr.ru/hub/julia/
[348] Microsoft Access: http://habrahabr.ru/hub/ms_access/
[349] Growth Hacking new: http://habrahabr.ru/hub/growthhacking/
[350] Google Checkout: http://habrahabr.ru/hub/google_checkout/
[351] MySpace: http://habrahabr.ru/hub/MySpace/
[352] Xcode new: http://habrahabr.ru/hub/xcode/
[353] SCADA new: http://habrahabr.ru/hub/scada/
[354] хаба MySpace: http://habrahabr.ru/hub/MySpace/posts/
[355] Студия Артемия Лебедева: http://habrahabr.ru/company/artlebedev/
[356] Adobe: http://habrahabr.ru/company/adobe/
[357] ВКонтакте: http://habrahabr.ru/company/vkontakte/
[358] Skype: http://habrahabr.ru/company/skype/
[359] Яндекс: http://habrahabr.ru/company/yandex/
[360] Google: http://habrahabr.ru/company/google/
[361] Microsoft: http://habrahabr.ru/company/microsoft/
[362] Intel: http://habrahabr.ru/company/intel/
[363] Apple: http://habrahabr.ru/company/apple/
[364] Opera Software ASA: http://habrahabr.ru/company/opera/
[365] Журнал Хакер: http://habrahabr.ru/company/xakep/
[366] Zfort Group: http://habrahabr.ru/company/zfort/
[367] JetBrains: http://habrahabr.ru/company/JetBrains/
[368] Mail.Ru Group: http://habrahabr.ru/company/mailru/
[369] ВымпелКом (Билайн): http://habrahabr.ru/company/beeline/
[370] IBM: http://habrahabr.ru/company/ibm/
[371] Nokia: http://habrahabr.ru/company/Nokia/
[372] ТМ: http://habrahabr.ru/company/tm/
[373] Простая Наука: http://habrahabr.ru/company/gtv/
[374] Samsung: http://habrahabr.ru/company/samsung/
[375] 2ГИС: http://habrahabr.ru/company/2gis/
[376] ABBYY: http://habrahabr.ru/company/abbyy/
[377] Box Overview: http://habrahabr.ru/company/boxowerview/
[378] HP: http://habrahabr.ru/company/hp/
[379] Мосигра: http://habrahabr.ru/company/mosigra/
[380] «Лаборатория Касперского»: http://habrahabr.ru/company/kaspersky/
[381] ASUS Russia: http://habrahabr.ru/company/asus/
[382] Sony Mobile Communications: http://habrahabr.ru/company/sonyxperia/
[383] Apps4All: http://habrahabr.ru/company/apps4all/
[384] LinguaLeo: http://habrahabr.ru/company/lingualeo/
[385] Angie: http://habrahabr.ru/company/angie/
[386] Photoplay: http://habrahabr.ru/company/photoplay/
[387] Флорист.ру: http://habrahabr.ru/company/florist/
[388] PlatOn: http://habrahabr.ru/company/platon/
[389] Polyvizor: http://habrahabr.ru/company/polyvizor/
[390] Dulton Media LLC: http://habrahabr.ru/company/dultonmedia/
[391] bdl premium: http://habrahabr.ru/company/bdlp/
[392] GolovachCourses: http://habrahabr.ru/company/golovachcourses/
[393] timera inc.: http://habrahabr.ru/company/timera_inc/
[394] Slon.ru: http://habrahabr.ru/company/slon/
[395] регулярные выражения: http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F
[396] IDEA: http://www.jetbrains.com/idea/
[397] dash: http://ru.wikipedia.org/wiki/%D0%A2%D0%B8%D1%80%D0%B5
[398] minus: http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BD%D1%83%D1%81
[399] в следующем: http://ideone.com/hHbLiF
[400] Хитрые задачи по Java: http://habrahabr.ru/post/203796/
[401] скачать здесь: http://kciray.com/files/zip/habrahubs.zip
[402] Источник: http://habrahabr.ru/post/211775/
Нажмите здесь для печати.