четверг, 24 декабря 2009 г.

java 1.3 + Mandriva x86_64

Возникла тут странная задача... поставить java 1.3 на 64х разрядный
линукс 2009 года выпуска. Вот что из этого получилось.

Устанавливал я на Mandriva 2009.1 x86_64.

Имеем дистр j2sdk-1_3_1_20-linux-i586.bin
Устанавливаем его

В резултате получаем каталог с развернутой сдк 1.3
переходим туда
cd jdk1.3.1_20

пробуем запустить джаву
bin/java -version

в ответ получаем
Error: can't find libjava.so.

с помощью strace можно выяснить где ищется эта библиотечка
но дабы не мучить читателя просто скажу.
...
stat("bin/../jre/lib/x86_64/libjava.so", 0x7fff66e6f570) = -1 ENOENT (No such file or directory)
...

Естественно никаких x86_64 там нет и быть не может
создаем ссылку на i386

ln -s ~/bin/jdk1.3.1_20/jre/lib/i386 ~/bin/jdk1.3.1_20/jre/lib/x86_64

Пробуем опять запустить

bin/java -version

Получаем
bin/../jre/bin/realpath: line 22: ~/bin/jdk1.3.1_20/bin/../jre/bin/x86_64/realpath: Нет такого файла или каталога
bin/../jre/bin/realpath: line 22: exec: ~/bin/jdk1.3.1_20/bin/../jre/bin/x86_64/realpath: cannot execute: Нет такого файла или каталога
bin/java: line 54: /bin/realpath: Нет такого файла или каталога
bin/java: line 55: /bin/realpath: Нет такого файла или каталога
grep: /lib/jvm.cfg: Нет такого файла или каталога
grep: /lib/jvm.cfg: Нет такого файла или каталога
java was not found in /bin/x86_64/native_threads/java

т.е. тоже самое

Создаем ссылку

ln -s ~/bin/jdk1.3.1_20/jre/bin/i386 ~/bin/jdk1.3.1_20/jre/bin/x86_64

Пробуем снова

bin/java -version

Получаем
java was not found in
~/bin/jdk1.3.1_20/bin/x86_64/native_threads/java

тожесамое только для каталога ~/bin/jdk1.3.1_20/bin/i386

ln -s ~/bin/jdk1.3.1_20/bin/i386
~/bin/jdk1.3.1_20/bin/x86_64

и снова пробуем
bin/java -version
~/bin/jdk1.3.1_20/bin/x86_64/native_threads/java: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory

Данная библиотека находится в пакете libstdc++2.10
ставим пакет

после этого
bin/java -version
java version "1.3.1_20"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_20-b03)
Java HotSpot(TM) Client VM (build 1.3.1_20-b03, mixed mode)

Формально все запустилось... и даже работает

суббота, 5 декабря 2009 г.

Cisco VPN client

Понадобилось по служебной необходимости впн поднять, да не просто впн а до цыски... и дескать лучше всего подходит для этого cisco vpn client. ну я не мудствуя лукаво поставил оный клиент из репозитария... А он не взлетает. библиотек требует.

после заклинания

# ldconfig

клиент от требования библиотек отказался.

Сделал я ему профиль как указано в служебной инструкции а он скотина работать опять не хотит

грит
execv:No such file or directory

и все тут.

Решил я ему объяснить что таки он не прав ни разу. И решил применить для пущей надежности убеждения кунг-фу, strace то бишь. Но поскольку vpnclient это скрипт, то и кунг-фу я ему вонзил прямотаки в нутро. Прям в вызов бинаря. И с добивающим приёмом '-f'.

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

вот он виновник тунеядства.

/opt/cisco-vpnclient/bin/cvpnd

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

# rm -f /opt/cisco-vpnclient/bin/cvpnd
# ln -s $(which cvpnd) /opt/cisco-vpnclient/bin/cvpnd

как все начинает работать.

Остался собсно гря один нерешеный вопрос... кудыж сборщики то смотрели?

нет.. вру... еще 1 есть...

Зачем оная софтина для запуска отключает ядра проца все кроме
одного... а когда стартанет снова подключает.. О_о... чуднО

понедельник, 19 октября 2009 г.

eLisp и .emacs

Подрихтовал тут свой .emacs

А заодно доделал несколько полезных на мой взгляд функций которых не
нашел в стандартной комплектации. Точнее они в том или ином виде есть
но нет в том виде в каком я хочу. А еще я начал(о ужас!) проникаться
лиспом. Мне все больше и больше импонирует этот странный язык.

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



(defun my-extract-word ()
(interactive)
(backward-word 1)
(setq 1 start (point))
(forward-word 1)
(setq end (point))
(buffer-substring start end))

(defun my-highlight-phrase ()
(interactive)
(highlight-phrase (my-extract-word) 'hi-yellow))

(defun my-occur ()
(interactive)
(occur (my-extract-word)))

(defun my-grep ()
(interactive)
(setq tmplist (split-string buffer-file-name "\\."))
(grep (concat
"grep -n "
(my-extract-word)
" "
(concat "*." (nth 0 (last tmplist))))))


Все достаточно просто my-extract-word () получает слово
находящееся под курсором. Остальные функции дергают одну из
стандартных для полученного ранее слова. Соответственно все они
прицепленны к хоткеям.

А еще я привел свой .emacs к такому виду
(load "~/.emacs.d/myfuncs.elc")

Cоответственно весь конфиг теперь лежит в myfuncs.el и при каждом
изменении перекомпиляется. Даже для моей сравниельно небольшой
конфигурации скорость старта возросла заметно.

И еще...
Пока делал этот пост обратил внимание. Толи у emacs подсветка синтаксиса для eLisp работает не правильно, толи htmlize-buffer косячит. :(

вторник, 13 октября 2009 г.

Пару слов о jsmpp

Что это.

jsmpp это java библиотека для работы с протоколом SMPP. Очень веселая надо признаться библиотека. Несмотря на всю простоту простокала, ей реализуемого, сама она ниразу не претендует на простоту как понимания так и реального использования. При этом функционал, как это не прискорбно, охвачен далеко не полностью а способы расширения функционала весьма не очевидны(об этом далее). Кроме того она до мозга костей пронизана java-way'ем. Прибавьте сюда от факт что персонаж писавший этот курсовой проект просто дичайшим образом переел паттернов. конкретно ему очень понравилась идея делегирования. И он ее применил где только мог. В исходных кодах этой библиотеки я усмотрел наверное всего пару классов которые никуда свои инстансы не передают. Глубина такой передачи запросто может превышать один объект.

Краткое описание моих злоключений.

Есть созданный не мной простенький смсцентр с использованием этой библиотеки. И в один прекрасный момент потребовалось оганизовать в нем принудительную отдачу ESME_RTHROTTLED в некоторых случаях. Не спрашивайте зачем это могло понадобится. Просто примите к сведению факт - понадобилось. При наличии огромного количества EventListner'ов и прочих CallbackHandler'ов нет возможности назначить обработчик входящего сообщения так чтобы он вызывался в нужный момент. А организация обработки входящего сообщения в нужной тебе последовательности просто не предусмотрена. Задача решлась с помощью грязного хака. Я принудительно подменяю значение ESME_ROK на
ESME_RTHROTTLED.

Итого:
Если возникает желание воспользоваться этой библиотекой то лучше:
1) Глубоко вздохнуть
2) Перечитать спецификацию SMPP
3) Придумать другой способ решения проблемы

понедельник, 31 августа 2009 г.

Удивления начинающего джаваписца

Опять maven...

Обнаружилась интересная фишка. Фат джар собранный и запаковынный на одной машине не соответствует таковым собранным на других.

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

Откуда он их берет, причем именно в момент сборки, науке пока не известно...

Выясню в чем проблема - отпишусь дополнительно.

upd:
Наконец то нашел время написать.
Суть проблемы была вот в чем. одноименный .properties файл уже существовал в одном из пакетов которые были в зависимостях и при сборке он заменял собой нужный файл.

т.е. на одной машине(intel/linux) он не заменял а на другой(sparc/solaris) заменял. А вот при распаковке заменял один другим. На "правильности" замены сказалась, видимо, настройка локали.

Вылечилось очень просто.
в src/main/assembly/assembly.xml надо воткнуть следующую инструкцию. По названиям тегов я думаю суть ее будет понятна и потому углубляться в ее суть не буду.


<dependencySets>
<dependencySet>
<unpack>true</unpack>
<unpackOptions>
<excludes>
<exclude>META-INF/**</exclude>
<!-- чтобы не перезаписать -->
<!-- правильный -->
<exclude>имечко.properties</exclude>
</excludes>
</unpackOptions>
</dependencySet>
</dependencySets>


соответственно если надо такую операцию провернуть с несколькимии файлами или типами файлов то придется поигтаться с масками. Которые почему то мавену задаются в форме отличной от стандартых регекспов. За что им(создателям сего поделия) направляю очередной плевок в спину.

пятница, 21 августа 2009 г.

Узелок на память

пишу чтоб не забыть.
совершенно замечательная заметка - http://konishchevdmitry.blogspot.com/2008/08/ctrlh-emacs-bash-gtk.html

среда, 29 июля 2009 г.

Удивления начинающего джаваписца

Удивление третье. Возмущенное.

String a = "a.b.c.d";

System.out.println("begin");
for(String item : a.split("."))
{
System.out.println("-"+item);
}
System.out.println("end");

если мы это скомпиляем и запустим то увидим.... правильно
begin
end


А все дело в том что метод split для объекта String в java принимает регулярное выражение в качестве параметра. И все бы ничего но точка это спецсимвол. И как теперь строку порезать по точкам неясно, ибо самый логичный вариант обхода этого ограничения

for(String item : a.split("\."))
приводит к таким вот последствиям:
jsplit.java:10: illegal escape character
for(String item : a.split("\."))


И если первую часть данного экзерсиса я вполне понимаю то невозможность заэкранировать точку для меня вообще лежит за гранью логики.

Привет авторам этого замечательного, дарящего радость языка.

четверг, 23 июля 2009 г.

Деньги освоены

Совершенно замечательная заментка про внедрение СПО в школах.

http://v-alksnis2.livejournal.com/153820.html


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

понедельник, 20 июля 2009 г.

Периодически гаснет монитор

Обнаружил неприятное явление.
При бездействии выключается подсветка монитора через ~60сек. Долго искал причину благо в отпуске и могу себе позволить такую роскошь.

Оказалось все дело в DPMS.

Толи в новой версии Xorg сменились значения по умолчанию то ли еще чего.

Лечить можно так.

совсем отключить.
root# xset -dpms
либо в xorg.conf прописать следующее
Section "Device"
...
Option "DPMS" "false"
...
EndSection
и ребутнуть иксы

Если энергосберегающие функции монитора таки нужны, то произвести настройку как указанно по ссылке

upd: xset -dpms можно говорить и не от рута, да и отключает оно энергосбережение вовсе не на всегда а на текущий сеанс. как отключить сию радость через какой либо GUI инструмент я не нашел.

вторник, 14 июля 2009 г.

Чудо-новости

Вроде не первое апреля, но тем не менее..

Новый браузер от микрософта может называться Gazelle - сцылка

Создатель ЛСД попросил денег у Джобса на эксперименты - сцылка

понедельник, 13 июля 2009 г.

Mandriva 2008.1 -> 2009.1

Обновился.
Вроде нормально все прошло. Только вот nautilus по началу долго не мог показать содержимое хомяка, но после ребута все прошло.

Все замечательно подхватилось, все настройки и конфиги. Без шаманства. Респектище мандривостроителям!

Upd: млин.. только что заметил что стала гореть кнопочка включения wifi. До этого она не светилась, но работала. А теперь и работает и светится %)

четверг, 9 июля 2009 г.

Удивления начинающего джаваписца

Удивление второе. Жесткое.

Если не сказать жестокое.

String a = "a";
String b = "a";

if(a == b)
{
//никогда не выполнится
}
Разработчики Java просто удивительные люди. Почему то они решили что операция == выполняемая над ссылочными типами должна сравнивать объекты в памяти но никак не их смысл. Видимо нонконформизм просто кипит в их развесёлых умах. Затейники, блин.

etags и дерево каталогов. Действие второе

Обнаружил интересную особенность решения из предыдущего поста.
Если сделать так.

find src/ -name '*.java' -exec etags -a ./TAGS {} \;

то при переходе по тэгам емакс стабильно попадает в файл
TAGS что само по себе не смертельно но нафиг не нужно.

однако если сделать

find src/ -name '*.java' -exec etags -a {} \;

то все работает как надо. Видимо в первом варианте TAGS включается сам в себя.
Получается что нельзя явно указать в какой конкретно файл надо добавлять тэги.

вторник, 7 июля 2009 г.

eLisp: слово под курсором

До этого момента думал что elisp это сложно и не для гуманоидов. Но...

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

(defun my-occur ()
(interactive)
(backward-word 1)
(setq 1 start (point))
(forward-word 1)
(setq end (point))
(occur (buffer-substring start end)))
Здесь для функции occur создана обертка вычленяющая слово на котором стоит курсор.

Логика такова:
Откатываемся в начало слова и получаем текущюю позицию потом уходим в конец и опять получаем позицию. Передаем в occur слово вырезанное из буфера.

Остается прицепить новорожденую на удобный хоткей и наслаждаться жизнью.

З.Ы. Получилось сие творение после диагонального штудирования этой доки

etags и дерево каталогов

До недавнего времени думал что etags может создавать тэги только внутри одного каталога. И потому применял Xrefactory, который надо признаться не слишком хорош. Не все тэги находит, да и навигация в нем оставляет желать лучшего. Единственно пожалуй приятная вещь работающая без нареканий - построение дерева наследования. а пот по тэгам он переходит мягко говоря не лучшим образом.
В общем решил я заглянуть в маны etags'a. Заглянул и с удивлением обнаружил опцию . Недолго думая выдал команду:

find src/ -name '*.java' -exec etags -a ./TAGS {} \;

и вуаля! Emacs переходит по тэгам во всем дереве.

Преимущества подобного подхода в том что не надо строить проекты и п.х. при первой попытке перехода емакс сам спроит в каком файле искать тэги.

пятница, 3 июля 2009 г.

Удивления начинающего джаваписца

Удивление первое. Мягкое.

Maven.
Штука в принципе хорошая но...
пока проект собираешь с локальными библиотеками все нормально а как только привинчиваешь мавен обязательно чего-то не работает.

Причем собирается ведь все без нареканий, но при работе вываливает какие-то невесть откуда взявшиеся баги.

Кодировочки

Выросла относительно недавно проблемка. На пустом месте буквально. Есть у нас в конторе проект который в CVS лежит. Так исторически сложилось. И поскольку данная система UTF8 не поддерживает а доки туда коммитят и виндоюзеры тоже и названия у доков русские то после чекаута получаются файлики с совершенно замечательной абракадаброй вместо названия. Вобщем сыскать нужную доку - проблема. Для решения набросал скриптец для изменения кодировки в названиях файлов.

#!/bin/bash

#created by RDX 06.10.2008

cdir=$1
from_=$2
to_=$3
newname=""

if [[ "$cdir" = "--help" || "$cdir" = "-h" ]]
then
echo "fix invalid encodig of filenames"
echo "usage: drename <dir> [source_encoding destination_encoding]"
echo " default will be encode from CP1251 to UTF8"
exit 0
fi


#1 param - filename
#2 param - from ecoding
#3 param - to encoding
function to_other_converter()
{
newname=$(echo $1 | iconv -f${2} -t${3})

#if filename can be decoded
if [ $1 != $newname ]
then
#decode it
mv -f $1 $newname
fi
}

#1 param - filename
#2 param - from ecoding
#3 param - to encoding
function to_utf_converter()
{
#utf names shouldn't be renamed
is_in_to=$(echo $1 | gawk '/[а-яА-Я]/ {print $0}')

if [ "$is_in_to" = "" ]
then
to_other_converter $1 $2 $3
fi
}

#default values
if [ "${from_}" = "" ]
then
from_=CP1251
fi

if [ "${to_}" = "" ]
then
to_=UTF-8
function curent_converter()
{
to_utf_converter $1 $2 $3
}
else
function curent_converter()
{
to_other_converter $1 $2 $3
}
fi

#field separator must be 'enter' for filenames with spaces
IFS='
'


# for each item in directory
for fname in $(ls $cdir)
do
curent_converter $fname $from_ $to_

#recursive tree traversal of directories
if [ -d $newname ]
then
cd $newname
drename . $from_ $to_
cd ..
fi

done

echo $(pwd) renamed

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

четверг, 2 июля 2009 г.

Всем привет.
Решился наконец завести блог и постепенно излить сюда все свои мыслишки. Так что буду писать по мере наступления оных.