Как стать автором
Обновить
3
0

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

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

Малоизвестные особенности Java

Время на прочтение4 мин
Количество просмотров140K
Готовясь к собеседованию, я решил освежить память да и вообще поискать каверзные и малоизвестные нюансы языка Java. Выборку пяти наиболее интересных на мой взгляд моментов я вам и предлагаю.

Вот уже подоспела и вторая часть статьи.


1. Нестатические блоки инициализации.

Всем, я думаю, известно, что в Java существуют статические блоки инициализации (class initializers), код которых выполняется при первой загрузке класса.

class Foo {
	static List<Character> abc;
	static {
		abc = new LinkedList<Character>();
		for (char c = 'A'; c <= 'Z'; ++c) {
			abc.add( c );
		}
	}
}


Но существуют также и нестатические блоки инициализации (instance initializers). Они позволяют проводить инициализацию объектов вне зависимости от того, какой конструктор был вызван или, например, вести журналирование:

class Bar {
	{
		System.out.println("Bar: новый экземпляр");
	}
}


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

Map<String, String> map = new HashMap<String, String>() {{
	put("паук",  "арахнид");
	put("птица", "архозавр");
	put("кит",   "зверь");
}};


Очень даже мощное средство, не находите?

JFrame frame = new JFrame() {{
	add(new JPanel() {{
		add(new JLabel("Хабрахабр?") {{
			setBackground(Color.BLACK);
			setForeground(Color.WHITE);
		}});

		add(new JButton("Торт!") {{
			addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent event) {
					System.out.println("Хабрахабр - торт!");
				}
			});
		}});
	}});
}};


Остальные четыре пункта под катом.
Читать дальше →
Всего голосов 163: ↑150 и ↓13+137
Комментарии75

Прикручиваем мультимедиа-клавиши в Яндекс.Радио

Время на прочтение3 мин
Количество просмотров20K
Не так давно открыл я для себя сервис Яндекс.Радио, и вполне успешно им пользуюсь. Но вот чего не хватает: возможности включить следующий трек или поставить на паузу, не переключаясь на вкладку.

Мое решение под катом.
Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии11

Автономная кроссплатформенная монолитная программа на Java

Время на прочтение21 мин
Количество просмотров62K
Я люблю desktop-приложения. Признаваться в этом нынче, похоже, стыднее, чем в связях с иностранной разведкой, но это так. Нет, это не значит, что я не люблю интернет-технологии. Более того, некоторые я не только уважаю, а даже более-менее знаю. Но, тем не менее, я скучаю по тем временам, когда программа писалась на одном компьютере, потом компилировалась и запускалась на других, разных компьютерах. Тогда везде (почти) была одна система — Windows с одной и той же API, почти не было проблем совместимости на уровне приложений, никто не материл разработчиков браузеров — все берегли нервы на разработчиков WinAPI, которые умудрялись создавать конфликты даже внутри нее одной. Но это я, конечно, иронизирую, а если серьезно — иногда и сейчас хочется написать просто desktop-приложение, да так, чтобы работало оно на всех популярных системах. Трудно? Если подумать и покопать, то не очень.

Еще я люблю языки высокого уровня с аккуратной архитектурой и строгой типизацией. Мои фавориты — Java и C#. Оба они предоставляют разработчику множество преимуществ по сравнению с C++, оба избавляют от ряда забот. Чем приходится платить? Тем, что таскаешь за собой тяжелую колоду, которая называется Oracle JVM, .NET или mono. Все три колоды весят сотни мегабайт и лицензию имеют такую, что каждый пользователь вынужден качать эту штуку сам, не путая при этом разрядность своего компьютера, а главное — программа на Java не может быть совместима со всеми версиями JVM разом, не так ли? И вот — мы приходим к тому, что просто скинуть программку другу (или миллиону друзей) и не заботиться о том, что она у него не запустится, не выходит. Приходится делать хитрые сетапы, вбивать костыли, и это я еще не упомянул .NET — однажды я видел у друга сразу 3 установленных версии, причем все три были нужны разным приложениям…

Стоп! А давайте напишем программу на Java, но так, чтобы она не требовала установки на машину какой-либо JVM, чтобы одним касанием собиралась под Windows, Linux и OS X и чтобы при этом занимала совсем чуть-чуть; так, чтобы никто даже не понял, что она написана, скажем, не на C. Невозможно? Совсем наоборот! (И нет, я имею в виду не gcj, который лишает Java всех ее прелестей. Рефлексия будет работать и даже сторонние jar вы сможете запускать).

Ну и как это сделать?
Всего голосов 156: ↑146 и ↓10+136
Комментарии80

Сражаясь с анонимностью

Время на прочтение7 мин
Количество просмотров152K
Тема анонимности в Интернете является сейчас достаточно модной и интересной, и особенно теперь, когда новостные порталы пугают наc всякими там PRISM, правительственными инициативами и прочим. Большинство людей озабочены тем, как сохранить тайну своей личности в сети и поэтому все темы так или иначе посвящены ЗАЩИТЕ. Но иногда, раскрытие анонимности это не такое уж и плохое дело. Да-да, эта заметка — мой опыт борьбы с анонимностью своими силами, без помощи спец-служб…

image

Читать дальше →
Всего голосов 253: ↑238 и ↓15+223
Комментарии61

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

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

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

Кризис джуниор системного администратора

Время на прочтение2 мин
Количество просмотров73K
Всем привет! Мне 28 лет и я начинающий системный администратор.

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

Когда я поступил в гуманитарный ВУЗ, как-то само собой получилось, что я начал общаться с тамошними админами больше, чем с однокурсниками, впервые переустановил систему Windows ХР, впервые обжал шнур, впервые услышал такие термины как хаб, свитч…

Мне нереально нравилось помогать пользователям в компьютерном классе, я чувствовал свою значимость, когда делал то, что другие сделать не могли. Переустановить систему, например или Outlook настроить. IP адреса различных серверов ВУЗа я знал наизусть.

В общем, вполне логично, что получив опыт работы «эникеем» я очень сильно захотел стать системным администратором, поэтому в 2009 году, заочно, поступил в технический ВУЗ.

Ну, в общем, я преамбулу закончил.
Читать дальше →
Всего голосов 87: ↑58 и ↓29+29
Комментарии0

N+4 полезных книг

Время на прочтение5 мин
Количество просмотров81K


Привет! В посте блиц-обзор книг, которые будут полезны IT-специалистам, бизнесменам и тем, кто просто любит читать интересные технические вещи. Рядом с каждой – пояснения, чем оно может быть нужно. Этот обзор, в отличие от других ежегодных, более технически-прикладной.

Начнём со «Справочника по инженерной психологии» Вудсона и Коновера.

«Справочник по инженерной психологии» — Вудсон, Коновер


Книга о том, какие бывают кнопки и рычаги, как на них нажимают люди. И как проектировать так, чтобы люди работали с системой эффективно. Радует тем, что рассматривает пользователя как базовую систему ввода-вывода, замеряя его среднюю скорость передачи информации (около 20 бит в секунду на кнопочные интерфейсы), скорости ввода и вывода.
Читать дальше →
Всего голосов 58: ↑55 и ↓3+52
Комментарии8

Атака на архиваторы. Скрываемся в одном архиве от трех программ

Время на прочтение4 мин
Количество просмотров40K
Статья показывает, как можно обхитрить внимательного пользователя, знакомого с азами социальной инженерии, следящего даже за расширениями файлов и ни в коей мере не призывает к использованию данной информации в незаконных целях. Цель – запустить исполняемый файл, выдав его за текстовый документ в zip-архиве, а если запустить вряд ли получится, то не дать распаковать или скрыть файл.
Читать дальше →
Всего голосов 48: ↑44 и ↓4+40
Комментарии28

Выбираем фотоаппарат: ситуация на рынке и почему нет смысла покупать мыльницу или зеркалку

Время на прочтение6 мин
Количество просмотров113K
Несколько лет назад одним из самых популярных фотохостингов мира был Flickr. Люди выкладывали тысячи снимком в секунду, что позволяло сервису вести очень и очень интересную статистику. Так, к примеру, было ясно, что большинство обладателей «зеркалок» обожают фирму Canon. Или что многие любили снимать на идущие в комплекте (так называемые китовые) объективы и не заморачивались со сменой оптики. Так было, повторюсь, еще буквально три-четыре года назад.

А знаете, какой производитель камер сейчас самый популярный? Я вас удивлю – фирмы Apple, фотоаппараты iPhone 6, 5S и так далее. Знаете какой фотопроизводитель второй по популярности? Samsung Galaxy. Если вы сейчас скептически хмыкните, я удивлю вас еще раз. Вот эти две фотографии сняты на iPhone 6. И если они плохи, то, пожалуйста, бросьте в меня камень.

Читать дальше →
Всего голосов 51: ↑32 и ↓19+13
Комментарии131

Типичный день под присмотром Алисы

Время на прочтение6 мин
Количество просмотров135K
Недавно вышла новая версия комплекса MajorDoMo, о котором на Хабре была обзорная статья, и я решил, что было бы хорошо показать на живом примере, как оно работает. Возьмём самый обычный будний день и посмотрим, как Умный дом себя вёл в его течении.

Картинка для привлечения внимания

Читать дальше →
Всего голосов 192: ↑179 и ↓13+166
Комментарии112

Открытка-лабиринт. Подарок, который невозможно открыть, не разгадав головоломку

Время на прочтение4 мин
Количество просмотров62K
Однажды я принёс другу на день рождения подарок, завёрнутый в бумагу с узором лабиринта. Друг пошутил, что было бы здорово, если бы надо было по-настоящему найти путь, чтобы открыть подарок. Мы принялись обсуждать, как можно построить механический лабиринт, причём без использования какой-либо электроники.
Так родилась идея к следующему празднику создать открытку-головоломку. В этой статье я расскажу, как её изготовить и какие тонкости нужно учесть.


Лабиринт в процессе прохождения.
Читать дальше →
Всего голосов 151: ↑151 и ↓0+151
Комментарии51

Microsoft добавил средство сбора телеметрии в Windows 7/8/8.1

Время на прочтение1 мин
Количество просмотров300K
Сегодня на MS Windows 7 и 8.1 прилетели обновления KB3080149 и KB3075249. Телеметрическая информация передаётся на следующие сервера:
vortex-win.data.microsoft.com
settings-win.data.microsoft.com

Передача осуществляется через TCP по порту 443 с использованием SSL.
Для параноиков людей, беспокоящихся о несанкционированной передаче информации Microsoft (далее возможно и третьим лицам), предлагаю добавить сервера в список исключений маршрутизатора, а следующие строчки в файл hosts (%windir%\System32\drivers\etc\hosts):
127.0.0.1 vortex-win.data.microsoft.com
127.0.0.1 settings-win.data.microsoft.com
Всего голосов 86: ↑76 и ↓10+66
Комментарии279

Проект «Око» ч.1, пилотная

Время на прочтение15 мин
Количество просмотров83K
Изначально, моя первая публикация подобного рода «День, когда торренты остановились» была спонтанной, однако позже я столкнулся с публикацией пользователя awaik «Воины виртуальности», и понял, что смогу поделиться и другими своими работами в этом направлении. Данный пост предназначается, в первую очередь, хабу «Читальный зал», но я решил все же использовать хабы «Киберпанк» и «Научная фантастика» как наиболее близкие по смыслу. Заранее извиняюсь перед всеми, кто не хотел бы видеть подобные вещи в своей ленте. Остальным же, надеюсь, процесс чтения доставит удовольствие и я смогу развить свое повествование до по-настоящему серьезных размеров.

Сам текст под катом.

Читать дальше →
Всего голосов 28: ↑23 и ↓5+18
Комментарии27

Опасное развлечение: простой для повторения генератор высокого напряжения

Время на прочтение4 мин
Количество просмотров509K
image

Добрый день, уважаемые хабровчане.
Этот пост будет немного необычным.
В нём я расскажу, как сделать простой и достаточно мощный генератор высокого напряжения (280 000 вольт). За основу я взял схему Генератора Маркса. Особенность моей схемы в том, что я пересчитал её под доступные и недорогие детали. К тому же сама схема проста для повторения (у меня на её сборку ушло 15 минут), не требует настройки и запускается с первого раза. На мой взгляд намного проще чем трансформатор Теслы или умножитель напряжения Кокрофта-Уолтона.

Принцип работы


Сразу после включения начинают заряжаться конденсаторы. В моём случае до 35 киловольт. Как только напряжение достигнет порога пробоя одного из разрядников, конденсаторы через разрядник соединятся последовательно, что приведёт к удвоению напряжения на конденсаторах, подсоединённых к этому разряднику. Из-за этого практически мгновенно срабатывают остальные разрядники, и напряжение на конденсаторах складывается. Я использовал 12 ступеней, то есть напряжение должно умножиться на 12 (12 х 35 = 420). 420 киловольт — это почти полуметровые разряды. Но на практике, с учетом всех потерь, получились разряды длиной 28 см. Потери были вследствие коронных разрядов.

image
Читать дальше →
Всего голосов 340: ↑297 и ↓43+254
Комментарии260

10 правил дзен-программиста

Время на прочтение9 мин
Количество просмотров111K
От переводчика: это перевод статьи Кристиана Глобмайера The Ten Rules of a Zen Programmer. Статья мне понравилась, решил сделать перевод, после окончания перевода загуглил название, нашел вариант перевода: 10 принципов дзен программиста. Отличается от моего, поэтому решил свой вариант перевода все-таки запостить.

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


Одним дождливым утром я сидел за своим столом и думал об эффективной работе. До того, как я начал работать фрилансером, у меня бывало, что я работал много, но никогда не был доволен результатом. Я начал практиковать Дзен в 2006 году. То, что мне пришло в голову через довольно большое время — старые мастера Дзен уже знали сотни лет назад, как сегодняшние программисты должны работать. Хотя я не люблю посты «как быть лучшим программистом», я хочу рассказать о некоторых моих мыслях с того времени. Этот пост будет служить мне напоминанием, но если у вас есть идеи, не стесняйтесь оставлять комментарии.
Читать дальше →
Всего голосов 139: ↑118 и ↓21+97
Комментарии122

Собираем базу людей из открытых данных WhatsApp и VK

Время на прочтение15 мин
Количество просмотров219K
Etan Hunt
кадр из фильма Миссия Невыполнима II

Эта история началась пару месяцев назад, в первый день рождения моего сына. На мой телефон пришло СМС-сообщение с поздравлением и пожеланиями от неизвестного номера. Думаю, если бы это был мой день рождения мне бы хватило наглости отправить в ответ, не совсем культурное, по моему мнению, «Спасибо, а Вы кто?». Однако день рождения не мой, а узнать кто передаёт поздравления было интересно.

Первый успех


Было решено попробовать следующий вариант:
  • Добавить неизвестный номер в адресную книгу телефона;
  • Зайти по очереди в приложения, привязанные к номеру (Viber, WhatsApp);
  • Открыть новый чат с вновь созданным контактом и по фотографии определить отправителя.

Мне повезло и в моём случае в списке контактов Viber рядом с вновь созданным контактом появилась миниатюра фотографии, по которой я, не открывая её целиком, распознал отправителя и удовлетворенный проведенным «расследованием» написал смс с благодарностью за поздравления.

Сразу же за секундным промежутком эйфории от удачного поиска в голове появилась идея перебором по списку номеров мобильных операторов составить базу [номер_телефона => фото]. А еще через секунду идея пропустить эти фотографии через систему распознавания лиц и связать с другими открытыми данными, например, фотографиями из социальных сетей.
Далее перебор аккаунтов WhatsApp и VK по Москве и Ненецкому АО и распознание лиц
Всего голосов 128: ↑127 и ↓1+126
Комментарии34

Java собеседование. Коллекции

Время на прочтение10 мин
Количество просмотров894K
С недавнего времени у меня появилась настойчивая мысль, что профессиональное развитие сильно замедлилось и это хочется как-то исправить. Да, читаю книги, слушаю курсы, но в то же время приходит и понимание того, что возможно пришло время сменить работу, здесь вроде как все изучено, плавно уходим в рутину. Данная мысль сподвигла меня на рассылку своего резюме в несколько компаний — лидеров рынка. После прохождения собеседования в 3 из них, я решил, как водится внести свои 5 копеек в освещение обширной темы собеседования, а именно технических вопросов по Java коллекциям, с которыми приходится сталкиваться. Да, знаю, читатель скажет: «коллекции — избитая тема, сколько можно», но часть из приведенных ниже вопросов, я задавал своим знакомым разработчикам, которые занимают именно позиции разработчиков («крепких середнячков», по меркам недалекой от Москвы глубинки, которые уверенно справляются со своей работой на практике, а вот в теории скажем так есть пробелы, потому, что работа не требует решения каких-то нетривиальных задач, да и потому что не всем это интересно — изучать как внутри работает структура данных), вызывало растерянность. Думаю, что рассмотренный материал будет не очень интересен разработчикам выше уровня Junior (я попрошу их комментировать, дополнять и критиковать изложенный здесь материал), а вот Junior`ы уверен, найдут в этой статье интересное для себя.
Читать дальше →
Всего голосов 97: ↑86 и ↓11+75
Комментарии306

Поиск жилья без посредников в 21-м веке

Время на прочтение6 мин
Количество просмотров168K
Полагаю, все мы однажды искали себе жилье. Кто-то — в собственность, большинство, вероятно, в аренду. Все, кто хоть раз пытался найти реальные предложения на досках объявлений, знают — это нереально. Такого количества спама нет, пожалуй, ни в одной другой сфере. После того, как окунешься в этот ад, обычно руки начинают чесаться применить свою IT-шность на благо ближнему. Результатом для меня стал проект Sobnik, о котором я и хочу рассказать.

Sobnik — это плагин для Chrome, который помечает посредников на досках объявлений. Пока работает только с Avito.ru, в ближайшем будущем я добавлю Irr.ru и другие крупные доски. Всех, кто сидит на чемоданах и кому не терпится попробовать, прошу в Google Web Store. Под катом я расскажу о технической стороне проекта, о его перспективах и о моих наблюдениях за противником посредниками. Любители критиковать чужой JS-код также велкам, исходник клиентской части плагина доступен на github.

Читать дальше →
Всего голосов 106: ↑104 и ↓2+102
Комментарии103

Многопоточность в Java

Время на прочтение14 мин
Количество просмотров1.1M
Здравствуйте! В этой статье я вкратце расскажу вам о процессах, потоках, и об основах многопоточного программирования на языке Java.
Наиболее очевидная область применения многопоточности – это программирование интерфейсов. Многопоточность незаменима тогда, когда необходимо, чтобы графический интерфейс продолжал отзываться на действия пользователя во время выполнения некоторой обработки информации. Например, поток, отвечающий за интерфейс, может ждать завершения другого потока, загружающего файл из интернета, и в это время выводить некоторую анимацию или обновлять прогресс-бар. Кроме того он может остановить поток загружающий файл, если была нажата кнопка «отмена».

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

Давайте начнем. Сначала о процессах.
Читать дальше →
Всего голосов 75: ↑59 и ↓16+43
Комментарии97

Интерфейсы vs. классы

Время на прочтение4 мин
Количество просмотров284K
Обсуждая с различными людьми — в большинстве своём опытными разработчиками — классический труд «Приёмы объектно-ориентированного проектирования. Паттерны проектирования» Гаммы, Хелма и др., я с изумлением встретил полное непонимание одного из базовых подходов ООП — различия классов и интерфейсов.

Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Комментарии161

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность