Привет, %username%!
Я расскажу и покажу как работает основа генерации денег в криптовалютах — майнинг. Как создается первый блок, новые блоки и как появляются деньги из ниоткуда.
Чтобы было проще понять, мы напишем свой импровизированный майнер для импровизированной криптовалюты HabraCoin.
Читать полностью »
Метка «java» - 10
Майнинг и как он работает: матчасть
2013-12-12 в 7:53, admin, рубрики: bitcoin, howto, java, mining, Алгоритмы, криптография, метки: bitcoin, howto, java, miningПишем плагин для Maven
2013-12-10 в 12:40, admin, рубрики: development, java, maven, maven 3, plugins, плагины, Программирование, метки: development, java, maven, maven 3, plugins, плагины, ПрограммированиеЕсть у меня на некоторых maven-проектах профиль, с помощью которого производится копирование shared-библиотек с последующим перезапуском сервера Tomcat.
<profile>
<id>deploy-deps</id>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<useSubDirectoryPerScope>true</useSubDirectoryPerScope>
<excludeGroupIds>исключаем некоторые группы, попадающие в war-архив</excludeGroupIds>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>05-stop-tomcat</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<arguments>
<argument>-ssh</argument>
<argument>-4</argument>
<argument>-agent</argument>
<argument>-i</argument>
<argument>${putty.key}</argument>
<argument>${ssh.user}@${ssh.host}</argument>
<argument>${tomcat.dir.root}/bin/shutdown.sh</argument>
</arguments>
<executable>plink</executable>
</configuration>
</execution>
<execution>
<id>10-clean-shared-jars</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<arguments>
<argument>-ssh</argument>
<argument>-4</argument>
<argument>-agent</argument>
<argument>-i</argument>
<argument>${putty.key}</argument>
<argument>${ssh.user}@${ssh.host}</argument>
<argument>rm</argument>
<argument>-Rf</argument>
<argument>${tomcat.dir.shared}/*.jar</argument>
</arguments>
<executable>plink</executable>
</configuration>
</execution>
<execution>
<id>15-upload-shared-jars</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<arguments>
<argument>-scp</argument>
<argument>-4</argument>
<argument>-agent</argument>
<argument>-i</argument>
<argument>${putty.key}</argument>
<argument>${project.build.directory}/dependency/compile/*.jar</argument>
<argument>${ssh.user}@${ssh.host}:${tomcat.lib.shared}/</argument>
</arguments>
<executable>pscp</executable>
</configuration>
</execution>
<execution>
<id>20-start-tomcat</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<arguments>
<argument>-ssh</argument>
<argument>-4</argument>
<argument>-agent</argument>
<argument>-i</argument>
<argument>"${putty.key}"</argument>
<argument>${ssh.user}@${ssh.host}</argument>
<argument>bin/startup.sh</argument>
</arguments>
<executable>plink</executable>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
- Для всего статичного контента используется некий каталог за пределами webapps. В этот каталог «смотрит» Nginx и отдаёт по web-пути "/static/*"
- Все shared java-библиотеки (редко изменяемые) грузятся в каталог ${catalina.home}/shared, и в Tomcat в файле conf/catalina.properties настроена для этого переменная «shared.loader»
- Для каждого инстанса Tomcat создан свой системный пользователь
- Для доступа по SSH используются ключи и у каждого разработчика он свой
Соответственно, загрузка статичного контента и shared-библиотек это отдельные профили. Всё остальное собирается в war-архив и устанавливается через стандартный web-manager Tomcat-а.
А чтобы не плодить конфигураций, используется PAgent, в который уже и добавленые нужные нам private keys. Они же используются для подключения через Putty
Лежит себе профиль в pom.xml, не кусается вроде бы, даже пашет потихоньку на благо программера, но вот только есть в нём пара «минусов» — занимает много места при развёрнутом pom.xml да ещё и в новые проекты приходится вставлять.
И если от второго минуса можно избавиться написав шаблон в любимая_IDE или свой архетип наваять, то от первого минуса не так-то просто избавить.
Точно ли не так просто? может «обернём» этот профиль в виде плагина для Maven? Сказано, сделано.
Читать полностью »
MacroGroovy — работа с AST на Groovy ещё никогда не была такой простой
2013-12-06 в 10:58, admin, рубрики: AST, dsl, groovy, java, macro, метки: AST, dsl, groovy, java, macro
Последнее время часто приходится работать с такой мощной возможностью Groovy как Compile-time AST Transformations.
Так как я не люблю излишнюю динамику, то бОльшая часть проверок DSL на валидность у нас происходит на этапе компиляции, а так же мы используем очень много генерации кода. Поэтому каждый день приходится сталкиваться с составлением ASTNode-ов вручную.
def someVariable = new ConstantExpression("someValue");
def returnStatement = new ReturnStatement(
new ConstructorCallExpression(
ClassHelper.make(SomeCoolClass),
new ArgumentListExpression(someVariable)
)
);
До боли знакомые конструкции, не правда ли? Хотите, чтобы было вот так?
def someVariable = macro { "someValue" }
def returnStatement = macro { return new SomeCoolClass($v{ someVariable }) }
Или даже так?
def constructorCall = macro { new SomeCoolClass($v{ macro { "someValue" } }) }
В данной статье речь пойдёт о моём решении этой проблемы, максимально близком к родному решению Groovy — github.com/bsideup/MacroGroovy
Google возвращается в суд, чтобы защитить будущее программирования
2013-12-06 в 10:17, admin, рубрики: api, Dura Lex, Google, java, oracle, исходный код, софтверный патент, метки: Google, java, oracle, исходный код, софтверные патенты
Исполнительный директор Oracle Ларри Эллисон
Полтора года назад компания Google одержала убедительную победу на Oracle в судебном процессе по использованию кода Java в операционной системе Android. Однако, в среду 4 декабря представителей компании Google вызвали в Апелляционный суд США для дачи показаний по поводу апелляции компании Oracle. Это значит, что процесс может возобновиться, а прежнее решение могут отменить.
Читать полностью »
CUBA — платформа для быстрой разработки бизнес-приложений на Java
2013-12-05 в 13:29, admin, рубрики: enterprise, java, Блог компании Haulmont, корпоративные приложения, Платформа, разработка, метки: enterprise, java, корпоративные приложения, платформаЕсли вы занимаетесь разработкой софта для предприятий, то возможно уже написали собственную платформу. Которая позволяет вам быстро создавать UI и логику для работы с данными, содержит общую для ваших проектов функциональность: управление правами пользователей, генератор отчетов, BPM и тому подобное, и имеет архитектуру, позволяющую легко сопровождать и масштабировать приложение. Если еще не успели написать, предлагаем познакомиться с нашей разработкой — платформой CUBA.
Платформа существует более четырех лет, но до сих пор она использовалась в довольно узком кругу разработчиков нашей компании и партнеров. Мы успели сделать на ней два тиражируемых продукта и больше десятка заказных проектов. И вот настал момент, когда после длительной подготовки, мы решились выпустить ее в виде продукта, доступного всем желающим.
Читать полностью »
Ciklum Speakers’ Corner «Централизованное управление логами и мониторинг Java приложений»
2013-12-05 в 11:08, admin, рубрики: ciklum, java, Блог компании Ciklum, метки: ciklum, java 11 декабря киевский офис компании Ciklum приглашает всех желающих присоединиться к открытому Speakers’ Corner она тему «Централизованное управление логами и мониторинг Java приложений».
Читать полностью »
Работа с OpenCV. Часть 1. Установка и Hello World
2013-12-03 в 11:20, admin, рубрики: java, open source, Работа с видео, метки: java, open source Навигатор:
Работа с OpenCV. Часть 1. Установка и Hello World
В этой серии статей будет расмотрена работа с библиотекой компьютерного зрения OpenCV. Для работы из под Java будет использоваться интерфейс JavaCV.
Читать полностью »
Подкаст 073A — первый выпус
2013-12-02 в 17:25, admin, рубрики: chef, java, ruby, баги, идиоты, Программирование, метки: chef, java, ruby, баги, идиоты, наса Полный уныния и отчаиния первый выпуск разлекательного подкаста о смешных багах в программном обеспечении от бывших ведущих «Ruby NoName Podcast». Гриша™ и labria соскучились по былой славе и решили записать что-то новое!
Слушать тут, ибо как теперь на хабре постят подкасты — я без понятия :)
В этом выпуске о NASA, Java, Ruby, Chef.
Сделай нам приятно — зафолови нас @073APodcast
Ну и мы конечно всегда рады любому фидбеку, ибо не писались давно и уже толком не помним какого это — разгребать нецензурщину в инбоксе :)
Как мы ускорили поиск на hh.ru
2013-11-28 в 9:22, admin, рубрики: java, lucene, Блог компании HeadHunter, параллельное программирование, поиск, Поисковые машины и технологии, метки: java, lucene, поиск
Некоторое время назад наш поиск стал работать быстрее. Особенно это заметно на сложных для движка запросах, в которых используется минимум фильтров и высокочастотные слова, что требует построить фасеты по результатам и отсортировать максимальные объёмы документов. Но и запросы средней сложности, где в выдаче немного документов, стали обрабатываться заметно быстрее. Почему возникла необходимость что-то ускорять и как мы это делали?
Читать полностью »
JavaFX и Spring. Вместе веселей
2013-11-28 в 7:11, admin, рубрики: Derby, java, javafx, maven, spring, метки: Derby, java, javafx, maven, spring
В данной статье я хочу рассказать о своем опыте интеграции таких вещей как JavaFX и Spring. И заодно использовать базу данных Derby и Maven для сборки приложения.
Введение
JavaFX выглядит довольно удобной и привлекательной технологией для реализации десктопных решений на платформе Java. Начиная с версии Java SE 7 Update 6, JavaFX является частью реализации Oracle Java SE, т.е. никаких дополнительных установок на стороне пользователя не требуется.
Spring со своей стороны, дает удобные фишечки в виде IoC, управление транзакциями и т.д., которые не хочется реализовывать самому.