Съвсем наскоро с колегата Виктор имахме разговор на тема субтитрите във Vbox7.com, от там се роди идеята ми за сайтче от което се свалят субтитрите.
Реших да си напиша клас, с който да свалям информацията за даден клип от въпросния сайт и да я използвам както си реша. Кодът, който е използвам е изключително прост. Общо взето информацията за даден клип се взима по следния начин:
// Първия аргумент е линка към клипчето, а втория който не е задължителен// е форматът, в който субтитрите да бъдат представени.$x=new vbox7('Линк към клипче','sub');// Готови сме с форматирани субтитри, които могат // да бъдат използвани с почти всеки плейър.echo$x->subtitles;
Кодът на класът за vbox7 и двата класа за кодиране на субтитри може да намерите малко по-долу.
Страницата е напълно завършена, но все пак подлежи на още промени, за това ще гледам да работя активно върху нея. Единствената неточност, която се старая да оправя е да разбера дали FPS-a на всички клипове във vbox7.com е 30 кадъра. Тъй като SUB поддръжката зависи изцяло от тази стойност, докато при SRT не е от никакво значение.
Написах си няколко Javascript функции, които използвах в лични проекти. Реших да ги споделя, защото смятам, че са доста полезни (поне за мен). Всичките са около String обекта.
Първите две са доста прости, обаче отсъстваха от Javascript (а мисля, че ги има в .NET). А именно:
За тази функция пък се сетих, след като видях този PoC, който Gat3way беше написал за да покаже XSS уязвимостите в сайта на bTV.
String.repeat(times)
String.prototype.repeat=function(times){var a,b ="";for(a =0; a<times; a++)
b = b +this;return b;}
Тъй като ползвам Google Chrome (предимно), реших да се възползвам от възможността му да се ползват User Scripts, която е вградена в бета версията му. Веднага реших да пробвам, да си напиша Ad Blocker, но бях доста далече от успеха… или просто скриптовете не работеха така както си мислех. Все пак, реших да споделя функция за проста проверка на низове, чрез wildcard-ове. Може да бъде пооправена доста, но засега върши чудесна работа (поне за проверка на линкове).
String.matchWildcard(wildcard)
1
2
3
4
5
6
7
8
9
10
11
12
String.prototype.matchWildcard=function(wildcard){var match =new RegExp(wildcard.replace(/\./g,"\\.").replace(/\*/g,".*")).exec(this);if(match ==null){returnfalse;}else{if(this== match[0]){returntrue;}returnfalse;}}
Ето един пример с горната функция:
1
2
3
4
alert("http://www.zamunda.net/browse.php".matchWildcard("http://*zamunda.net/*"));// => което връща truealert("http://zamunda.net/browse.php".matchWildcard("http://*.zamunda.net/*"));// => което връща false, заради точката в Wildcard-a.
Вчера (или онзи ден.. не помня) ми се наложи да ползвам различен CSS под 2 различни браузъра, обаче като гледам съм затрил предния JS скрипт, който бях написал. Затова набързо си надрасках един скрипт, който определя дали потребителя е с Firefox, Opera, IE, Safari или Chrome. Засега скрипта си работи без проблем, но вероятно ще го дооправям след време.
Ето го и него:
1
2
3
4
5
6
7
8
9
10
11
12
13
var detectBrowser=function(){//Нарочно слагам браузърите в този ред, защото IE се съдържа в userAgent низа на Opera.var a=["Firefox","Opera","IE","Chrome","Safari"],b;//Обхождам масива с низовете, като проверявам всеки дали се съдържа в userAgent-a на//текущия браузър. Ако бъде открит такъв връщаме името му (в lowerCase), ако не връщам "other". for(b in a)if(navigator.userAgent.indexOf(a[b])>-1)return a[b].toLowerCase();return"other";}//Поставяме клас със името на браузъра в html елемента.
document.getElementsByTagName("html")[0].className=detectBrowser();
Ето компресирания код:
var detectBrowser=function(){var a=["Firefox","Opera","IE","Chrome","Safari"],b;for(b in a)if(navigator.userAgent.indexOf(a[b])>-1)return a[b].toLowerCase();return"other";}document.getElementsByTagName("html")[0].className=detectBrowser();
Днес започнах да пиша по новата версия на Template Class. Новото в нея е възможността за изполване на прости функции за обработка на променливите в шаблона. Засега кодът е наполовина готов, тъй като добавянето на замислените функции ще ми отнеме време.
Правописът е следния:
{име на променливата,име на функцията,параметър}
Досега съм преработил функцията за орязване на съдържанието:
Снощи добавих класът ми за шаблони като проект в гугъл. Днес качих кода и написах една Wiki страница. Дано се намерят други разработчици, с които да разработвам проекта, защото не ми остава много време за него. За следващата версия съм решил да добавя и else таг, който да допълва if тагът. Ще видим дали ще успея.
Днес продължих да си пиша по класът, защото в даскало ми дойде идеята да добавя орязване на съдържанието на променливите. Обаче това да става директно от променливата. Реализирах го по следния начин:
{VARIABLE, 20} което ще покаже първите 20 символа от променливата.
Има и няколко други промени:
Вече при parse-ване на шаблона не се преебава $template. (Усетих се докато го писах, но бързах да завърша кода и после го забравих).
__construct функцията вече зарежда асоциативния масив.
Леко отколение:
След невероятния концерт на Paul van Dyk се наложи моментално да си замина на село. Въпреки, че не бях спал около 40 часа, успешно пристигнах на село и след двадесетина часа сън бях готов за нови подвизи!
Нека премина към новината. Тъй като нямах интернет на село, реших да допълня малко PHP класът ми за шаблони. Общо взето промените са следните:
Вече променливите за шаблона се запазват в асоциативен масив (още се чудя с какъв акъл го бях писал преди).
Добавени са if-условия, които позволяват по-специфично форматиране на шаблоните. (надолу е обяснено по-добре )
Мисля активно да продължа да разработвам този клас, защото ми е доста полезен. Засега няма да му слагам никакви лицензи, който каквото иска да прави с него…
Ако потребителят е влязъл в системата, горния код ще покаже “Hello, Crio” (например). В противен случай ще се покаже “Hello, Guest
“.
Ето и малко по-сложни примери с if условията:
[if AAA BBB CCC]Ще покаже това, само ако AAA, BBB и CCC променливите са добавени[/if]
[if !DDD !EEE FFF]Ще покаже това, само ако FFF е декларирана, а EEE и DDD не са[/if]
Сами виждате предимствата на новите функции. Имам доста идеи за разширението на тази функция, така че очаквайте продължение…
Онзи ден с Виктор ни дойде странната идея да открием всички свободни .info домейни с до 3 букви/цифри. Написахме един скрипт набързо и го пуснахме на хостинга на Виктор… след около 5-6 часа (мисля) имахме пълен списък с домейните, които могат да бъдат регистрирани.
След като написах поста ми за µHash онзи ден, се бях зарибил по идеята за добавките до такава степен, че вчера писах почти цял ден…
Принципът за писане е елементарен. Дори вече имам 2 написани добавки.
DJB добавка написана на C.
CRC добавка написана на PureBasic.
Kолко време ще протече разработката?
За жалост разработката ще протече доста време, защото ще се наложи да пренапиша по-голямата част от кода на програмата. Също така интерфейса ще е доста променен, заради новите 2 режима на програмата. Естествено интерфейса за изчисляване на контролните суми на повече от един файл, ще е почти същия като този от версия 0.4. Отделно от програмата, ще трябва да променя и сайта й, което също ще ми отнеме доста време.
Техническа информация около добавките.
Принципът на добавките е доста прост. Например ето как добавката предоставя информация на µHash (в C езика):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
PCHAR WINAPI Plugin(int info){switch( info ){case PLUGIN_AUTHOR:return"Milen Ivanov";break;case PLUGIN_DESCRIPTION:return"DJB Hash implemented in C";break;default:return"DJB";}}
Написана по този начин, функцията ми позволява да изчислявам контролната сума на огромни количества данни, като разделям процеса на стъпки и това ми позволява отчитането на прогреса и пестенето на заетата памет (разбира се).
Засега толкова ще споделя, дано успея да завърша програмата в най-скоро време.