Global Firefox Console

Firefox е един от най-любимите ми браузъри по много причини. Днес установих, че е възможно да се активира глобална конзола където той да започне да показва информация относно целия мрежов трафик от всичките плъгини, него самия и сайтовете. Единственното което трябва да се направи е да се стартира със параметър от командния ред -jsconsole. Как става това?
Windows 32 битов

"C:\Program Files\Mozilla Firefox\firefox.exe" -jsconsole

Windows 64 битов

"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -jsconsole

OSX

/Applications/Firefox.app/Contents/MacOS/firefox-bin -jsconsole

Linux

firefox -jsconsole

Това е всичко. Разбира се подгответе се за потоп от информация във глобалната конзола. На мен лично ми трябва да открия проблем при обновлението му. На версия 48.0 съм и ми казва че няма обновление. Което е лъжа при положение че има 48.0.2 налична.

Enabling HTTP/2 on nginx over Amazon AMI

Една от любимите oперационни системи на Amazon EC2 е тяхната Amazon AMI. Разбира се няма нищо по-хубаво когато производителя на хардуера ти доставя оптимизиран софтуер за него. УВИ има няколко проблема като най-големия е, че отделни модули са доста стари. Това е защото AMI използва някакъв миш-маш от няколко операционни системи – RHEL6, RHEL7 и дори Fedora. Във моя случай nginx е версия 1.8, но за да активирам HTTP/2 се нуждая поне от версия 1.9.5 (докато актуалната е 1.10.1). Разбира се ако изчакам още някой месец може и да ме огрее… но чакам вече година и ми писна. Затова взех нещата във свои ръце и си прекомпилирах своя версия на nginx.

1. Инсталирайте nginx – ще ви спести поне писане на конфигурационни файлове. Конфигурирайте си го по свой вкус.
2. sudo yum install pcre-devel openssl-devel #библиотечки… ще ви потрябват
3. wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz
4. tar zxvf openssl-1.0.2j.tar.gz -c /lib/opt
5. wget http://nginx.org/download/nginx-1.10.1.tar.gz
6. tar zxvf nginx-1.10.1.tar.gz
7. cd nginx-1.10.1
8. ./configure –prefix=/usr/share/nginx –sbin-path=/usr/sbin/nginx –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –http-client-body-temp-path=/var/lib/nginx/tmp/client_body –http-proxy-temp-path=/var/lib/nginx/tmp/proxy –http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi –http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi –http-scgi-temp-path=/var/lib/nginx/tmp/scgi –pid-path=/var/run/nginx.pid –lock-path=/var/lock/subsys/nginx –user=nginx –group=nginx –with-file-aio –with-ipv6 –with-http_ssl_module –with-http_realip_module –with-http_addition_module –with-http_sub_module –with-http_dav_module –with-http_flv_module –with-http_mp4_module –with-http_gunzip_module –with-http_gzip_static_module –with-http_random_index_module –with-http_secure_link_module –with-http_degradation_module –with-http_stub_status_module –with-mail –with-mail_ssl_module –with-http_v2_module –with-openssl=/opt/lib/openssl-1.0.2j –with-pcre –with-pcre-jit –with-debug –with-cc-opt=’-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m64 -mtune=generic’ –with-ld-opt=’ -Wl,-E’
9. make
10. /etc/init.d/nginx stop
11. sudo cp objs/nginx /usr/sbin
12. /etc/init.d/nginx start

ВАЖНО! Ако обновление ви презапише по-стара версия на nginx ще се наложи да изпълните точка 9 поне още веднъж. Защото това е един дърт пач върху оригиналния nginx.

Сега вече ако напишете nginx -V ще видите нейде:
nginx version: nginx/1.10.1

Оттук насетне е лесно. Отивате във конфигурационния файл и издирвате това:
listen 443 ssl;
за да го замените със:
listen 443 ssl http2;

Честито! Вече имате работещ nginx със http/2.

Забележка!!! Оригиналния nginx във AMI е компилиран със малко повечко опции. Липсващите са:
–with-http_xslt_module
–with-http_image_filter_module
–with-http_geoip_module
–with-http_perl_module
–with-google_perftools_module
но аз така или иначе не ги използвам тях.

Restarting Firefox

Току-що открих как може да се рестартира Firefox без да се загуби нищо.

  1. Натискате Shift-F2. За Mac е Fn-Shift-F2.
  2. Във конзолата която излиза пишете restart

Това е.

zlib extraction

Снощи докато чистех един сайт от вируси намерих интересна директорна структура която просто не и беше мястото там (директория със транслации на javascript) със над 9999 файла и един добре обфускиран PHP скрипт. Разбира се любопитството ми проработи и преглеждането на файловете със шестнадесетичен редактор не даде никакъв резултат – или бяха криптирани или компресирани. Общото беше че всички файлове започваха със 0x78 0x9c. Опитите да видя какво е със file (*nix инструмент показващ типа на файла) не дадоха резултат. Но търсачките веднага разконспирираха, че това е zlib компресиран поток. Това ми разпали още повече любопитството да видя какво има във горните файлове.

Опитах да ги разкомпресирам със gunzip. Не се получи защото gzip използва zlib за компресия, но тогава файла започва със 0x1f 0x8b 0x08 и след няколко байта е самия zlib поток. Мързеше ме да си компилирам програма за разкомпресиране на zlib, можех да спретна и нещо на скриптов език. Но бях убеден че има и далеч по-лесен начин.

ИМА! Цялата магия се осъществява със следния “магически” ред:
printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" |cat - zlib.raw |gzip -dc
което ми спести няколко цени минути. Има и още един подобен трик със openssl (и двата правят едно и също просто разликата е във самия синтаксис):
openssl zlib -d < zlib.raw
openssl zlib -d -in zlib.raw

Резултата – видях съдържанието на файловете което беше вече първото реално доказателство за наличие на пробив във сайта. И за пореден път се убедих че от *nix-а по-голямо няма.

Използване на няколко профила под Firefox

Когато ровенето във интернет се превърне във професия неминуемо човек се сдобива със няколко профила и започва едно чудене тип “със този браузър къде се бях логнал?”. Сега ще ви покажа как да активирате мултипрофилната поддръжка под Firefox и да я използвате във ваша полза.

  1. Излезте от Firefox ако е пуснат, ако не е пуснат пропуснете тази стъпка.
  2. Стартирайте команден ред. Под Windows трябва да се стартира cmd.exe, Linux/BSD/OSX потребителите трябва да отворят един терминал.
  3. Активиране на Firefox Profile Manager. Това е може би най-трудната част. Общо взето трябва да се напише един единствен ред.
    Windows 32 битов

    "C:\Program Files\Mozilla Firefox\firefox.exe" -ProfileManager

    Windows 64 битов

    "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -ProfileManager

    OSX

    /Applications/Firefox.app/Contents/MacOS/firefox-bin -ProfileManager

    Linux

    firefox -ProfileManager
  4. Firefox ще ви покаже заветния екран със списък със няколко профила (в момента е един) и няколко бутона. До сега сте работили във профила “default”. Сега натискате бутона “Create Profile…”
  5. Излиза един нов прозорец който ще ви попита как да се казва новия профил. Напишете име под което ще свързвате новия профил със предназначението му. Ако сте начинаещ не бутайте папките – Firefox сам ще се оправи и няма да омеши профилите.
  6. Натискате бутона “Done”
  7. Et voila! Имате чисто нов профил под който можете да стартирате Firefox.
  8. Сега при всяко стартиране Firefox ще ви попита под кой потребител искате да продължите работата си ако махнете “Don’t Ask at Startup”. Ако го оставите Firefox винаги ще стартира със Default профила и горната гимнастика от точка 3 ще трябва да се изпълнява когато трябва да влезете под другите профили.

Тъй като профилите не се смесват всички пароли, настройки, плъгини, бисквитки, отметки и други такива са индивидуални между профилите. Между профилите не може да се прехвърли нищо от горепосочените неща защото те са индивидуани за всеки един потребител. Единственно Firefox е общ и обновяването му ще обнови Firefox на всички потребители.

Има още един малък трик който ще опиша тук. Тъй като Firefox използва стартирания профил за да се взлезе със друг потребител трябва да се излезе от текущия. Което е малко досадно, ако трябва да се направи нещо малко по-бързо едновременно от двата потребителя. Mozilla са помислили за хитро решение на проблема като Firefox се стартира със опция “-no-remote” примерно като така:

"C:\Program Files\Mozilla Firefox\firefox.exe" -no-remote
"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -no-remote
/Applications/Firefox.app/Contents/MacOS/firefox-bin -no-remote
firefox -no-remote

Използвайте реда който е за операционната система която ползвате както по-горе. Това ще доведе до стартирането на две (или повече!) работещи копия на Firefox във паметта и може да затормози доста компютъра ви в зависимост от дейностите които изпълнявате. Затова е по-удобно да изнесете тази команда някъде като икона за бърз достъп (shortcut). Никога ама абсолютно НИКОГА не стартирайте два пъти браузъра със един и същи профил едновременно! Може сериозно да повредите профила. Отделно трябва и много да се внимава при изтриването на профилите защото процедурата няма лесно възстановяване на данните ако случайно бъде изтрит профил който не е трябвало да се пипа.

Можете също така да стартирате и Firefox със бързо влизане във профил. Тук опцията е “-P <името -на-профила>” и може да се прибави и “-no-remote” за да се влезе във него дори и ако е стартиран вече браузъра под друг профил.

Отняколко месеца използвам тази техника успешно и вече не ми се налага да излизам и да влизам във различните услуги със различни профили. Механизма е проигран успешно и може да ви помогне ако имате повече от един акаунт във социалните мрежи (например 2-3 Facebook), ако правите активна оптимизация на сайтове или просто трябва да използвате акаунти на клиенти или приятели.

Ако искате повече информация можете да я намерите от извора тук, тук или тук

SSH for novices – brief introduction

Allways use SSH when connecting to remote hosts!
Allways use SSH when connecting to remote hosts!
За повечето от интернет потребителите SSH е нещо като наследник на FTP или е известно като “онова с което се качват файловете” което е ГРУБА грешка. Всъщност корените на SSH датират от telnet и неговата липса на всякаква липса на шифриране. ФАКТ е, че първоначално на сигурността не се е гледало сериозно в telnet/rsh/rlogin паролите и изобщо цялата информация тече некриптирана. Млад изследовател се е заел да отстрани тази несправедливост и се е появил SSH като напълно нов протокол създаден да замести изцяло telnet и събратята му. SSH не само замества telnet, но и се превръща в доминиращ протокол в интернет за отдалечен достъп. Към настоящия момент SSH се разработва активно от SSH, но съществуват няколко версии с отворен код като най-известните са OpenSSH и dropbear.

Това което е уникалното е, че благодарение на SSH са се появили цял набор от услуги които работят върху него:
– файловия трансфер за който споменах в началото
– тунелизиране или пренасочване на портове
– проксифирицане на връзката със SOCKS прокси
– изграждане на архиви или огледала със rsync
– пренасочване на X
– и други

Сега ще ви покажа как го използвам в ежедневните си нужди в 2 варианта. Имам една машина намираща се зад по-сложна огнена стена и не мога да я достъпвам отдалечено лесно през GUI. Машината има отворен един единствен порт 22 (SSH) към нея от огнената стена. На същата машина има стартиран vnc server на порт 5900 както и разни други интересни услуги до които обаче нямам никакъв достъп. Затова отварям терминал и пиша заветната команда:
ssh -L 5999:127.0.0.1:5900 -N username@my.server.com
натискам enter, пиша си паролата и ако всичко е наред ще бъде стартирано пренасочването, отварям нов терминал и си влизам във vnc-то по следния начин:
open vnc://localhost:5999
Сега какво правят горните две команди – първата стартира пренасочване от локален порт 5999 към отдалечена машина 127.0.0.1 на порт 5900 (което е порта на vnc). Със -N инструктирам SSH да не стартира команден промпт и само да пренасочи портовете. Когато VNC сесията ми приключва излизам от VNC клиента, връщам се в конзоната където SSH е стартиран и натискам ctrl-c. Разбира се SSH се оплаква по следния начин:
^CKilled by signal 2.
което е сигнал че връзката към отдалечената машина е затворена. Порт 5999 вече не е отворен и пренасочването вече не работи.

Вторият сценарий е малко по-странен. Болшинството от потребителите не знаят, но под SSH е възможно да се стартира локален socks сървър който ще пренасочва всичко към отдалечения сървър. Разбира се не се изисква нещо супер сложно. Напълно достатъчно е да се напишa следната комбинация в терминала:
ssh -D 1080 -N username@my.server.com
натискам enter с което socks проксито е стартирано. След което си стартирам приложението което отчаяно се нуждае от прокси (в дадения случай Firefox), набивам в опциите че имам socks прокси с параметри 127.0.0.1:1080 и готово. Ако се налага порта да бъде отворен мрежово т.е. да бъде наличен и за други машини в локалната мрежа, а не само за локалната машина нейде в параметрите е необходимо да се напише просто едно -g след ssh. Разбира се това е една МНОГО малка част от възможностите на SSH. Например е възможно да се отвори пренасочи порт от сървъра към локалната машина (подобно на -L, но се пише -R), възможно е използването на отдалечена файлова система (SSHFS) и много други.

Може би по-голяма част от вас ще използват SSH под Windows с използването на putty. В момента уви не разполагам със Windows, но скоро ще публикувам как по-горните примери може да се използват и под Windows.

Cheating Blitz comment voting

Наближават избори, а живеем в 2013 година така, че очаквано днешната политагитация се води по форуми, социални мрежи и всякакви сайтове.

Направи ми впечатление как в Blitz.bg понякога оценките за коментарите се развиват за секунди и чуждото мнение се потапя с много на брой отрицателни гласове, а “правилното” се подкрепя.

Седнах и намерих една статия с която да експериментирам за целта – http://www.blitz.bg/article/33765 и един безобиден коментар от нея

Ето и избрания коментар за целта.
Ето и избрания коментар за целта.

След което отваряме конзола и пишем заветния ред:
curl --data "vote=1&tag=show&id=143698" "http://www.blitz.bg/libs/commentsajax.php?vote=1&tag=show&id=143698"

Ето и резултата от няколко извиквания на реда:

curl --data "vote=1&tag=show&id=143698" "http://www.blitz.bg/libs/commentsajax.php?vote=1&tag=show&id=143698"
<span class=\"ocenka\">Оценка<br />-0 <span>+16</span></span>
curl --data "vote=1&tag=show&id=143698" "http://www.blitz.bg/libs/commentsajax.php?vote=1&tag=show&id=143698"
<span class=\"ocenka\">Оценка<br />-0 <span>+17</span></span>
curl --data "vote=1&tag=show&id=143698" "http://www.blitz.bg/libs/commentsajax.php?vote=1&tag=show&id=143698"
<span class=\"ocenka\">Оценка<br />-0 <span>+18</span></span>
curl --data "vote=1&tag=show&id=143698" "http://www.blitz.bg/libs/commentsajax.php?vote=1&tag=show&id=143698"
<span class=\"ocenka\">Оценка<br />-0 <span>+19</span></span>
curl --data "vote=1&tag=show&id=143698" "http://www.blitz.bg/libs/commentsajax.php?vote=1&tag=show&id=143698"
<span class=\"ocenka\">Оценка<br />-0 <span>+20</span></span>

Изглежда оценките може да се манипулират. Забелязах същото в сайтовете на 24Часа, Дир, Дневник, Капитал и още много други. Но няма да ви помагам със скриптове за тях.
Затова когато видите мнения с много плюсове или минуси имайте едно на ум, че е възможно да са манипулирани.

Autopost to Svejo.net

Ако преди седмица ви показах как можете да публикувате във Facebook то днес ще ви покажа как можете да го направите във Svejo.net

Svejo add url to site
Svejo add url to site


<?PHP
/*******************************
* Svejo Status Updater
* Peter Nikolow
* http://peter.nikolow.me
* March 29, 2013
*******************************/

$login_email = 'type-here-your-mail';
$login_pass = 'type-here-your-password';
$url_4submit = 'type-here-your-url';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://svejo.net/user/login');
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; Linux 2.6.22) NetFront/3.4 Kindle/2.0 (screen 600x800)");
$loginpage = curl_exec($ch);

curl_setopt($ch, CURLOPT_POST, 1);
preg_match("/input name=\"authenticity_token\" type=\"hidden\" value=\"(.*?)\"/", $loginpage, $form_authtoken);
curl_setopt($ch, CURLOPT_POSTFIELDS,'authenticity_token='.urlencode($form_authtoken[1]).'&user%5Bemail_or_username%5D='.urlencode($login_email).'&user%5Burl_referer%5D=http%3A%2F%2Fsvejo.net%2F&user%5Bremember_me%5D=0&user%5Bpassword%5D='.urlencode($login_pass).'&commut=%D0%92%D0%BB%D0%B5%D0%B7');
$loginpage = curl_exec($ch);

sleep(10);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_URL, 'http://svejo.net/publish/');
$page = curl_exec($ch);

sleep(10);
curl_setopt($ch, CURLOPT_POST, 1);
preg_match("/input name=\"authenticity_token\" type=\"hidden\" value=\"(.*?)\"/", $page, $form_authtoken);
$formvars = array();
$formvars['authenticity_token'] = $form_authtoken[1];
$formvars['story[url]'] = $url_4submit;
$formvars['commit'] = "Добави";
curl_setopt($ch, CURLOPT_POSTFIELDS, $formvars);
curl_setopt($ch, CURLOPT_URL, 'http://svejo.net/publish/submit');
$page2 = curl_exec($ch);

curl_close($ch);
?>

А сега малко разшифровка на горния код.

  1. Трябва да се заредим страницата http://svejo.net/user/login
  2. От горната страница вземаме изключително важния параметър authenticity_token който го подаваме заедно с името/паролата към същата страница
  3. Зареждаме тази страница http://svejo.net/publish/ с цел вземането на authenticity_token
  4. Извършваме POST към http://svejo.net/publish/submit като подаваме token-a и URL-a които трябва да бъдат предадени

За всеки случай сме прибавили едно временно заспиване от 10 секунди между заявките за да не може системата да ни разпознае като ботове, каквито всъщност сме. Средно дневно в системата се прибавят около 2100 линка (информацията е от 30 Март 2013 година) което прави 87,5 линка на час. Или приблизително 2,5 линка на минута. Ако горния код се модифицира също като предходния би могъл денонощно да публикува всякакви линкове независимо от времето,но не е това целта на упражнението. Задачата е приключена и вече имаме скрипт за автоматично публикуване във Svejo.net

Facebook status update

Autopost to Facebook

От известно време ме тормози идеята за автоматично обновяване (autopost) на статуса във Facebook и други социални мрежи без други системи и приложения. Затова взех задачата присърце, седнах и преправих един прост скрипт който да свърши черната работа.

Facebook status update
Facebook status update


<?PHP
/*******************************
* Facebook Status Updater version 0.1
* Peter Nikolow
* http://peter.nikolow.me
* March 22, 2013
*******************************/

function random_string( )
{
$character_set_array = array( );
$character_set_array[ ] = array( 'count' => 7, 'characters' => 'abcdefghijklmnopqrstuvwxyz' );
$character_set_array[ ] = array( 'count' => 1, 'characters' => '0123456789' );
$temp_array = array( );
foreach ( $character_set_array as $character_set )
{
for ( $i = 0; $i < $character_set[ 'count' ]; $i++ ) { $temp_array[ ] = $character_set[ 'characters' ][ rand( 0, strlen( $character_set[ 'characters' ] ) - 1 ) ]; } } shuffle( $temp_array ); return implode( '', $temp_array ); } $status = random_string(10); $login_email = 'type-here-your-mail'; $login_pass = 'type-here-your-pass'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://m.facebook.com/login.php?refsrc=http%3A%2F%2Fwww.facebook.com%2Flogin.php&refid=9'); curl_setopt($ch, CURLOPT_POSTFIELDS,'email='.urlencode($login_email).'&pass='.urlencode($login_pass).'&login=Login'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt"); curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; Linux 2.6.22) NetFront/3.4 Kindle/2.0 (screen 600x800)"); $loginpage = curl_exec($ch); curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_URL, 'http://m.facebook.com/home.php'); $page = curl_exec($ch); curl_setopt($ch, CURLOPT_POST, 1); preg_match("/input type=\"hidden\" name=\"fb_dtsg\" value=\"(.*?)\"/", $page, $form_id); preg_match("/form method=\"post\" id=\"composer_form\" action=\"(.*?)\"/", $page, $form_num); curl_setopt($ch, CURLOPT_POSTFIELDS, 'fb_dtsg=' . $form_id[1] . '&privacy=&charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&target=&status=' . urlencode($status) . '&update=' . urlencode("Share")); curl_setopt($ch, CURLOPT_URL, 'http://m.facebook.com' . $form_num[1]); $page2 = curl_exec($ch); curl_close($ch); ?>

Скрипта е сравнително глупав, но ще ви го обясня накратко:

  1. Генерира се случаен стринг от 10 символа който ще бъде нашия нов статус. Това е много важно защото FB блокира показването на еднакви статуси и ми коства няколко часа докато го проумея. С това се избягва блокирането на статуса и е винаги уникален.
  2. До първия curl_exec се изпълнява логване във Facebook с указаното потребителско име и парола. За да се избегне тежкия desktop ajax се представяме като много прост мобилен браузър. Така избягваме получаването на iOS/Android ajax версия която също е по-тежка за обработка. Кукитата се запазват във външен файл с цел последващо използване.
  3. Със втория curl_exec се насочваме към основната страница на Facebook където ще обновим статуса на потребителя.
  4. До третия curl_exec се изпълнява основната функция на обновяването. Проблема е че FB използва динамични форми и първо трябва да обработим втория резултат като вземем изключително важните параметри fb_dtsg - уникално id за формата и composer_form - сочещ към url-a който трябва да бъде извикан с третата заявка. Така композираме третата заявка която обновява статуса с няколко фиксирани параметъра.
  5. Последния ред затваряме curl и задачата е приключена. Можем да изтрием файла с cookies защото вече не е необходим.

С което задачата е изпълнена с няколко особенности:

  • Скрипта има проблеми с кирилицата! За момента не може да се публикува статус без да се счупи кирилицата. Тук проблема е по-тежък защото самия FB кара браузъра със специфично HTML поле "charset_test" да върне какво поддържа като езици и подозирам че нещо и оттам обърква кирилицата.
  • Скрипта се представя за мобилен агент което води до показването на "from mobile" под поста.
  • За момента показването на линкове не е много ефективно.
  • Не могат да се качват снимки във timeline.
  • Липсва проверка дали предходните операции са се случили безпроблемно. Например ако потребителското име/паролата са грешни не се спира изпълнението както и не се проверява дали обновяването на статуса минава безпроблемно.
  • Не може да се контролира видимоста на поста (Public/Friends/Me). Мисля че се използва настройката на потребителя.
  • Публикуването е фиксирано от името на човека и не може да се публикува от страница. Засега...

Надявам се със следващите версии да подобря част от недъзите на съществуващия скрипт. Системата е много гъвкава и на тази база може сравнително лесно да се направи подобен скрипт за публикуване във Twitter, Linkedin, Sharetronix, StatusNet и други подобни системи. Малко по-сложно ще е публикуването в Google+, но принципа е същия както в горните системи и не виждам причина да не бъде налична и тази социална мрежа.
С горния скрипт може да се направят много неща - примерно може да се настрои сървър да отчита параметрите си в интернет, може да се настрои автоматично постване през час от база данни, може да се извърши постване от името на потребител за вирална реклама и т.н. Общо взето възможностите са неограничени с тънкия момент, че не е много по правилата на Facebook. Ако трябва да бъде по правилата трябва да бъде приложение което потребителя с OAuth да упълномощи да извърши няколко дейности включително промяна на статуса.
За моя радост използвам скрипта САМО за лично ползване и то не и под основния ми акаунт. Ако имате въпроси ще бъда радостен да ви отговоря.

What is my ip address?

Как бързо да вземем на IP адреса на с който машината или мрежата е видима отвън:
curl ifconfig.me

А така може да се види и как се казва в интернет:
curl ifconfig.me/host

Невероятно полезен адрес за тестване на сайтове: www.ifconfig.me