Вчера весь день занимался оффлайновой работой, которая пока кормит.
Из интересного отмечу последний комментарий вот к этому посту про вьетнамку в инете. Изучайте ручную работу :) а может это и автомат постит в блогспот - я не проверял.
И вот тут полезно про настройку внутренней перелинковки на блоггере.
Хотя сейчас блогспот не лезет в выдачу сам по себе как раньше. Всё в песочнице :(
Прочитать полностью...
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 результата, где, наверно мой сайт и стоит. Видимо это парсер лазит, домены собирает.
Прочитать полностью...