четвъртък, 19 февруари 2009 г.

скрипт за синхронизация на статуса ви от twitter към скайп

Днес написах един прост скрипт за синхронизация на статуса ви от twitter.com към скайп. Когато го стартирате ще ви поиска име и парола от туитър, ще изтегли последния ви ъпдейт и ще го вкара в mood полето ви на скайп. Скайп разбира се ще ви попита дали вярвате на този скрипт и вие се съгласявате.

Той има следните зависимости:

Skype4Py: https://developer.skype.com/wiki/Skype4Py

python-twitter: http://code.google.com/p/python-twitter/

Инсталацията и на двете е лесна под линукс. И двете ги има в pypi

така че лесно би трябвало да можете да ги инсталирате със командите:


python easy_install Skype4Py
python easy_install python-twitter


Ако това не стане, следвайте инструкциите от горните линкове. Под уйндолс скриптът е изпробван, и работи, но не очаквайте лесна инсталация. Уйндолс е особено негостоприемен за шел скриптове. За щастие успях да ги инсталирам и да подкарам скрипта.

А ето го и самия скрипт:



#!/usr/bin/env python
#-*-Encoding: utf-8-*-

#importing the needed api's
import Skype4Py,twitter

def get():
"""
getting the username and password from the user

"""
user=raw_input("twitter username:")
passw=raw_input("twitter password:")
return (user,passw)

user,passw=get()


#instantiating skype and conecting to the client
skype=Skype4Py.Skype()
skype.Attach()

#conecting and autenticating to twitter.com
twitterAPI=twitter.Api(user,passw)
twitter_user=twitterAPI.GetUser(user)

#composing the status mesage
status=u' Status from http://twitter.com/: "'
status+=twitter_user.status.text+'"'

#inserting the mesage in skype's mood field
skype.CurrentUserProfile.MoodText=status

print "Done!"




можете просто да го копирате във файл на име tw2s.py или нещо подобно, да му дадете права за изпълнение:

chmod +x tw2s.py

и да го стартирате:

./tw2s.py

Това е.

четвъртък, 12 февруари 2009 г.

Защо Javascript е истински език?

За да поясня един спор между мен и един млад и заинатен С++ програмист реших да понапиша няколко реда. Ще се опитам да се въздържа от обидни думи към майката на Бярне Строуструп, защото е излишно. Целта на този пост е образователна.

Да се върнем към фундаментът. Какво е компютърът? Изчислителна машина! Ок. Ето как бих обяснил компютърното програмиране на човек който няма почти никакъв досег с компютър(т.е. няма предразсъдъци относно какъв е процесът):

"Компютърът е машина, която е неспособна да прави каквото и да било. Работата на програмистът е да я научи как да се "преструктурира" във специализирана машина, която да извършва точно определена задача".

И ето поясненията: Компютърът наистина е безполезен без софтуерът. А какво е наистина софтуерът? Това е описание на някаква машина.

def fib(n):
if n==0:
return 1
else:
return n*fib(n-1)

Това е описание на машина, която да изчисли n-тото число на фибоначи. Въпреки че това е python, ако напишете тази програма на който и да е език, резултатът е един и същ, компютърът се преконфигурира за да изпълни това изчисление. Това е фундаментът. Всичко останало са слоеве абстракция, и други неща предназначени да превърнат компютрите от теоретични играчки в машини за решаване на истински проблеми.

От това следва че софтуерът е просто описание на дадена машина. Програмирането е процесът на изграждане на машина, която да извърши дадена работа. Всичко друго са подробности и нямат отношение към същността на процеса.

Това е така, на теория не ти трябва нищо друго освен туринг машина. На практика обаче, подробностите са решаващи. Спорът ми не стигна до фундаментът на компютърното програмиране, но усетих че основната идея не е особено ясно дефинирана в главата на опонентът ми, за това беше добра идея да я обясня, защото аргументите ми се градят върху тази идея.

Когато погледнем на нещата от този ъгъл, осъзнаваме че подробностите имат отношение само към конкретния проблем който решаваме. И да отречеш даден подход напълно, или да проявиш липса на разбиране и арогантност към определен дял от изкуството е равносилно на неразбиране на фундаментът. Или по конкретно, ако смяташ че уеб програмирането не е истинско програмиране, защото не можеш да продуцираш .exe файл, проявяваш невежество. Не е важно дали създаваш .exe или .sh или .py и дали кодът ти се компилира или интерпретира за да определиш дадено програмиране като истинско, а друго като нещо тотално различно. Това са подробностите които зависят само от конкретния проблем. Ако пишеш десктоп програми за уйндолс, ползвай C++ или C# и продуцирай .exe-та, ако искаш да организираш цялата информация на планетата създай мега-сървър, използвайки JVM като платформата ти, ако искаш да напишеш инсталатор за библиотеката ти, използвай bash... Не можеш да кажеш че само .exe файловете са истински софтуер, това е глупаво и най важното: НЕ Е ВАЖНО. Или поне не е най- важното. Отново повтарям: Това е просто детайл свързан със специфичния проблем който се решава.

Каква е разликата между scheme интерпретатор написан на С и Scheme интерпретатор написан на Scheme? Едното е по бързо от другото, да, но това е само подробност. Ако погледнем на нещата от по високо, разбираме че единствената разлика са детайлите, всъщност това че едното е .exe а другото е .scm няма никакво значение, и двете се подчиняват на което и да е определение за софтуер. Всъщност дори и интерпретаторът да беше написан на Javascript и да работеше в браузарът, пак нямаше да има значение, защото кодът просто описва машина, която върши действие, няма нищо магическо в .exe файловете, те са просто друг формат. Няма нищо срамно в това интерфейсът ти да е написан на HTML, вместо на QT, резултатът е същия, просто едното е в табче във firefox, а другото е в собствен прозорец. Въпросът е да си свършиш работата!

Едно от най важните неща които всеки програмист трябва да научи е кои детайли да гледа, и кои да игнорира. Това на каква платформа работи приложението ти има значение, но то не е фундаментално.

неделя, 1 февруари 2009 г.

Какво следва от тук на татък...

Днес(01.02, т.е. вчера, това ще се постне след полунощ) навърших 19. От утре(13 минути от момента на писане) започва нова година от моя живот. Това ще е една от най трудните ми години. Вече се примирих с факта че съм тотално преебан за следващите няколко месеца и осъзнах че реалистично нямам време да се занимавам с програмиране и блогване и с други готини неща в същото време в което се занимавам с учене.
Дълго време се борих за да не ми се налага да променям радикално начинът си на живот.

Обичам да ставам сутрин, да си чета комикси и да си сърфирам за няколко часа в нета, след това да отида на даскало и вечерта като се прибера да почета блогосферата и да попиша малко код, и може би да отделя малко време за учене по математика(предметът който трябва да овладея до съвършенство в близките 2-3 месеца).

Осъзнавайки че нямам достатъчно време, разбрах че няма да я бъде мойта. Използвайки прекрасната(не толкова) програма google calendar, си направих режим за деня, който ми дава по 3 часа време за учене на ден, и почти всичко останало е време в което се занимавам с хобитата ми.

Това не е достатъчно. За съжаление обаче аз съм мързел. Дълго време мислих как да се справя с проблема, дори и писах софтуер за да ми помогне да се мотивирам да уча. Истината е че задачата ми е прекалено трудна за да се справя без да я възприема дълбоко в душата си.

Нали разбирате, в момента за мен ученето на математика е нещо тъпо, което системата ме кара да правя, и което ми пречи да се занимавам с хобитата си. Това пречи на процеса, защото не мога истински да се концентрирам върху задачата си. Друга причина за трудности е и факта че задачата е много голяма и много трудна. Обичам предизвикателствата, но само тези които мога да премина. Това мога да премина много трудно. Това води до една подсъзнателна паника.

Постигнах много през изминалата седмица. Спрях да се оплаквам от това какво имам да правя, вярно е че не е честно от моята гледна точка, но на никой не му пука. Аз съм тоя който трябва да седне и да учи. Всички други учат, това че съм бил мързелив през последните 4-5 години и не съм учил по нищо, и съм си начаткал кофти оценки си е мой проблем. Първата стъпка е направена.

Освен това осъзнах сложноста на проблема. Ако съм научил нещо за последните няколко седмици отностно сложни проблеми, това е че те не са страшни, а само изглеждат такива. Ако разделиш проблемът на части, те са прости и лесни. Истинската трудност идва от това че частите са прекалено много.

И ето го и третото нещо което осъзнах тази седмица: Ако се организирам правилно, и ако се мотивирам както трябва, мога да се справя. Ако страхът от провала излезе от душата ми, ако приема задачата си със смирение, може и да успея!

Това е началото. Да разбера проблема и методите за решаването му, както и да преодолея стратът от сложността му са първите стъпки. От тук на татък следва само труд. Надявам се да успея, със сигурност имам шансове, със сигурност ще е трудно, но вече няма страх от това. Сега остава само да разбера как ще живея без свободно време :D

Тъй като нямам свободно време, няма да проверявам за грешки и да редактирам този текст, той е натурален, той е такъв какъвто е излязал изпод пръстите ми. Този нов блог се ъпдейтва рядко, и за съжаление ще се ъпдейтва рядко още доста време, но някой ден ще имам време да му отделя заслуженото внимание...