Analitycs

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

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

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

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

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

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

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

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

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

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

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

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

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

среда, 30 мая 2012 г.

Adsense Spam или простейший способ "слить" свой рекламный бюджет

Меня каждый раз удивляют контекстные объявления, откровенно сливающие бюджет рекламодателей.

Пример




Объявления
  • Spam Veggie Pita Pockets - Server 8
  • French Fry Spam Casserole - Bake 30-40 minutes
  • Spam Imperial Tortilla Sandwiches - To serve each roll in half
Показываются в папке Spam от Gmail русскоязычному пользователю, а значит - немалые деньги рекламодателя фактически просто  вылетают в трубу уходят в Google...

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

Контекстная реклама - гениальное средство для законного отъёма денег у населения в карман владельца системы. Просто... и гениально.

вторник, 29 мая 2012 г.

Webmoney для iPhone

Ну в-общем, как и предполагал ранее - клиент Webmoney для iOS не заставил себя долго ждать.


Приятно.

Качать тут.

Интересно, сколько времени у них approve от Apple занял? И с какого раза

понедельник, 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

Можно жить.

суббота, 5 мая 2012 г.

Mail.ru втихую удаляет редиректы на другие почтовые сервисы

Восстанавливая пароль на один свой аккаунт, вспомнил, что зарегистрировал его на старый ящик на mail.ru, с которого уже года 4 как идет редирект на Gmail.

Винни-Пух подождал пять минут - письма не было. Он посмотрел на часы и подождал еще 10 минут... письма не было....

После чего Винни-Пух матюгнулся и полез на web-интерфейс Mail.ru. Письмо нашлось... вместе с 4724(!!!) письмами за полгода.

Причина наипростейшая - в настройках Mail.ru редиректа ВНЕЗАПНО исчез мой адрес на Gmail. При опросе знакомых выяснилось, что случай такого деликатного слива - далеко не единичный.

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