Как стать автором
Поиск
Написать публикацию
Обновить
0
0
Евгений @lafayette

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

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

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

Время на прочтение4 мин
Количество просмотров142K
Готовясь к собеседованию, я решил освежить память да и вообще поискать каверзные и малоизвестные нюансы языка 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("Хабрахабр - торт!");
				}
			});
		}});
	}});
}};


Остальные четыре пункта под катом.
Читать дальше →

Создание генератора мира для minecraft

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

Введение


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

Читать дальше →

Нифига себе сходил за хлебушком, или история одного взлома

Время на прочтение8 мин
Количество просмотров117K
Всё началось с того, что ко мне (как к фрилансеру) обратились за помощью и попросили настроить exim4 так, чтобы почтовая рассылка не попадала в спам. Даже заботливо ссылку прислали на замечательную статью.

Работы на пару часиков включая обновление DNS, но не тут то было. Залогинившись под рутом я включил свой любимый screen по привычке командой screen -x и лицезрел прелюбопытнейшее действо в любимой многими папке /dev/shm. Злоумышленник не удосужился прикрыть сессию screen, либо всё еще работал в ней. И тут начинается квест:

Первое, что я сделал — просмотрел, чем же занимался злоумышленник:

Читать дальше →

Алгоритмы LZW, LZ77 и LZ78

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

Хочется продолжить свою предыдущую тему об алгоритмах сжатия. В этот раз я расскажу об алгоритме LZW и немного об его родственниках алгоритмах LZ77 и LZ78.

Алгоритм LZW


Алгоритм Лемпеля — Зива — Велча (Lempel-Ziv-Welch, LZW) — это универсальный алгоритм сжатия данных без потерь.
Читать дальше →

Секреты JDK

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

Про Unsafe в Java не слышал только ленивый, однако это не единственный магический класс в Sun/Oracle JDK, стирающий границы Java платформы и открывающий тропинки, не нанесенные на карту публичного API. Я расскажу про некоторые из них, принесшие пользу в реальных проектах. Но помните: недокументированные возможности лишают ваше приложение переносимости на другие Java платформы и, кроме того, являются потенциальным источником нетривиальных ошибок. Я даже зря написал слово «приложение». Лучше сказать, что описанные ниже классы вовсе не годятся для приложений! Скорее, они представляют интерес лишь для системного ПО и для любознательных программистов, т.е. для вас :)
Читать дальше →

Tsung: Нагрузочное тестирование Web-приложений

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

Tsung — это распределенная система нагрузочного тестирования, написанная на Erlang'е. Заявлена поддержка HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP and XMPP/Jabber. В этой статье я опишу как протестировать обычный web сайт на нагрузку.
Читать дальше

Типичные случаи утечки памяти в Java

Время на прочтение4 мин
Количество просмотров75K
Большинству разработчиков известно, что сборщик мусора в Java не является универсальным механизмом, позволяющим программисту полностью забыть о правилах использования памяти и о том, в каких случаях осуществляется его работа. Ниже описаны типичные случаи утечки памяти в java-приложениях, встречающиеся повсеместно.
Итак, о чём должен помнить каждый java-программист.
Читать дальше →

Эффективное использование Vim

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

Введение


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

Эта статья — не набор “волшебных команд” и рецептов (cookbook, как называют такие наборы по-английски), хотя они тут тоже присутствуют, а, скорее, попытка описать, как общие принципы построения эргономичных интерфейсов можно применить в практике использования Vim, чтобы сделать из него удобную и эффективную среду работы с текстами.

Эта статья также не является tutorial’ом для начинающих пользователей Vim, хотя и им (а также пользователям Emacs) может быть интересна, поскольку некоторые упоминаемые принципы являются достаточно общими и действуют не только в системах редактирования текстов, а вообще везде, где идет речь об использовании компьютера для редактирования чего-либо. Тем не менее, я предполагаю, что читатель знаком с основными концепциями, применяемыми в Vim (режимы, регистры, буфера, команды) и не останавливаюсь на их подробном описании.

По умолчанию Vim настроен очень старомодно, и эта настройка подразумевает, что пользователь при работе с текстом будет мыслить метафорами пятидесятилетней давности, как будто бы сейчас заря эпохи UNIX. Однако дизайн Vim позволяет сделать несколько настроек, после которых система станет выглядеть вполне прилично и станет работать весьма эффективно, сочетая в себе полезные черты и древних юниксовых инструментов работы с текстом, и современных WYSIWIG-процессоров, при этом обходя, насколько это возможно, присущие им недостатки. Вот об этих настройках и приемах их использования и пойдет речь.
Читать дальше →

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

Время на прочтение2 мин
Количество просмотров250K
В Java 5 было добавлено много вещей для организации многопоточности и особенно касаемо организации параллельного доступа. В этой и последующих статьях мы пройдемся по некоторыми из них.
ExecutorService и ScheduledExecutorService будут рассмотрены в этой статье

Реализация одностраничного приложения средствами History API в ASP.NET MVC

Время на прочтение11 мин
Количество просмотров10K
Добрый день уважаемые хабаровчане. На сайте уже не раз поднимался вопрос о проблеме создания одностраничных ajax приложений. С такой задачей некоторое время назад столкнулся и я. Однако я недоумевал, почему обладая возможностями html5 и мощью MVC я должен столько всего прописывать вручную, да еще и с помощью js.

Возможно именно [holywar=on]неприязнь к языку js[holywar=off] побудили меня создать простое решение, опирающиеся на возможности ASP.NET MVC. Далее, я подробно опишу проблемы, которые возникают при попытке создать одностраничное ajax приложение, и поэтапно рассмотрю создание полноценного решения.

Если стало интересно — добро пожаловать под кат (код и картинки прилагаются).
Читать дальше →

Метод определения и динамической защиты от DDoS типа SYN-flood

Время на прочтение4 мин
Количество просмотров17K
Привет, Хабрасообщество.

Об актуальности DDoS атак в наше время рассказывать не стану. Достаточно взглянуть на статистику. Сталкиваюсь с атаками по роду деятельности довольно часто, возникла идея динамической защиты от DDoS типа SYN-flood на северах Linux и FreeBSD. Также предложена реализация мониторинга SYN-flood по SNMP.

Об этом всём под катом.
Читать дальше →

Nmap — руководство для начинающих

Время на прочтение3 мин
Количество просмотров536K
Многие слышали и пользовались замечательной утилитой nmap. Ее любят и системные администраторы, и взломщики. Даже Голливуд знает про нее — в фильме «Матрица» при взломе используется nmap.
Читать дальше →

От велосипеда к Maven

Время на прочтение13 мин
Количество просмотров73K
Так уж сложилось, что до недавнего времени все проекты, написанные мною на Java я собирал, кхм, за меня собирал NetBeans. И меня такой расклад вещей вполне устраивал: после сборки всего проекта всё аккуратно складывалось в директорию dist со всеми подвязанными библиотеками, оставалось накидать туда пользовательской документации, необходимых native-библиотек (например от Firebird) и в путь, т.е. всё в архив. Когда то я делал это вручную, потом велосипедом, а потом уже Maven'ом. Под катом находится история о том, как же я пришел в стан maven и что из этого получилось.
Читать дальше →

Стратегия оптимизации веб-проекта с использованием MySQL

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

Введение


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

Интересно, что, как правило, даже тяжелые фреймворки (вроде Symfony или RoR) на «медленных» языках, в production-окружении работают достаточно сносно по скорости, а основные «тормоза» вызываются SQL-запросами и неграмотным кешированием (к примеру, инициализация достаточно сложной и большой конфигурации проекта на Symfony занимает около 80 мс, а времена исполнения страницы, при этом, иногда достигают секунды и более).

Если вы смогли определить, что это — ваш случай, и ваш проект на MySQL, то эта статья может вам помочь принять конкретные меры и исправлению ситуации с закреплением результата и предотвращением возникновения откровенных проблем с СУБД впоследствии.
Читать дальше →

Интерполяция: рисуем гладкие графики средствами PHP и GD

Время на прочтение6 мин
Количество просмотров59K
Распространенной задачей для программиста является рисование графиков. Входными данными является массив точек (xi;yi). Как правило, мы знаем только некоторые значения — в определенных точках графика. Чтобы построить непрерывный график кривой необходимо прибегнуть к интерполяции или аппроксимации.



Интерполяция — построение кривой, проходящей через заданные точки.
Аппроксимация — приближение кривой к исходной, но не обязательно проходящей через заданные точки.

В этом топике я хочу продемонстрировать свою библиотеку для PHP, которая производит интерполяцию с помощью многочлена Лагранжа, C-сплайна и сплайна Акимы, а также аппроксимацию кривой Безье. Дополнительно в ней реализована отрисовка отрезка со сглаживанием (антиалиасингом).

Кратко рассмотрим методы интерполяция и аппроксимации.
Читать дальше →

Делаем релизы с помощью Maven в Java

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

О чем эта статья?


Эта статья о том:
  1. Что такое релиз?
  2. Как нумеруются релизы?
  3. Зачем при релизе нужен бранч?
  4. Почему релиз это больше, чем просто jar (war, ear, zip, etc)?
  5. Что такое maven-release-plugin?
  6. Делаем бранч c помощью release:branch.
  7. Подготовка к релизу с помощью release:prepare.
  8. Выпускаем релиз с помощью release:perform.

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

Дозаправка в дороге — мобильная USB зарядка

Время на прочтение2 мин
Количество просмотров70K
Почти все современные гаджеты могут заряжаться от USB порта компьютера или зарядки с таким портом.
Мода на компактные устройства привела к тому, что аккумуляторы в них не слишком емкие. Например мой HTC HD2 едва выдерживает рабочий день при активном использовании, а в режиме GPS навигатора и того меньше. В итоге приходится бегать от зарядки до зарядки или носить с собой запасные аккумуляторы к каждому устройству. Но комплект разных аккумуляторов обойдется недешево да и замена аккумулятора на прогулке — это минут 5: выключить, сменить аккумулятор, включить, запустить софтинку, дождаться пока снова найдет спутники. Неприятно.

Я покажу как сделать USB зарядку, которую можно взять с собой.
RMPS
«RMPS»
Она позволяет зарядить через стандартный USB порт все, что ест не больше 3А, а сама питается постоянным напряжением примерно от 7.2В до 22В. (авиамодельные, автомобильные аккумуляторы, все, что есть под рукой).
Себестоимость порядка 280-300 рублей. Времени на изготовление примерно 1 час. Размер — чуть больше батарейки АА.
Читать дальше →

Прямой московский номер в Skype

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


В статье будет описан способ подключить прямой московский номер в Skype с бесплатными входящими за 8 долларов в год.

UPD: Данный способ уже не актуален, всё можно сделать проще habrahabr.ru/blogs/skype/130299/#comment_4599646

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

Для этого будут использованы два sip-провайдера и собственный сервер asterisk для коммутации.
Читать дальше →

Выполнение кода по расписанию в Spring Framework

Время на прочтение2 мин
Количество просмотров28K
Тут приспичило мне периодически запускать некоторый код в небольшом проектике написанном на Spring Framework. Я уж было приготовился по старой памяти (еще со спринга 2.x) к долгому прикручиванию quartz-а и написании кучи конфигов на xml, как оказалось все значительно проще
Читать дальше →

Некоторые функции, которые я использую в своих проектах

Время на прочтение4 мин
Количество просмотров2.6K
Доброго времени суток, Под катом предлагаю Вам ознакомиться с функциями на PHP, которые я использую в большинстве своих проектов. В статье мы получим погоду для любого города мира при помощи Google, получим Whois и favicon домена, количество ретвитов определенной страницы и сделаем генератор ссылок на профили в твиттере, сделаем скриншот сайта, соберем css в 1 файл как у яндекса, распакуем zip и преобразуем картинку в ASCII-код.
Прошу под кат

Информация

В рейтинге
Не участвует
Откуда
Великий Новгород (Новгород), Новгородская обл., Россия
Дата рождения
Зарегистрирован
Активность