понедельник, 2 декабря 2013 г.

Закрытие зависшей SSH сессии

Когда работаешь с OpenSSH частенько возникает такая проблема как зависание сессии и какие бы ты клавиши не нажимал сессия висит и не отвечает. Многие в такой ситуации просто закрывают окно терминала и открывают его заново, но мне такую штуку делать лень :). Поэтому жмем 3 клавиши и OpenSSH сессия закрывается и мы можем продолжать работу.

<Return> ~ . 


В чем тут смысл, для того чтобы закрыть OpenSSH сессию, нужно ввести ~. в начале строки. Для того чтобы убедится что вы в начале строки нужно нажать <Return>.

Читать далее

суббота, 30 июня 2012 г.

Pretty Nice git log output

Наконец то дошли руки по нормальному настроить себе вывод git log.
Выставляем следующие строчки в ваш .git/config
 [format]  
   pretty = %C(yellow)%h%Cred%d%Creset - %C(cyan)%an %Creset: %s %Cgreen(%cr)  
И получается очень удобный и информативный вывод логов =)
Быстро посмотреть что получится можно вот такой командой:
 git log --pretty=format:'%C(yellow)%h%Cred%d%Creset - %C(cyan)%an %Creset: %s %Cgreen(%cr)'  

Читать далее

воскресенье, 7 ноября 2010 г.

SSH Agent Forwarding

Возникла у меня на днях такая задачака:
Есть машина(m1) с парой ключей(private and public), я захожу через ssh на другую машину(m2), на которой лежит только публичный ключ, затем с машины(m2) хочу сделать clone git репозитория(на git'овом сервере тоже лежит публичный ключ), но git отвечает: Permission denied (publickey) т.к. моего private ключа на машине(m2) нет.


Решение проблемы:
  1. Запускаем ssh-agent на машине(m1):
    eval `ssh-agent`
    Его нужно запустить только если он ещё не запущен
  2. Добавляем ключ агенту:
    ssh-add
    По умолчанию добавится id_rsa ключ
  3. Проверяем добавился ли ключ:
    ssh-add -l
  4. Подключаемся к хосту через ssh клиенту с опцией -A(либо можно с опцией -o "ForwardAgent yes"):
    ssh -A somebody@somehost
    Либо можно добавить в ssh config:
    Host *
         ForwardAgent yes
  5. Делаем git clone или что мы там хотели и обязательно радуемся, потому-что все работает :)

Полезная ссылочка
An Illustrated Guide to SSH Agent Forwarding

Читать далее

воскресенье, 16 мая 2010 г.

Python client for GoogleTranslate

Есть две хороших и удобных штуки: сервис GoogleTranslate и *nix сonsole. И я решил подружить их =). Вообщем решил написать консольный клиент для GoogleTranslate.

В качестве языка выбрал python. Побродив по просторам всемирной паутины, готовой имплиментации python API для GoogleTranslate не обнаружил. Пришлось разбиратся самому. Вообщем-то ничего сложного:

Обращаемся по URL(пример которого приведен ниже) в ответ получам JSON со статусом ответа, и если все хорошо то там же найдем и перевод:

URL:

http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=[FROM]%7C[TO]&q=[TEXT]

FROM - из какого языка переводить
%7С - разделитель в виде вертикальной черты(|)
TO - в какой язык переводить
TEXT - текст который нужно перевести


Ответный JSON:

{responseData: {translatedText: [TEXT]}, responseDetails: None, responseStatus: [STATUS]}

translatedText - переведенный текст
responseStatus - статус сообщения

Так как я использую python 2.5, для работы с JSON легким движением руки установил simplejson

  1. sudo apt-get install python-simplejson



После этого написал модуль для работы с GoogleTranslate API:


  1. #!/usr/bin/env python

  2.  

  3. import simplejson

  4. import urllib

  5. import sys

  6.  

  7. GOOGLE_TRANSLATE_AJAX_URL = "http://ajax.googleapis.com/ajax/services/language/translate?"

  8. LANGUAGE_SEPARATOR = "|"

  9. RESPONSE_STATUS = "responseStatus"

  10. RESPONSE_DATA = "responseData"

  11. TRANSLATED_TEXT = "translatedText"

  12.  

  13. def translate(fromLanguage, toLanguage, text):

  14.         """ Translate text using google translate service"""

  15.         # Generate url

  16.         url = GOOGLE_TRANSLATE_AJAX_URL + urllib.urlencode({"v" : "1.0", \

  17.                         "langpair" : fromLanguage + LANGUAGE_SEPARATOR + toLanguage, \

  18.                         "q" : text})

  19.  

  20.         result = simplejson.load(urllib.urlopen(url))

  21.        

  22.         if (result[RESPONSE_STATUS]== 200):

  23.                 return result[RESPONSE_DATA][TRANSLATED_TEXT]



Вот такой простенький модуль получился =).

Ну а теперь код основного скрипта:

  1. #!/usr/bin/env python

  2.  

  3. from googledict import translate

  4. import sys

  5.  

  6. def main(args):

  7.        

  8.         fromLanguage = args[0][:2]

  9.         toLanguage = args[0][2:]

  10.         text = args[1]

  11.  

  12.         print translate(fromLanguage, toLanguage, text)

  13.  

  14. if __name__ == "__main__":

  15.         main(sys.argv[1:])



Ну вот и подружились =):

>./gt.py enru "Hello world"

Привет мир

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

Сорци всего этого добра можно найти Тут
Всем спосибо кто дочитался до этих строк.
Всего доброго...

Читать далее

вторник, 9 февраля 2010 г.

Борьба с hibernate LazyInitializationException

Сделай настолько просто, насколько это возможно, но не проще А. Эйнштейн
Доброе время суток!
По просьбе коллег пишу этот пост.
Суть проблеммы:
Когда мы по запросу подтягиваем hibernate сущность содержащую поля инициализирующиеся как Lazy, и пытаемся отобразить эти поля например на странице, то мы получаем LazyInitializationException.

Причина проблемы:
В момент обращения к сущности на странице, сессия уже закрыта и сущность находится в так называемом detached состоянии (более подробно о состояниях тут), отсюда то нам и не удается запросить у сущности её Lazy поля.
Решение:
Решение этой проблемы напрашивается само, сессию нужно держать открытой до тех пор пока не отдадим страницу.
Так как мы используем spring то и решение этой проблемы, будет расмотрено в рамках spring.
Необходимо добавить в свой web.xml spring'овый фильтр который и будет держать сессию открытой.
Вот как это выглядит:

<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>sessionFactory</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>

Здесь sessionFactory это имя той hibernate фабрики которую вы инициализировали в своем application context'е.

Ну вот собственно и все, после объявления данного фильтра никаких LazyInitializationException поидее у вас быть не должно =).

По этой же теме hibernate community

До новых встреч!)

Читать далее

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

Информация о Linux машине

Понадобилось мне на днях получить полную информацию о сервере на котором я работал.
Давайте рассмотрим как же это можно сделать.

Информацию о установленном дистрибутиве:
$ cat /etc/*-release

Обладатели Ubuntu увидят нечто подобное следующему:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.10
DISTRIB_CODENAME=karmic
DISTRIB_DESCRIPTION="Ubuntu 9.10"

Информацию о системе можно получить следующей комбинацией команд:
$ cat /proc/version

В Ubuntu:
Linux version 2.6.31-15-generic (buildd@yellow) (gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu8) ) #50-Ubuntu SMP Tue Nov 10 14:53:52 UTC 2009


Так же можно получить немного информации воспользовавшись
$ uname -a

В Ubuntu:
Linux alekseiko 2.6.31-15-generic #50-Ubuntu SMP Tue Nov 10 14:53:52 UTC 2009 x86_64 GNU/Linux

Информацию по объему памяти можно получить
$ cat /proc/meminfo

Информацию по процессору получаем вот так:
$ cat /proc/cpuinfo

Информацию о кол-ве дискового пространства:
$ df -h

Этот список буду продолжать, чтобы самому можно было заглянуть и освежить в памяти то что позабылось :)




Читать далее

четверг, 24 сентября 2009 г.

JSP для определения JAR'ника на сервере по имени класса.

Мал золотник да дорог.
Народная пословица(с)
    Я работаю над очень большим J2EE приложением и частенько сталкиваюсь с проблеммой(и не только я сталкиваюсь но и мои коллеги) определения из какого jar'ника загружен тот или иной класс и где этот jar'ник на сервере лежит.

    Для таких целей я написал давольно таки простенькую, но очень полезную jsp :-) которая принемает на вход имя класса и возвращает, где лижет тот jar'ник из которого загружен необходимый класс. Сама jsp удобна тем что подкладывать её можно на рабочий сервер без перезагрузки. Вообщем получилась некая мини тулза.
    Код её можно посматреть/скопировать здесь getJar.jsp

    Ну это вообщем все что я хотел поведать сегодня. Всем всего хорошего :-)

Читать далее