Programming and Exciting Things

Ако бяхме 60те....

Published on 30.08.2010

Как биха изглеждали рекламите на най-големите IT компании ако бяха страртирали своите проекти през 60те години на 20 век? Една бразилска агенция на име Moma си е задала този въпрос и ето го резултата.

Личният ми фаворит е за Twitter

Windows 98SE boot images

Published on 25.08.2010

В ерата на Windows 7 все още се налага тук таме да се инсталират операционни системи от преди мноооого години :) Днес ми се наложи да форматирам едно лаптопче Dell имах на дискове

Python – архивиране на MySQL база данни

Published on 19.08.2010

Преди наколко дни си сглобих едно скриптче на Python което да ми архивира и праща базата данни към email-а през определен период от време (cron). Скриптчето е тествано и работи на сървърите на Superhosting.bg

import commands
import sys
import time
import os
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders


db_host = '127.0.0.1'
db_user = "username_for_database"
db_pass = "*******************"

email_user = ""
email_smtp_server = "*.superhosting.bg"
email_from_user = "Yuks <admin@yuksbg.net>"
email_smtp_login_user = "admin@yuksbg.net"
email_smtp_login_pass = "*******"
email_smtp_server_port = "25"
email_smtp_sent_to = ["backUp@yuksbg.net"]

temp_folder = "/home/*****/scripts/backup_db/"


def backup_db(currentDatabase):
    backupFile = temp_folder + currentDatabase + ".sql"
    backupFilePath = temp_folder + currentDatabase + ".sql"
    zipFile = temp_folder + currentDatabase + ".tgz"
    commands.getoutput("mysqldump --host=%s --opt --user=%s --password=%s %s > %s" % (db_host, db_user, db_pass, currentDatabase, backupFilePath))
    os.chdir(temp_folder)
    commands.getoutput("/bin/tar cfz %s %s" % (zipFile, backupFile))
    os.remove(backupFilePath)

def sendMail(to, subject, text, files=[]):
    assert type(to)==list
    assert type(files)==list

    msg = MIMEMultipart()
    msg['From'] = email_from_user
    msg['To'] = COMMASPACE.join(to)
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = subject

    msg.attach( MIMEText(text) )

    for file in files:
        part = MIMEBase('application', "octet-stream")
        part.set_payload( open(file,"rb").read() )
        Encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'attachment; filename="%s"'
                       % os.path.basename(file))
        msg.attach(part)

    smtp = smtplib.SMTP(email_smtp_server,email_smtp_server_port)
    smtp.login(email_smtp_login_user, email_smtp_login_pass)
    smtp.sendmail(email_from_user, to, msg.as_string() )
    smtp.close()

def backup_and_send(bdatabase):
    backup_db(bdatabase)
    sendMail(email_smtp_sent_to,"Database archive of " + bdatabase,"Database " + bdatabase,[temp_folder + bdatabase + ".tgz"])
    os.chdir(temp_folder)
    os.remove(bdatabase + ".tgz")
    #print "ok!"

backup_and_send(sys.argv[1])
За да работи коректно е нужно да се променят някои от параметрите и по конкретно
db_host = '127.0.0.1'                               // сървъра на mysql 
db_user = "username_for_database"          // потребителското име за достъп до Mysql
db_pass = "*******************"// паролата за достъп до Mysql

email_user = ""   
email_smtp_server = "*.superhosting.bg"// smtp сървъра за изпращане на mail
email_from_user = "Yuks <[email protected]>"// полето от на изпращания емаил
email_smtp_login_user = "[email protected]"// потребителя за smtp сървъра
email_smtp_login_pass = "*****"//паролата за smtp сървъра
email_smtp_server_port = "25" // порта за smtp сървъра
email_smtp_sent_to = ["[email protected]"]  // email адреса до който ще се праща
temp_folder = "/home/*****/backup_db/"// временна директория с права за писане
Работата със скрипта е по следния начин: python /full/path/to/script/script.py database_to_archive Може да се свали и от тук

Windows Sysinternals Tools Online

Published on 07.08.2010

За повечето от потребителите Windows Sysinternals Tools навярно няма да говори нищо, но нека да се опитам да го обясня, това са няколко инструмента на фирмата Sysinternals, които Microsoft са купили пред далечната ехеей 2006г. Лично моята първа среща с тези инструменти е била горе долу по това време, когато бях ученик и смело правех опити за конфигуриране на работещ (правилно) AD сървър...... (тук е мястото да благодаря на Петър Георгиев за помощта, напътсвията и огромното търпение).

Та от известно време всичките тези инструменти за диагностика,управление и т.н са достъпни директно и като Mapped Drive. Адреса е live.sysinternals.com/tools. Ако се отвори през уеб ще се види списък с опцийка за теглене, но ако се въведе в Start->Run прозореца \\live.sysinternals.com\tools\

или пък с въвеждането на net use * \\live.sysinternals.com\tools командата в команден ред ще имаме достъп до въпросните инструменти като мрежово ус-во.

Chaining в Jquery

Published on 18.07.2010

Едно от хубавите неща е JQuery e възможността за използване на chaining. Това се постига благодаренение на това че почти всички методи и функции в jquery фреймуорка връщат jquery обект. Така нека да направим следното: имаме елемент с ID "menu" на който искаме да му добавим css class и после малко margin. Без chaining кода би изглеждал така:

$(document).ready(function(){
$('#menu').addClass('.active');
$('#menu').css('margin-left','20px');
});
а с използването на т.н chaining би изглеждали така
$(document).ready(function(){
$('#menu').addClass('.other_class')
              .css('margin-left','20px');
});
Изглежда малко по-добре нали? Това е точно философията на Jquery - "Write less, do more". Като цяло това е много малък пример, но така се постига бързодействие на самия код, защото js frаmework а не претърса целия документ отново и отново а вече "знае къде" е обекта и му прилага зададените функции/методи.