Analitycs

Показаны сообщения с ярлыком решения. Показать все сообщения
Показаны сообщения с ярлыком решения. Показать все сообщения

вторник, 7 августа 2012 г.

Ubuntu sudo без пароля

sudo visudo
Добавляем в самый конец строчку где superpuperuser - ваш логин
superpuperuser ALL=(ALL) NOPASSWD: ALL
Готово

понедельник, 16 июля 2012 г.

Как найти долгие запросы в Tornado?

Если нужно посмотреть, какие http запросы в Tornado (ну или в чем-то подобном) выполняются больше определенного времени.

Пример лог-файла

[I 120704 17:24:50 application:264] 200 GET /session/info/ (xxx.33.251.70) 138.56ms
[I 120705 18:17:15 application:264] 200 GET /catalog/xxxx/(xxx.33.251.70) 572.84ms
[I 120706 12:24:53 application:264] 200 GET /session/info/ (xxx.33.251.70) 127.04ms
[I 120706 13:03:12 application:264] 200 GET /session/login/ (xxx.33.251.70) 10.36ms
[I 120706 13:05:04 application:264] 200 GET /session/info/ (xxx.33.251.70) 209.89ms
[I 120706 13:06:59 application:264] 200 GET /session/info/ (xxx.33.251.70) 10.08ms
[I 120710 16:50:53 application:274] 200 GET /session/info/ (xxx.33.251.70) 171.46ms

Команда

# grep '200 GET' ./log/webapp.log |  sed 's/ms/ ms/g' | awk '{ if ($9 > 100 ) print $p0'}

Где 100 - минимальное время запроса

среда, 4 июля 2012 г.

Как восстановить ну ОЧЕНЬ большой dump MySQL?

Если дамп базы с боевого сервера MySQL весит НУ ОЧЕНЬ много, то для ускорения импорта в mysqld имеет смысл ВРЕМЕННО выставить следующие значения в my.cnf

set autocommit=0

unique_checks=0

foreign_key_checks=0

и перезапустить сервер

#sudo service mysqld restart

После импорта дампа -  нужно вернуть на место родные значения.

Для восстановления из бекапов - этот способ не рекомендуется,  он скорее - для разработческих серверов/копий.

понедельник, 25 июня 2012 г.

Как перемещать 3D камеру в Blender на MacBook?

Занесла меня тут нелегкая в 3D - с которым лет 10-15 уже дела не имел ;-) Последний раз чего то пытался рисовать еще в 90-е годы в институте в VRML. Понял, что не мое - но тут - НАДО! ;-)

Скачал Blender под MacOS, поставил и вот нужно мне некоторые предметы рассмотреть в трехмерке весьма тщательно и подробно - ан нет.

Ведь на ноуте моем - ни трехкнопочной мышки - ни даже однокнопочной, если честно ;-) , ни  NumPad, а с помощью touchpad - могу только крутить по одной оси, перемещать камеру вверх-вниз, вправо-влево и приближать-удалять.

Все, думаю - кранты - необходимый мне предмет ну никак не рассмотреть... ;-(

Рецепт

Идем в User Preferences -> Input и включаем галки

[v] Emulate 3-button mouse
[v] Emulate Numpad

В итоге с помощью цифровых клавиш  2<->8 и  4<->6 можно хоть как-то крутить камеру в трехмерке. Неудобно - но хоть как-то
И да, оказывается тут еще и на Python можно писать... Ляпота ;-) ;-)

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

Windows Phone 7 Outlook Error Error code: 80072F0D

Если Ваш новый телефон на Windows Phone 7 не может присоединится к Exchange с самоподписанным сертификатом, выдавая что-то в стиле

Outlook Error
Not updated
There is a problem with the certificate for mymailserver.ru. Contact a support person or your service provider.
Error code: 80072F0D

То нужно попросить админа Вашего почтового сервера выслать Вам сертификат на любой другой почтовый ящик - например на gmail.com.

И установить его, собственно - прямо из письма. Краткое содержание предыдущих 500 серий.

понедельник, 18 июня 2012 г.

Как скрыть версию nginx?

В конфиг nginx в раздел http добавляется строка

server_tokens off;

а в php.ini

expose_php = Off

четверг, 31 мая 2012 г.

Как передавать проекты? Или какая нужна документация?

Один старый друг задал мне хороший вопрос - как подготовить программный проект к передаче другому менеджеру - какая документация необходима?

Исходя из своего прошлого - описал ему свое видение - "на мой выпуклый глаз" (с) - как обычно это происходит в больших разработках. Потом подумал и решил оставить это тут - мало ли кому еще пригодиться?

Итак, хороший тон - есть корпоративная wiki + feature/bug-тракер, в которых ведутся документация и разработка соотвественно - они  и есть основной источник всех знаний о проекте.

Большие компании обычно используют связку Jira+Confluence (но не обязательно) - есть и много других вариантов (Redmine, MantisBT и прочие). Хотя на мой вкус, сравниться с грамотно настроенной Jira, которая проинтегрирована в Конфу - не может никто ;-)

В Wiki и ведется общая документация, то есть - составляются изначальные технические требования к продукту, пишется roadmap по версиям, рисуются usecase использования и т.д.

Исходя из тех требований и версий - собственно, потом и расставляются задачи по людям в зависимости от версий и так далее.

Степень готовности проекта оценивается исходя из "выполненности" задач разработчиками и тестерами.

Все вышесказанное - хороший путь - если ресурсы позволяют делать "по уму".

Если же нет - то от продукта "в общем" необходима следующая документация - что-где-когда? - я тут смешаю технические и менеджерские знания.

Что имеет смысл запросить от предыдущего владельца?

  • изначальные технические требования к продукту и список того, что поменялось за время разработки - чего должно быть?
  • архитектура и используемые технологии - как оно работает?
  • usecases использования - желательно в UML - как используется?
  • расписанный roadmap по версиям - когда, собственно?
  • текущее положение проекта - что уже сделано, что осталось? 
  • estimate - когда сделается?
  • схема и описание инфраструктуры проекта. Это список репозиториев с кодом, production/staging/test серверов, баз данных и так далее с доступами. Собственно - где и что крутится?
  • How-to / база знаний - например, как настроить/развернуть новый сервер?
  • имеющиеся проблемы в проекте"в-общем" и предлагаемые способы их решения - как технические, так общие и по людям, занятым в проекте (например, тестер Ипполит пьет горькую и опаздывает на работу ;-) )
Ну вот как-то так...

понедельник, 21 мая 2012 г.

Memcache не запоминает данные больше чем на 30 дней (expiration time)

При при попытке сохраненить данных в Memcache на срок больше чем на 30 дней (2 592 000 секунд) - данные не запоминаются ВООБЩЕ.

Кто виноват и что делать?

Сохранять в timestamp + expiration time - на Tornado/Python это выглядит как-то так

from datetime import datetime, timedelta
import tornado.escape

class MyApplication():

    def get_expire_time(self):
        start = datetime.now()
        session_length = self.settings['session_time']
        
        delta = timedelta(seconds=session_length)
        expires = start + delta
        return expires

    def save_session(self, data)
        end_time = time.mktime(self.get_expire_time().timetuple())
            
        self.mc.set(key, tornado.escape.json_encode(data), end_time)

Навеяно StackOverflow

четверг, 17 мая 2012 г.

Корректная кодировка в email - Python+UTF8

В продолжение темы корректных заголовков в письмах, отправляемых различным веб-софтом.

Вчера понадобился аналогичный вариант для Python c UTF-8 с использованием quopri

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import quopri

def QuoHead(String):
    s = quopri.encodestring(String.encode('UTF-8'), 1, 0)
    return "=?utf-8?Q?" + s.decode('UTF-8') + "?="

FIOin = "Андрей Петрович"
emailout = "some@test.ru"
emailin = "some2@test.ru"

msg = MIMEMultipart()
msg["Subject"] = QuoHead("Добрый день " + FIOin).replace('=\n', '')
msg["From"] = (QuoHead("Ирина Федоровна") + "  <" + emailout + ">").replace('=\n', '') 
msg["To"] = (QuoHead(FIOin) + "  <" + emailin + ">").replace('=\n', '')
m = """Добрый день.
  Это тестовое письмо.
Пожалуйста, не отвечайте на него."""


text = MIMEText(m.encode('utf-8'), 'plain', 'UTF-8')
msg.attach(text)
print(msg.as_string())


Найдено тут.

понедельник, 14 мая 2012 г.

Как установить MySQL SSH tunnel?

Если вам нужно приконектится к внешнему MySQL, а его порт 3306 закрыт firewall, то быстрейший способ получить желаемое (кроме установки пива админу) - это установить свой собственный SSH tunnel - с гейшами и шахматами.

Делается это так.

ssh -f -L 8080:my.super.puper.host.ru:3306 -l remote_user another.my.super.system.org sleep 60

Понятно, что SSH на firewall должен быть открыт.

После установки туннеля - уже обращаемся к самому себе:

mysql -h 127.0.0.1 -P 8080 -u user -p database

Можно жить.

среда, 25 апреля 2012 г.

MacOS X - использование mysql из Zend Server

Для использования MySQL клиента из Zend Server под MacOS вместо установленного из портов (зачем тащить еще один порт - если mysql уже есть в системе? ) нужно сделать следующее:

1) проверить есть ли /etc/zce.rc -

$ /usr/local/zend/mysql/bin/mysql
/etc/zce.rc doesn't exist!

2) создать/отредактировать его

ZCE_PREFIX=/usr/local/zend
if [ -z "$LIBPATH" ];then
   LIBPATH=/lib:/usr/lib:/usr/local/zend/lib
else
   LIBPATH=$LIBPATH:/usr/local/zend/lib
fi
export LIBPATH
APACHE_VER=2.2.11
WEB_USER=qtmhhttp
WEB_GROUP=nogroup
APACHE_PID_FILE=
PRODUCT_NAME=ZendServer
PRODUCT_VERSION=5.0.0
export INSTALLATION_UID=091708121207
DIST=pe
JB_EN=true
ZEND_TMPDIR=/tmp

3) Сделать симлинк на зендовский клиент

sudo ln -s /usr/local/zend/mysql/bin/mysql  /usr/bin/mysql

Теперь можно работать - ну или собираем из портов, либо ставим MAMP (не люблю).

пятница, 13 апреля 2012 г.

Supervisord soft-reload

Чтобы мягко перезапустить supervisord (без убивания процесса), набираем

sudo supervisorctl reread
sudo supervisorctl update

вторник, 10 апреля 2012 г.

"Pretty print" - плагин JSON-formatter для Safari

Для человекочитаемого JSON в Safari ставим вот это расширение с GitHub - safari-json-formatter .

Мелочь, а приятно. ;-)

понедельник, 9 апреля 2012 г.

Ошибка: C compiler cannot create executables / can't read "build.cmd": Failed to locate 'make' in path

Если при установке/запуске MacPorts (или еще чего-нибудь консольно-компилятельного) вылезла ошибка

$ sudo /opt/local/bin/port install sshfs
Warning: The Command Line Tools for Xcode don't appear to be installed; most ports will likely fail to build.
Warning: See http://guide.macports.org/chunked/installing.xcode.html for more information.
--->  Computing dependencies for sshfsError: Unable to execute port: can't read "build.cmd": Failed to locate 'make' in path: '/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin' or at its MacPorts configuration time location, did you move it?
To report a bug, see http://guide.macports.org/#project.tickets

То нужно
  • установить XCode
  • зарегестрироваться как разработчик (благо теперь можно это делать бесплатно)
  • пойти в Xcode -> Preferences -> Downloads и установить Command Line Tools


четверг, 29 марта 2012 г.

Facebook developer - ... is not a verified user.

Кстати, вы знаете, что принимать участие в разработке приложений для Facebook теперь могут только верифицированные пользователи?

Иначе - при добавлении пользователя даже в группу Тестеры(!) появится сообщение

Ivan Ivanov is not a verified user

И соотвественно, вот и  все - пользователь не добавляется.

Так что увы - нужно привязать телефон...

пятница, 23 марта 2012 г.

Как посмотреть версию прошивки на Samsung Wave 3 (s8600)?

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

*#1234#

и радуемс-с-с-я, моя прелес-с-сть.

четверг, 15 марта 2012 г.

Logging в Tornado

После большого рефакторинга проекта на Tornado пропало логгирование в stdout. То есть ошибки писались только в stderr, который выводился в лог сидящего уровнем выше сервиса  Supervisord (который за сервисом, собственно говоря, и наблюдал).

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

tornado.options.parse_command_line()

То есть должно быть примерно так

def main(): 
    application = tornado.web.Application([ 
        (r"/", MainHandler), 
    ]) 
    # this line will setup default logging no matter if you use command options 
    tornado.options.parse_command_line()
    logging.info("starting torando web server") 
    http_server = tornado.httpserver.HTTPServer(application) 
    http_server.listen(8888) # hardcoded port 
    tornado.ioloop.IOLoop.instance().start() 

После восстановления строчки-"беглянки" лог торнадовского приложения выглядит как положено


mneradkov@mneradkov-thinkpad:~/workspace/mysuperproject$ ./webapp.py 
[I 120315 16:33:28 mixins:28] [INFO] Directory [/home/mneradkov/workspace/mysuperproject]
[I 120315 16:33:28 mixins:28] [INFO] Connected to MySQL [xx.xx.xx.xx:xxxx]
[I 120315 16:33:28 mixins:28] [INFO] Connected to memcache [127.0.0.1:11211]
[I 120315 16:33:28 mixins:28] [INFO] 
[I 120315 16:33:28 mixins:28] [INFO] Server [My Super Server] version [X.Xalpha] binded to [127.0.0.1:11100]
[I 120315 16:33:28 webapp:37] Starting I/O loop to serve requests...

понедельник, 12 марта 2012 г.

Как синхронизировать Google c Bada (Samsung Wave 3) ?

Если вы пользователь Google и нужно засинхронизировать ваш аккаунт с телефоном на Bada (в моем случае - это Samsung Wave 3), то необходимо проделать следующие телодвижения.



  • Создаем Exchange ActiveSync аккаунт
  • Вводим имя-логин-пароль, но оставляем поле domain пустым
  • Затем нажимаем далее и после того как проверка будет неуспешной - в поле Server URL вводим m.google.com и выставялем галочку для SSL
  • Заодно выставляем галки синхронизировать и Календарь, Адресную книгу и Задачи. (Кстати - явный баг - при выборе одной галки СРАЗУ начнется синхронизация, в итоге у меня девайс синхрился 4(!) раза ;-) ) 

  • Теперь с этой странной зверюшкой можно как-то жить ;-)

    Вообще забавная платформа - воспринимается как Android без приложений от Google

    Подрезано тут

    четверг, 1 марта 2012 г.

    Как удалить все папки .svn от subversion?

    Есть у subversion (в отличии от git) не очень удобная особенность хранить служебную информацию в скрытых папках .svn. При каких-то манипуляциях с переносом каталога они жутко раздражают. Быстренько их удалить

    find . -name .svn -exec rm -rf {} \;