Pull to refresh
  • by relevance
  • by date
  • by rating

Доступ к COM-порту из Java-апплета

Java
Привет всем. Хочу поделиться решением одной задачи, которая встала передо мной некоторое время назад. Состояла она в том, что было необходимо дать веб-сервису возможность получать доступ и обмениваться информацией с некоторым устройством (в моем случае карт-ридер) через COM-порт на компьютере пользователя. Для этого было решено использовать Java-апплет, и в процессе реализации возникало несколько затруднений, решение которых я и хочу описать в статье. Замечу, что в интернете мне не удалось найти единого руководства «от начала и до конца», как решить мою задачу, так что надеюсь, кому-нибудь моя статья может сэкономить несколько часов времени.

Читать дальше →
Total votes 31: ↑23 and ↓8 +15
Views22.7K
Comments 14

Маленький вирус для телефона

Lumber room
Нужна помощь программистов на жаве для мобильников.

Пришла смска, со ссылкой на JPG файл. Скачал на ББ даунлоадменеджером. Так и есть, JAR. В нем

1.png
2.png
3.png
icon.png

a.class
b.class
c.class
d.class
e.class
f.class
Midlet.class

inf.dat

вот исходное сообщение:
Привет ты мне очень нравишься и все боюсь признаться тебе в этом.Давай дружить?
Могу дать фотку если хочешь?
хттп://image.slidexxx.cn/foto.jpg

Читать дальше →
Total votes 21: ↑9 and ↓12 -3
Views321
Comments 33

Потерянный youtube клиент для sonyericsson w995 + инструкция по выковыриывнию jar

Lumber room
Купил себе сабжевый телефон. Среди всех его прелестей там присутствовал прекрасный java клиент для youtube. Который я умудрился случайно стереть (хотя я не припомню чтобы я этого делал, просто в какой-то момент заметил, что теперь его у меня просто нет).

Я перерыл весь sonyericsson.com и все его подсайты — не нашел. Докопался до m.youtube.com/app, youtube.com/yt_mobile_app, m.google.com/youtube — там мне было заявлено, что телефон не поддерживается (заходил и с компьютера и с мобильника).

Гугление с разной степенью извращенности запросов тоже не дало результатов (либо извращенность была не достаточно извращенной)

Ребята, помогите, а? Если вы являетесь счастливым обладателем сонерика в котором youtube предустановлен (не обязательно w995) — вытащите его оттуда и выложите на всеобщее обозрение, очень прошу.

Небольшая инструкция:
Известно, что передать установленное java приложение с сониэрикссоновского мобильника без спец-средств не представляется возможным, однако есть достаточно простой выход. Первым делом нужно перенести приложение на флэшку. Есть такой пункт в меню — «переместить на карту». Далее — выковыриваем флэшку, вставляем в картридер. Приложения лежат в \System\ams и имеют вид *.jar.# — это и есть искомые jar-файлы. Соответственно, софтина от youtube будет иметь название youtube.jar.# Осталось только скопировать её и переименовать.

Заранее всем спасибо.
Total votes 11: ↑9 and ↓2 +7
Views259
Comments 5

Быстрый алгоритм подсчёта контрольной суммы для больших JAR файлов

Lumber room

Задача


Написать на pure-Java быстрый алгоритм для подсчета контрольной суммы JAR файла (>1G), по-возможности обойтись без сторонних библиотек.
Читать дальше →
Total votes 9: ↑4 and ↓5 -1
Views1.1K
Comments 8

История исследования одного jar трояна

Antivirus protection
Sandbox


Статья о том, как исследовать незнакомые *.jar файлы.
Мне очень часто в ICQ приходит спам. Как правило, предлагают зайти на один из фэйковых «вконтакте» с опечаткой в имени. Но тут прислали просьбу авторизовать с ссылкой на фотографию. Сообщение банально, ничего нового, что-то вроде: «Хочу с тобой познакомиться, посмотри на фотку по ссылке ….., тебе будет интересно со мной сфоткаться». Ссылка не вела на фэйковый вконтакте, но предлагала скачать файл foto.jar.
Проверяем антивирусом – все ОК.
Читать дальше →
Total votes 84: ↑65 and ↓19 +46
Views3.8K
Comments 33

Использование SPI механизма для создания расширений

Java
Архитектура большинства Java(и не только) приложений сегодня предусматривает возможность расширения функционала посредством различного рода магических воздействий на код. В последнее время это также стало возможно, если использовать какой-нибудь модный фреймворк или IoC-контейнер. Но что делать, если приложение долгоживущее и слишком сложное для того, чтобы переводить его на использование какого либо фреймворка?

В последнем приложении, с которым я работал, был реализован на тот момент неизвестный мне велосипед SPI механизм, который искал в джарках текстовые файлы вида META-INF/services/<qualified interface name> и брал оттуда название нужного класса, реализующего этот интерфейс, далее этот класс использовался как расширение. Поискав в интернете, узнал, что Service Provider Interface(SPI) представляет собой программный механизм для поддержки сменных компонентов и что этот механизм уже довольно давно используется в Java Runtime Environment(JRE), например в Java Database Connectivity(JDBC):
ps = Service.providers(java.sql.Driver.class);
try {
  while (ps.hasNext()) {
    ps.next();
  }
} catch (Throwable t) {
  // Do nothing
}


Благодаря этому коду приложения больше не нуждаются в конструкции Class.forName(<driver class>) (хотя и с ней будут работать), JDBC драйверы будут подгружены автоматически при первом обращении к методам класса DriverManager.

SPI механизм также используется в Java Cryptography Extension(JCE), Java Naming and Directory Service(JNDI), Java API for XML Processing(JAXP), Java Business Integration(JBI), Java Sound, Java Image I/O.

Как это работает?


Весь смысл в разделении логики на сервис(Service) и провайдеры(Service Providers). Ссылки на провайдеры сохраняются в джарках расширений в текстовом файле(UTF-8) META-INF/services/<qualified service class>, в каждой строке полное имя класса провайдера. Пустые строки и комментарии(начинающиеся с символа #) игнорируются. Ограничения на провайдеры: они должны реализовывать интерфейс либо наследоваться от класса сервиса и иметь конструктор по умолчанию(zero-argument public constructor).
Читать дальше →
Total votes 31: ↑30 and ↓1 +29
Views21K
Comments 14

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

Java
Sandbox
Так уж сложилось, что до недавнего времени все проекты, написанные мною на Java я собирал, кхм, за меня собирал NetBeans. И меня такой расклад вещей вполне устраивал: после сборки всего проекта всё аккуратно складывалось в директорию dist со всеми подвязанными библиотеками, оставалось накидать туда пользовательской документации, необходимых native-библиотек (например от Firebird) и в путь, т.е. всё в архив. Когда то я делал это вручную, потом велосипедом, а потом уже Maven'ом. Под катом находится история о том, как же я пришел в стан maven и что из этого получилось.
Читать дальше →
Total votes 42: ↑41 and ↓1 +40
Views69K
Comments 56

Знакомство с Kotlin и сборка jar при помощи maven

ProgrammingJavaKotlin
Sandbox
Это пост заметка о том, как я познакомился с языком Kotlin, какие использовал для этого ресурсы, инструменты, и как я собрал его в jar и запустил в консоли.

В общем-то я PHP программист, немного заком с Java. На днях решил посмотреть Kotlin. Это менее строго типизированный язык от JetBrains до того, что он, по сути, статически типизированный. В этом его основное принципиальное отличие от Java, плюс Kotlin имеет свой приятный синтаксис. Kotlin может быть скомпилирован в JVM или JavaScript.

Приступим к знакомству. Для начала понадобится IDE Idea.
Читать дальше →
Total votes 10: ↑7 and ↓3 +4
Views14.6K
Comments 3

Исследование мобильного jar трояна

Information SecurityReverse engineering
Sandbox
Бывает так, что вам приходит смс следующего содержания: «Вам пришло MMS-сообщение, которое можно посмотреть по ссылке: ...» Хотя сейчас мобильные вирусы уже полностью переключились на Android-устройства, все же остались старинные «динозавры», которые до сих пор терроризируют мирных жителей.

В мои руки попал файл «mms5.jar», который был мгновенно детектирован Антивирусов Касперского как «троянская программа Trojan-SMS.J2ME.Smmer.f». Его мы и разберем подробно.
Читать дальше →
Total votes 22: ↑18 and ↓4 +14
Views15.6K
Comments 9

Android разработка — Gradle JarJar plugin

TINKOFF corporate blogDevelopment for AndroidGradle
Разрабатывая наш Мобильный Банк мы однажды столкнулись с такой проблемой.

А именно: при использовании библиотеки GSON для сериализации/десериализации в/из JSON на некоторых устройствах от HTC в рантайме мы получали креш. Причина такого поведения в том, что некоторые устройства от HTC имеют в своей прошивке свою версию GSON, которая более старая чем та которую использовали мы в своих проектах. А андроидовский java class loader при загрузке класса в память предпочитает «системную» версию, вместо версии в проекте.

Кроме того на некоторых устройствах существует аналогичная проблема с OkHttp — тоже довольно популярной библиотекой в мире андроид разработки.

Для решения проблемы необходимо переупаковать GSON (или любую другую библиотеку) с помощью утилиты JarJar. После переупаковки артефакт будет иметь новую структуру пакетов, которую необходимо использовать в директивах импорта в своем проекте. Для этого нужно подключить переупакованный jar к своему проекту вместо исходного.

Нам захотелось автоматизировать эту задачу и в итоге появился Gradle JarJar Plugin, доступный в Maven Central. Плагин позволяет указать jar-библиотеки и правила для переупаковки их с помощью JarJar.

Подключение и испольование...
Total votes 20: ↑16 and ↓4 +12
Views9.9K
Comments 3

Как выгрузить dll из Java-машины

Java
Recovery mode
Java взаимодействует с операционной системой через методы, помеченные ключевым словом native, при помощи системных библиотек, загружаемых процедурой System.loadLibrary().

Загрузить системную библиотеку очень просто, а вот чтобы ее выгрузить, как оказалось, нужно приложить немало усилий. Как именно выгружаются системные библиотеки, и зачем это нужно я постараюсь рассказать.
Читать дальше →
Total votes 25: ↑24 and ↓1 +23
Views7.4K
Comments 21

Как при разработке плагина для Jira упаковать зависимую библиотеку в obr

Райффайзенбанк corporate blogWebsite developmentProgrammingJavaAtlassian
Tutorial
При разработке плагинов для Jira периодически приходится использовать библиотеки, которых в Jira нет, поэтому их нужно установить вместе с разрабатываемым плагином. В Jira сторонние библиотеки можно упаковать в плагин двумя способами:

Указать у сторонней библиотеки область видимости компилирования, и тогда классы из этой библиотеки будут упакованы в jar-файл разрабатываемого плагина. Для этого необходимо в файле pom.xml написать:

  <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.2.2-atlassian-1</version>
	<scope>compile</scope>   
</dependency>

Собрать плагин таким образом, чтобы jar-файл сторонней библиотеки находился в папке dependencies файла obr разрабатываемого плагина.
Читать дальше →
Total votes 27: ↑27 and ↓0 +27
Views3K
Comments 1

Multi-release JARs — Плохо или хорошо?

Haulmont corporate blogJavaGradle
Translation

От переводчика: мы активно работаем над переводом платформы на рельсы Java 11 и думаем над тем, как эффективно разрабатывать Java библиотеки (такие как YARG) с учётом особенностей Java 8 / 11 так, чтобы не пришлось делать отдельные ветки и релизы. Одно из возможных решений — multi-release JAR, но и тут не всё гладко.


Java 9 включает новую опцию Java-рантайма под названием multi-release JARs. Это, возможно, одно из самых противоречивых нововведений в платформе. TL;DR: мы считаем это кривым решением серьезной проблемы. В этом посте мы объясним, почему мы так думаем, а также расскажем, как вам собрать такой JAR, если вам сильно хочется.


Multi-release JARs, или MR JARs, — это новая функция платформы Java, появившаяся в JDK 9. Здесь мы подробно расскажем о значительных рисках, связанных с использованием этой технологии, и о том, как можно создавать multi-release JARs с помощью Gradle, если вы ещё хотите.


По сути, multi-release JAR — это Java-архив, включающий несколько вариантов одного класса для работы с разными версиями среды исполнения. Например, если вы работаете в JDK 8, среда Java будет использовать версию класса для JDK 8, а если в Java 9, используется версия для Java 9. Аналогично, если версия создана для будущего выпуска Java 10, рантайм использует эту версию вместо версии для Java 9 или версии по умолчанию (Java 8).


Под катом разбираемся в устройстве нового формата JAR и выясняем нужно ли это всё.

Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Views3.2K
Comments 3

Эволюция средств поставки, или размышления о Docker, deb, jar и прочем

SRG corporate blogDevelopment for LinuxDevOpsHistory of IT


Как-то в один момент я решил написать статью про поставку в виде контейнеров докер и deb-пакетов, но когда начал, меня почему-то понесло в далекие времена первых персональных компьютеров и даже калькуляторов. В общем, вместо сухих сравнений докера и deb получились вот такие вот размышления на тему эволюции, кои и представляю на Ваш суд.
Читать дальше →
Total votes 17: ↑13 and ↓4 +9
Views7.3K
Comments 41

Создаем общую кодовую базу

ProgrammingDevelopment of mobile applicationsGitDevelopment for Android


Из проекта в проект мы замечаем, что наш код, выполняет одни и те же функции и выглядит почти одинаково. Это заставляет задуматься — а не выполняем ли мы лишнюю работу, переписывая одно и то же? Мы начинаем копировать классы из предыдущих проектов и все равно понимаем, что делаем что-то не то и оказываемся правы — просто копируя классы из проекта в проект, мы запросто можем что-то потерять/заменить/затереть, а если еще наша команда ведет несколько проектов одновременно, то обнаружение ошибок в заимствованных классах потребует изменений вручную во всех проектах. Устав наступать на эти грабли, мы решаем, что нужен общий код, который будет расшариваться на все наши проекты и любые изменения в нем будут легко подтягиваться. Да, мы создаем свою библиотеку переиспользуемых компонентов! О разных способах организовать свою библиотеку, о всех плюсах и минусах подходов вы узнаете под катом :)

Читать дальше →
Total votes 12: ↑7 and ↓5 +2
Views4.2K
Comments 1