3f-lab: Основы разработки Java-программ в консольном режиме (лекция 1)

Пока не кончились выходные, буду выкладывать в блоге JavaLabs фрагменты текстов о разработке программ на языке Java в консольном режиме (среда 3f-lab). Хотя у этого проекта есть свой сайт, дублирую некоторые тексты здесь в надежде на обсуждение. Первая лекция — вводная, описывает основные преимущества методики.



Для разработки программ на языке Java используются мощные IDE (Integrateg Development Environments), оснащенные чрезвычайно развитыми графическими интерфейсами пользователя. В этом ряду такие приложения, как Eclipse, NetBeans, VisualStudio и т.п. Однако их несомненные преимущества заканчиваются там, где нужно отредактировать и откомпилировать код на удаленном хосте, к которому имеется лишь терминальный доступ. Cреда разработки 3f-lab, о которой пойдет речь, пердназначена для создания программ именно средствами консоли, т.е. для ее использования достаточно ssh или даже telnet-доступа к компьютеру. Когда программа пишется непосредственно на хосте, для которого предназначена — существенно сокращается время на отладку, т.к. происходит постоянная «подгонка по месту». Кроме того, удаленные серверы, как правило, обладают в разы большей мощностью чем десктопы, ноутбуки и нетбуки программистов, поэтому при удаленной консольной работе снижаются еще и затраты времени на компиляцию.

3f-lab — это не программный продукт. У нее нет дистрибутива, хотя и имеется LiveCD, на котором все необходимые установочные операции уже выполнены. Тем не менее, лучше всего создать такую среду разработки в ручном режиме. Это занимает не более 10 минут. Скринкаст о том, как начать работать, вы найдете здесь.

Среда представляет собой совокупность каталогов и скриптов для сборщиков ant или make. Основными каталогами являются _bin, _classes, _projects. Об этих и других каталогах постараюсь рассказать в следующих топиках. Но для начала нужно определиться с тем, где будет находиться сама «лаборатория». Думаю, что нет ничего лучше, чем разместить ее в домашнем каталоге. В этом случае всегда есть уверенность, что хватит полномочий на создание, изменение, удаление и запуск файлов, т.е. не понадобятся права рута. Понятие домашней директории (каталога, папки) существует и в Windows, и в Linux. Ведь поскольку мы собираемся программировать на Java, мы должны придерживаться правила «написано однажды — работает везде». Поэтому первым делом вводим команды

mkdir ~/.3f-lab 
cd ~/.3f-lab


То же самое можно сделать множеством других способов (клавишей F7 в Midnight Commander'e, правой кнопкой мыши в оконном режиме). В начале имени каталога — точка, благодаря которой он оказывается в верхней части списка директорий и его быстро можно найти.

В получившейся директории нужно создать следующие подкаталоги:

1. _bin — здесь мы будем хранить бинарные утилиты, программы, сложные программные пакеты, такие как JDK;
2. _classes — здесь будут лежать откомпилированные классы и библиотеки (.jar-файлы);
3. _projects — каталог проектов, т.е. конечных продуктов, разработанных для сторонних заказчиков или для себя;
4. _reusable — здесь находятся исходники классов, созданных для собственного удобства и активно использующихся в различных проектах;

Названия всех этих каталогов начинаются с нижнего подчеркивания. Таким образом их легче найти, если в папке .3f-lab оказались еще какие-то дополнительные каталоги. Но лучше в ней ничего лишнего не хранить.

Продолжение следует.
  • +5
  • 06 января 2010, 13:06
  • yababay

Комментарии (35)

RSS свернуть / развернуть
+
0
Почему бы и нет
Консоль это хорошо
Я, например, считаю vim достаточно удобным редактором

Было бы интересно узнать по-подробнее про Ant
avatar

Gangsta

  • 06 января 2010, 13:20
+
0
буду читать ) очень интересно)
avatar

FREExLOADER

  • 06 января 2010, 14:04
+
0
Спасибо за внимание, уважаемые камрады! Про ant речь пойтет в ближайшей лекции. Выложу ее сегодня вечером.
avatar

yababay

  • 06 января 2010, 14:24
+
0
Надо бы в виде пошаговой инструкции расписать и ссылок не хватает
… Сейчас как раз разбираюсь — жизнь заставила)
avatar

Sergei_T

  • 27 января 2010, 14:38
+
0
А мультик на что?
avatar

yababay

  • 27 января 2010, 14:55
+
0
Сорри, не дошел до него)))
avatar

Sergei_T

  • 27 января 2010, 15:10
+
0
Сегодня в колледже эту тему объяснял. Народ матерится (непривычно, оконного интерфейса нет, некуда мышкой тыкнуть), но потихоньку въезжает. Родилась сакраментальная фраза: «Головой надо думать, а не мышкой!»
avatar

yababay

  • 27 января 2010, 14:57
+
0
Теперь вопрос — мне нужно что-то мощное для пользовательского интерфейса — что заюзать?
avatar

Sergei_T

  • 27 января 2010, 15:16
+
0
Смотря что за интерфейс. Если веб — я пользуюсь GWT, там чистый Java-синтаксис. Если обычное GUI-приложение — Swing. К JDK прилагаются примеры (см. каталоги demo), в том числе по Swing. Я давно не занимался GUI под Java, но есть наработки и в этой области: язык разметки на основе XML, позволяющий описывать GUI-интерфейсы, которые потом остается только наполнить активным кодом.
avatar

yababay

  • 27 января 2010, 15:29
+
0
Это вроде Qt Designer — там такой же принцип

кстати в доках указано что в скрипте ant нужно прописать
JAVA_HOME=~/.3f-lab/_bin/java/sun 
ANT_HOME=~/.3f-lab/_bin/java/ant

у меня по относительным не работают путям
avatar

Sergei_T

  • 27 января 2010, 15:31
+
0
Пропиши абсолютные, с ними даже надежнее.
avatar

yababay

  • 27 января 2010, 15:49
+
0
Можно заставить GWT работать без веб сервера как-то?
avatar

Sergei_T

  • 27 января 2010, 15:32
+
0
В том смысле что закинуть как-то все в один exeшник чтоли или как-то так
Swing я так понимаю это встроенный gui
avatar

Sergei_T

  • 27 января 2010, 15:51
+
0
GWT в экзешник не запакуешь, это браузерная технология. А Swing — пожалуйста. Например, OpenOffice — чистой воды Swing.
avatar

yababay

  • 27 января 2010, 15:54
+
0
GWT — всего лишь хитрый JavaScript, получаемый из Java-классов. Так что работает просто с локального диска. До тех пор, конечно, пока не понадобятся запросы, обрабатываемые на сервере.

Например, тесты, которые я тут выкладывал, могут работать без сервера.
avatar

yababay

  • 27 января 2010, 15:53
+
0
А в плане расчетов линз которые ты видел — может быть использовать GWT?
avatar

Sergei_T

  • 27 января 2010, 15:54
+
0
Просто понадорбится интерактив — работа с таблицами и т.д. и т.п., окошки дочерние нужны и прочее
avatar

Sergei_T

  • 27 января 2010, 15:56
+
0
Диалоги на GWT вполне себе организуются. И даже окна. Но это изврат, можно обойтись другими средствами.
avatar

yababay

  • 27 января 2010, 16:01
+
0
smart gwt вот есть например
avatar

Sergei_T

  • 27 января 2010, 16:01
+
0
Можно его. А можно на Swing'e. Смотря кто и как будет пользоваться. Если один человек — Swing, если коллектив — лучше серверок замутить с GWT-начинкой. Сервер ведь это не обязательно что-то мощное и жрущее ресурсы. Можно обойтись очень скромным сервером. А устанавливать через обычный setup.exe, никто даже и не заметит, что это сервер .
avatar

yababay

  • 27 января 2010, 15:57
+
0
Думаю — вот это подойдет
www.smartclient.com/smartgwt/showcase/#main

Думаю неплохо было бы сделать так — серверная часть обрабатывает и считает (пока есть простая задачка которую мне нужно решить) потом возможно нужна будет работа с БД
Интерфейс на GWT — для пользователей
И может как-то есть возможность переносить это все в виде мидлета на телефон для автономной работы?
avatar

Sergei_T

  • 27 января 2010, 16:04
+
0
Сразу предупреждаю: заколебешься девелопить. Чем ближе к классике — тем лучше. Использование таких «надстроек» приводит к тому, что весь пар уходит в свисток: пишется распрекрасный интерфейс, а на настоящие вещи, ради которых всё и задумывалось, не остается сил и времени.
avatar

yababay

  • 27 января 2010, 16:30
+
0
Куда распаковать GWT в 3f-lab лучше?
в _reusable?
avatar

Sergei_T

  • 27 января 2010, 16:11
+
0
Нет, это для самописных (т.е. тобой лично написанных) многократно используемых библиотек. Тут технология такая:

1) Из GWT нужно извлечь gwt-dev-linux.jar, gwt-servlet.jar, gwt-user.jar и поместить их в _classes
2) В _projects/YOUR_PROJECT/client создать подкаталоги по количеству веб-приложений. Например, index, admin, calculator.
3) Создать в каждом таком подкаталоге файл описания проекта и build.xml.
4) В каждом из них создать htdocs, где будут лежать картинки, css, js-файлы и, конечно же, html-файлы.

После этого можно девелопить. Короче, это уже не в каментах надо описывать, а в отдельном топике. Напишу.
avatar

yababay

  • 27 января 2010, 16:26
+
0
Расположил gwt в
/_bin/sdk/gwt (ссылка символическая)

по-моему это логично хранить в _bin/java то что нужно для сборки и исполнения а в _bin/sdk/ используемые sdk

проект в
_projects/eyecalculator/client (т.е. клиентская часть) и server (серверная)

может так
идея в том чтобы был один клиент на GWT в котором бы было все что нужно
а расчет на сервере

так?
avatar

Sergei_T

  • 27 января 2010, 17:01
+
0
Нормальное начало. Я как раз сейчас распаковываю gwt-2.0 (недавно появился, я работаю пока на 1.5). Сейчас разузнаю что там нового и отпишусь в отдельном топике, заодно напишу как устанавливать в рамках 3f-lab.

_bin/sdk, конечно, вариант, но среда предназначена не только для Java, поэтому я храню в _bin/java всё, что связано с Java-синтаксисом, jar-архивами и т.д. А в _bin кроме java могут храниться, например, какие-нибудь специфические библиотеки на С, темплейты дл flash-анимации и т.п., т.е. то, что с Java не связано вообще никак. Когда я разворачиваю 3f-lab под Windows в каталоге _bin оказывается полно всякой всячины: консольная версия rar, Null Soft Installer, какие-то улилиты для работы с базами данных и т.п.

Теперь что касается имен для проектов. Я их озаглавливаю капсом, т.е.

_projects/YOUR_PROJECT

Да, к капсу существует предубеждение. Зато когда смотришь код или попадаешь в папку проектов — сразу видишь: это специфический, «финальный» код, который вторично использоваться нигде не будет (в отличие от _reusable). Удобный психологический прием. Когда видишь вверху исходника package com.michaelbelyakov1967.projects.HELLOWORLD.client; — глаз сразу выхватывает нужную информацию. Попробуй написать то же самое строчными буквами. Строка сразу превращается в унылую, ничего не значащую «колбасу», над которой надо потрудиться чтобы понять что сие значит.
avatar

yababay

  • 27 января 2010, 17:18
+
0
переименую в БОЛЬШИЕ
sdk перенесу в java/gwt
пространство имен
com.eyecalculator.client
com.eyecalculator.server
для начала — потом по мере добавления вложенность будет меняться

другой вопрос — сейчас мне нужно поднять серверную часть
avatar

Sergei_T

  • 27 января 2010, 17:25
+
0
Погоди, погоди. Ты единственный проект собрался на Java создавать? Скорее всего, нет. Поэтому создай раз и навсегда себе пространство имен, например ru.sergeytvorogov (вывернутое имя сайта — это рекомендация фирмы Sun). Тогда пакеты твои будут называться ru.sergeytvorogov.projects.EYECALCULATOR.client, ru.sergeytvorogov.projects.EYECALCULATOR.server. Возможно, в процессе работы часть кода может выделиться в многократно используемые классы и ты поместишь их в пространство имен ru.sergeytvorogov.util (например).

Что касается сервера, то Felix к твоим услугам . Пример сервлета выложу или пришлю.
avatar

yababay

  • 27 января 2010, 17:33
+
0
Что-то я не понял только как сорцы уложить — в примере гугла идет
src/com/google/gwt
это же полный здец
avatar

Sergei_T

  • 27 января 2010, 17:44
+
0
Такой здец не только в примерах Google, но и в Eclipse. Поэтому я всем этим и не пользуюсь. Если потерпишь пару-тройку часов — напишу топик как настроить 3f-lab для GWT без всяких здецов. Кстати, на Linux16 был мой материал о GWT, посмотри пока, вроде там даже архив с примером кода приложен.
avatar

yababay

  • 27 января 2010, 18:14
+
0
Я уж настроил)))
вроде компилит

теперь надо болвашку клиент-сервера накатать

пока у меня простая задача — пользователь вводит несколько параметров — получает расчет
avatar

Sergei_T

  • 27 января 2010, 18:18
+
0
Спроектируй интерфейс, реализуй его на стороне клиента и на стороне сервера и всех делов
avatar

yababay

  • 27 января 2010, 18:29
+
0
Ога — начать и кончить
avatar

Sergei_T

  • 27 января 2010, 18:36
+
0
Суть 3f-lab в том, чтобы максимально избавить программиста от шизофрении. Сегодня ты назовешь свой пакет com.eyecalculator.client, завтра ru.mtaalamu.server, а послезавтра запутаешься во всем этом и будешь искать что-нибудь «более удобное», которое не принесет ничего, кроме дополнительной путаницы.
avatar

yababay

  • 27 января 2010, 17:39
+
0
Ba-a-a-a-y-y-y-y!
avatar

Markony

  • 27 января 2010, 16:23

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.