четверг, января 5

менеджер пакетов dpkg и немного awk

Маленькая строчка, но очень полезная в "быту":

sudo dpkg --get-selections | grep %ЧТО_ИЩЕМ% | awk '{print $1}' - | sudo xargs dpkg --[purge|remove]

[purge|remove] - команда на выш выбор.

Для чего нужна? Чтобы удалить большой (более 1-го ;) ) список пакетов из системы по фильтру %ЧТО_ИЩЕМ%.

последний раз столкнулся, когда у меня zend-server не захотел устанавливаться из репозитария. да и удаляться тоже не пожелал - ругался и требовал, чтобы я выполнил "apt-get -f install", в котором он тоже только ругался на зависимости. Пришлось "прибивать" пакеты вручную через dpkg, исправлять зависимости и заново устанавливать zend-server :)


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

с CentOS на Debian. iptables (обновленное)

ранее я уже писал про использование правил iptables в Debian-based операционках. в комментариях неизвестный подсказал удобное и, пожалуй, более правильное решение - прописывание напрямую скрипта загрузки в /etc/network/interfaces.

Итак, что нам понадобится:
1) установленный пакет iptables (проверить можно через "sudo dpkg -s iptables | grep -i status")
2) ваш прежний скрипт-файл правил (у меня он называется iptables.sh)

Проверяем и, если данное правило отсутствует, то добавляем в файл /etc/network/interfaces для нужного сетевого интерфейса (например для eth0):

pre-up iptables-restore < /etc/iptables.up.rules


ЗЫ: у меня оно было прописано для интерфейса eth0 как "post-up ..." - заменил на "pre-up ..."

теперь наш скрипт iptables.sh работает как и прежде - выполняем, проверяем, сохраняем.


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

понедельник, декабря 5

Lotus @-формулы. задачки

Имеем на входе представление с 3-мя колонками:
1) список А (например пользователей)
2) список Б (например ролей)
3) список В (отношение пользователь-роль)

Задача: Выбрать уникальные роли из колонки Б, которые есть у всех пользователей из колонки А. При этом, если роль не встречается хотя бы у одного пользователя, то её отбрасываем.

в итоге родилось вот такое вот решение на @-формулах (переменные list, roles и users как бы результат выборки из представления):

list := "User1~role1":"User2~role3":"User2~role1":"User3~role1":"User3~role3":"User4~role1":"User4~role2";
roles:="role1":"role2":"role3";
users := "User1":"User2":"User3":"User4";

t0:=users*+"~"*+roles;
t1:=@Replace(t0; list; "");
t2:=@Explode(t1; "~");
t3:=@Replace(t2; roles; "");
t4:=@Unique(@Replace(t2; t3; ""));
result := @Unique(@Replace(roles; t4; ""));
result

Результат вычисления: role1


А теперь по порядку распишу каждую строчку:

создаём все возможные пересечения пользователь~роль
t0:=users*+"~"*+roles;
User1~role1
User1~role2
User1~role3
User2~role1
User2~role2
User2~role3
User3~role1
User3~role2
User3~role3
User4~role1
User4~role2
User4~role3

удаляем все пересечения, которые уже есть в list:
t1:=@Replace(t0; list; "");
User1~role2
User1~role3
User2~role2
User3~role2
User4~role3

Преобразуем список t1 в список с пользователями и ролями отдельно в каждой "строке"
t2:=@Explode(t1; "~");
User1
role2
User1
role3
User2
role2
User3
role2
User4
role3

удаляем из списка t2 все роли, оставляя только пользователей
t3:=@Replace(t2; roles; "");
User1
User1
User2
User3
User4

А теперь из списка t2 удаляем всех пользователей, полученных в списке t3. Тем самым мы получаем роли, которые не упоминались у каждого из пользователя в списке users
t4:=@Unique(@Replace(t2; t3; ""));
role2
role3

ну и завершающий аккорд - "инвертирование" списка t4, оставляя только те роли из списка roles, которые не попали в t4
result := @Unique(@Replace(roles; t4; ""));
role1



UPD: Формулу можно сократить и привести к следующей:


t0:=users*+"~"*+roles;
t1:=@Replace(t0; list; "");
t2:=@Unique(@Right(t1;"~"));
result := @Trim(@Unique(@Replace(roles; t2; "")));
result

суббота, ноября 5

Sony Ericsson Xperia Active и удаление McAfee Security

По умолчанию, в комплекте предоставляется trial-версия антивируса, который или нужно оплатить (30 баксов) или же удалить.
Удалить сию "гадость" с ходу не получилось - пришлось порыться в тырнете.

нарыл решение проблемы:
1) зайти в "Настройки > Местоположение и безопасность > Выбор администраторов"
2) снять галку у "McAfee Security"
3) Удалить приложение обычным путём через "Настройки > Приложения > Управление приложениями"


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

четверг, сентября 22

JetBrains PhpStorm и имя пользователя

При создании новых файлов, можно использовать автоподстановку имени пользователя по переменной ${USER}. И всё бы хорошо, если бы она не равнялась логину пользователя, что не всегда удобно. При работе в Eclipse я уже привык к добавлению следующих строчек кода в eclipse.ini:
-Duser.name="Victor Alenkov (http://borzdeg.blogspot.com)"
А вот в продуктах от JetBrains данный подход с правкой PhpStorm.vmoptions не сработал - стабильно ругался на пробел в строке. :( В итоге, родилось следующее решение: находим в файле PhpStorm.sh находим и дописываем что нам нужно (выделено жирным):
$WEBIDE_JDK/bin/java $JVM_ARGS -Djb.restart.code=88 -Duser.name="Victor Alenkov (http://borzdeg.blogspot.com)" $WEBIDE_MAIN_CLASS_NAME $*
Сохраняемся и перезапускаем IDE. наслаждаемся)
Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

вторник, августа 23

ручная установка JRE/JDK на Linux сервере

Бывает так, что на сервере с Linux нет требуемой версии Java и её приходится устанавливать самому.
Со временем пришёл к следующей схеме (подсмотрел "в этих ваших интырнетах") да сам что-то допилил.

1) качаем нужную нам версию с оффсайта. Лично я качаю всегда или tar или bin архив
2) распаковываем куда-нить на сервере. например в /usr/lib/jvm/
3) делаем симлинк default на ту JRE/JDK, что будет использоваться по умолчанию
4) делаем симлинк latest на ту JRE/JDK, что является последней версией (может быть на ту же версию Java, что и для default)
5) добавляем через update-alternatives наш каталог default
6) указываем через update-alternatives по умолчанию добавленный default.

Пример (для Java SE Development Kit 7):

$ wget http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-x64.tar.gz
$ tar xvf jdk-7-linux-x64.tar.gz
$ sudo mv jdk1.7.0 /usr/lib/jvm/
$ sudo ln -s /usr/lib/jvm/jdk1.7.0 /usr/lib/jvm/default
$ sudo ln -s /usr/lib/jvm/jdk1.7.0 /usr/lib/jvm/latest
$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/default/bin/java" 4
$ sudo update-alternatives --install "/usr/bin/java" "javac" "/usr/lib/jvm/default/bin/java" 4
$ sudo update-alternatives --install "/usr/bin/java" "javaws" "/usr/lib/jvm/default/bin/java" 4

И теперь через команду "sudo update-alternatives --config java" (вместо java можно подставить javac или javaws) настраиваем, что по умолчанию будет отзываться на команду java (javac и javaws соответственно).

Проверяем:

$ java -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)

ЗЫ: симлинк latest нужен, чтобы всегда можно было обратиться к последней версии Java :)

пятница, июля 22

вторник, июля 12

Google Translate

в гугл-транслите внизу под полем ввода есть "Прослушать".
но, если включить перевод с немецкого на русский и... в поле ввода написать по-русски, то кнопка переименуется в beatbox. правда она не пашет :( по крайней мере, я пока не понял ЧТО туда написать, чтобы услышать битбокс

ЗЫ: а фразу "ыыы пфф бздынь" он воспринимает как белорусский язык)

кросспост

четверг, июля 7

Eclipse и большие XML файлы

При попытке открыть очередной XML файл в несколько сотен килобайт внутри Eclipse, последний тупо "завис". Различные попытки "поиграть" с параметрами запуска не приводили к успеху.

В итоге, действенным способом оказалось предварительно отформатировать XML, а потом уже "скармливать" его Eclipse.

самый простой и быстрый способ, это в консоли выполнить:
xml_pp -l -i.bak file

В итоге, получим отформатированный XML-файл file и его резервную копию (оригинал) в виде file.bak

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


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!