Python

Posted by admin

Склав план простенький по якому ви за певний час зможете вирости до джуніор програміста, якщо ним не являєтесь )

Припустимо що ви знаєте що таке цикл, функція в ПХП, трішки ХТМЛ і все.

План:
1. Читаємо інфу про системи контроля версій або про Mercurial або про Git, або на крайній випадок SVN. Тепер далі для всіх проектів пробуємо використовувати.
2. Розбираємося з MySQL. Встановлюємо його собі. Пробуємо через якусь прогу вставляти дані і робити прості запити - типу вибрати по ідентифікатору, дістати 10 останніх запитів і інше.
3. Встановлюємо ПХП чи Пітон і без всяких фреймворків пробуємо просто вивести в браузері якусь строчку. (якщо це Пітон, то можна юзати простий фреймворк, типу http://bottle.paws.de/)
4. Пишемо ХТМЛ сторінку гостевої книги. Тобто форму залишити повідомлення, і декілька виведених повідомлень.
5. Намагаємося вивести написану ХТМЛ сторінку в браузері чере ПХП чи Пітон.
6. Пишемо функціонал по вставці данних з форми до бази данних.
7. Пишемо функціонал по виводу вставлених записів до сторінки.
8. Тепер читаємо про MVC-архітектуру.
9. Вибираємо собі фреймворк на якому будемо програмувати. Бажано не використовувати складні типу Zend, або наворочені що роблять все замість вас типу Django.  Для PHP це може бути CodeIgnater, для Пітона наприклад TornadoWeb.
10. Тепер будем писати свій простий блог.
11. Пишемо ХТМЛ-шаблон - як буде виглядати ваш блог.
12. Розробляємо структуру таблиць в базі данних для постів.
13. Пишемо адмінку, де можна вставляти Пости в базу даних.
14. Пишемо функціонал що буде вибирати останні пости з бази і поміщати на сторінку.
15. Тепер закінчили з простим блогом і вертаємося знову до фронтенда. Читаємо про JavaScript.
16. Пишемо калькулятор як в вінді на ХТМЛ і ЯваСкрипту без всяких фреймворків.
17. Робимо так щоб калькулятор рахував не на ЯваСкрипті а на серверній стороні через Ajax.
18. Читаємо про Jquery.
19. Переписуємо калькулятор на Jquery.

Після цих 19 пунктів ви будете мати уяву про всі сторони веб-програмування, і можете претендувати на посаду джуніора, та й будете вже самі знати як розвиватися і що вчити далі.

PS: написано на основі власного досвіду, тому може для вас є краща і швидша дорога, ніж описана )

Posted by admin

Зараз здоров'я в нас вистачає і ми можемо не задумуватися про наші очі, про нашу спину, про наші руки... та пройде 10-20 років і все зміниться. У всіх є професійні хвороби, нажаль і програмістів не оминула така участь.

Почавши задумуватися над цими питаннями прийшов до висновку, що головна наша проблема в захопленні. Ми так захоплюємося що забуваємо про час. Вже в нас будуть боліти очі, а ми все одно думаємо, що ще годинку попрацюємо і все. А потім ще годинку і так поки за вікном не буде підійматися ранкове сонце.

Я себе не можу змусити відпочивати (, тому написав скриптик на пітоні, який висить в кроні і з частотою в одну годину на 10 хвилин робить екран чорним і блокує всі клавіши, щоб прожка вимикалась лише перезавантаженням. Хочеш не хочеш, а відпочивати змушує.

Якщо ви не програміст на Пітоні, то з цієї папки можна дістати і скрипт і конфіг і екзешник (якщо немає пітону) - http://bitbucket.org/presidentua/web-alarm/src/0b350733d9e1/save_eye/

Якщо ж ви Пітон-програміст і маєте час, то пропоную вам іспит - не дивлячись на мою прогу напишіть аналог за таким ТЗ: - при запуску робити чорний екран - ховати мишку - блокувати всі клавіши - блокувати Таск Манаджер - нормально виконуватися при запуску через Task Scheduler (!!! тут будуть складності в нових версіях Віндовса).

Бережіть себе!

PS: Рішення цієї задачки дивіться нижче в тексті.

Continue reading...

Simple Money Manager

22 Jul 2010
Posted by admin

Пам'ять з кожним роков все гірше і гірше, і це змушує використовувати сторонні тулзи. Але так важко чомусь знайти простенькі утиліти які б виконували лише одну функцію (. Ось мені було потрібно записувати скільки в мене грошей, порившись в інеті було знайдено кучу систем які б підійшли, але там крім потрібного функціоналу ще куча непотребу. Тож згадавши слова "Хоч щось зробити добре - зроби сам" - включив Пітон-редактор і вже за годинку був готовий новий сервіс: http://usd.tutamc.com

Відео про нього:

Ісходники на бітбакеті - http://bitbucket.org/presidentua/web-alarm/src/tip/usd/

Якщо зустрінете баги - то пишіть.

ПС: по безпеці... там не по правилах зроблено видалення з історії. Бо ж треба щоб видалення було лише ПОСТом, але зараз робиться через Гет. Але оскільки там в якості ідентифікатора не порядковий номер, то зловмиснику неможливо цією багою скористатися.

Posted by admin

Тільки нещодавно презентував супер-пупер будильник http://a.tutamc.com ))), як готовий розповісти про нову універсальну систему для показу вашого поточного IP адреса і країни - http://ip.tutamc.com з відкритими сорсами - http://bitbucket.org/presidentua/web-alarm/src/tip/ip/. Все як і в минулий раз реалізовано на Google App Engine на Python. Enjoy!

PS: при таких великих постах розумію що іноді Твіттер буває користий )

Posted by admin

Простенький веб-будильник: http://a.tutamc.com/
Код: http://bitbucket.org/presidentua/gae-alarm/

огляд TornadoWeb

22 May 2010
Posted by admin

Невеличкий ознайомчий підкаст про Tornado записаний без підготовки за обідню перерву. Краще як завжди дивитися на самому сайті Вімео в HD-форматі.

About TornadoWeb from presidentua on Vimeo.

Posted by admin

Україна росте! Ні, звичайно не в політичному плані, чи в культурному плані... Чи в чомусь іншому, там ми стоїмо, або рухаємося як черепашки. Україна росте в інформаційному плані. В нас з кожним роком все більше і більше "компьюторних" компаній. Росте кількість не лише фірм з 2-х людей, що ставлять всім Вордпрес ), а й росте кількість компаній що роблять дійсно складні системи. Це мене дійсно радує!

Ще цікавий факт, що останнім часом дуже виросла в моїх "професійних" очах Одеса. Раніше професіонал міг знайти нормальну роботу лише в Києві, і трішки в Харкові. Та зараз все більше і більше компаній розміщаються саме в Одесі. І правильно роблять. Нащо їм той перенаселений Київ... чи той "трішки" грязнуватий Харків, якщо є Одеса з морем! Нехай не зовсім чистим морем беспосередньо біля Одеси, але ж якщо в офіс задуває бріз, то продуктивність праці гадаю виростає в декілька разів.

І якби в мене не було справ в Харкові, або якби цей різкий ріст в Одесі був рік назад, то я б туди точно переїхав би жити.

Та як виявилося в Одесі можна не тільки знайти цікаву роботу програмісту, але й спеціалісту по безпеці! Всі знають фірму Comodo, то в неї є філія в Одесі. І саме зараз вони шукають спеців по безпеці. Ось їхня ваканція - http://www.work.ua/jobs/549606/. Де ж була ця вакансія коли я займався безпекою )

Блін, який же я радий що в дитинстві вирішив піти в "інфоматику"!

Posted by admin

За вчорашній вечер написав маленький модуль до Django. Мені потрібно було розіслати по всім користувачам розсилку емайлів. З однії сторони звичайна задача, але облазивши весь інтернет не знайшов простого модуля. Тож засучив рукава, включив Ангіну на повну гучність, і вже за декілька годин мав результат ).

Тож press_subscription вміє:

  • створювати листи
  • відсилати листи адмінам, щоб перевірити як вони виглядають
  • відсилати всім користувачам листи
  • в листі можна використовувати змінні, такі як емайл користувача, і лінк щоб відписатися на розсилку
  • можливість відписатися від розсилки

Для роботи press_subscription потрібні модулі:

Хоча система буде працювати і без mailer, а щоб відмовитися від dblogging потрібно закоментувати лише два рядки.

Систему вже затестив на продакшині в себе, і помилок немає. Хоча я через те що спішив трішки подурному поназивав поля в моделях. Та й код непогано б відрефакторити, та то вже якось пізніше ).

Саме за цю модульнісь я люблю Джанго, бо тепер якщо мені в наступних проектах буде потрібна розсилка, то її вже імплентую за хвилину.

Весь модуль знаходиться на bitbucket - http://bitbucket.org/presidentua/django-subscribe/wiki/Home

Можливо він буде корисний не лише мені )

Posted by admin

Хоча сьогодні 1 квітня, але цей пост не жартівливий. Чесне слово.

Півроку назад я спробував юзати базу даних Redis і написав на ній простенький блог - http://tutamc.com/node/201. По тих тестах я бачив що Redis швидка база, але так на практиці ніразу й не доводилося її заюзати.

Та тут мене як фрілансера знайшов один замовник і за "їжу" я написав скриптик, що використовував MySQL. Цей скрипт повинен був брати дані з різних сайтів і заносити їх в базу. Скрипт вийшов на декілька десятків рядків і в тестах нормально себе зарекомендував. Але на продакшин сервері я побачив таку сумну статистику:

MYSQL: count SQL query - 125984, time - 14606.3

Хоча запити були й прості, але через те що їх було більше 100 тисяч скрипт працював як бачимо 4 години. Спочатку думав над оптимізацією всієї роботи, та щось мені ліньки стало думати. І я просто заюзав Redis - змінивши в скрипті декілька рядків отримав таку стату:

REDIS: query - 125984, time - 109.3

Redis працював більше ніж в 100 раз швидше! При цьому не грузив проц навіть на 1 відсоток, і займав в оперативі лишень 30 Мб. Я просто в шоці! Гадав прискорення буде хай в 5 чи 10 раз, але не в 100. До того ж Redis запущений під Віндою і він там ще не оптимально працює, гадаю під Лінохом швидкість була б ще швидша.

Тож якщо в вас якийсь високонавантажений проект, то придивіться до Redis'а - http://code.google.com/p/redis/ 

PS: зборки Redis під Windows знаходяться тут - http://code.google.com/p/servicestack/wiki/RedisWindowsDownload

Posted by admin

Вибачаюсь, вибачаюсь, вибачаюсь (.

В недавній статті щодо штучного інтелекту я зробив маленьку помилку в прогі, яка давала змогу мені вигравати. Бага була в тому що він не навчався на помилка, а лише навчався на перемегах, що було не досить ефективно. Тож тепер можу вам показати скриптик, який майже НЕПЕРЕМОЖНИЙ!

Оце кусок який відповідає за логіку:

class Game(object):
    memory = one_game = {}

    def __init__(self, sticks_count):
        self.sticks_count = sticks_count
        for _ in xrange(self.sticks_count+1):
            self.memory[_] = {1:1, 2:1, 3:1}

    def finish_lose(self):
        self.memory[ min(self.one_game) ][self.one_game[ min(self.one_game) ]] -= 1

    def one_move(self, stick):
        ch = []
        for i in self.memory[stick]:
            for _ in xrange(self.memory[stick][i]):
               ch.append(i)
        if not ch:
            return 1
        self.one_game[stick] = random.choice( ch )
        return self.one_game[stick]
Continue reading...
 
 
 

Contacts

Роман Хоменко aka PresidentUA
mail/jabber: spirt40@gmail.com

Creative Commons License

Qualified multimedia programmer right here. . такси бон вояж в екатеринбурге . Корпоративное обучение тренинг: увеличение объемов продаж. Продажи тренинг. . лучшие и качественные спреды.