Вы .class-файлы декомпилировали когда-нибудь?
Там все вхождения string1+string2+… компилятором автоматически заменяются на new StringBuilder().add(string1).add(string2)… toString();
если target=1.6 и 1.5.
И на new StringBuffer..., если target=1.4
Автору спасибо за пост. Информация довольно нужная и актуальная.
Немного поделюсь и своими скромными знаниями что касается этой темы…
На самом деле довольно тяжело найти руководителя которому можно было объяснить что главное что Вы разбираетесь в теме а не он. Чаще всего происходит так (по крайней мере с теми профессорами с которыми я сталкивался): Вы приходите и профессор выбирает Вам тему. Редко когда можно иначе. Лично я довольно много времени провел над тем чтобы найти руководителя который бы меня взял с моей темой. Многие меня брали но при условии что я буду писать именно ту тему которая им «интересна» (читайте «выгодна»).
И еще очень важным является тот факт какой Ваш руководитель имеет авторитет среди научного круга и тем более научного совета в котором Вам предстоит защищаться. Также существует риск что отношения руководителя с советом за время Вашей работы испортится и, как результат, у Вас могут возникнуть трудности (если не сказать хуже) во время защиты которые могут привести просто к тому что Вы не защититесь.
В любом случае всем кто намеревается пойти или уже идет по этому довольно таки трудному пути искренне желаю удачи и успешной защиты :)
В конце хочу оставить название книги которая продолжает данную тему: «Работа над диссертацией по техническим наукам Изд.2» автор Рыжиков Ю.И., BHV-СПб — 2007 год. Лично мне она очень понравилась.
Звиняйте за размер но…
Кому лень разбираться — ссылка на архив с готовыми скриптами настроенными на проекты на DELPHI. Имею сказать, что с RAR'ом это всё можно сделат неизмеримо круче. Но RAR малость платный.
Структура каталогов:
Делаем в корне проекта папочку !Bakup
В ней создаём папки:
7zip — кладём туда 7zip.
Archives — тут будут хранится архивы и инкрементальные архивы.
Current — тут хранятся текущие образы архива проекта (можно просто переписать на флэшку).
Создаём в !Backup файлы:
exclude.lst и excludeback.lst — с масками файлов и директорий исключаемых из инкрементальных и обычных архивов. Маски из этих файлов объединяются.
excludecur.lst — файлы, исключаемые из текущих архивов.
excludefull.lst — файлы, исключаемые из полных архивов.
archivename.txt — префикс имени архива.
Дальше идут скрипты:
Backup.bat — создаёт самодостаточный архив в !Backup\Archives с текущей датой в имени. Файлы сортируются по папкам по месяцам (все архивы одного месяца хранятся в одной папаке).
Текст скрипта:
rem @echo OFF
set BDir=!Backup
md Current >nul
md Archives >nul
cd…
del %BDir%\Current\_excludebak.tmp >nul
@for /f «tokens=*» %%a in (%BDir%\ArchiveName.txt) do (
SET Name=%%a
goto ok
)
:ok
set Dtmp=%Date%%Time%
set DD=%Dtmp:~0,2%
set DM=%Dtmp:~3,2%
set DY=%Dtmp:~6,4%
set TH=%Dtmp:~10,2%
set TM=%Dtmp:~13,2%
set TS=%Dtmp:~16,1%
SET AName1=%BDir%\Archives\%Name%_%DY%-%DM%\%Name%_%DY%-%DM%-%DD%.zip
SET AName2=%BDir%\Archives\%Name%_%DY%-%DM%\%Name%_%DY%-%DM%-%DD%_%TH%%TM%%TS%.zip
if exist "%AName1%" goto FileExist
:DoExit
del %BDir%\Current\_excludebak.tmp >nul
cd %BDir%
Скрипт Current.bat — создаёт самораспаковывающийся самодостаточный архив текущего образа проекта в !Backup\Current в имя файла включается текущая дата. Предыдущие образы удаляются. Не архивирует историю архивов (папки !Backup\Current и !Backup\Archives). Предназначен для хранения и переноски текущего состояние проекта (очень удобно чтобы взять работу домой, например).
Текст скрипта:
rem @echo OFF
set BDir=!Backup
md Current >nul
cd…
@for /f «tokens=*» %%a in (%BDir%\ArchiveName.txt) do (
SET Name=%%a
goto ok
)
:ok
set Dtmp=%Date%%Time%
set DD=%Dtmp:~0,2%
set DM=%Dtmp:~3,2%
set DY=%Dtmp:~6,4%
set TH=%Dtmp:~10,2%
set TM=%Dtmp:~13,2%
set TS=%Dtmp:~16,1%
set AName1=%BDir%\Current\Cur_%Name%_%DY%-%DM%-%DD%.exe
Скрипт Delta.bat — создаёт древовидную структуру самораспаковывающихся инкрементальных архивов в !Backup\Archives. Архивы создаются помесячно. Т.е. для каждого месяца создаётся базовый архив и инкрементальные архивы. Для восстановления нужно распаковать сначала базовый архив за нужный месяц, а затем инкрементальный (_diff) за нужную дату месяца. Архивы также сортируются по папкам по месяцам.
Текст скрипта:
@echo OFF
set BDir=!Backup
md Current >nul
cd…
del %BDir%\Current\_excludebak.tmp >nul
@for /f «tokens=*» %%a in (%BDir%\ArchiveName.txt) do (
SET Name=%%a
goto ok
)
:ok
set Dtmp=%Date%%Time%
set DD=%Dtmp:~0,2%
set DM=%Dtmp:~3,2%
set DY=%Dtmp:~6,4%
set TH=%Dtmp:~10,2%
set TM=%Dtmp:~13,2%
set TS=%Dtmp:~16,1%
SET NameM=%Name%_%DY%-%DM%
SET NameD=%Name%_%DY%-%DM%-%DD%_diff
SET ANameM=%BDir%\Archives\%NameM%\d_%NameM%.exe
SET AName1=%BDir%\Archives\%NameM%\d_%NameD%.exe
SET AName2=%BDir%\Archives\%NameM%\d_%NameD%_%TH%%TM%%TS%.exe
:DoExit
del %BDir%\Current\_excludebak.tmp >nul
cd %BDir%
Скрипт Full.bat — создаёт полую копию проекта вместе со всей историей архивов в папке !Backup\Current. Предыдущая копия удаляется. Используется для переноса проекта вместе со всей историей и полного резервного копирования.
Текст скрипта:
@echo OFF
set BDir=!Backup
md Current >nul
cd…
@for /f «tokens=*» %%a in (%BDir%\ArchiveName.txt) do (
SET Name=%%a
goto ok
)
:ok
set Dtmp=%Date%%Time%
set DD=%Dtmp:~0,2%
set DM=%Dtmp:~3,2%
set DY=%Dtmp:~6,4%
set TH=%Dtmp:~10,2%
set TM=%Dtmp:~13,2%
set TS=%Dtmp:~16,1%
SET AName1=%BDir%\Current\Full_%Name%_%DY%-%DM%-%DD%.exe
if exist «AName1» goto FileExist
del Current\Full*.exe
Сервера приложений там, где сгодился бы сервлет-контейнер,
контейнер — там, где прекрасно себя чувствовал бы Jetty.
EJB(2, 3) вместо Spring.
Бинарный ремоутинг там, где сгодились бы HTTP-запросы.
SOAP вместо REST.
GWT вместо фронтенда на jQuery (или подобном) к REST-бекенду.
Чисто джавские MVC-фреймворки вместо Grails.
Толстые клиенты на RCP и Swing вместо Flex/AIR.
Подключаемые библиотеки для работы с картинками вместо внешнего ImageMagick.
Работа с файлами и окружением из кода вместо шелл-скриптов.
Такая команда пошлет вашему сайту (скрипту на нем) 1000 запросов, при этом в 300 потоков
С циферками можно поиграться, но суть такая.
В любом случае ab --help
Для загрузки кода на удалённое тестовое окружение лучше использовать Target Management (видео-урок по TM и Xdebug — vimeo.com/1210740). А для синхронизации (слияний) с кодом других разработчиков хорошо испольвовать SVN, для работы с ней в Eclipse есть плагин Subclipse (http://subclipse.tigris.org/).
Да, это проблема, я по совету от Postgres-гуру пробовал apgdiff.sourceforge.net/, но как то оно неочень помогло решить проблему поддержки N систем и синхронизации схем. Вывод у него плохо читаемый, да и выполнится полученый скрипт не захотел :( Не исключено, что я его просто неправильно готовил, може у вас получится.
А, почему бы не воспользоваться, так называемыми хуками (hooks)? Например, иметь отдельную branch для разработки и тестирования, а при комите в trunk вызывать этот самый hook, который и заливал бы файлы по ФТП на ваш боевой сайт?
Причём, настроить и дописать этот хук можно таким образом, что если соединения по ФТП не произошло, то и репозиторий не обновился (на всякий случай), а если произошло, то заливаются зменённые файлы и потом обновляется репозиторий? :)
1. PDT для php-разработки
2. JSEclipse для javascript
3. QuickREx для регулярных выражений
4. Subclipse для работы с SVN репозиторием
5. RSE (Remote System Explorer) для SSH, FTP, local drives
6. Eclipse Instant Messenger Plugin (ICQ)
7. Orfeus player (muzic)
8. Eclipse-games (играю)
Жаль, Eclipse кофе не готовит.
В удовольствие — кроме Eclipse и Opera для разработки ничего другого вообще не запускаю. Если запускаю — уже рутина.
Извольте.
Eclipse используется для разработки web приложений.
На работе от лицензии на Zend отказался в пользу PDT. Дистрибутив беру на zend.com/pdt — с интегрированным дебагером. Из расширений:
Aptana — редко и только для работы по FTP. HTML, XML и CSS редакторы, на мой взгляд, прекрасны и в штатном WTP.
Для JavaScript — JSEclipse (http://labs.adobe.com/technologies/jseclipse/)
QuickREx для регулярных выражений.
Subclipse для синхронизации с SVN репозитарием.
PHPDocumentor (для создания документации) и SimpleTest (аналог UnitTest) использую по большим праздникам.
Mylyn стоит, но не используется, т.к. не прижился багтрекер.
И, право слово, такой список с незначительными изменениями будет у любого веб разработчика — этой функциональности хватает с избытком.
Вопрос к вам лично: зачем вам Aptana? Что в ней есть такого, чего не хватает в Zend for Eclipse?
Хочется высказать небольшое «фи» в сторону Aptana Studio. Сам долгое время ей пользовался в основном из-за возможности синхронизации файлов с удалённым сервером. Но со временем стали раздражать, казавшиеся в начале незначительными, мелочи. Вроде невозможности выполнять синхронизацию в фоне, невозможности понять какие файлы изменились, без выполнения полной синхронизации, частичного сравнения выбранных директорий.
После долгих поисков и проб установил FTP and WebDAV support. Поиски были долгими, потому что долгими, потому что на официальном сайте на эту поддержку, похоже, забили. Нашёл здесь: www.jcraft.com/eclipse-sftp/ Там же нашёл плагин для синхронизации по SFTP.
Там все вхождения string1+string2+… компилятором автоматически заменяются на new StringBuilder().add(string1).add(string2)… toString();
если target=1.6 и 1.5.
И на new StringBuffer..., если target=1.4
А на machinelearning.ru есть не большая страничка, с описанием.
Немного поделюсь и своими скромными знаниями что касается этой темы…
На самом деле довольно тяжело найти руководителя которому можно было объяснить что главное что Вы разбираетесь в теме а не он. Чаще всего происходит так (по крайней мере с теми профессорами с которыми я сталкивался): Вы приходите и профессор выбирает Вам тему. Редко когда можно иначе. Лично я довольно много времени провел над тем чтобы найти руководителя который бы меня взял с моей темой. Многие меня брали но при условии что я буду писать именно ту тему которая им «интересна» (читайте «выгодна»).
И еще очень важным является тот факт какой Ваш руководитель имеет авторитет среди научного круга и тем более научного совета в котором Вам предстоит защищаться. Также существует риск что отношения руководителя с советом за время Вашей работы испортится и, как результат, у Вас могут возникнуть трудности (если не сказать хуже) во время защиты которые могут привести просто к тому что Вы не защититесь.
В любом случае всем кто намеревается пойти или уже идет по этому довольно таки трудному пути искренне желаю удачи и успешной защиты :)
В конце хочу оставить название книги которая продолжает данную тему: «Работа над диссертацией по техническим наукам Изд.2» автор Рыжиков Ю.И., BHV-СПб — 2007 год. Лично мне она очень понравилась.
Кому лень разбираться — ссылка на архив с готовыми скриптами настроенными на проекты на DELPHI. Имею сказать, что с RAR'ом это всё можно сделат неизмеримо круче. Но RAR малость платный.
Структура каталогов:
Делаем в корне проекта папочку !Bakup
В ней создаём папки:
7zip — кладём туда 7zip.
Archives — тут будут хранится архивы и инкрементальные архивы.
Current — тут хранятся текущие образы архива проекта (можно просто переписать на флэшку).
Создаём в !Backup файлы:
exclude.lst и excludeback.lst — с масками файлов и директорий исключаемых из инкрементальных и обычных архивов. Маски из этих файлов объединяются.
excludecur.lst — файлы, исключаемые из текущих архивов.
excludefull.lst — файлы, исключаемые из полных архивов.
archivename.txt — префикс имени архива.
Дальше идут скрипты:
Backup.bat — создаёт самодостаточный архив в !Backup\Archives с текущей датой в имени. Файлы сортируются по папкам по месяцам (все архивы одного месяца хранятся в одной папаке).
Текст скрипта:
rem @echo OFF
set BDir=!Backup
md Current >nul
md Archives >nul
cd…
del %BDir%\Current\_excludebak.tmp >nul
copy /Y /A %BDir%\excludeback.lst + %BDir%\exclude.lst %BDir%\Current\_excludebak.tmp >nul
@for /f «tokens=*» %%a in (%BDir%\ArchiveName.txt) do (
SET Name=%%a
goto ok
)
:ok
set Dtmp=%Date%%Time%
set DD=%Dtmp:~0,2%
set DM=%Dtmp:~3,2%
set DY=%Dtmp:~6,4%
set TH=%Dtmp:~10,2%
set TM=%Dtmp:~13,2%
set TS=%Dtmp:~16,1%
SET AName1=%BDir%\Archives\%Name%_%DY%-%DM%\%Name%_%DY%-%DM%-%DD%.zip
SET AName2=%BDir%\Archives\%Name%_%DY%-%DM%\%Name%_%DY%-%DM%-%DD%_%TH%%TM%%TS%.zip
if exist "%AName1%" goto FileExist
:FileAbsent
%BDir%\7zip\7za.exe a "%AName1%" -tzip -mx9 -mmt=on -mtc=on -ssw -scsWIN -ir!* -xr!"%BDir%\Current\*" -xr!"%BDir%\Full\*" -xr!"%BDir%\Archives\*" -xr@%BDir%\Current\_excludebak.tmp
goto DoExit
:FileExist
%BDir%\7zip\7za.exe a "%AName2%" -tzip -mx9 -mmt=on -mtc=on -ssw -scsWIN -ir!* -xr!"%BDir%\Current\*" -xr!"%BDir%\Full\*" -xr!"%BDir%\Archives\*" -xr@%BDir%\Current\_excludebak.tmp
goto DoExit
:DoExit
del %BDir%\Current\_excludebak.tmp >nul
cd %BDir%
Скрипт Current.bat — создаёт самораспаковывающийся самодостаточный архив текущего образа проекта в !Backup\Current в имя файла включается текущая дата. Предыдущие образы удаляются. Не архивирует историю архивов (папки !Backup\Current и !Backup\Archives). Предназначен для хранения и переноски текущего состояние проекта (очень удобно чтобы взять работу домой, например).
Текст скрипта:
rem @echo OFF
set BDir=!Backup
md Current >nul
cd…
@for /f «tokens=*» %%a in (%BDir%\ArchiveName.txt) do (
SET Name=%%a
goto ok
)
:ok
set Dtmp=%Date%%Time%
set DD=%Dtmp:~0,2%
set DM=%Dtmp:~3,2%
set DY=%Dtmp:~6,4%
set TH=%Dtmp:~10,2%
set TM=%Dtmp:~13,2%
set TS=%Dtmp:~16,1%
set AName1=%BDir%\Current\Cur_%Name%_%DY%-%DM%-%DD%.exe
:CreateNew
del Current\Cur*.exe
%BDir%\7zip\7za.exe a "%AName1%" -t7z -mx9 -sfx7zcon.sfx -ms30f10m -mmt=on -mtc=on -ms=off -ssw -scsWIN -ir!* -x!"%BDir%\Current\*" -x!"%BDir%\Full\*" -x!"%BDir%\Archives\*" -xr@%BDir%\excludecur.lst
goto DoExit
:DoExit
cd %BDir%
Скрипт Delta.bat — создаёт древовидную структуру самораспаковывающихся инкрементальных архивов в !Backup\Archives. Архивы создаются помесячно. Т.е. для каждого месяца создаётся базовый архив и инкрементальные архивы. Для восстановления нужно распаковать сначала базовый архив за нужный месяц, а затем инкрементальный (_diff) за нужную дату месяца. Архивы также сортируются по папкам по месяцам.
Текст скрипта:
@echo OFF
set BDir=!Backup
md Current >nul
cd…
del %BDir%\Current\_excludebak.tmp >nul
copy /Y /A %BDir%\excludeback.lst + %BDir%\exclude.lst %BDir%\Current\_excludebak.tmp >nul
@for /f «tokens=*» %%a in (%BDir%\ArchiveName.txt) do (
SET Name=%%a
goto ok
)
:ok
set Dtmp=%Date%%Time%
set DD=%Dtmp:~0,2%
set DM=%Dtmp:~3,2%
set DY=%Dtmp:~6,4%
set TH=%Dtmp:~10,2%
set TM=%Dtmp:~13,2%
set TS=%Dtmp:~16,1%
SET NameM=%Name%_%DY%-%DM%
SET NameD=%Name%_%DY%-%DM%-%DD%_diff
SET ANameM=%BDir%\Archives\%NameM%\d_%NameM%.exe
SET AName1=%BDir%\Archives\%NameM%\d_%NameD%.exe
SET AName2=%BDir%\Archives\%NameM%\d_%NameD%_%TH%%TM%%TS%.exe
if exist "%ANameM%" goto MonthExist
:MonthAbsent
%BDir%\7zip\7za.exe a "%ANameM%" -t7z -mx9 -sfx7zcon.sfx -mmt=on -mtc=on -ms30f10m -ssw -scsWIN -ir!* -x!"%BDir%\Archives\*" -x!"%BDir%\Full\*" -x!"%BDir%\Current\*" -xr@%BDir%\Current\_excludebak.tmp
:MonthExist
if exist "%AName1%" goto FileExist
:FileAbsent
%BDir%\7zip\7za.exe u "%ANameM%" -u- -up0q3r2x2y2z0w2!"%AName1%" -t7z -mx9 -sfx7zcon.sfx -mmt=on -mtc=on -ms30f10m -ssw -scsWIN -ir!* -x!"%BDir%\Archives\*" -x!"%BDir%\Full\*" -x!"%BDir%\Current\*" -xr@%BDir%\Current\_excludebak.tmp
goto DoExit
:FileExist
%BDir%\7zip\7za.exe u "%ANameM%" -u- -up0q3r2x2y2z0w2!"%AName2%" -t7z -mx9 -sfx7zcon.sfx -mmt=on -mtc=on -ms30f10m -ssw -scsWIN -ir!* -x!"%BDir%\Archives\*" -x!"%BDir%\Full\*" -x!"%BDir%\Current\*" -xr@%BDir%\Current\_excludebak.tmp
goto DoExit
:DoExit
del %BDir%\Current\_excludebak.tmp >nul
cd %BDir%
Скрипт Full.bat — создаёт полую копию проекта вместе со всей историей архивов в папке !Backup\Current. Предыдущая копия удаляется. Используется для переноса проекта вместе со всей историей и полного резервного копирования.
Текст скрипта:
@echo OFF
set BDir=!Backup
md Current >nul
cd…
@for /f «tokens=*» %%a in (%BDir%\ArchiveName.txt) do (
SET Name=%%a
goto ok
)
:ok
set Dtmp=%Date%%Time%
set DD=%Dtmp:~0,2%
set DM=%Dtmp:~3,2%
set DY=%Dtmp:~6,4%
set TH=%Dtmp:~10,2%
set TM=%Dtmp:~13,2%
set TS=%Dtmp:~16,1%
SET AName1=%BDir%\Current\Full_%Name%_%DY%-%DM%-%DD%.exe
if exist «AName1» goto FileExist
del Current\Full*.exe
:FileExist
%BDir%\7zip\7za.exe a "%AName1%" -up0q0r2x2y2z1w2 -t7z -mx9 -sfx7zcon.sfx -mmt=on -mtc=on -ms=off -ssw -scsWIN -ir!* -x!"%BDir%\Current\*" -x!"%BDir%\Full\*" -xr@%BDir%\excludefull.lst
cd %BDir%
И снова ссылка на архив со всем этим добром.
контейнер — там, где прекрасно себя чувствовал бы Jetty.
EJB(2, 3) вместо Spring.
Бинарный ремоутинг там, где сгодились бы HTTP-запросы.
SOAP вместо REST.
GWT вместо фронтенда на jQuery (или подобном) к REST-бекенду.
Чисто джавские MVC-фреймворки вместо Grails.
Толстые клиенты на RCP и Swing вместо Flex/AIR.
Подключаемые библиотеки для работы с картинками вместо внешнего ImageMagick.
Работа с файлами и окружением из кода вместо шелл-скриптов.
ab -c300 -n1000 yoursite.com/tested_script.php
Такая команда пошлет вашему сайту (скрипту на нем) 1000 запросов, при этом в 300 потоков
С циферками можно поиграться, но суть такая.
В любом случае ab --help
www.ashmanov.com/pap/ashrul.phtml
www.ashmanov.com/pap/ashrul2/
Спасибо Сергею, что он открыл его для меня :)
Причём, настроить и дописать этот хук можно таким образом, что если соединения по ФТП не произошло, то и репозиторий не обновился (на всякий случай), а если произошло, то заливаются зменённые файлы и потом обновляется репозиторий? :)
2. JSEclipse для javascript
3. QuickREx для регулярных выражений
4. Subclipse для работы с SVN репозиторием
5. RSE (Remote System Explorer) для SSH, FTP, local drives
6. Eclipse Instant Messenger Plugin (ICQ)
7. Orfeus player (muzic)
8. Eclipse-games (играю)
Жаль, Eclipse кофе не готовит.
В удовольствие — кроме Eclipse и Opera для разработки ничего другого вообще не запускаю. Если запускаю — уже рутина.
Довольно мощный и удобный в работе.
Eclipse используется для разработки web приложений.
На работе от лицензии на Zend отказался в пользу PDT. Дистрибутив беру на zend.com/pdt — с интегрированным дебагером. Из расширений:
Aptana — редко и только для работы по FTP. HTML, XML и CSS редакторы, на мой взгляд, прекрасны и в штатном WTP.
Для JavaScript — JSEclipse (http://labs.adobe.com/technologies/jseclipse/)
QuickREx для регулярных выражений.
Subclipse для синхронизации с SVN репозитарием.
PHPDocumentor (для создания документации) и SimpleTest (аналог UnitTest) использую по большим праздникам.
Mylyn стоит, но не используется, т.к. не прижился багтрекер.
И, право слово, такой список с незначительными изменениями будет у любого веб разработчика — этой функциональности хватает с избытком.
Вопрос к вам лично: зачем вам Aptana? Что в ней есть такого, чего не хватает в Zend for Eclipse?
После долгих поисков и проб установил FTP and WebDAV support. Поиски были долгими, потому что долгими, потому что на официальном сайте на эту поддержку, похоже, забили. Нашёл здесь: www.jcraft.com/eclipse-sftp/ Там же нашёл плагин для синхронизации по SFTP.