
Уважаемое Хабр-сообщество, хотел бы рассказать об одном из продуктов, который мы разрабатываем — Stringer Java Obfuscation Toolkit (
https://jfxstore.com/stringer). Думаю многим Android и Java-разработчикам будет интересно, особенно, в свете подобных публикаций:
habrahabr.ru/post/141522/.
Сразу скажу, что решение коммерческое, чтобы сэкономить кому-то, из читающих этот пост, время.
За прошлый, почти полный, год, мы сделали довольно много интересных вещей:
- У нас появилась поддержка платформы Android
Вместо посвящения
Всегда… Нет. Никогда не выходи в пургу пиши такой код ни для чего, кроме подобных забав.
Гийом — lead разработки языка Groovy
Reflection во зло
Один мой друг — большой любитель головоломок. Всяких, и программистких в том числе. Вот его последняя забава:
Напишите нужный код в static initializer, чтобы assert перестал падать:
public class Test {
static {
//Write some code here
}
public static void main(String[] args) {
Integer a = 20;
Integer b = 20;
assert (a + b == 60);
}
}
Если вы решите попробовать, не забудьте
включить assertions (флагом -ea).
Дальше будет решение и кое какие рассуждения на тему, так что если вы уже справились, или вам влом -смело под кат.
Достаточно часто на практике возникает необходимость воспользоваться такими конструкциями как «пара» (
Pair<First, Second>), менее часто «тринарными» объектами (
Triplet<First, Second, Third>) и более длинными цепочками ассоциированных объектов. В связи с чем всегда удивлялся, почему в JDK (в
java.lang.* или
java.util.*) до настоящего момента нет стандартной
Pair<First, Second> или более длинных конструкций. Думаю многие программисты практикующие на Java имеют свою реализацию «пары». Не исключением являюсь и я.
И вот в очередной раз наткнувшись на необходимость работать с большим количеством различных кортежей, решил взяться за эту проблему системно. Придумал название проекту, определил цели и после экспериментов, занявших некоторое время, выложил код ( git://github.com/telesik/rumba.git ).
Чего хотелось достичь:
- Необходима удобная конструкция (назовем ее кортеж) для ассоциации нескольких объектов, типы которых определялись бы из позиции в полученном кортеже;
- Кортеж должен быть неограниченным по длине и типу;
- Типы элементов должны быть относительно контролируемым (как минимум ограничен дженериками);
- Описание структуры кортежа должно быть простым;
На сайте Groklaw публикуется текстовая трансляция судебных слушаний Oracle против Google, где речь идёт о возмещении ущерба $150 тыс. за «воровство» для Android функции rangeCheck и тестовых файлов. В обсуждении встречаются интересные моменты. Например, вчера судья Алсуп, ведущий это дело, вступил в небольшую перепалку с адвокатом Дэвидом Бойзом, который представляет интересы Oracle: см.
запись разговора.
Oracle: Вопрос не в том, насколько велик ущерб. Вопрос в том, можно ли закрыть глаза на коммерческую выгоду нарушителя исходя из того, что объём нарушений мал.
Кроме того, для меня не ясно, что справедливо сравнение девяти строк кода и 15 миллионов, потому что из них 10 миллионов составляет ядро Linux. Но всё равно, девять строк — это небольшой процент. Тестовые файлы гораздо больше, но они не присутствуют, по крайней мере, в текущей версии Android.
Все привет! Редакция подкаста «Разбор Полетов» рада представить Вам очередной
17-й выпуск, в котором мы расскажем Вам:
- Отчет Алексея по JavaOne Russia и по SpringOne
Многие разработчики для Liferay Portal 6.0 EE остались недовольны политикой компании Liferay inc., т.к. при выходе версии 6.1, они лишились возможности использования триальных лицензий во время работы над проектами, а ключи от новой версии не являются обратно-совместимыми. Что делать? Если компания, производящая данный продукт не идет на встречу разработчикам и насильно переводит всех на новую версию, а предоставить всем разработчикам реальную лицензию от production-сервера для использования во время разработки — не самая лучшая идея. Выход есть, пусть даже не самый элегантный, но если выбора не оставляют — все равно можно решить данную проблему. Добро пожаловать под кат.
На данный момент для платформы Android существует несколько решений, позволяющих реализовать ORM-подход для работы с базой данных, но основных два. Это
ORMLite и
GreenDAO.
Для новичков стоит сделать отступление и рассказать что такое ORM вообще.
ORM — object-ralational mapping. Объектно-реляционное отображение означает, что программисту гораздо удобнее оперировать с объектами, которые он использует в своём приложении, нежели чем с таблицами, в которых хранятся данные в
реляционных базах данных. Для связи реляционных СУБД с объектной моделью приложения используются ORM-технологии. Так для решения задач объектно-реляционного отображения в Android используют один из сторонних фреймворков. GreenDAO и ORMLite — являются библиотеками с открытым кодом.
Bombermine Online — результат последних двух недель тестирования и подготовки движка для большого кол-ва игроков онлайн.
Движок написан на Java + Jetty (бекэнд). Фронтэнд — HAProxy + Nginx + Node.js. Клиентсайд — GWT, который транслируется в HTML5/canvas + javascript + websockets. Хостится всё в облаке.
На данный момент рекорд — 50 игроков онлайн. Настроен весь необходимый софт для мониторинга нагрузки. После хабраэффекта обещаем выложить отчёт. Ждём гостей.
Всем привет!
Думаю, большинство из вас знакомы с социальными сетями "
Вконтакте" и "
Last.fm". В данной статье мы рассмотрим маленький пример интеграции между API обоих сервисов. Если быть точнее, будем получать список любимых треков с last.fm, искать бинарный контент в ВК и сохранять на HDD.
Статья будет скорее интересна новичкам, чем профессионалам, тем не менее, требует определенной технической подготовки. Тестовый проект реализован средствами Java.
Если читателю интересно, что из этого получилось, прошу пожаловать под кат.