Пара полезных Android-библиотек

Привет! Сегодня хочу написать о двух полезных библиотеках под Android.

  • ButterKnife. Очень хороший инструмент, позволяющий не городить кучу кода для биндинга объектов, назначения listener’ов и прочей ежедневно создаваемой нечисти. Хорошо помогает в больших проектах.

http://jakewharton.github.io/butterknife/

  • EventBus. Библиотека которая здорово поможет если не охота пилить кучу одних и тех же листенеров. Работает на Subscrib’ах для event’ов.

http://codingjunkie.net/guava-eventbus/

JavaSE и OS X

Привет!

Хочу немного рассказать про взаимоотношения JavaSE и OS X. Это немного провал.

Сперва дам ссылку на официальный Java Development Guide for Mac. Его стоит сперва читать, если кому-то вдруг вздумается (как мне) писать какое-либо Java-приложение, которое планируется запускать на Mac’ах.

Так что просто перечислю яркие места, где можно зафейлить.

  • Надо использовать Swing, а не AWT, как могло бы показаться. То бишь, конечно, первая мысль “но AWT нативен, и OS X должна сразу годно им отрисовывать!”. Нет. Фейл заключается в том, что там хитро устроены многие вещи, от event’ов с мышью и заканчивая иным минимальным размером окна.
  • Swing прекрасно работает с Aqua. Поэтому если хочется использовать true OS X GUI, то нужно использовать Swing. Посмотрите, даже табы и те выглядят прекрасно 
  • Еще важное замечание. Если вы не упаковываете свою программу в .app контейнер, то в верхней строке на экране, где ещё меню можно заметить, что title у вашей программы будет названием класса, а не тем какой вы например, установите в конструкторе.

Немного Java, погоды и xml

Привет!

Давайте я сегодня вам покажу как легко и просто можно достать данные о погоде для своего приложения на Java.

Я остановился на worldweatheronline.com API. Он отдает данные в XML, причем эти данные даже в бесплатной версии довольно подробны.

При регистрации аккаунта разработчика нам предоставляется строка с ключом, который позволяет нас идентифицировать. Дальше всё довольно просто:

Для парсинга будем использовать SAXParser

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

Собственно, всё! :)

О том, как это дело я попытался немного приспособить под AWT и какие баги фичи доселе для себя неизвестные я при этом открыл – в следующем посте :)

Крайне банальная реализация клиент-серверного взаимодействия на C

Давайте представим следующую задачу. Есть протокол  TCP, и пусть наш клиент будет запрашивать у сервера содержимое каталогов.

Для нового соединения будем создавать новый поток, и для них (новых соединений) будем использовать заранее запущенные потоки из пула. Размер пула пускай будет фиксированный.

Клиент

Сервер (с использованием POSIX-семафоров, ибо кошер):

Алсо, переопределим макроопределение ASSERT в заголовочнике:

Если объяснять на пальцах, то получается следующая схема:

socket

 

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

Компильнуть можно вот таким Makefile

Такие дела.