-Музыка

 -Подписка по 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

Выбрана рубрика всячина.


Другие рубрики в этом дневнике: юмор(106), чтиво(70), фэнтези(12), постядер(24), постапокалипсис(45), паропанк(7), киберпанк(3), игры(56), жисть(113), девелопмент(52), видео(85), альтернативная история(4), Team Fortress 2(8), sci-fi(30), iPictureUploader(2), Google Chrome(4), eBookDownloader(21)

Переход на 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.  
Рубрики:  девелопмент
всячина

Переход на 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
Рубрики:  жисть
девелопмент
всячина

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

Дневник

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

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

Кашперовский жжёт

Дневник

Суббота, 10 Октября 2009 г. 05:18 + в цитатник


Помнится было повальное увлечение этим пассажиром...
Рубрики:  юмор
всячина
видео

Это жесть...

Дневник

Пятница, 02 Октября 2009 г. 03:42 + в цитатник
Рубрики:  всячина
видео

Развенчание мифа про лампочку

Дневник

Пятница, 02 Октября 2009 г. 04:44 + в цитатник
Рубрики:  всячина
видео

SimpleBackup

Дневник

Четверг, 01 Октября 2009 г. 05:10 + в цитатник
Накомстрячил тут утилитку - добавляет пункт меню в проводнике, создаёт резервную копию файла...
тынц


Рубрики:  девелопмент
всячина

Проверка сервиса mp32tube

Дневник

Вторник, 29 Сентября 2009 г. 19:26 + в цитатник
http://www.mp32tube.com/
Указываем картинку и MP3, получаем ролик на YouTube ;)



а если чуть поправить код плеера то получаем версию покомпактнее:



или даже так:


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

9 - трейлер и предыстория

Дневник

Пятница, 11 Сентября 2009 г. 19:58 + в цитатник
1251362832_poster12 (450x690, 144Kb)
Предыстория:
скачать PDF
почитать online

Трейлер:


Рубрики:  чтиво
постапокалипсис
всячина
видео

Аудио-запись: Любимая мелодия...

Пятница, 28 Августа 2009 г. 19:43 + в цитатник
Файл удален из-за ошибки в конвертации ... из одной игры.
Рубрики:  всячина

3D-календарик

Дневник

Среда, 26 Августа 2009 г. 20:14 + в цитатник

Вот такие забавные календарики можно сделать при помощи этого сайта.

Все очень просто - выбираем параметры календаря, скачиваем PDF-ку, распечатываем, режем и склеиваем ;)
Рубрики:  жисть
всячина

Друзья, теперь вы можете читать и комментировать мои записи и на Я.ру

Дневник

Вторник, 25 Августа 2009 г. 04:04 + в цитатник
Друзья, теперь вы можете читать и комментировать мои записи и на Я.ру — dimzon541!

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

Тестирую аналоги YouTube для аудио...

Дневник

Четверг, 20 Августа 2009 г. 04:32 + в цитатник






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

Подключил OpenDNS

Дневник

Среда, 19 Августа 2009 г. 03:32 + в цитатник
Сегодня ночью у провайдера возник очередной дизастер с его DNS-серверами. Подключил OpenDNS...
Use OpenDNS
Рубрики:  жисть
всячина

А мож ну нафиг?

Дневник

Понедельник, 17 Августа 2009 г. 17:58 + в цитатник
В Алании 3-х комнатная квартира в доме у моря стоит 45000 евро. Продать свою подмосковную квартиру, купить 3 3-шки, в одной жить две сдавать... Если что можно ещё дополнительный приработок найти:
 (375x500, 44Kb)
Рубрики:  жисть
юмор
всячина

Забавно

Дневник

Понедельник, 17 Августа 2009 г. 17:54 + в цитатник
 (544x364, 59Kb)
Рубрики:  юмор
всячина


 Страницы: [5] 4 3 2 1