Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

Показаны сообщения с ярлыком Java. Показать все сообщения
Показаны сообщения с ярлыком Java. Показать все сообщения

2016-04-11

Seam Carving

Seam Carving это способ поменять у картинки размеры, вырезая полоску пикселов с наименьшей значимостью.

И задали нам задачку, написать программу для этого дела
Это из курса

Дело нехитрое, когда знаешь – как. Сел, написал. Отдаю на проверку.
А, кстати, проверяльщик автоматический у них довольно мощный, порядка сотни тестов да с разными комбинациями параметров. Но, ЧСХ для этого курса, студням код тестов недоступен, и это печалит неимоверно.
Проверил: два теста провалено, это около 2% итоговой оценки. С одной стороны хорошо: с первой попытки я изобразил корректную программу, тест фейлится на вспомогательном коде, где надо вернуть mutable картинку. То есть, по идее, я отдаю картинку и клиент может делать с ней что хочет, откуда следует, что отдавать я должен копию. Авотхуй.

Я, сцуко, три часа потратил на то, чтобы угадать, что этим блядским двум тестам надо.
Test 10a: Check that client can mutate the Picture object that is passed to the constructor
==> passed
Test 10b: Check that client can mutate the Picture object that is returned by picture()
==> passed

Два самых интересных варианта непрохождения тестов
Test 10a: Check that client can mutate the Picture object that is passed to the constructor
==> passed
Test 10b: Check that client can mutate the Picture object that is returned by picture()
     - repeated calls to picture() return reference to same Picture object
==> FAILED

Test 10a: Check that client can mutate the Picture object that is passed to the constructor
     - picture() return a Picture object that is not equal to argument Picture object
       even though no seams have been removed
==> FAILED
Test 10b: Check that client can mutate the Picture object that is returned by picture()
==> passed
Фактически, два взаимоисключающих условия: 1-- надо отдавать копию; 2-- не надо делать копию, если картинка не ресайзилась.

Сразу скажу, тесты проверяют не совсем то, что написано в сообщениях об ошибках.
Методом тыка я выяснил, что тесты проверяют: 1-- ты работаешь с копией входных данных; 2-- если в отданной тобой картинке клиент поменял хоть один пиксель, надо делать новую копию.

В итоге, вместо очевидного решения с кешированием результата, получается вот такое говно (зато 100% балл)
    public Picture picture() {
        if (cache == null) {
            cache = new Picture(currPic);
            return cache;
        }
        if (cache.height() != height || cache.width() != width) {
            cache = new Picture(currPic);
            return cache;
        }
        for (int row = 0; row < height; row++) {
            for (int col = 0; col < width; col++) {
                if (currPic.get(col, row) != cache.get(col, row)) {
                    cache = new Picture(currPic);
                    return cache;
                }
            }
        }
        return cache;
    }

Ну что тут сказать: Принстон, Принстон … учился я в этом вашем Принстоне. Ничего особенного, там тоже говны имеются.

P.S.
Лично меня в такой ситуации раздражают две вещи:
– дайте студню тесты, чтобы он мог понять, что же от него требуют. Большинство курсов не стесняется выдать код для тестирования.
– вот такие вот два теста – что они, блиат, проверяют? Что я умею работать с картинкой в попиксельном режиме? Тема задачи была: Shortest path in directed acyclic graph. Я уж не говорю о том, что мутабельность/иммутабельность проверяют не так (не сравнением адресов).

А в целом, вот в такие моменты начинаешь особо ценить функциональный подход (иммутабельные типы данных).





original post http://vasnake.blogspot.com/2016/04/seam-carving.html

2015-05-05

Вакансия

Увидел вакансию. Не шедевр, но глоток свежего воздуха как минимум. Был бы мастер в Java/Scala, тут же бы им отписался.

Практически полный текст:

Searching for 2 Fucking Great Developers ($115k - $140k / yr) (San Diego)

If you're a great fucking developer who wants to make a bunch of money working somewhere awesome then keep reading. We're a San Diego Tech Company (relocation covered for the right candidates) that's looking for not one but two awesome developers. So digest this ad, accept your fate, and take one last lap around your office to say goodbye to your friends because you're about to upgrade.

The Pay:
Starting Salary Range: $115,000 - $140,000 / yr + Medical + Dental + Stock Options + Relocation costs up to $2,500

The Job:
Our current stack runs on Scala, Java, MongoDB, Redis, Bootstrap, Play Framework, Guice, and AngularJS. If you think you can handle that shit, then it'd be fucking awesome if you also knew SQL. Mostly looks great but you've never touched Scala or MongoDB? That happens, so fucking check them out and include a blurb with your job app with why you're excited to fucking learn and use them.

What You'll Be Doing:
This quarter you'll be adding kick ass new features to our already massively successful products. Afterwards depending on your ability, interests, and attitude you'll be working on any number of projects like new products, internal tools, improving our already fucking great scalable architecture, or skunk works machine learning data analysis for new product R&D.

On Leaving Whatever The Fuck You're Doing Now:
Don't fucking worry about it. They'll find somebody else and you'll be off balling with a fresh start. It doesn't matter if you have a great job, shit job, or you're marathon'ing through X-Files on Netflix while collecting unemployment. Mulder and Scully will be right where you left them, and your ex-coworkers will stay in touch too but honestly fuck 'em, you'll have new, better friends.

The People:
I promised new friends didn't I? We have boys, we have girls, we have kite surfers, we have regular surfers, we have video game fanatics, we have clubbers (night clubs, not seals), we have a Scottish guy, we have a Serbian girl, we have movie nerds, we have board game nerds, we have regular nerds, we have musicians, and we have somebody out this week for Coachella. Look, the fact is we can fill whatever type of friendship void you have.

The Environment:
We're on the top floor of a building right next door to a fucking brewery. We have Arcade games (yes we have Mortal Kombat), Pinball, and free fucking water. The floor we are on is filled exclusively with tech startups and we have a huge monthly Werewolf (http://www.games-wiki.org/wiki/Werewolves_of_Millers_Hollow/) game (beer included) held in our break room comprised of people from all of the companies on the floor, as well as from various other companies downtown.

Company Fucking Meetings:
We celebrate our successes and we've had a lot of them lately, hence the hiring. In the last year alone we've gone on a sailing trip, a downtown scavenger hunt, frisbee golfing, kart racing, and more. Next up? Not sure but it's always a group decision. . .Laser tag, paintball, movies, or even repeats of things we've done and enjoyed are all on the table. How about you fucking suggest something?

Hiring Process:

1) You e-mail us the shit requested in this job ad.
2) We video skype and figure out if you know what you said you know.
3) You come meet the team for a vibe check.
4) Tell everybody about how great your fucking life just became because you're super fucking hired.

Good Ideas:
Send us some self assessed scores for the job requirements listed above. -- Don't you fucking bullshit us, we're going to find out during the Skype call so don't waste your time or ours. I'm fucking serious if you're thinking about putting a 9/10 for Javascript and you don't know what a closure is you're responding to the wrong ad. -- Answer honestly, maybe we don't give as many fucks about Javascript as you think so 6/10 is fine.
E-mail us an excerpt of some code you've written that you're proud of. -- Tell us why out of all the shit code you've written in your life you decided to send us that.
Type something to us. Anything. Tell us something about yourself. -- This section will not be graded.

You're Doing It Wrong:
Shit I have to go read through my notes on algorithm efficiency and study up on logic brain teasers. -- Nope.
I need to update my resume. -- Nah, if it's out of date just put NEEDS updating.
I better get my interview clothes dry cleaned. -- Slow your roll, after the e-mail screen it's a Skype video call.

P.S. Share this shit. Don't be worried about friends or coworkers stealing your job, there are two fucking jobs open. Maybe even more if we find people that we can't pass up.

P.P.S. We do not encourage or display profanity levels above the social norm in the work place. As such, profanity will not be accepted in lieu of skill






original post http://vasnake.blogspot.com/2015/05/blog-post.html

2013-11-28

Был JBoss Application Server, стал WildFly

Наши корреспонденты сообщают:

Компания Red Hat представила новый открытый проект WildFly, призванный заменить собой Java EE сервер приложений JBoss и сосредоточить развитие на интенсивном продвижении новых технологий. Кроме смены бренда и переосмысления задач, новый продукт будет отличаться поддержкой Java EE 7, модульной структурой, ориентацией на высокую производительность, увеличением гибкости и реализацией современных методов разработки.
...
Анонсированное изменение затрагивает только JBoss Application Server, который переводится под бренд WildFly
WildFly будет сфокусирован на быстром внедрении инноваций и продвижении новых технологий. В качестве основной области использования WildFly рассматривается разработка и быстрое внедрение прототипов.


JBoss устарел, да здравствует WildFly! В нем даже WebSockets будет, во как. Лучше поздно чем никогда, точно.


РедХатовцы таки молодцы. Умудряются и деньги зарабатывать и ОпенСорц развивать.

original post http://vasnake.blogspot.com/2013/11/jboss-application-server-wildfly.html

2013-07-04

Декларативная навигация

Любопытное решение проблемы навигации в корпоративном приложении, в котором множество таблиц, форм, сущностей, видов/представлений. Типа, начал со списка счетов и закончил учетными данными пользователя.

Очень часто приходилось лопатить горы документации, пытаясь разобраться и понять логику хитросплетений экранов. Навигация по приложению часто представляла собой огромный набор инструментов, где нужно знать, какой инструмент, в какой последовательности, для каких деталей применять. В общем, всю логику навигации по приложению приходилось хранить у себя в голове.

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


Сделано на Java.

Решение годное, но для узкого класса приложений, типа «админка всего», где нет четких сценариев выполнения бизнес-процессов.

Понаделал видов, контроллеров и связал их воедино через декларацию переходов.

original post http://vasnake.blogspot.com/2013/07/blog-post_4.html

2013-01-11

Isis

One of the original motivations for Isis itself was to be able automatically generate a user interface for a domain object model.

И для Java есть свой RoR

Apache Isis даёт возможность определить бизнес-логику в виде сущностей, предметных сервисов и репозиториев, на основании которых фреймворк динамически сгенерирует готовое представление предметной модели в форме web-приложения или RESTful API. Наглядный пример процесса создания простейшего приложения с использованием Apache Isis можно оценить на данной странице.




Apache Isis is a framework for rapidly developing domain-driven apps in Java. Write your business logic in entities, domain services and repositories, and the framework dynamically (at runtime) generates a representation of that domain model as a webapp or as a RESTful API.


Нарисовали модель, скормили ее Исизу и получили готовое RESTful веб-приложение. Красота же.


original post http://vasnake.blogspot.com/2013/01/isis.html

2012-11-02

Еще кофейку

Еще одна реализация JVM на Javascript. Там и демо есть.

DoppioVM - виртуальная машина Java, выполняемая как web-приложение на JavaScript
В рамках проекта DoppioVM развивается реализация Java VM, написанная на языке CoffeeScript и позволяющая запускать в браузере Java-апплеты без необходимости установки Java-плагина. Код DoppioVM транслируется в JavaScript-представление, которое может функционировать в любом современном браузере.



Doppio started out as the mid-term project for a Graduate Systems Seminar. It has since taken on a life of its own, and is complete enough to run implementations of GNU Diff, LZW compression, and the Java 4 compiler. Here's what's supported thus far:
  • All 200 opcodes
  • Exact emulation of Java's primitive types, include the 64-bit long
  • Generics
  • Most of the Reflection API
  • File and Standard I/O
  • Major JDK libraries such as String, Pattern, and HashMap.
The code has been tested on the latest versions of Chrome, Firefox, and Safari, but should run on any browser that supports LocalStorage and Typed Arrays.
Check out the demo!



Прекрасная разминка для студенческой межушной мышцы. Хотя, наверное, полезнее было бы дать студням что-нибудь более практически применимое. Да хоть Mono-Moonlight приподнять или LLVM расширить.

original post http://vasnake.blogspot.com/2012/11/blog-post.html

2012-10-24

JPype

На фоне современной веб стартапной истерии может показаться, что у языков программирования C/C++, Java и прочих Fortran-ов нет будущего. Что это умирающая культура. Но это не так. Вот, к примеру, Java — масса проектов, невероятное количество полезных (и не очень) библиотек

Just look on Sourceforge, the are 3267 Python-related projects, and 12126 Java-related projects. And that not counting commercial interests

А раз так, очень вероятно, что одна (или много) из существующих Java библиотек может понадобиться при разработке чего-либо на Python. Нет проблем, JPype нас спасет.

JPype is an effort to allow python programs full access to java class libraries. This is achieved not through re-implementing Python, as Jython/JPython has done, but rather through interfacing at the native level in both Virtual Machines.

Once JPype installed (you'll have to hack a bit some files to integrate seamlessly with your system) you can access java classes by doing something like that:
import jpype
jpype.startJVM(jpype.getDefaultJVMPath())
# you can then access to the basic java functions
jpype.java.lang.System.out.println("hello world")
# and you have to shutdown the VM at the end
jpype.shutdownJVM()

Here is a simple example of how to use boilerpipe... from python
import jpype
# start the JVM with the good classpaths
classpath = "dist/boilerpipe-1.1-dev.jar:lib/nekohtml-1.9.13.jar:lib/xerces-2.9.1.jar"
jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path=%s" % classpath)
# get the Java classes we want to use
DefaultExtractor = jpype.JPackage("de").l3s.boilerpipe.extractors.DefaultExtractor
# call them !
print DefaultExtractor.INSTANCE.getText(jpype.java.net.URL("http://blog.notmyidea.org"))
And you get what you want.

Я не разбирался, каков механизм связи Python с Java VM, а надо бы. Очень интересно. Накладные расходы, побочные эффекты, ограничения и все такое.

original post http://vasnake.blogspot.com/2012/10/jpype.html

2012-07-30

libnpjp2.so

Вчера понадобился мне java-плагин в браузере (Firefox, Chrome on Debian Wheezy). Хвать — а нету. Пришлось ставить JRE и прописывать плагин (libnpjp2.so) в нужные папки. В интернетах есть 100500 описаний этого процесса, поэтому не буду заострять на нем внимание. Но один момент показался мне интересным.

Как поставить JRE, утянутую с сайта Oracle? Скачать пакет (в моем случае jre-7u5-linux-x64.tar.gz) и натравить на него make-jpkg. Типа так
$ fakeroot make-jpkg  jre-7u5-linux-x64.tar.gz
На выходе будет deb пакет oracle-j2re1.7_1.7.0+update5_amd64.deb устанавливаемый обычным для Дебиана способом.

Волшебная утилита.

2012-07-20

6 лет назад

Наткнулся в своих архивах на одну папку, 2006 года.
Видимо это было время, когда я пытался решить для себя — на какой платформе/технологии сфокусироваться. В итоге получилось как обычно, заказчики ставят такие условия, что выбирать-то и не из чего, жри что дают. Но, во всяком случае, понять с чем едят Java в вебе я успел.

А конкретно вот что (материалы из старой папки).

Типа предисловие.

Здесь хочу создать краткий обзор технологий и решений применяемых при построении масштабируемого веб-проекта. Если точнее, то "введение в тему". Итак, веб-проект, серверная его часть на Java...

Обьясняю: столкнулся я с проблемой, не могу найти внятного описания набора технологий, механизмов и продуктов из которых строится (или можно построить) масштабируемый веб сайт в основе работы которого лежат Java технологии. Не надо сразу отправлять к документации на некие продукты... я говорю о некоей вводной статье, которая дает понятие о том как все это работает в целом.
По отдельности и в разных местах всё есть, даже больше чем нужно. А вот чтоб в одном месте и последовательно, без излишнего углубления в несущественные детали... Не нашел.

В первую очередь для себя, а также и для других страждущих ликбеза (думаю я не одинок) хочу собрать в одном месте (статье, например) информацию, пошагово, от простого к сложному, обьясняющую, чем живет мир веб разработчиков на Java.

Текст сильно черновой, наброски. Да и терминологию надо уточнять. При создании статьи использованы материалы с RSDN forum. Большое спасибо живущим там профессионалам.

Простейший вариант веб сервера на Java

Любое веб приложение делится минимум на две части — клиент (работает в браузере пользователя) и сервер. Клиента мы рассматривать не будем, не здесь. Рассмотрим сервер.
Начинается сервер с обработчика протокола HTTP (Apache HTTPD, MS IIS). Его задача (основная) получить от клиента HTTP запрос и выдать ответ, обычно — текст HTML страницы.
Дабы выдаваемые страницы были "живыми" содержимое надо генерировать программно. Нивапрос — веб сервер по HTTP запросу может определить, что надо запустить некую программу, например PHP, которая и сгенерирует страницу.

А теперь забудем про PHP и представим, что веб сервер - это некая ява-машина (не Java runtime), под управлением которой запускаются и работают ява-программы, называемые servlet (сервлет).

Java-программы крутятся или под сервлет-контейнером (например Tomcat), или под сервером приложений (например JBoss). Сервлет контейнер, он же веб-контейнер это некий продвинутый (в сторону поддержки явы) HTTP демон. Сервер приложений - это очень сложный и могучий сервлет-контейнер, про СП пока не будем. Таким образом, имеем некую среду исполнения ява-программ (сервлетов), предоставляющую сервлетам возможность отвечать на запросы клиентов.

Сервлет — это просто Java-класс, реализующий интерфейс javax.servlet.Servlet. В случае веб применения, сервлет чаще всего наследуется из класса javax.servlet.http.HttpServlet. Веб-приложение может содержать произвольное количество классов сервлетов. Также, веб-приложение содержит xml-файл, где заданы соответствия URL и имен классов сервлетов.

Когда сервлет-контейнер получает HTTP-запрос (например, http://domain.com:8080/webapp/servlet/name/), он находит соответствующее запросу веб-приложение (webapp) и загружает соответствующий класс сервлета (ища имя класса сервлета, соответствующего URI='/servlet/name/').

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

Технология JSP (Java Server Pages) является прямым расширением сервлетов. И смахивает она на использование PHP: JSP-файл представляет собой HTML-страницу, с Java-вставками в специальных тегах. Перед первым запуском (или во время) JSP компилируются в обычные сервлеты.

говорится о том, что сервлеты это инструмент для низкоуровневого (относительно) решения задачи "отработка запроса клиента", в случае, если частые изменения дизайна страниц не требуются. В то время как JSP это ориентированнй скорее на представительскую (presentation) сторону способ сделать страницы динамическими. Банально удобнее дизайнить внешний вид страниц. БОльшее разделение логики и внешнего вида.

Контейнер сервлетов поддерживает всё необходимое для реализации достаточно серьезного веб приложения: управление заголовками HTTP, аутентификацией, механизм сессий (с использованием кукисов - cookie) и прочие удобные и стандартные штуки: java.sun.com/j2ee/sdk_1.3/techdocs/api

Также контейнер может поддерживать разделяемый пул ресурсов, доступных сервлетам, например подключения к БД tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto
Эта фича может заметно поднять производительность - не надо при отработке каждого запроса клиента открывать БД, закрывать БД...

Установим сервлет-контейнер - Tomcat

Давайте попробуем установить необходимые компоненты для запуска веб-сервера под которым мы сможем запускать сервлеты и JSP.

Отсюда мы возьмем бинарную сборку для Windows, конкретно отсюда: http://tomcat.apache.org/download-55.cgi версия 5.5.20 Binary Distributions Core Windows service installer. Почти 5 мегабайт.

Ранее я отсюда скачал и установил у себя JRE 1.5 и JDK 1.5 Standard Edition.
У меня это хозяйство расположилось на диске так:
P:\app\Java\jdk1.5.0_09\
P:\app\Java\jre1.5.0_09\
* Запускаем инсталлятор Tomcat: apache-tomcat-5.5.20.exe
* Установка FULL
* Куда ставить: p:\Tomcat5.5 (это будет переменная '''$CATALINA_HOME''' в дальнейшем)
* Порт 8080
* Админский юзер admin
* Админский пароль 123456789
* Ява рантайм оно само нашло в P:\app\Java\jre1.5.0_09
* оставил галки "запустить" и "показать ридми"
Визард почему то сам не закрылся, пришлось давить кнопу "Cancel".

В системе появился сервис Tomcat5, слушающий аж три порта 8009, 8080, 8005.
В трее появилась иконка. По щелчку открывается панель Apache Tomcat Properties.
По адресу http://localhost:8080/ в браузере открывается "поздравительная" страничка:

If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!

И действительно, мы видим результат отработки JSP страницы лежащей в
$CATALINA_HOME/webapps/ROOT/index.jsp

Далее в программе: написание простейшего (но своего!) приложения, в виде сервлета. Как затравку, нам предлагают взять файл
P:\Tomcat5.5\webapps\tomcat-docs\appdev\sample\sample.war
и положить его в
P:\Tomcat5.5\webapps\
а в результате, по адресу http://localhost:8080/sample/ мы увидим предлагаемый нам пример приложения на ява. Этот процесс описан в документации http://localhost:8080/tomcat-docs/appdev/processes.html по ссылке Example App

Установка админской консоли

версия 5.5.20 Binary Distributions - Administration Web Application
скачиваем пакет администрирования, 2.2 мегабайта.
Выдали файл apache-tomcat-5.5.20-admin.zip
распакуем его, в C:\TEMP так, что получается
c:\Temp\apache-tomcat-5.5.20\conf\
c:\Temp\apache-tomcat-5.5.20\server\
и эти два каталога переписываем в (прямо поверх)
P:\Tomcat5.5\conf\
P:\Tomcat5.5\server\
на самом деле файлы из пакета будут просто добавлены в конфигурацию Томкета.
Теперь по адресу http://localhost:8080/admin доступно приложение администрирования.

Конфигурация сервера (каталоги, порты, журналы,...)

Интеграция с веб-сервером Apache HTTPD

Включить поддержку SSL в Tomcat

Реализовать веб-приложение (сервлет)

Здесь я продемонстрирую процесс создания и установки не самого сложного приложения на базе сервлетов.

Нам понадобится инструментарий

* JDK - http://java.sun.com/javase/downloads/index_jdk5.jsp (у меня JDK 1.5), Java Development Kit понятно и без перевода;
* Tomcat + manager (установку этого дела я уже продемонстрировал), сервлет контейнер и средство управления;
* Ant - http://ant.apache.org/bindownload.cgi (у меня версия 1.7 почти 11 мегабайт), автоматизатор процесса разработки, по типу утилиты make, только на яве и для явы.

Я распаковал Ant в каталог, далее называемый ANT_HOME
P:\ant\
так, что получился путь P:\ant\bin\

Перед тем как использовать инструментарий я всегда выполняю команды (иначе работать не будет):
 set PATH=P:\ant\bin;%PATH% 
 set ANT_HOME=P:\ant 
 set JAVA_HOME=P:\app\Java\jdk1.5.0_09 
 set CATALINA_HOME=P:\Tomcat5.5 
Подробности можно узнать здесь: http://ant.apache.org/manual/index.html

Также я выполнил рекомендацию по включению в Ant библиотеки для общения с Tomcat:
COPY P:\Tomcat5.5\server\lib\catalina-ant.jar P:\ant\lib\catalina-ant.jar

Создание приложения

Я создал структуру каталогов для проекта (как рекомендовано в инструкциях к Ant и Tomcat) причем каталог sample может находитьсся где угодно, у меня внутре c:\j\
 md sample\docs 
 md sample\src\mypackage 
 md sample\web\WEB-INF 
 copy build.xml.template sample\build.xml 
этот build.xml - инструкции для Ant, его надо будет отредактировать, шаблон доступен здесь: http://tomcat.apache.org/tomcat-5.5-doc/appdev/build.xml.txt

Создал текстовый файл sample\build.properties (используется Антом)
с содержимым:
app.path=/VDemo1 
catalina.home=P:/Tomcat5.5 
manager.username=admin 
manager.password=123456789 
manager.url=http://localhost:8080/manager 

Tomcat нужны инструкции, что делать с приложением, которое ему подсовывают, для этого - отсюда: http://tomcat.apache.org/tomcat-5.5-doc/appdev/web.xml.txt
взял содержимое (заготовку) для файла deployment descriptor (непременно надо отредактировать) и положил в:
sample\web\WEB-INF\web.xml

Создал файл (исходный код примитивного сервлета):
sample\src\mypackage\VExampleOne.java
с содержимым:
package mypackage; 

import java.io.*; 
import java.text.*; 
import java.util.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

public class VExampleOne extends HttpServlet { 
 public void doGet ( 
   HttpServletRequest request, 
   HttpServletResponse response) 
  throws IOException, ServletException { 
  String title = "My first app!"; 
  response.setContentType("text/html"); 
  PrintWriter out = response.getWriter(); 

  out.println("<html>"); 
  out.println("<head>"); 
  out.println("<title>" + title + "</title>"); 
  out.println("</head>"); 
  out.println("<body bgcolor=\"white\">"); 
  out.println("<h1>" + title + "</h1>"); 
  out.println("</body>"); 
  out.println("</html>"); 
 } // doGet 
} // VExampleOne class 

Теперь самое время отредактировать содержимое build-файла для Анта:
sample\build.xml
<project name="My first webapp" default="compile" basedir="."> 
  <property file="build.properties"/> 
  <property name="app.name"      value="VDemo1"/> 
  <property name="app.path"      value="/${app.name}"/> 
  <property name="app.version"   value="0.1-dev"/> 
  <property name="build.home"    value="${basedir}/build"/> 
  <property name="catalina.home" value="P:/Tomcat5.5"/> 
  <property name="dist.home"     value="${basedir}/dist"/> 
  <property name="docs.home"     value="${basedir}/docs"/> 
  <property name="manager.url"   value="http://localhost:8080/manager"/> 
  <property name="src.home"      value="${basedir}/src"/> 
  <property name="web.home"      value="${basedir}/web"/> 

  <taskdef name="deploy"   classname="org.apache.catalina.ant.DeployTask"/> 
  <taskdef name="list"     classname="org.apache.catalina.ant.ListTask"/> 
  <taskdef name="reload"   classname="org.apache.catalina.ant.ReloadTask"/> 
  <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/> 

  <property name="compile.debug"       value="true"/> 
  <property name="compile.deprecation" value="false"/> 
  <property name="compile.optimize"    value="true"/> 

  <path id="compile.classpath"> 
 <pathelement location="${catalina.home}/common/classes"/> 
 <fileset dir="${catalina.home}/common/endorsed"> 
  <include name="*.jar"/> 
 </fileset> 
 <fileset dir="${catalina.home}/common/lib"> 
  <include name="*.jar"/> 
 </fileset> 
 <pathelement location="${catalina.home}/shared/classes"/> 
 <fileset dir="${catalina.home}/shared/lib"> 
  <include name="*.jar"/> 
 </fileset> 
  </path> 

  <target name="all" depends="clean,compile" 
 description="Clean build and dist directories, then compile"/> 

  <target name="clean" 
 description="Delete old build and dist directories"> 
    <delete dir="${build.home}"/> 
    <delete dir="${dist.home}"/> 
  </target> 

  <target name="compile" depends="prepare" 
 description="Compile Java sources"> 
    <mkdir    dir="${build.home}/WEB-INF/classes"/> 
    <javac srcdir="${src.home}" 
          destdir="${build.home}/WEB-INF/classes" 
            debug="${compile.debug}" 
      deprecation="${compile.deprecation}" 
         optimize="${compile.optimize}"> 
        <classpath refid="compile.classpath"/> 
    </javac> 
    <copy  todir="${build.home}/WEB-INF/classes"> 
      <fileset dir="${src.home}" excludes="**/*.java"/> 
    </copy> 
  </target> 

  <target name="dist" depends="compile,javadoc" 
   description="Create binary distribution"> 
    <mkdir   dir="${dist.home}/docs"/> 
    <copy    todir="${dist.home}/docs"> 
      <fileset dir="${docs.home}"/> 
    </copy> 
    <jar jarfile="${dist.home}/${app.name}-${app.version}.war" 
         basedir="${build.home}"/> 
  </target> 

  <target name="install" depends="compile" 
   description="Install application to servlet container"> 
    <deploy url="${manager.url}" 
       username="${manager.username}" 
       password="${manager.password}" 
           path="${app.path}" 
       localWar="file://${build.home}"/> 
  </target> 

  <target name="javadoc" depends="compile" 
   description="Create Javadoc API documentation"> 
    <mkdir          dir="${dist.home}/docs/api"/> 
    <javadoc sourcepath="${src.home}" 
                destdir="${dist.home}/docs/api" 
           packagenames="*"> 
      <classpath refid="compile.classpath"/> 
    </javadoc> 
  </target> 

  <target name="list" 
   description="List installed applications on servlet container"> 
    <list    url="${manager.url}" 
        username="${manager.username}" 
        password="${manager.password}"/> 
  </target> 

  <target name="prepare"> 
    <mkdir  dir="${build.home}"/> 
    <mkdir  dir="${build.home}/WEB-INF"/> 
    <mkdir  dir="${build.home}/WEB-INF/classes"/> 
    <copy todir="${build.home}"> 
      <fileset dir="${web.home}"/> 
    </copy> 
    <mkdir  dir="${build.home}/WEB-INF/lib"/> 
  </target> 

  <target name="reload" depends="compile" 
   description="Reload application on servlet container"> 
    <reload url="${manager.url}" 
       username="${manager.username}" 
       password="${manager.password}" 
           path="${app.path}"/> 
  </target> 

  <target name="remove" 
   description="Remove application on servlet container"> 
    <undeploy url="${manager.url}" 
         username="${manager.username}" 
         password="${manager.password}" 
             path="${app.path}"/> 
  </target> 

</project> 

Теперь редактируем деплоймент дескриптор
sample\web\WEB-INF\web.xml
<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 

    <display-name>First VS Java webapp</display-name> 
    <description> Simple example of Java webapp. </description> 

    <servlet> 
        <servlet-name>VDemo1Servlet1</servlet-name> 
        <servlet-class>mypackage.VExampleOne</servlet-class> 
    </servlet> 

    <servlet-mapping> 
        <servlet-name>VDemo1Servlet1</servlet-name> 
        <url-pattern>/servlet1</url-pattern> 
    </servlet-mapping> 
</web-app> 
Выглядит это все кошмарно, но только до тех пор, пока своими руками не сделаешь пару итераций и не осознаешь, что к чему.

Установка приложения в Tomcat

Проверим как компилируется, запустив командный файл такого содержимого:
rem установки переменных я приводить больше не буду, примем "по умолчанию": 
set PATH=P:\ant\bin;%PATH% 
set ANT_HOME=P:\ant 
set JAVA_HOME=P:\app\Java\jdk1.5.0_09 
set CATALINA_HOME =P:\Tomcat5.5 
pushd sample 
start "compile" /wait cmd.exe /k ant all 

У меня все откомпилировалось, теперь проинсталлируем приложение:
pushd sample 
start "remove" /wait cmd.exe /c ant remove 
start "install" /wait cmd.exe /k ant install 

По адресу http://localhost:8080/VDemo1/servlet1
должна появиться страница с текстом
My first app!

Ура, товарищи, оно работает. Вебприложение из одного сервлета. Минимальнее не бывает.

Дальше - самостоятельная работа, я буду копать направления - сервлет генерирует XML а в конце преобразует его в HTML с помощью подготовленных дизайнером XSL файлов; все данные для работы лежат в БД; интеграция с Apache HTTPD. Кстати, простейшие тесты показали увеличение скорости от 5 до 10 раз, по сравнению с кодом на PHP. Я не говорю уже о возможностях кластеризации, встроенных в саму технологию ява контейнеров.

Масштабируем, сервер приложений

С ростом проекта может понадобится функциональность, недостижимая в рамках простых веб-контейнеров. Например вам нужно для отработки запроса обратиться к нескольким базам данных, что-то отправить в унаследованную систему и отправить уведомление куда нибудь еще... в общем, обработать данные сразу из многих источников. При этом, необходимо соблюдать требования ACID. Нет, конечно, можно все сделать ручками... Но велосипед уже есть: сервер приложений, всем очень нравится, например, Jboss.

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

Итого картина у меня сейчас приблизительно такая - вебконтейнер под которым крутятся сервлеты и JSP образует второй уровень, если первым считать пользователя с браузером в руках. Для примитивных случаев этого достаточно. А если не достаточно, добавляем СП (еще говорят сервер J2EE), например контейнер EJB. Получаем третий уровень, на который высаживаем тяжелый компутинг. Причем СП создается обычно таким образом, чтобы его можно было посадить на кластер или ферму.

Терминология, понятия

Редакции Java, варианты платформы
Существует три основных редакции языка и базовых библиотек:
* j2SE - Java 2 Standard Edition
* J2EE - Java 2 Enterprise Edition
* J2ME - Java 2 Micro Edition
Микроедишн - это для портативных, мелких устройств. Например, в мобильных телефонах живет именно J2ME. Стандард - это базовый набор средств "просто для разработки и запуска просто ява программ". А нас как разработчиков неслабых веб проектов, интересует в основном энтерпрайз едишн. Там масса дополнительных библиотек, спецификаций и средств для поддержки распределенных масштабируемых управляемых ява систем.

Паттерны проектирования, обьектно-ориентированное программирование
Методология составления программ и программных комплексов. Играет очень важную роль в мире Java. Если вы не знаете, что такое паттерны проектирования, немедленно найдите хорошую книгу по этому вопросу и изучите. Иначе будет многое непонятно.

XML - eXtensible Markup Language
Наиболее важный и общеупотребимый формат данных, язык и средство для соединения подсистем в мире корпоративных (и не только) проектов. Применяйте хмл где можно и нельзя - все будут думать что вы крутой.

Servlet, сервлеты
Ява программы, исполняемые на сервере, если искать аналогии, то ближе всего к сервлетам будут CGI программы для веб сервера. Сервлеты могут динамически генерировать вебстраницы отправляемые клиентам в ответ на запросы.
Сервлеты эффективны при разработке веб приложений, в которых идет работа с БД, динамически генерируется содержимое, отображаемое браузерами, сохраняется уникальная для каждого клиента информация о сеансе.
Сервлеты обычно являются потоками одного процесса в виртуальнй машине ява.

JSP - Java Server Pages
Опять же, по аналогии - ближе всего PHP или ASP страницы веб сервера. Задачи почти такие же как и у сервлетов, только удобнее ваять дизайн, применяя JSP. В конечном итоге, JSP все равно компилирются в сервлеты. Сами страницы содержат
Скриптлеты - Scriptlet
исходный код коротких подпрограмм на языке Java. Эти скриптлеты обычно используют для выполнения работы некие компоненты -
JavaBeans - бины
Самостоятельные классы ява, построенные в соответствии с компонентной моделью Java.

TagLib - Tag Library
Ява библиотеки для использования в JSP. Позволяют простым использованием специальных тегов в странице добиться богатой функциональности. Дают возможность веб-дизайнерам добавлять динамическое содержание без программирования.

JSTL - JSP Standard Tag Library
Стандартный набор библиотек TagLib.

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

SOAP - Simple Object Access Protocol
протокол на базе XML, по этому протоколу можно использовать веб-сервисы.

EJB - Enterprise JavaBeans
Компонентная модель ява, применяется для построения бизнес логики корпоративных приложений. Содержит сеансовые компоненты (с состоянием и без), поддержку распределенных транзакций, компоненты управления данными (компоненты-сущности) для управления сущностями хранимыми в БД. Дает возможность строить надежные и устойчивые многоуровневые приложения. Используя RMI и контейнеры EJB, компоненты способствуют распределению логики по разным узлам сети.
И многое другое...

Сервер приложений
Окружение, среда выполнения, платформа для компонентов корпоративного приложения. Обеспечивают выполнение распределенных транзакций, управление производительностью, коммуникации между подсистемами. Создает условия для взаимодействия между различными компонентами и уровнями проекта. Управляют персистентностью, жизненным циклом, безопасностью.
И многое другое...

JMS - Java Message Service
Технология использования в ява средств промежуточного (middleware) ПО ориентированного на работу с сообщениями. Коммуникации путем обмена сообщениями, в двух моделях "точка-точка" или "издатель-подписчик". В EJB есть компоненты управляемые сообщениями.

Tomcat Client Deployer (TCD)
Инструмент для установки веб-приложения в сервлет-контейнер Tomcat. Утилита командной строки.

Коллекция ссылок по теме


2011-09-29

Central Authentication Service


На днях в фокус моего внимания попал CAS. Central Authentication Service — опенсорцный сервер на Java, реализующий достаточно простой и надежный протокол аутентификации на токенах. Фишка в том, что он централизован как LDAP сервер аутентификации и при этом прост как Basic Authentication.

CAS is an Enterprise Java solution to web application authentication that also provides the benefit of Single Sign On (SSO). Technically, SSO can be achieved because the authentication can be removed from the web application and handled centrally. And, when this authentication is handled by a single service, access to many services can be granted once and "remembered" for the life of the web session or even longer though not recommended. Remember too that the SSO feature does not have to be employed and yet CAS authentication still provides a quality authentication mechanism.
CAS is a collaborative effort that has produced a very solid central authentication service using the Java development platform. CAS also provides a broad selection of clients for use with all of the Enterprise and scripted web technologies.

wiki.jasig.org/display/CASUM/Technical+Overview
wiki.jasig.org/display/CASC/Home
wiki.jasig.org/display/CASC/Zope+client
owasp.org/index.php/Category:OWASP_Project

Красота CAS усугбляется большим количеством разных серверов аутентификации и клиентов, реализующих протокол CAS. Полезняшка, однозначно.

kwords: authentication, authorization, SSO, security, login, java, server

2011-09-02

.java.policy


Проверил, работает. Но не обошлось без гамака: нужно, чтобы пользователь явно разрешил доступ к файлам, записав в файл .java.policy нечто вроде
grant {permission java.io.FilePermission "${user.home}/-", "read"; };

private void testReadFile(String filename) {
/* .java.policy
* grant {permission java.io.FilePermission "${user.home}/-", "read"; };
*/
RandomAccessFile file = null;
try{
file = new RandomAccessFile(filename, "r");
byte[] buf = new byte[1024];
int cnt = 0, pos = 0;
while(true){
cnt = file.read(buf);
if(cnt == -1 || cnt == 0){
break;
}
pos += cnt;
}
file.close();
}
catch(IOException ex){
this.log("testReadFile, IO error ["+ex.getMessage()+"]");
}
catch(Exception ex){
this.log("testReadFile, error ["+ex.getMessage()+"]");
}
} // private void testReadFile(String filename) {


А Java удобнее

Как я и надеялся, с Java applet все значительно проще. Чтобы дать пользователю-с-браузером выбрать файл и узнать полный путь к этому файлу (а потом и почитать файл) вовсе не надо стоя в гамаке. Простой и тупой код. И он работает!

http://pastie.org/2471077


В Silverlight надо стоя и в гамаке, при этом полный путь к файлу узнать так и не дадут.
Яваскрипт пока не катит, хотя в отдельных браузерах уже можно реализовать чтение и отправку файла чанками на голом яваскрипте.

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

2011-09-01

Пионэры, идите в школу


Про пионэров это я так, датой навеяло.

На тему отзыва Ораклом дистрибуторской лицензии на яву, мнение мантейнера дебианского пакета:
Basically, that means that Linux distributions will not be able to package new releases of the proprietary JVM/JDK (including the latest update -27). Theonly release available in the Linux distro will be the OpenJDK.
While I am glad to see Oracle pushing the free JDK, I am a bit concern by this sudden decision. There are still bugs (for example, with fonts, applets or other others issues) present in the OpenJDK which does not happen in the sun-java6 packages.
And also, as 
Andrew John Hughes said on Twitter, the Oracle proprietary JVM just lost one of the two freedoms it had (free to redistribute the software)...
sylvestre.ledru.info/blog/sylvestre/2011/08/26/sun_java6_packages_removed_from_debian

Ему тоже жаль...


Сегодня на работе надкусил Notepad++. Хороший, годный редактор. В основе лежит мой любимый SciTE, вернее Scintilla. Поскольку в моем WSciTE не нашлось быстрого решения задачи «переформатировать корявый исходник», в смысле отступы там, лишние и отсутствующие пробелы и проч.херня, пришлось поискать помощи в гугле. Функция переформатирования нашлась в стандартном плагине к npp, и она работает.
Хороший, годный редактор.

Пришел домой и поинтересовался у гугеля, нет ли npp под Linux? Нет, но, как всегда, есть альтернативы. Одна из них — Geany.
В пакетах устаревшая версия, захотелось мне скомпилять свежачка. Скомпилял, даже сделал deb-пакет из которого и установил. Проще пареной свеклы, если бы не две трудности: configure ругался на то, что у меня нет компайлера C++ и неправильная версия GTK+. Пришлось чутка повозится, пока я сообразил, что мне нужны пакеты g++ и libgtk2.0-dev соответственно.

Итоговый лог установки:
#aptitude install g++
#aptitude install libgtk2.0-dev
#aptitude install install checkinstall

$ pushd  ~/t/geany
$ tar zxvf ~/t/downloads/t/geany-0.20.tar.gz
$ cd geany-0.20/
$ bash configure
$ make
$ sudo checkinstall -D

Ничего, работает. Симпатишный.

Сцылки по теме:
itbuben.org/blog/Unix-way/829
grigio.org/pimp_my_gedit_was_textmate_linux

kwords: textedit, make, compile, java, install

2011-08-31

Здравствуй, OpenJDK


Теперь все следующие выпуски Oracle JDK не смогут попасть в репозитории дистров Linux. В дистрах будет только OpenJDK. Oracle отзывает лицензию дистрибуторов ОС.

Now, with OpenJDK 7 serving as the basic for Oracle JDK 7 releases, and moving to run much closer in sync then OpenJDK 6 and Oracle JDK 6 did, the DLJ is no longer necessary.
As a consequence, further Oracle JDK 6 (or Oracle JDK 7) releases on Linux and Solaris will not be provided under the DLJ. They will continue to be provided under the familar Oracle JDK license, the BCL.

robilad.livejournal.com/90792
h-online.com/open/news/item/Oracle-retires-licence-for-distributing-its-Java-with-Linux

Кому надо иметь Oracle JDK, будут сами качать пакеты с ораклевого сайта. Не самая лучшая новость.
Расползается ява, повышается несовместимость. Лозунг «один раз напиши, запускай везде» ускоренным темпом идет в Ж.

Хотя, с точки зрения эволюции, это правильно. Надо, чтобы был выбор. Путь медленный и неэффективный, зато надежный.

2011-06-15

AOP

Java, Spring Framework, AOP. Аспектно-ориентированное программирование.
АОП настолько необычен для закостеневшего в «алгоритмы + структуры» программера, что его можно настоятельно рекомендовать к изучению хотя бы для разминки мозгов.
springsource.org/spring/docs/2.5.x/reference/aop

Про Python и АОП:

There are many articles out there about AOP and python, and consequently, several AOP solutions for python are offered. The spectrum is broad, ranging from “python doesn’t need AOP” to “python has enough language features to do AOP without framework code” to “AOP works great with python” to “AOP is just another thing built for static languages someone is trying to bolt onto python”.
Someone made a good point back in 2004 on a python mailing list that AOP is a paradigm, not a specific framework, and that if we are going to argue against AOP in python, then it opens the door to arguing over OOP, and in turn, probably every paradigm that we know. Are you ready to throw out python classes and do everything functionally?

blog.springpython.webfactional.com/2009/03/23/the-case-for-aop-in-python


Фрилансеру на заметку, как искать работу/работников через профильные соцсети:
amironov.com/blogs/node/340

2011-06-10

odtExport

Просто и со вкусом. Экспорт доков формата ODT в формат HTML. В консоли, что немаловажно.

odtExport — утилита конвертации из текстового документа OpenDocument (OpenOffice, LibreOffice) в формат HTML.
Возможности
Утилита конвертирует текст и объекты указанные в ODT файле, в HTML. Объекты которые конвертируются:
  • Текст;
  • Ссылки;
  • Таблицы;
  • Врезки;
  • Сноски;
  • Закладки;
  • Списки;
  • Заголовки;
  • Изображения.

cofe.tv/2011/04/odt
code.google.com/p/odt-export

Чтобы запустить тулзу, нужен только Java runtime.
При случае обязательно попробую.

2010-04-23

Open Source ERP + CRM

23 апреля (а также 24 апреля, 6 мая, 23 ноября) день Георгия-Победоносца. Национальный день для Англии и Грузии.

Java2EE компот под названием opentaps:

Продукт opentaps распространяется под Open Source-лицензией AGPL (Affero General Public License) v3. В основе opentabs — Java J2EE с SOA (Service Oriented Architecture) и MVC-фреймворком. Для работы используются серверы Apache Tomcat и Geronimo. Кроме того, в opentaps используются наработки ряда других Open Source-проектов, таких как Apache OFBiz (Open for Business), Apache Lucene, Apache Derby, Spring, Hibernate, Funambol. Среди поддерживаемых СУБД — MySQL, PostgreSQL, Oracle и MS SQL Server. Взаимодействие с пользователем осуществляется через веб-интерфейс.

citforum.ru/news/23452

Today, opentaps supports ecommerce, Customer Relationship Management, Warehouse and Inventory Management, Supply Chain Management, and Financial Management to Business Intelligence and mobility integration out-of-the-box.
...
Whether you're a manufacturer, distributor, retailer, or e-tailer, opentaps can help you manage your business faster and better
...
opentaps.org/about-opentaps

И на целый лист перечисление, чем опентапс может помочь в деле «Покупатели и продажи», «Инвентаризация, Производство и Закупки», «Финансы и Отчетность».
Внушаить.
А меня, как технаря, вчепетляет список собранных в одном «ангаре» подсистем, решающих подзадачи. Говорят, все сервисо-ориентированное. Неужто оно еще и работает?

2009-12-23

MaindMap - FreeMind

Интеллект-карты как способ фиксации и организации процесса мышления. Лучше чем Голубицкий, пожалуй никто не нарисует светлое будущее, проистекающее из применения интел.карт. Статья раз, статья два.

Лично я созрел для попробовать применить струмент в назревающем проекте, интересно, что получится. Уже установил себе FreeMind. Кстати, ставится предельно просто - качаете кроссплатформенный зип-файл (ява-программа) и в четыре хода:
mkdir -p /opt/freemind
unzip /home/v/t/freemind-bin-max-0_8_1.zip -d /opt/freemind/
chmod +x /opt/freemind/freemind.sh
/opt/freemind/freemind.sh
Если на машине есть ява - оно запускаецца и работает.

Теперь буду учится рисовать карты (разума).

2009-07-24

Eclipse update

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

На днях решила клипса обновиться, спросила подтверждения. Я подтвердил, мне не жалко, трафик безлимитный. А она, редиска, почухала по тырнетам и говорит, падла:
"eclipse An error occurred during provisioning. Cannot connect to keystore. Uninitialized keystore"
Я не понял, чоза?

Непродолжительные поиски не дали ответа, в чем причина. Зато дали ответ, как лечить. Лечить надо установкой нормального ява-рантайма. Например, JDK от Sun. Или, в моем случае, таким образом (благодарим Emil-я Perhinschi):

Installed eclipse, but cannot install plugins:

An error occurred during provisioning.
Cannot connect to keystore.
Uninitialized keystore.

On my debian lenny for amd64, the problem was eclipse was using gcj instead of sun java.

check your available jvm:

sudo update-java-alternatives --list

I got:

emilper@main:~$ sudo update-java-alternatives --list
[sudo] password for emilper:
java-1.5.0-sun 53 /usr/lib/jvm/java-1.5.0-sun
java-6-openjdk 1061 /usr/lib/jvm/java-6-openjdk
java-6-sun 63 /usr/lib/jvm/java-6-sun
java-gcj 1042 /usr/lib/jvm/java-gcj

then set to your favorite, in my case the sun version:

sudo update-java-alternatives --set java-6-sun

After that all went fine.


paysan-du-danube.ro/notes/install_eclipse_on_debian

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) Baltic (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)