среда, 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 г.

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