-Музыка

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в dimzon541

 -Интересы

.net ajax c# development fallout futurama java javascript nightwish o/r mapping rpg sci-fi vbscript web 2.0 windows communication foundation windows presentation foundation xaml xml алгоритмы сжатия аудио/видео альтернативная история

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 17.03.2006
Записей:
Комментариев:
Написано: 3362





Переход на Linux - GreedyTorrent на Python

Четверг, 03 Февраля 2011 г. 20:33 + в цитатник
За основу взял microproxy, добавил модификацию upload-а и поддержку цепочки прокси...

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. """
  5. pyGreedTorrent
  6. This code is based on code based on microproxy.py written by ubershmekel in 2006.
  7.  
  8.  
  9. """
  10.  
  11. PORT = 8080
  12. UP_MULT = 5.53
  13. DN_MULT = 0
  14.  
  15. ACTUAL_PROXY_HOST_PORT = ()
  16. # Uncomment and modify line below to use chain proxy
  17. #ACTUAL_PROXY_HOST_PORT = '127.0.0.1', 3128
  18.  
  19. import re, socket, threading
  20.  
  21. reUP =  re.compile(r"(?<=\Wuploaded=)\d+", re.UNICODE )
  22. reDOWN =  re.compile(r"(?<=\Wdownloaded=)\d+", re.UNICODE )
  23.  
  24. err403 = 'HTTP/1.0 403 Forbidden\r\n' \
  25.     +'Server: nginx/0.7.65\r\n' \
  26.     +'Date: Tue, 16 Nov 2010 14:20:07 GMT\r\n' \
  27.     +'Content-Type: text/html; charset=windows-1251\r\n' \
  28.     +'Content-Length: 169\r\n' \
  29.     +'Connection: close\r\n' \
  30.     +'<html> <head><title>403 Forbidden</title></head>' \
  31.     +'<body></body></html>'
  32.  
  33. regex = re.compile(r'http://(.*?)/', re.IGNORECASE)
  34.  
  35. def cheat_url( s ):
  36.     m = reUP.search( s )
  37.     m2 = reDOWN.search( s )
  38.     if m and m2 :
  39.         up = int( round( UP_MULT * int( m.group() ) ) )
  40.         down = int( round( DN_MULT * int( m2.group() ) ) )
  41.         return s[:m.start()] + str(up + down) + s[m.end():]
  42.     else:
  43.         return s
  44.    
  45.  
  46. class ConnectionThread(threading.Thread):
  47.     def __init__(self, (conn,addr)):
  48.         self.conn = conn
  49.         self.addr = addr
  50.         threading.Thread.__init__(self)
  51.    
  52.     def run(self):
  53.  
  54.         data = self.conn.recv(1024*1024)
  55.         #print data
  56.         #print 11
  57.  
  58.         host = regex.search(data).groups()[0]
  59.  
  60.         data = cheat_url( data )
  61.        
  62.         request = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  63.         #request.settimeout(6)
  64.        
  65.         if ACTUAL_PROXY_HOST_PORT:
  66.             host = ACTUAL_PROXY_HOST_PORT
  67.         else:
  68.             i = host.find(':')
  69.             if i >= 0:
  70.                 host = host[:i], int(host[i+1:])
  71.             else:
  72.                 host = host, 80
  73.         try:        
  74.             request.connect( host )
  75.                
  76.             request.send( data )
  77.      
  78.             reply = ''
  79.      
  80.             while 1:
  81.                 temp = request.recv(1024)
  82.      
  83.                 if ('' == temp):
  84.                     break
  85.                    
  86.                 self.conn.send(temp)
  87.         except:
  88.             self.conn.send( err403 )
  89.         self.conn.close()
  90.  
  91. class ProxyThread(threading.Thread):
  92.     def __init__(self, port):
  93.         self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  94.         self.sock.bind(('localhost', port))
  95.         threading.Thread.__init__(self)
  96.    
  97.     def run(self):
  98.         self.sock.listen(10)
  99.         while 1:
  100.             temp = ConnectionThread(self.sock.accept())
  101.             temp.daemon = True
  102.             temp.start()
  103.  
  104. if __name__ == "__main__":
  105.     proxy = ProxyThread(PORT)
  106.     #proxy.daemon = True
  107.     #proxy.start()
  108.     print "Started a proxy on port", PORT
  109.     proxy.run()
  110.    
  111.  
Рубрики:  девелопмент
всячина


Понравилось: 33 пользователям

Переход на Linux - скрипт для каталогизации видео

Четверг, 03 Февраля 2011 г. 05:09 + в цитатник
Переписал таки на Python...
  1. #!/usr/bin/env python
  2. #encoding: UTF-8
  3.  
  4. ## [CONFIG] ############################################
  5. duplicateFilePath = u"/home/dimzon/!test/duplicates.txt"
  6. locationFileName = u"ku-ku.txt"
  7. folderPathAll = u"/home/dimzon/!test/all"
  8. folderPathByFirstLetter = u"/home/dimzon/!test/by_letter"
  9. folderPathByYear = u"/home/dimzon/!test/by_year"
  10. sourceFolders = [\
  11.     u"/home/dimzon/!test/drives/1", \
  12.     u"/home/dimzon/!test/drives/2", \
  13.     u"/home/dimzon/!test/drives/3" ]
  14. ## [/CONFIG] ###########################################
  15.  
  16.  
  17. import os,re
  18.  
  19. def get_first_letter( fileName ):
  20.     ltr = fileName[0].upper()
  21.     if "0123456789.,!@#$_()[]{}-".count(ltr):
  22.         return "(0-9)"
  23.     return ltr
  24.  
  25. reYear = re.compile(r"(?<=\D)(?:19|20)\d{2}(?=\D)", re.UNICODE )
  26.  
  27. def get_years(fileName):
  28.     return reYear.findall( fileName )
  29.    
  30.  
  31. def clean_symlinks( folderPath ):
  32.     for i in os.listdir( folderPath ):
  33.         j = os.path.join( folderPath, i )
  34.         if os.path.islink( j ):
  35.             os.unlink( j )
  36.         elif os.path.isdir( j ):
  37.             clean_symlinks( j )
  38.             if len( os.listdir( j ) ) == 0 :
  39.                 print 11
  40.                 os.rmdir( j )
  41.            
  42. print 'Processing...'
  43.  
  44. clean_symlinks( folderPathAll )
  45. clean_symlinks( folderPathByFirstLetter )
  46. clean_symlinks( folderPathByYear )
  47.  
  48. knownFilms = {}
  49. for f in sourceFolders:
  50.     print f
  51.     for i in os.listdir( f ):
  52.         j = os.path.join( f, i )
  53.         if os.path.isdir( j ):
  54.             with open( os.path.join( j, locationFileName ) , 'w' ) as loc:
  55.                 loc.write( j.encode('utf-8') )
  56.             key = i.upper( )
  57.             if key in knownFilms :
  58.                 knownFilms[key][1].append( j )
  59.             else:
  60.                 knownFilms[key]=( i.strip() , [ j ] )
  61.  
  62. with open( duplicateFilePath , 'w' ) as loc:
  63.     for i in knownFilms.values():
  64.         if len(i[1]) != 1 :
  65.             loc.write( ('### ' + i[0] + '\n\r').encode('utf-8') )
  66.             for j in i[1] :
  67.                 loc.write( (j + '\n\r').encode('utf-8') )
  68.             loc.write( '\n\r\n\r' )
  69.  
  70. for i in knownFilms.values():
  71.     os.symlink( i[1][0] , os.path.join( folderPathAll , i[0] ) )
  72.     f = os.path.join( folderPathByFirstLetter , get_first_letter( i[0] ) )
  73.     if not os.path.exists( f ) :
  74.         os.mkdir( f )
  75.     os.symlink( i[1][0] , os.path.join( f , i[0] ) )
  76.     dt = get_years( i[0] )
  77.     for y in dt :
  78.         f = os.path.join( folderPathByYear , y )
  79.         if not os.path.exists( f ) :
  80.             os.mkdir( f )
  81.         os.symlink( i[1][0] , os.path.join( f , i[0] ) )
  82.  
  83. print 'Done!'
Рубрики:  жисть
девелопмент
всячина

Переход на Linux - структура каталога /nas

Среда, 02 Февраля 2011 г. 21:08 + в цитатник

/nas/01_Incoming
Сюда автоматом переносятся торренты по завершении загрузки (отсюда-же они продолжают раздаваться)

/nas/01_Incoming/00_to_Sort
Сюда вручную переночу постопанные торренты (которые больше не раздаю). После чего скриптом оборачиваю отдельные avi-шнички в папочки. Далее в ручном режиме переименовываю папочки (даю осмысленные русские имена). После того как переименовал переношу в каталог /VIDEO на одном из винтов (где место есть).

/nas/02_Video/03_All
Символические ссылки на все папки с фильмами. Специальный скрипт находит папки /video/* на всех винтах и создаёт символические ссылки в /nas/02_Video/03_All

/nas/02_Video/01_ByLetter
Специальный скрипт находит папки /video/* на всех винтах, создаёт по первой букве из названия папочки подпапочку в /nas/02_Video/01_ByLetter, создает символическую ссылку

/nas/02_Video/02_ByYear
Аналогично предыдущему, только вместо первой буквы регулярным выражением выцепляется год создания

Собственно этот "волшебный скрипт" пока существует в виде программы для Windows7 (и вместо символических ссылок использует т.н. Junction Points). Кому надо - брать тут: http://dl.dropbox.com/u/2718637/jtool.zip
Для настройки открыть notepad-ом файл jtool.exe.config
Надеюсь в ближайшее время портировать его (скрипт) на питон. Заодно в планах научится читать теги (для папочки /nas/03_Audio/*

/nas/02_Video/02_Drives
здесь просто подмонтированы все HDD
Рубрики:  жисть
всячина

Переход на Linux - настройки NFS, SAMBA, VSFTP

Среда, 02 Февраля 2011 г. 12:51 + в цитатник
Поскольку сервер работает в рамка квартирной сети (за роутером/файрволом) то всем предоставляется полный доступ. Во внешний мир будут открыты только 2 порта - порт SSH и порт для uTorrent-а.

Шарится 1 папка /nas - остальное накидывается в нее через symlink-и

/etc/exports (NFS)
/nas           192.168.1.0/24(ro,no_subtree_check,insecure,all_squash)


/etc/samba/smb.conf (SAMBA)
[global]
guest account = nobody
map to guest = bad user

[nas]
comment = Public Shares
browsable = yes
path = /nas
public = yes
writable = yes
guest ok = yes


/etc/vsftpd.conf (VSFTP)
listen=YES
anonymous_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_upload_enable=YES
anon_umask=0000
no_anon_password=YES
local_enable=NO
dirmessage_enable=YES
write_enable=YES
anon_root=/nas
chown_uploads=YES
chown_username=me
log_ftp_protocol=YES
dual_log_enable=YES


Не заываем добавить вызов vsftpd в /etc/rc.local
vsftpd &
Рубрики:  жисть
девелопмент
всячина

Переход на Linux - переписываем вспомогательные скрипты

Пятница, 28 Января 2011 г. 21:12 + в цитатник
Перед тем как переустановить сервер надо подготовить набор скриптов на замену используемым. Первый скриптик - скриптик создания каталогов.
Задачка: просканировать каталог на наличие видеофайлов, для каждого файла создать подкаталог с аналогичным названием и перенести в него файл.

Текущая версия на VBScript:
option explicit
 
const DIR = "D:\TorrentDownload\00-to sort"
const EXT = "  \avi\mkv\mp4\flv\wmv\asf\mov\ts\"
 
dim oFSO: set oFSO=CreateObject("Scripting.FileSystemObject")
dim oTargetDIR: set oTargetDIR = oFSO.GetFolder( DIR )
dim oFile
dim sExt
dim sDirName
for each oFile in oTargetDIR.Files
	sExt = LCase(oFSO.GetExtensionName(oFile.Name))
	if InStr( EXT,  "\" &  sExt & "\") > 0 Then
		sDirName = DIR & "\" & trim(oFSO.GetBaseName(oFile.Name))
		If Not (oFSO.FolderExists( sDirName ) or oFSO.FileExists( sDirName )) Then
			oFSO.CreateFolder sDirName
			oFile.Move sDirName & "\" & oFile.Name
		End If
	end if
next
MsgBox "Done"


Теперь переписанная на Python:
#! /usr/bin/env python
 
import os, re
 
targetFolder = 'd:\!test' # CHANGE THIS!
 
 
ext = re.compile(r"^.+\.(?:avi|mov|mp4|mkv|wmv|asf|ts|m2ts|mpg|mpeg)$",re.IGNORECASE + re.UNICODE)
 
print 'Processing ' + targetFolder
 
for fileName in os.listdir(targetFolder):
    filePath =  os.path.join( targetFolder, fileName )
    if os.path.isfile( filePath ):
        if ext.match( fileName ):
            dirPath = os.path.join(targetFolder,(os.path.splitext(fileName)[0]).strip())
            if not os.path.exists( dirPath ):
                os.mkdir( dirPath )
                os.rename( filePath, os.path.join( dirPath, fileName ) )
 
print 'Done!'
 
Рубрики:  жисть
девелопмент
всячина

Настройки Lubuntu 10.10 для NAS (в процессе)

Четверг, 27 Января 2011 г. 21:43 + в цитатник
Собрал себе сервер для квартиры, подумываю установить на него Lubuntu вместо Win7 x64, пока тренируюсь на виртуальной машине...
В этом посте задокументирую процесс установки и настройки.

Что хочется в идеале:

  • Нужен telnet/ssh доступ для настройки "если что"
  • Нужен доступ к GUI в качестве "крайней решительной меры"
  • Нужен доступ к файлам хранилища по NAS/SMB/FTP
  • Нужна торрент-качалка с возможностью удалённого управления
  • Нужна возможность подчитерить с рейтингом в торренте
  • Нужен WEB-интерфейс для поиска (по имени) файла/папки из NAS




1) Доступ по NFS - настраивается штатными средствами
2) Торрент-клиент - либо трансмишн либо uTorrentServer либо uTorrent+WINE
3) Для накрутки аплоада хорошо-бы написать свой аналог GreedyTorrent-а (такой прооостенький http-прокси на питон)
4) telnet/ssh вроде умею настраивать, надо бы нормальный GUI-доступ придумать, XRDP завести не вышло
5) NTFS винты цепляются и работают, работают символические ссылки на NTFS.
6) Для каталогизации видео надо-бы написать утилитку на питоне, собирающую все в одном месте с помощью soft links
Рубрики:  жисть
девелопмент
всячина

Аватар

Среда, 13 Января 2010 г. 19:05 + в цитатник
Решил вот, хоть и запоздало, написать пару слов.
Откровенно говоря удивляет глупость ГГ. Нет, речь не о том что он по сути "предал" свой народ/вид/планету. Я тоже разделяю его симпатию к Пандоре и На-Ви. Речь идёт о силовом решении конфликта. Ведь не надо быть семи пядей во лбу - если аноптаниум действительно настолько нужен землянам то через 6-12 лет (в зависимости от наличия/отсутствия средств связи со сверхсветовой скоростью) прилетят военные (армия а не просто не кучка наёмников), вооруженные до зубов в том числе средствами массового поражения, в том числе ядерным оружием. А уж мегатонной боеголовке, запущенной с орбиты, будет глубоко пофиг на магнитные возмущения и аномалии, ей достаточно попасть в радиусе нескольких километров чтобы "волшебному дереву" пришёл безоговорочный конец. И не надо говорить про моральные принципы и человечность - если речь идёт о выживании (а судя по всему именно об этом речь и идёт) человечество ничто не остановит. И почему ГГ (который собственно сам военный и сам всё должен это понимать) так дико тормозил мне непонятно...
Рубрики:  sci-fi
видео

"Яндекс" насчитал в России 27 населенных пунктов на букву "Ы"

Четверг, 03 Декабря 2009 г. 17:37 + в цитатник
Это цитата сообщения Chuma_1 [Прочитать целиком + В свой цитатник или сообщество!]

"Яндекс" насчитал в России 27 населенных пунктов на букву "Ы"



Интернет-поисковик "Яндекс" опубликовал статистику своего сервиса "Яндекс.Карты". Согласно отчету, в России более 170 тыс. населенных пунктов, длина всех рек превышает 3 млн километров, длина автомобильных дорог составляет около 1 млн километров, железных - 100 тыс. километров.

Как оказалось, в России насчитывается 27 населенных пунктов с необычными для русскоговорящего человека названиями, начинающимися на букву "Ы", сообщает Газета GZT.ru. Среди них такие города, как Ыб и Ытык-Кюель, селения Ыллымах, Ыгятта, Ынахсыт, Ыястый. Во всех случаях речь идет о якутских топонимах. По данным других источников, в Якутии названий населенных пунктов на букву "Ы" насчитывается 32.

Специалисты "Яндекса", проанализировав статистику, пришли к выводу, что более половины населенных пунктов России носят уникальные названия. Самый распространенный топоним - Александровка, в России целых 166 населенных пунктов с таким названием. Второе и третье по популярности названия - Михайловка (156) и Ивановка (150). Как заметно, все три самых распространенных топонима произошли от имен. Также названия населенных пунктов а России часто происходят от наименований растений, животных, особенностей ландшафта. Встречаются в названиях и упоминание религиозных праздников.

Больше всего в России населенных пунктов на букву "К". На букву "Й" начинается только два названия в России - Йозефовка и Йошкар-Ола. Естественно, нет названий на буквы "Ь" и "Ъ".

Самыми длинными названиями признаны села Кременчуг-Константиновское в Кабардино-Балкарии, Верхненовокутлумбетьево в Оренбургской области и Старокозьмодемьяновское в Тамбовской области.

Что касается улиц российских городов, то компания проанализировала названия улиц в 379 российских городах. Чаще всего фигурируют улицы Лесная, Центральная, Садовая и Советская. Так как после распада СССР многие города переименовали улицы Ленина, такое название занимает только 23-ю строчку рейтинга популярности.

Был проведен анализ сведений по самым крупным городам России. Среди российских городов, население которых превышает миллион жителей, самым тесным оказалась Москва. В столице на каждого человека приходится всего 101 квадратный метр. Больше всего квадратных метров приходится на каждого жителя Уфы – 698.

Больше всего обеспечены школами и больницами жители Челябинска. Самое большое количество книжных магазинов отмечено в Новосибирске. Екатеринбург лидирует по количеству спортивных залов и бассейнов. Больше всего театров в расчете на душу населения насчитывается в Самаре. Санкт-Петербург лидирует по количеству кафе и ресторанов в пересчете на количество жителей.


В России много населенных пунктов с нецензурными названиями


Ранее проводилось исследование, посвященное российским населенных пунктам с нецензурными или просто некрасивыми названиями. Как оказалось, жители деревень Лохово, Блядищево и Попкино стараются переехать с малой родины в места с более благозвучными названиями.

На карте Подмосковья есть села Бухловка, Пьянкино и Блядищево, в Тверской области – Большой и Малое Лохово, Козлы и Мошонка, в Калужской области – Дешевки, а в Кемеровской – Козявкино и Старые Черви. В Ульяновской области есть деревня Мусорка, в Пермской – Чуваки, в Челябинской – Голодранкино, в Тамбовской – Отхожее, в Белгородской – Муходоево, в Вологодской – Большое Бухалово, в Ивановской - Писькино. Только в средней полосе России более 120 населенных пунктов с неблагозвучными названиями, подсчитали на историческом факультете МГУ.

Жители не хотят жить в таких селах. Некоторые из них обращаются к властям с просьбой о переименовании. Так, жители села Лохово в Иркутской области уже несколько лет пытаются переименовать его в Сибирское. Однако есть и такие люди, которые против переименований. Они говорят о том, что большинство названий были даны в XVI–XVII веках, когда наши предки не стремились к благозвучию. По мнению части экспертов, менять такие названия - ханжество, потому что в них видна национальная психология.

Как предупреждают представители власти, переименование - длительная процедура. Оно возможно по инициативе жителей, если им прежнее название не нравится. К тому же, любое переименование дорого обходится казне. Кроме того, после переименования жителям придется менять прописку, причем за свой счет.

http://www.newsru.com/russia/03dec2009/yaru.html#1
Рубрики:  юмор

Геннадий Постригайло - дебил или мудак?

Пятница, 20 Ноября 2009 г. 00:22 + в цитатник
Завязалась тут "беседа" в комментах.

Либо он дебил и не понимает что размещая на своём сайте "свою" аудиокнигу он тем самым сам нарушает авторские права автора и переводчика, либо он мудак, живущий по двойным стандартам и считающим что он вправе нарушать чужое авторское право а я его авторское право нарушать не могу...
Рубрики:  чтиво
жисть
юмор

print2flash - печатаем из любого приложения - получаем Flash

Четверг, 19 Ноября 2009 г. 04:57 + в цитатник
Сабж, ставится как виртуальный принтер. Для примера - моё резюме ;)

Рубрики:  всячина

Это жесть...

Среда, 11 Ноября 2009 г. 04:07 + в цитатник

Рубрики:  жисть
юмор
видео

Вир хабе говнише вестен

Воскресенье, 08 Ноября 2009 г. 20:10 + в цитатник

Рубрики:  юмор
видео

Mr. Freeman

Четверг, 29 Октября 2009 г. 04:57 + в цитатник


Описание: Первая серия «заставляющего задуматься мультфильма», как писали в комментариях, от Mr. Freeman вышла 21 сентября. В какой-то степени это творение похоже на «запрещённую рекламу» Года молодёжи, созданную командой Шлегеля. На данный момент вышло уже 3 эпизода этого короткого мультфильма:

Первая серия, или "Mr. Freeman, part 0", озаглавленная словами "А ты уверен в том, кто ты такой, и что ты существуешь?".
Вторая серия "Mr. Freeman, part 64" с девизом "Где угодно и когда угодно...".
И третья, "Mr. Freeman, part 63" - "Ты слишком блондин!".
(Серии упорядочены по дате выхода)

Отзывы:
«Даже не знаю что сказать : одновременно и смешно и правдиво. Оригинально и красиво. Заставляет задуматься.» (PilotMax)
«Наверное о жизни и бездарном ее прожигании, о зависимости от вещей.» (Шмашка)
«Качественно сделанный вирус (я имею ввиду техническую сторону). Мотивация через демотивацию…» (mi3ch)
Рубрики:  жисть
юмор
видео

Большая разница — Гришковец в быту

Воскресенье, 25 Октября 2009 г. 22:20 + в цитатник

Рубрики:  юмор
видео


Поиск сообщений в dimzon541
Страницы: [23] 22 21 ..
.. 1 Календарь