26 мар. 2008 г.

Вчера весь день занимался оффлайновой работой

Вчера весь день занимался оффлайновой работой, которая пока кормит.

Из интересного отмечу последний комментарий вот к этому посту про вьетнамку в инете. Изучайте ручную работу :) а может это и автомат постит в блогспот - я не проверял.



И вот тут полезно про настройку внутренней перелинковки на блоггере.

Хотя сейчас блогспот не лезет в выдачу сам по себе как раньше. Всё в песочнице :(

Прочитать полностью...

24 мар. 2008 г.

Настройка IMAP на Gmail.com

Если в настройках электропочты на gmail.com вы не видите опции IMAP Access:
(access Gmail from other clients using IMAP) это означает, что You are currently viewing Gmail in basic HTML. Нужно проделать следующее "Switch to standard view" :) Прочитать полностью...

Цены на домены .info $1,75, .in $3,70 на сайте vexat.us

Домены .info по цене $1,75, .in по $3,70 на сайте vexat.us, продление $8,00.

This scheme applies to all new .INFO Domain Names registered for the first year of their Registration. Therefore, a 2 year .INFO Domain Name will be charged at [USD 1.75 + USD 8.00].

Это я так, чтобы самому потом не забыть, где это :)

Для справки, на кликдомейнсе .info по $1.99 ,.in по $3.99, продление по $8.99. У эстонцев .info $6.40, продление 6.40, .in $13.49 продление $17.49. Прочитать полностью...

23 мар. 2008 г.

Эли выложил ломалку капчей для del.icio.us, он же делишес.

Точно, Эли жжет не по детски. Только выкарабкался из под ддоса - новый подарок халявщикам - This is the del.icio.us captcha busted in Python.

На случай нового ддоса - копирую на мой блог под катом.




#!/usr/bin/python
import Image,time,random,glob,re,os,sys

##$$
train = raw_input("train? (y/n)")
if(train == "y") : train= True
else: train = False
##
fileName = ''.join(sys.argv[1:])
def getNeighbourhood(i,width,height,pixels):
results = []
try:
if(pixels[i+1] != 0): results.append(i+1)
if(pixels[i-1] != 0): results.append(i-1)
if(pixels[i-width] != 0): results.append(i-width)
if(pixels[i+width] != 0): results.append(i+width)
if(pixels[i-width+1] != 0): results.append(i-width+1)
if(pixels[i+width+1] != 0): results.append(i+width+1)
if(pixels[i-width-1] != 0): results.append(i-width-1)
if(pixels[i+width-1] != 0): results.append(i+width-1)
except:pass
return results
now = time.time()
captcha = Image.open(fileName)
(width,height) = captcha.size
pixels = list(captcha.getdata())
i=0
for pixel in pixels:
if (pixel == 2): pixels[i] = 0
i+=1
toclean = []
for i in xrange(len(pixels)):
neighbourhood = getNeighbourhood(i,width,height,pixels)
if (len(neighbourhood) < 4) : pixels[i] = 0

captcha.putdata(pixels)
started=False
lowestY,highestY,count = 0,10000,0
captchas = []
slant = 15
for x in xrange(width):
hasBlack = False
for y in xrange(height):
thisPixel = captcha.getpixel((x,y))
if(thisPixel != 0):
if(started == False):
started=True
firstX = x
firstY = y
else:
lastX = x
if(y > lowestY): lowestY = y
if(y< highestY): highestY = y
hasBlack = True
if((hasBlack == False) and (started==True)):
if((lowestY - highestY) > 4):
croppingBox = (firstX,highestY,lastX,lowestY)
newCaptcha = captcha.crop(croppingBox)
if(train):
text = raw_input(”char:n”)
try: os.mkdir(”/home/dbyte/deliciousImages/” + text)
except:pass
text__ = “/home/dbyte/deliciousImages/” + text + “/” + str(random.randint(1,100000)) + “-.png”
newCaptcha.resize((20,30)).save(text__)
text_ = “/home/dbyte/deliciousImages/” + text + “/” + str(random.randint(1,100000)) + “-.png”
newCaptcha.resize((20,30)).rotate(slant).save(text_)
text_ = “/home/dbyte/deliciousImages/” + text + “/” + str(random.randint(1,100000)) + “-.png”
newCaptcha.resize((20,30)).rotate(360 - slant).save(text_)
captchas.append(Image.open(text__))
else:
#text = str(count)
#text = “tmp-delicious-” + text + “.png”
#newCaptcha.save(text)
captchas.append(newCaptcha.resize((20,30)))

started=False
lowestY,highestY = 0,10000
count +=1
if(train == False):

imageFolders = os.listdir(”/home/dbyte/deliciousImages/”)
images =[]
for imageFolder in imageFolders:
imageFiles = glob.glob(”/home/dbyte/deliciousImages/” + imageFolder + “/*.png”)
for imageFile in imageFiles:
pixels = list(Image.open(imageFile).getdata())
for i in xrange(len(pixels)):
if pixels[i] != 0: pixels[i] = 1
images.append((pixels,imageFolder))

crackedString = “”
for captcha in captchas:
bestSum,bestChar = 0,”"
captchaPixels = list(captcha.getdata())
for i in xrange(len(captchaPixels)):
if captchaPixels[i] != 0: captchaPixels[i] = 1
for imageAll in images:
thisSum = 0
pixels = imageAll[0]
for i in xrange(len(captchaPixels)):
try:
if(captchaPixels[i] == pixels[i]): thisSum+=1
except: pass
if(thisSum > bestSum):
bestSum = thisSum
bestChar = imageAll[1]
crackedString += bestChar
print crackedString
#print “time taken: ” + str(time.time() - now)


Прочитать полностью...

Выложил ломалку капчей для форума PHPBB2 на рапидшару

Вроде досит Эли перестали, надолго ли?

Тем временем я скачал и выложил на рапидшару исходники С++ ломалки капчи для форумов на движке PHPBB2.

Сам текст статьи находится тут. Это я скопировал на случай нового ддоса блога Эли.

Ссылка для скачивания под катом.

http://rapidshare.de/files/38906088/breakphpbb2.zip.html Прочитать полностью...

22 мар. 2008 г.

Глюки Блоггера + greqo побеждены

Ранее я писал, что один из автоблогов отвечает greqo: 401 нельзя постить этому юзеру в этот блог.

Тогда я стал "приглашать" соавторов "пописать" в этот блог. Сегодня в результате экспериментов выяснилось, что это защита на блоггере по разным ИП от одновременного логина.

Как это работает:

Если человек залогинился интерактивно на блоггере с одного ИП, то сервер (другой ИП) с постером получит отказ 401 "User does not have permission to create new post".

Если человек разлогинился, то ещё несколько часов (?) серверу с постером greqo нельзя будет постить в этот блоге.

А потом можно. Ура!

Прочитать полностью...

Палю тему номер 4 - как скачать интернет.

Палю тему номер 4 - кто-то скачивает интернет, точнее серп МСН. На один мой сайт уже недели две приходит кто-то/что-то c реферерами:

http://search.live.com/results.aspx?q=online&mrt=en-us&FORM=LIVSOP
http://search.live.com/results.aspx?q=public&mrt=en-us&FORM=LIVSOP

Ясное дело, что по таким общим словам, с конкуренцией 3 470 000 000, живой человек врядли будет листать до 789 результата, где, наверно мой сайт и стоит. Видимо это парсер лазит, домены собирает.

Прочитать полностью...