Показват се публикациите с етикет howto. Показване на всички публикации
Показват се публикациите с етикет howto. Показване на всички публикации

четвъртък, октомври 21, 2010

sudo за windows 7

Въпреки общоприетото мнение User Account Control в Windows 7 не е нещо, което трябва да се изключи веднага след инсталация.
И аз си го ползвам.
Единствения ми проблем е че не съм windows guru и ми беше трудно да редактирам системни файлове през конзолата, един вид трябва ми sudo за windows. Ето как успях да направя номера

Първо трябва да активираме administrator акаунта.
cmd -> run as administrator
и пишете:


net user administrator /active:yes
net user administrator parola 

 След това ако искате да изпълните нещо като "root":
runas /user:administrator notepad

Малко по-дълго е от sudo vi, но върши работа.


btw, да препоръчам малко software за win

http://www.vim.org/download.php#pc
http://sourceforge.net/projects/console/

Правят windows малко по-приятно място :)

четвъртък, юни 24, 2010

Използване на CI Active Record в скрипт извън CodeIgniter


Добре, ясно, ползвате CodeIgniter и ви се налага да напишете някакъв малък скрипт (примерно нещо, което ще се изпълнява с cron) и се налага да правите някакви си нещица с базата данни.

Правите си една папка "scripts" и започвате да блъскате вътре някакви неща. Въпроса, е че вече сте свикнали с Active Record библиотеката на CodeIgniter и искате да продължите да си я ползвате вместо омразните - mysql_query(), mysql_fetch_object() и т.н.
Оказа се, че това става доста лесно :

// set paths
$current_path = __DIR__;
$current_path = str_replace("\\", '/', $current_path); // w32 paths
// тук може би ще ви трябва още малко оправяне на пътищата :)

define(PROJPATH, $current_path . "/");
define(BASEPATH, $current_path . "/system/");
define(APPPATH, PROJPATH . 'application/');
define(EXT, '.php');

// load active record DB
include(BASEPATH . 'codeigniter/Common.php');
include(BASEPATH . 'database/DB.php');
$db =& DB();



Това е. Вече имате променлива $db и можете да си ползвате любимия $db->get() :)

Уточнение: Ако пътищата ви се струват странни: при мен system и application папките са на едно равнище във файловата структура и за това съм си дефинирал константа PROJPATH която е един вид ../system и ../application.
структурата е нещо като :
/project
//application
//system
//scripts
При този начин на зареждане Active Record ще ползва стандартните настройки за връзка с базата данни в /application/config/database.php, тоест няма нужда ръчно да задавате отново username, pass и db.

събота, ноември 14, 2009

Как да подкараме wireless карта с чип на Broadcom под OpenSUSE 11.2

Понеже Ubuntu 9.10 се оказа едно голямо разочарование, набързо реших да го махна и да сложа OpenSUSE, пък и тъкмо излезе 11.2. :)

Wireless картата на лаптопа ми е Lynksys WPC54G, която работи с чип на broadcom, за който има драйвер в ядрото от версия 2.6.17, но все пак се налага да се изтегли едно firmware-че за да "потегли".
За да видите точно каква ви е картата, като каква се разпознава и т.н. изпълнете :


hwinfo --wlan
lspci

Ако всичко е ок трябва да инсталирате b43-fwcutter по начина който предпочитате, но аз си обичам конзолата:

zypper in b43-fwcutter

Теглим и самия firmware: и разархивираме.

wget http://mirror2.openwrt.org/sources/broadcom-wl-4.150.10.5.tar.bz2
tar xjf broadcom-wl-4.150.10.5.tar.bz2

влизаме в папката broadcom-нещо-си и чрез b43-fwcutter го инсталираме:

b43-fwcutter -w /lib/firmware wl_apsta_mimo.o

Ето и какво каза /var/logs/messages по въпроса:

Nov 14 15:52:04 linux-jlue kernel: [ 3394.496084] b43 ssb1:0: firmware: requesting b43/ucode5.fw
Nov 14 15:52:04 linux-jlue kernel: [ 3394.523725] b43 ssb1:0: firmware: requesting b43/pcm5.fw
Nov 14 15:52:04 linux-jlue kernel: [ 3394.532256] b43 ssb1:0: firmware: requesting b43/b0g0initvals5.fw
Nov 14 15:52:04 linux-jlue kernel: [ 3394.540883] b43 ssb1:0: firmware: requesting b43/b0g0bsinitvals5.fw
Nov 14 15:52:05 linux-jlue kernel: [ 3394.664191] b43-phy1: Loading firmware version 410.2160 (2007-05-26 15:32:10)
Nov 14 15:52:05 linux-jlue kernel: [ 3394.704860] Registered led device: b43-phy1::tx
Nov 14 15:52:05 linux-jlue kernel: [ 3394.704895] Registered led device: b43-phy1::rx
Nov 14 15:52:05 linux-jlue kernel: [ 3394.704925] Registered led device: b43-phy1::radio
Nov 14 15:52:05 linux-jlue kernel: [ 3394.732768] ADDRCONF(NETDEV_UP): wlan0: link is not ready
Nov 14 15:52:13 linux-jlue kernel: [ 3402.625434] wlan0: authenticate with AP 00:1d:0f:eb:fc:da
Nov 14 15:52:13 linux-jlue kernel: [ 3402.627701] wlan0: authenticated
Nov 14 15:52:13 linux-jlue kernel: [ 3402.627708] wlan0: associate with AP 00:1d:0f:eb:fc:da
Nov 14 15:52:13 linux-jlue kernel: [ 3402.630942] wlan0: RX AssocResp from 00:1d:0f:eb:fc:da (capab=0x431 status=0 aid=1)
Nov 14 15:52:13 linux-jlue kernel: [ 3402.630948] wlan0: associated
Nov 14 15:52:13 linux-jlue kernel: [ 3402.631925] ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready

тоест ядрото си е мрънкало за firmware-a, ние му го дадохме и всичко си тръгна.

Някои хора все пак ще се опитат да инсталират драйвера с ndiswrapper. Е.. недейте ! Драйвера за windows работи ужасно. Никога не съм вдигал скорост над 1MB/s с windows-ката версия. Често безжичната карта забива и се налага рестартиране на цялата операционна система за да можете отново да се вържете към някоя мрежа. Доскоро и linux-кия драйвер правеше подобни изпълнения, но го фикснаха и сега е направо - убиец :)

//off

Finish him:
Като тази процедура дори да не е особено сложна, не знам защо, но не се вписва много добре в представата ми за user friendly. Започвам да разбирам защо всички харесват Ubuntu (въпреки това в какво лайно се е превърнал), там нещата просто стават с 2 клика.
Не може да караш тъпия user да инсталира драйвери по този начин.
Не може да сложиш клавиатурната подредба да се сменя с натискане на 2-та шифта едновременно. Кой подяволите сменя между кирилица и латиница с 2-та шифта ?
Не може по default да изключиш tap-click-а на touchpad-a !!!
YAST не е нито бърз, нито лесен, нито функционален. Никога не е бил и никога няма да бъде.
Като цяло и OpenSUSE не ме впечатли с нещо по-добро от Ubuntu, но идеята за downgrade до 9.04 не ми се струваше много добра.
А защо махнах убунту - проблеми със звука, непрвилно разпознати хард дискове и непълно неработещ touchpad. Отделно чух за масови проблеми с криптирането. Ubuntu ще ме върне в редиците си при излизането на 10.04 и ще ме губи 10-ти месец всяка година. Жалко!

неделя, ноември 08, 2009

Звук при Ubuntu 9.10 - the hard way

След upgrade на Ubuntu 9.04 до 9.10 се получи една "проблемация". Звук няма. За пръв път откакто ползвам тази дистрибуция ми се случва това, а аз е ползвм наистина отдавна - 4.04
Whatever. Проблема не е само при мене, бъг репортите направо валят. Този пък проблема не е при ъпгрейда, а в новата версия на Убунту. Тия хора пак си правят някакви експерименти с alsa и pulseaudio и чупят кефа на достатъчно много потребители.
Нормално решение няма, чакаме на фикснат бъга.
Има обаче закърпващо решение.

Махате pulseaudio и инсталирате asoundconf-gtk и aumix-gtk.
Накратко :


sudo pulseaudio -k # след kill демона се рестартира автоматично, така му казваме сам да се спре
sudo apt-get purge pulseaudio # махаме pulseaudio
sudo reboot # рестартираме

# Инсталираме си необходимите програмки.
sudo apt-get install aumix-gtk asoundconf-gtk



Тука идва един малък хак - от тоя адрес теглим alsa-utils_1.0.18-1ubuntu11_i386.deb (или съответно 64 битовата версия). Това е просто архив. Отваря ме го, вътре има друг архив data.tar.gz
и отвътре вадим usr/bin/autoconf
За да инсталираме autoconf на нашата система, просто го копираме в /usr/bin.
След това стартираме:

asoundconf-gtk

Ще ви пита за sound карта, изберете си вашата.
На този етап от колонките на лаптопа ми се чу пукане и звука "дойде".
Ако не е тръгнал, проверете от Програми / Звук и видео / Aumix дали въобще звука ви е пуснат и сътветно си отлепете слайдъра за звука от нулата.

Понеже това си е чисто и просто хак, нямам идея дали ще работи при други освен мен.
Споменах, че това е закърпващо решение защото:
- sound mixer-a на GNOME няма идея какво се случва и съответно не може да контролира звука ви. Съответно и function key-овете на лаптопа за намаляне и увеличаване няма да работят.
- звуковата ви карта започва да работи в режим Highlander (шотландски боец) - само една програма може да я ползва. Което ще рече че ако слушате музика с rhythmbox или който и да е музикален плеър, то няма начин да чувате звук и от клипче в youtube примерно.
- при следващи ъпдейти вероятността да не се омаже нещо граничи с невъзможното

Преценете си сами дали си заслужава занимавката заради един dist-upgrade. Аз лично ако го знаех това едва ли щях да обновя до 9.10. Ако искате да си ползвате системата спокойно
отидете на Система / Администарация / Източници на софтуер и от таба Актуализации си изберете да ви показва само дългосрочни актуализации. Това се отнася за версии, които завършват на *.04, имат поддръжка 4 години и се водят доста по-стабилни. Така няма да ви занимава докато не излезе 10.04.

събота, ноември 07, 2009

Синхронизация на часа с Windows и Linux

Ако ползвате Windows и Linux на една и съща машина сте забелязали един интересен проблем. Часа постоянно се мени и за това си има много добро обяснение. И windows и linux (в моя случай Ubuntu) си синхронизират времето чрез NTP сървъри, но windows задава върху часовника на BIOS-а времето в конкретната часова зона, а Linux гринуичко време и съответно маха или добавя часове за да покаже на потребителя локалното му време.
(btw, това е само предположение на база наблюденията ми, нямам идея дали наистина прави точно това)

Това е лесно обяснимо, Linux изоснови е предвиден като многопотребителска операционна система и по този начин е много по-лесно да показваш текущото време на различни потребители в различни часовия пояси. При Windows нямам идея как е решен този проблем и дали въобще е решен. Може би се разчита на идеята, че Win потребителите не работят на един компютър от ралични зони. :)

Та ...
Това е малко дразнещо. Ако имате и двете операционни системи и ви се налага да работите често и с двете, още повече.

Едно от възможните решения е да ги накарате и двете да се синхронизират при пускане.
Ubuntu по подразбиране прави точно това, но ако все пак не това не работи при вас или не ползвате Ubuntu варианта е да се направи cron, който трябва да изпълнява :

ntpdate ntp.ubuntu.com

Спокойно, няма да ви се разсърдят, че им ползвате ntp сървъра дори да не ползвате Ubuntu.
Под Windows нещата стоят по подобен начин. Просто направете един .bat файл, който съдържа
w32tm /resync

и кажете на системата да го пуска при зареждане (най-лесно ще ви е да го drag-нете в AutoRun на start менюто).

Общо взето се получава така, че когато се зареждат и Windows-а и Linux-а и двете ще ОС ще "питат" сървърите си "Колко е часа" и ще си го нагласят както си му е реда.

Ако ви се чете повечко за NTP (интересно е) може да започнете от тук - http://en.wikipedia.org/wiki/Network_Time_Protocol

четвъртък, юни 04, 2009

PHP method chaining

class Chain{

  var $text;

  function addHello(){
   $this->text .= "Hello ";
   return $this;
  }

  function addWorld(){
   $this->text .= "World!";
   return $this;
  }

  function getText(){
   return $this->text;
  }
}

$obj = new Chain();
$text = $obj->addHello()->addWorld()->getText();
echo $text;
?>
Резултат:


Hello World!


Ей така можете да си chain-вате методи в php. Примера е идиотски, но показва общата идея без излишни глупости :)
Къде може да се използва вие си знаете. Аз писах едни active record нещица. Пести писане и най-малкото така кода ми изглежда по-добре :)

сряда, април 29, 2009

Писане на PHP конзолни скриптове


Успях хубаво да си счупя Linux-а, опитвайки се да инсталирам една операционна система, която упорито твърди, че не иска да се инсталира на PC. След някои хора - потоп, след тая ОС(която не искам да споменавам) - reinstall :)
Та, успях да си спася htdocs, но понеже не съм от най-умните забравих да си копирам конфигурационните файлове. В следствие на това като си връщам нещата обратно трябва да си направя наново и всичките виртуални хостове.
За да се добави такъв хост трябва да редактирате 2 файла и да се направи една директория, което си е работа, а и когато трябва да го направиш много пъти, нещата не придобиват никак приятен вид.
И понеже съм си originaly мързелив реших да го направя със скрипче.
btw, винаги съм твърдял, че е по-добре да загубя 20 минути в писане на някаква глупост, отколкото да губя 10 правейки го на ръка и затъпявайки :)
Само да вметна, че пиша уеб шитни и хич не се радвам когато трябва да се правя на Linux администратор и за това ползвам xampp (в случай, че се зачудите за странните пътиша). Един такъв админ ще се хване и ще напише скрипта на bash и той вероятно ще изглежда нещо като това:


#!/bin/bash

#some backup
cp /opt/lampp/etc/extra/httpd-vhosts.conf /opt/lampp/etc/extra/httpd-vhosts.conf.backup
cp /etc/hosts /etc/hosts.backup

# creating some stupid vars :P
while read line
do
file="${file}${line} \n" ;
done < "/etc/hosts";

new_host="127.0.0.1 ${1} \n";
new_vhost="
\n
\t DocumentRoot /opt/lampp/htdocs/${1}/ \n
\t ServerName ${1} \n
\n \n";
new_dir="/opt/lampp/htdocs/${1}/";

#creating new virtual host
mkdir $new_dir;
chmod 755 $new_dir;
echo -e $new_vhost >> /opt/lampp/etc/extra/httpd-vhosts.conf
echo -e $new_host > /etc/hosts;
echo -e $file >> /etc/hosts;

#restarting the server
/opt/lampp/lampp restart

За да добавите нов виртуален хост просто изпълнявате:
./addvhost.sh test

И скрипта ще свърши останалото за да се добави хост с име "test".
Колкото и да е powerfull bash-а, не пиша по цял ден на него и примерно тоя скрипт ми отне около 15 минути, основно защото половината време трябваше да чета документация.
Ако сте като тъп уеб дИвелъпър като мене и php ви е по-удобен, вече (то не е много отскоро ама айде) можете да напишете същото и на php.
Нещо като това:

#!/opt/lampp/bin/php
$param = $_SERVER['argv'][1];

//create backups
copy('/etc/hosts', '/etc.hosts.backup');
copy('/opt/lampp/etc/extra/httpd-vhosts.conf', '/opt/lampp/etc/extra/httpd-vhosts.conf.backup');

// set some vars
$hosts_file = file_get_contents('/etc/hosts');
$vhosts_file = file_get_contents('/opt/lampp/etc/extra/httpd-vhosts.conf');

$new_host = "127.0.0.1 \t $param \n";
$new_vhost = "
\n
\t DocumentRoot /opt/lampp/htdocs/$param/ \n
\t ServerName $param \n
\n \n";
$new_folder = "/opt/lampp/htdocs/$param/";

// creating vhost
mkdir("/opt/lampp/htdocs/$param/", 0755);

$fh = fopen('/etc/hosts', 'w');
fwrite($fh, $new_host);
fwrite($fh, $hosts_file);
fclose($fh);

$fh = fopen('/opt/lampp/etc/extra/httpd-vhosts.conf', 'w');
fwrite($fh, $vhosts_file);
fwrite($fh, $new_vhost);
fclose($fh);

// restart the server
$output = shell_exec('/opt/lampp/lampp restart');
echo $output;
?>

За да си свърши работа скрипта иска да му кажете нещо от типа:
./addvhost.php test

Както виждате нищо страшно. Върши абсолютно същата работа и не съм засичал, но ми се струва, че ми отне половината от времето на bash-a.

Друго важно уточнение е, че тези скриптове са писани само за да покажат как хипотетично биха могли да станат нещата, вършат работа, но аз като потребител не бих ги използвал, най-малкото защото не дават възможност за допълнително настройване на виртуалния хост и няма абсолютно никаква проверка дали нещо по време на изпълнението не се е омазало. :)

За добро или лошо php се мъчи да излезе от сървърната среда и да се превърне в пълноправен език за административни скриптове и дори desktop приложения(phpgtk).
Наскоро гледах някъде в нета сравнение на езиците за програмиране и корабите. Примерно java беше описана като огромен транспортен кораб, който върши много неща, но не е много приятен за каране.
Там php беше сравнен с малък риболовен кораб - малък, бърз и върши точно това, за което е направен.
За мен лично така и трябва да си останат нещата, но нищо не пречи на php да се пробва при десктоп приложенията.

edit: За времето за което написах тези скриптове и този пост, можеше да си свърша работата, но нямаше и да е наполовина по-забавно :)

събота, април 04, 2009

Урок за GIMP: Как да сменим цвета на кола

Ето още един кратък урок за GIMP, в който се опитвам да покажа някои трикове при работа с графичния редактор. В случая сменяме цвета на кола (минибус), но принципа може да се приложи на други места. Основния проблем е да сменим цвета запазвайте светлосенките, което се оказа не особено трудна задача.

Историята: Наскоро ме помолиха една бърза услуга, трябваше да сменя цвета на една кола. И аз като пишман дизайнер (ей, какви хубави български думички използвам) реших да помогна и сега ще ви кажа как направих нещата.
За пример съм намерил от google една хубава снимчица, да се надяваме, че автора й няма да има нищо против :)

Започваме процедурата с дублиране на същия слой, махаме видимостта от първия и започваме да работим с другия. Върху втория слой започваме да трием всичко, на което няма да му сменяме цвета.
Целта е след като сменим цвета на нащия хипарски бус, да запазим фона, какъвто и да е той.
Същия ефект може да се постигне чрез уреда за пътеки, като се изберете необходимата част от изображението и го копирате в нов слой.
Все пак на мен варианта с гумата ми се струва по-лесен и по-удачен в случая.
Важно е това, което изтриваме да остане прозрачно.
Тук има един малък трик, ако използвате jpg то след триене ще остава бял цвят. За промените това, селектирайте малка част от бялото, изберете от менютата Цветове / Цвят към прозрачност и изберете бял цвят. След това спокойно можете да триете.
Тази част е най-бавната и най-неприятната, но трябва да се направи :) Трийте докато не получите нещо такова:

Както виждате аз не съм се старал много, но в случая целта е просто да покажа идейно как става, а не да показвам нещо перфектно.
Следващата стъпка е отидете на слоеве и да изберете превръщане на прозрачността в селекция. От тук нататък е важно каквото и да правите да не премахвате селекцията, ще разберете защо.
Връщате се на изображението и с уреда за избиране на цвят избирате най-тъмното червено (в този случай, иначе може да е друг). След това отивате на кутията с инструменти, избирате цвета, с който рисувате и копирате html нотацията конкретния цвят.
След това избирате Цветове / Цвят към прозрачност и поставяте като цвят html кода, който сте копирали. Незнайно защо този tool не се съобразява с цвета за рисуване и се налага ръчна намеса.

Премахвате цвета. Само да напомня, не бутайте селекцията. Както забелязвате някои нюанси на червеното още са останали. От тук нататък можем да продължим да ги премахваме по същата процедура, но така се губи голяма част от сенките, отблясъците и т.н. За това, малко по-грубия, но пък по-лесен вариант е да превърнем слоя в черно бял - Цветове / Изваждане на цветове / Осветеност (или което е удачно във вашия случай).
Сега създаваме нов слой, който е прозрачен. Избираме го него, избираме си цвета който искаме да направим нашето хипи возило и "ливваме" с кофата. Преместваме новия слой под този, който сме обработвали до сега. Не сте махнали селекцията, нали ?
В този невероятен момент (работейки върху цветния слой) накликваме Избиране / Обръщане и изтриваме селекцията. Така премахваме ненужния цвят и оставяме място за фона. Връщаме видимостта на долния слой и ... това е. Всичко е готово.
Може да се наложи да дооправите някои допълнителни нещица, но като цяло това е идеята.

Използвайте свободен софтуер, борете се за свободата си и не забравяйте, че този урок е под Creative Commons Attribution-Noncommercial 2.5 лиценза, така че правете с него каквото си искате стига да спазвате условията на лиценза.
От тук можете да изтеглите .xcf файла.

Надявам се да съм бил полезен.

Забележка: Използван е gimp 2.6.21 на български, тоест ако ползвате по-стара версия някои менюта може да са по-различни, но все пак идеята е същата.
Още един повод да поздравя преводачите :)

сряда, март 25, 2009

Как да превърнем gedit в IDE за C++

Ако ползвате GNOME, то е твърде вероятно да използвате и gedit и ако като мен от време на време ви се налага да пишете на C++, а не ви се занимава с големи и тежки IDE-та то вероятно този съвет ще ви е от полза.
Простичкия но мощен gedit има много готини модули. Можете да ги видите като накликате Редактиране / Настройки и отидете на таба Модули. От там активирайте модула "Външни инструменти" и наснете бутона за насктройките му. От там добавете нов Tool и наблъскайте вътре следните настройки.

Description: Коплиране на C++ файл
Shortcut key: F5
Command: g++ $GEDIT_CURRENT_DOCUMENT_NAME -o ${GEDIT_CURRENT_DOCUMENT_NAME%.*}
Input : Нищо
Output: Показване в долния панел
Aplicability: Всички документи

Благодарение на това ще можете с бутона F5 да компилирате автоматично файла, който сте отворили. Това ще компилира само 1 файл, ако искате да компилирате по-големи проекти, то вече има добавена функция, с shortcut key "ctrl + F8", която търси makefile.

Следва добавяне на следващ контрол:
Description: Изпълнение на програма
Shortcut key: F6
Command: ./${GEDIT_CURRENT_DOCUMENT_NAME%.*}
Input : Нищо
Output: Показване в долния панел
Aplicability: Всички документи

От тук нататък остава само coding, натискате F5 за да компилирате и ако няма никакви грешки F6 за да изпълните програмата си.
Лесно и бързо, перфектно за писане на малоумни програми за университета :) :P

П.П. Надявам се няма нужда да обяснявам как това може да работи с C или който и да било друг език и компилатор :)

петък, октомври 24, 2008

Използване на uTorrent с Opera

Днес съм на вълна Opera, така че продължаваме :)  Opera има вграден BitTorrent клиент, което лично мен винаги ме е дразнело.

За да накарате Opera да използва uTorrent или който и да било друг клиент просто пишете в адресната лента "about:config" без кавичките. Ще появи лента за търсене, там пишете BitTorrent. В прозорчето, което ще ви се покаже просто махате отметката на Enable и рестартирате браузъра. 

След това когато кликнете на торент файл, Opera ще ви предложи да го отворите с uTorrent или който е default-ния ви торент клиент.

Това бяха Opera tips and tricks за днес :)

AdBlock за Opera или как да си блокирам рекламите с Privoxy

Ако сте от потребителите на Firefox, то лесно може да блокирате рекламите си с AdBlock+. За съжаление такъв плъгин за Opera и Internet Explorer (моля ви, не си го причинявайте, не използвайте браузъра на Microsoft). Тук идва един малък трик да си филтрираме рекламите без въобще да намесваме browser-а, който ползвате. 

Първото, което трябва да направите е да инсталирате Privoxy. Задавате му да се стартира със зареждане на системата и го пускате. Следват настройките по Opera.

Избирате Tools/ Preferences, от там отивате на таба Advanced и от менюто в ляво избирате Network и Proxy Servers.  Тук трябва да въведем някои неща ръчно. Слагате отметки на http и http, като адрес и на двете места пишете 127.0.0.1, а  като порт 8118. На сайта на Privoxy има важно пояснение - не го използвайте за ftp трафика, освен ако не искате да го блокирате.

Отдолу може да добавите сайтове, за които да не се използва това прокси, като например моя блог (не че имам реклами и без това).

Това е, рeстартирате браузъра и готово. 

Това филтриране на рекламите на практика работи с всеки браузър. Просто следвате инструкциите тук, като разликата ще е единствено начина на указване на proxy-то.

PS. Privoxy има доста по-advanced функционалност, но за нея може би ще пиша някой друг път.  

сряда, март 05, 2008

Урок за GIMP - Напред работнико !

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

Та, в крайна сметка реших да пусна тук какво съм създал и как.
Вместо сърп и чук ще нарисуваме зъбно колело, символ на прогреса и ще сложим един работник, който копае.
Да започнем със зъбното колело. Търсих дълго в нета за нещо подходящо, но не намерих така че ще се наложи да си го нарисуваме сами. Имало някакъв вариант с MS Word ама аз такива бози нямам на компютъра си - OpenOffice. :) Първо хващаме и с уреда за избиране на елипса правим кръг в центъра. Не забравяйте да натиснете shift за да се получи кръг. Оцветяваме го в бяло. След това Избиране / Увеличаване и увеличаваме селекцията с 20 пиксела. Оцветяваме разликата в черно. Бялото вече не ни трябва и може да го махнете.
Сега взимаме уреда за създаване на пътеки и с него си рисуваме едното зъбче, след това просто го въртим и наслагваме където е нужно.
Това е много бавна и гадна работа, но без нея нямаше да е интересно. След като наслагаме зъбците правим един бял outline(може би на български трябва да е очертание). Това става като отидете на панела със слоевете, десен бутон на съответния слой и избирате "Превръщане на прозрачността в селекция", след това давате десен бутон на изображението и "Очертаване на селекцията" предлагам да е с 1-2 пиксела.
Идва време да приложим перспектива, тук няма задължителни неща, направете го както ви харесва. Тук има един момент който ми хрумна преди малко. На всеки ръб сложете по един черен пиксел върху бялото очертание. Ще разберете защо.

Това е малко ламерски начин за постигане на определен ефект, но работи.
До тук добре, сега идва ред на поредния ламерски трик за да получим 3D изглед на нашето зъбно колело. Слой/Дублиране на слоя. След това отиваме в панела със слоеве и преместваме копирания слой най-отдолу. Връщаме се на изображението и преместваме копирания слой с по 1 пиксел. При моята перспектива това е 1 пиксел надолу и 1 пиксел наляво. Така, докато ви писне. Аз съм направил 20 такива слоя, но броя им не е задължителен. Предполагам, че има и по-лесен начин да стане това, но аз не можах да го измисля.

Трябва да се получи това. Черните пиксели ни трябваха за да докараме линийките, които обуславят ръбовете. Ако искате можете да "нацепите" зъбното колело на 2 части, тоест ако имате 20 слоя, то просто изтривате 9,10 и 11 за да се получи нещо такова:

Малко променяме цвета на зъбното колело, добре беше да го направим още в началото, но може и така да ви харесва повече. Та ... Давайте работника.
Картинката я изрових някъде от Google. Малко ще я бутнем и нея от Цветове / Изваждане на цветове/Средно/Изваждане на цветове. Сливаме всички слоеве на колелото и я поставяме като нов слой в изображението Сега трябва да имате 2 слоя. На слоя с работника ще му сложим 2 пиксела outline, след това от Избиране / Обръщане ще обърнем селекцията и ще я gausian blur-нем два пъти за да се получи едно изпъкване на фона на останалото.

Май ще трябва леко да "приплъзнем" работника под и над изображението. За това, както си седи отгоре селектираме слоя с колелото и с пътека правим селекция която трябва да е частта, която ще стои "под" работника.

Изрязваме селекцията и я поставяме пак, но този път като нов слой. От панела със слоевете я поставяме най-долу, работника е в средата, а долната част на зъбното колело ще бъде най-горе.
Това е. Ако искате да сложите фонов цвят, хващате най-долния слой и го "ливвате" с кофата.
Вероятно забелязвате, че има разлика между изображенията, едното го правих вчера, другото днес набързо за урока и за това е малко по-неизчистено и с грешки.
Този урок е публикуван под лиценза Creative Commons, тоест ползвайте каквото ви харесва, споделяйте с останалите и посочвайте автора. Един линк до урок би свършил перфектна работа.
Надявам се да съм бил полезен.

четвъртък, ноември 22, 2007

HOWTO Да превърнем Windows XP в нещо по-приятно

Понеже напоследък ми се налага да използвам Windows, а нямам намерение да си тормозя машината с Vista реших да си сложа XP. По долу съм описал как можете да превърнете Windows-ската си система в интересна кръстоска между Mac и Linux. :) Това ми е първото HOWTO за Win и да се надяваме, че ще е последното. Това HOWTO (ако въобще може да се нарече така) няма да ви каже какво да правите стъпка по стъпка, по скоро целта му е да ви даде някои идеи. От вас се очаква сами да си харесате нещо и да му разцъкате опциите.
Първото, което трябва да направите е да забравите за всички MS програми, които се изливат веднага след инсталацията като Windows Media Player, MSN, Internet Explorer и т.н. Първото нещо, което правя винаги е да си сложа Firefox . След това идва ред на pidgin, понеже не много Win юзъри го ползват - това е Instant Messaging програма, която може да се върже с icq, jabber и още бая системи. За MS Office дори не си и помисляйте - има си OpenOffice, който на мен лично ми допада доста повече.
Quick launch bar-a на Win никога не ми е допадал особено, тук идва едно Mac style решение на проблема, което може много да ви улесни живота - ObjectDock. Има и платена и безплатна версия. В комбинация с VistaInspirate икони се получават много хубави неща:

Видео плеър, оставете този Windows Media Player да събира прах, Media Player Classic рулира, а и можете да си го инсталирате направо с пълен пакет кодеци - K-Lite Codec Pack . Много по опростен и много по удобен.
Остава най-трудната част - музикалният player. Точно в този етап съм най-капризен, защото съм разглезен от Amarok. Windows Media Player ме дразни адски много в това отношение, отвратително управление на колекцията, така и не можах да му свикна на това нещо. И докато чакаме да портнат Amarok за Windows и Linux юзърите се радват, ние инсталираме Winamp. Инсталирайте винаги последна версия и винаги безплатната (освен ако не сте решили да си го купите разбира се). За да накараме Winamp да се приближи до функционалността на Amarok, първо ще пуснем Media Library (alt + L), казвам го, защото много хора дори не знаят, че тази функция я има, а аз без нея ще се гътна, дори и 20 песни да имам - Media Library. Следващата част е да активирате Global Hotkeys, не питайте как - в Preferences. В General Preferences има една много хубава опция къде да ви се показва Winamp-a, аз съм го направил да е само в System tray-a (т`ва долу в ляво), в такъв случай е хубаво да си добавите и global shortcut да се показва и прибира player-a, при мен това е crtl+alt+= (Някакси ми се връзва с останалите global hotkeys по подразбиране).
До тук добре, но аз искам и да ми се показват и текстовете на песните, тук идва Leo Lyrics Plugin . Аз обаче съм нагъл и искам да виждам и обложките на албумите - Cover Tag for Winamp .
Резултата до тук:

За да изтормозим Winamp-а до край ще го караме да показва и OSD (On Screen Display) или да ни изписва на екрана, коя песен свири в момента. Тук ще ни трябва програмката EasyOSD.



Ако всичко направено до момента ви харесва, то замислете се, че повечето неща си ги има в Linux по подразбиране, без plugin-и и допълнителни глупости.
Надявам се да съм бил полезен :)

събота, септември 08, 2007

Записване на дискове с cdrecord

Наскоро ми се наложи да записвам дискове под конзола, поради простата липса на X. Пък и дори да бях инсталирал едва ли можех да се надявам да подкарам K3b или GnomeBaker на 32mb RAM и 200 MHz (стария ми Compaq, но това е тема на друг разговор, за него ще пиша отделно :)
Тази невероятна машина е с Slackware 10.2 (само такъв имах и не ми се теглеше). Пакета се казва cdrtools и може да го намерите в дисковете, по-добре първо го намерете в packages.txt иначе голямо ровене ще падне. Този пакет инсталира няколко програми между които и cdrecord.
Първото нещо което трябва да направим е да съберем файловете, които ще записваме. Правим директория, където ще ги слагаме

mkdir /tmp/iso 

Копираме каквото си решим, като внимаваме да не превишим размера на диска.
cp Some_kind_of_movie.ogg /tmp/iso 

След като сме привършили копирането ще направим .iso изображение:
mkisofs -RJ -o /tmp/image.iso /tmp/iso

След като командата се изпълни би трябвало в директория /tmp да има файл image.iso.
Ако сте подозрителни и искате да проверите какво се е получило може да опитате:
mkdir /tmp/disk
mount -o loop -t iso9660 /tmp/image.iso /tmp/disk
ls /tmp/disk

И ако всичко е ОК, може да демонтираме изображението.
umount /dev/disk 

Сега преминаваме към същинското записване. За да можем да го направим, първо трябва да знаем id-то на устройството. Това става така:
cdrecord dev=ATAPI -scanbus 

Тази команда трябва да изведе нещо от типа :
Cdrecord-ProDVD-Clone 2.01.01a11 (i486-linux-gnu) Copyright (C) 1995-2006
scsidev: 'ATAPI'
devname: 'ATAPI'
scsibus: -2 target: -2 lun: -2
Warning: Using ATA Packet interface.
Warning: The related Linux kernel interface code seems to be unmaintained.
Warning: There is absolutely NO DMA, operations thus are slow.
Using libscg version 'schily-0.8'.
scsibus0:
0,0,0 0) *
0,1,0 1) '_NEC ' 'DVD_RW ND-3540A ' '1.F1' Removable CD-ROM
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *

Това означава, че моето id e 0,1,0 При вас това може да съвсем друго, така че проверети го :)
Остана най-лесното, "печенето" на диска:

cdrecord dev=ATAPI:0,1,0 /tmp/image.iso

Важно е да напишете ATAPI с главни букви защото все пак това е Linux, а не някое грозно графично DOS подобие :P

Твърде е вероятно да ви се наложи и да изтриете презаписваем диск:
cdrecord blank=fast dev=ATAPI:0,1,0

Това е! Може на пръв поглед да ви се стори малко стряскащо, но всъщност е елементарно и дори удобно. Като се има в предвид възможностите на системата просто по-добър вариант няма. :) Това чудо конзолата започва все повече да ми харесва :)

сряда, август 29, 2007

SEO втора част

Този път ще поговорим за атрибутите на самия сайт. Както в тази, така и в предишната статия за SEO факторите са подредени по важност.

Атрибути на сайта

  • Популярност на външните линкове към страницата

    Колкото повече линкове от страници с добър рейтинг, толкова по-добре. Логично нали :)

    Трябва да имате в предвид, че купуването на линкове вече е забранено от Google и може да си изпросите доста неприятности.

  • Линкове от сайта към външни сайтове

    Най-добре е да слагате линкове към сайтове, които са с висок page rank и са свързани тематично с вашата страница.

  • Възраст на сайта

    Смята се, че на по-старите сайтове може да се има повече доверие, особено ако нямат много “счупени линкове”. Новите страници на сайтове с висок rank също са добре оценени, така че е по-важно самия домейн да е стар, отколкото страниците да са стари.

  • Количество текст подходящ за индексиране.

    Като цяло няма някакво голяма значение, но страници, които са само с картинки или само на флаш, рядко са оценявани високо. Ако прекалено много старници са еднаква големина, то е по-висока вероятността тези сайтове да са спам. Дългите страници са по-добре оценявани от статии, които са разделени на абзаци в няколко старници.

  • Качество на текста в документа (измервано алгоритмично)

    Съдържанието на страницата (текста ) е най-големия фактор при слагането на линкове от друга страница, така че при добро съдържание скоро ще започнете да получавате добри линкове.

  • Организация / Йерархия на документа

    Този фактор влияе много добре, тъй като добре организираните страници са по-лесни за индексиране от паяците. Структурата е много важна, но все пак трябва всяка страница да може да бъде разглеждана като самостоятелна.

  • Честота на обновленията по страницата

    Има много страници в интернет, които не са обновявани отдавна, но те все още са оценени добре, въпреки това честите обновления са добре за вашия сайт. Нормално е ако вашата страница не е обновявана от 1999, тя да е по-назад от страница обновена вчера.

  • Брой на наклонени черти ( / ) в адреса (url)

    Важно е да няма повече от четири наклонени черти в даден адрес. Колкото по-малко толкова по-добре. Не е сигурно, че влияе зле на rank-а, но се предполага, че затруднява паяците.

  • Правилен правопис и граматика

    Този фактор не влияе толкова на търсачите, колкото на потребителите, лошия правопис поже да “изгони” доста посетители. Понякога правописните грешки може да са умишлени, с цел да се достигне до точно определена ключова дума.

  • HTML валидизация на документа

    Няма голямо значение върху оценяването на сайта, но може да има положително въздействие върху потребителите и най-вече може да се използва доста умело при представянето на сайта пред инвеститори. Доста е приятно да покажеш пред потенциални инвеститори как определен сайт няма грешки, а как при друг конкурентен сайт валидизатора “плюе” по 100-120 грешки още на началната страница. :)

http://www.seomoz.org/article/search-ranking-factors

Малко инфо за SEO и ключовите думи

Както вероятно вече знаете, новата ми мания е SEO, просто съм се побъркал и постоянно чета някакви неща на някакви хора... въобще - лудница. Та тука реших да понапиша малко нещица за ключовите думи. Хем да помогна на новаците (как го казвам, все едно аз не съм), хем като позабравя да се връщам и да си припомням нещицата.

Дано да ви се стори интересно и полезно.


Ключови думи

  • Ключови думи в title тага

    Поставянето на точно определена дума или фраза в title тага е едно от най-силните оръжия, които може да използвате на самата страница за последните няколко години. Повечете SEO експерти казват, че това е един от най-мощните HTML тагове.

  • Ключови думи в body текста

    Важно е да се слагат ключови думи в текста, които имат имат важно значение за цялата страница. И докато търсещите машини стават все по-”умни” трябва да се използват не просто няколко ключови думи, а такива които са микс от всички по-важни думи в старницата. Така ще е по-лесно за търсещата машина да разбере точно за какво става въпрос във вашия сайт. Възможно е сайта да се rank-не добре и без този похват, но би изисквало много повече усилия.

  • Връзка между текста на страницата и ключовите думи

    Използването на точно определени думи съответстващи на вашия сайт би помогнало на търсещите машини да асоциират сайта с други на същата тематика, а това би повишило PR.

  • Ключови думи в h1 таг

    Като цяло е доста силен фактор, но ако сайта ви е за индустриалната революция, няма смисъл да пишете

    [h1]Глория и Екстра Нина[/h1]. Ако този похват е използван прекалено добре и има твърде много съответствия между текста в h1 и останалия текст, то това може сериозно да навреди на Page Rank-a и дори да намали претърсването на сайта ви от паяците.

  • Ключови думи в домейна

    Ако намерите стар домейн, който съответства на ваша ключова дума, но вече PR-а ви е висок. :) Добра идея е да се използват тирета между ключовите думи в името на сайта, но прекаляването с тирета не е добра практика. Най-добре е да се използват 1-2 тирета.

  • Ключови думи в URL на сайта

    Не е добре да се припокрива изцяло с домейна. Върши доста добра работа при Yahoo. Използването на url-и на български език е добра идея от гледна точка на търсещите машини, но от гледна точка на потребителите не е мого красиво да имате URL 100 неразбираеми за тях символа.

  • Ключови думи в h2,h3, h(x)

    Също могат да навредят на rank-а ви ако са прекалено добре използвани и се припокриват до голяма степен с съдържанието на текста. Различни стилове приложени към тях също помагат да се разбере важността на даденото заглавие или фраза. Важно е да се отбележи, че търсещите машини разпознават css.

  • Ключови думи в alt таговете и в заглавията на картинки

    Това е доста важно за търсачките на картинки, но не толкова за уеб търсачките. Трябва да се вземе в предвид, че alt текстовете могат да помогнат много за използваемостта на сайта. Примерно използвате картинка като котва и ако картинката не се зареди, то alt текста я замества.

  • Ключови думи в bold и strong тагове

    Логично е тези думи да привличат повече внимание при претърсването от паяците, тъй като щом сте ги сложили в такива тагове значи ги смятате за важни.

  • Ключови думи в Meta Description тага

    Доброто описание може да помогне на потребителите да кликнат на вашия сайт, тъй като то все още се използва за описание на сайтовете в някои по-малки търсачки. Важно е описането да е различно за всяка страница и да се използват ключови думи.

  • Ключови думи в Meta Keywords

    Повечето експерти твърдят, че вече нямат почти никакво значение, но все пак могат да навредят на page rank-а ви ако имате около 200 ключови думи от типа – sex, hardcore toys, pamella anderson, U2 и т.н.


http://www.seomoz.org/article/search-ranking-factors

неделя, юни 17, 2007

MySQL basics

Понеже в момента уча MySQL и PHP, реших да напиша малка поредица от HOWTO-та, които отразяват моя опит и общо взето, това което съм прочел в нета. Това е първото от тях и да се надяваме, че ще ми стигне търпението да напиша още поне 3-4 :)

Създаване на база от данни (БД)

За да създадете база от данни е необходимо да отворите конзола и да стартирате mysql, след което


> mysql -u root -p
mysql> show databases;

+----------+
| Database |
+----------+
| mysql |
| test |
+----------+

mysql> CREATE database petstore;
mysql> USE petstore;
Database changed
mysql> SHOW tables;
Empty set (0.00 sec)


Създаване на таблици

Създадохме БД, но трябва да вмъкнем в нея таблици. Ще създадем 2 таблици - първата ще описва видовете животни в магазин за животни, а втората ще съдържа информация за животните.

mysql> CREATE TABLE species
(
id INT NOT NULL AUTO_INCREMENT,
species varchar(30) NOT NULL,
primary key(id)
);
Query OK, 0 rows affected (0.02 sec)

Създаваме таблица species, която има две колони id и species. AUTO_INCREMENT в колоната ID "казва" на mysql след всеки запис автоматично да увеличава с 1
стойността на ID, това ни освобождава от нуждата всеки път да въвеждаме стойност на ID.

mysql> CREATE TABLE pet
(
id INT NOT NULL AUTO_INCREMENT,
sp_id INT NOT NULL,
sex CHAR(1) NOT NULL,
price DECIMAL(4,2) NOT NULL,
primary key(id)
);
Query OK, 0 rows affected (0.03 sec)


mysql> SHOW tables;
+--------------------+
| Tables_in_petstore |
+--------------------+
| pet |
| species |
+--------------------+
2 rows in set (0.00 sec)


Преглеждаме таблиците.
За да видите по нагледно каква точно таблица се е получила е необходимо само да драснете в конзолата :

mysql> DESCRIBE species;

+---------+-------------+----+-----+---------+---------------+
| Field | Type |Null| Key | Default | Extra |
+---------+-------------+----+-----+---------+---------------+
| id | int(11) | | PRI | NULL | auto_increment|
| name | varchar(30) | | | | |
+---------+-------------+----+-----+---------+---------------+
2 rows in set (0.05 sec)


mysql> DESC pet;

+-------+--------------+----+-----+---------+----------------+
| Field | Type |Null| Key | Default | Extra |
+-------+--------------+----+-----+---------+----------------+
| id | int(11) | | PRI | NULL | auto_increment |
| sp_id | int(11) | | | 0 | |
| sex | char(1) | | | | |
| price | decimal(4,2) | | | 0.00 | |
+-------+--------------+----+-----+---------+----------------+
4 rows in set (0.00 sec)


Извеждаме информация за таблицата pet. Обърнете внимание, че DESCRIBE и DESC вършат една и съща работа, може би защото едното е съкращение от другото :) Може също да използвате explain или show columns.

След като вече имаме таблици, трябва да вкараме информация в тях. Това може да стане директно от конзолата чрез INSERT

mysql> INSERT INTO species (name) values ('Cat');
Query OK, 1 row affected (0.00 sec)


Както виждате, просто пишем INSERT INTO името на таблицата, след това в скоби името на колоната VALUES и отново в скоби, но този път и в единични кавички въвеждаме стойността, която да бъде добавена в полето. Отново си заслужава да отбележим, че не въвеждаме стойност за ID, това става автоматично (AUTO_INCREMENT).

Извеждане на информация от таблица

Извеждането на информацията става доста лесно:

mysql> SELECT * FROM species;

+----+--------+
| id | name |
+----+--------+
| 1 | Cat |
| 2 | Bird |
| 3 | Fish |
| 4 | Turtle |
+----+--------+
4 rows in set (0.00 sec)


Ако искаме да видим само определена колона или част от таблицата можем да направим следното :

mysql> SELECT name FROM species;

+--------+
| name |
+--------+
| Cat |
| Bird |
| Fish |
| Turtle |
+--------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM species WHERE id = 4;

+----+--------+
| id | name |
+----+--------+
| 4 | Turtle |
+----+--------+
1 row in set (0.59 sec)


Обновяване и изтриване на информация

UPDATE се използва за променяне на стойност в таблицата. Например сега ще сменим името от Turtle на Dog.

mysql> UPDATE species SET name = 'Dog' WHERE name = 'Turtle';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> SELECT * FROM species;


+----+-------+
| id | name |
+----+-------+
| 1 | Cat |
| 2 | Bird |
| 3 | Fish |
| 4 | Dog |
+----+-------+
4 rows in set (0.00 sec)



DELETE изтрива редове от таблицата, като се задава условието WHERE за да укажем, точно коя част от таблицата да се изтрие. Сега ще изтрием запис с ID=1


mysql> DELETE FROM species WHERE id = 1;
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM species;

+----+-------+
| id | name |
+----+-------+
| 2 | Bird |
| 3 | Fish |
| 4 | Dog |
+----+-------+
3 rows in set (0.01 sec)


Можем да използваме не само "=", но и > (по-голямо) < (по-малко).


Това е за сега, надявам се да е полезно на някого. Можете да погледнете тук и тук за да прочетете интересни статии по темата.

сряда, май 09, 2007

MySQL, PHP, Apache под Линукс

Тук е мястото да пусна едно ламерско HOWTO, което доста ме измъчи и мисля, че ще бъде полезно на някои начинаещи Линукс потребители.
Ще използваме XAMPP, който можете да изтеглите от тук . След това ще го разархивираме в папка /opt със следната команда :


tar xvfz xampp-linux-1.6.1.tar.gz -C /opt

До тук добре, но за да избегнем леки проблеми с правата трябва да поправим някои неща :

cdmod 755 /opt/lampp/var/mysql -R
chmod 755 /opt/lampp/htdocs -R
chmod 755 /opt/lampp/phpmyadmin -R


Сега трябва да зададем парола на mysql:

mysql –u root
mysql> use mysql;
mysql>UPDATE user SET Password=PASSWORD('парола') WHERE user ='root';
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'парола' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;


При този вариант остават някои дупки в сигурността, за да ги поправим първо ще стартираме сървъра :

/opt/lampp/lampp start

и ще стартираме тест за сигурността :

/opt/lampp/lampp security

Програмата автоматично ще открие основните дупки и ще ви предложи да ги поправите.
Ако смятате да пуснете и Joomla трябва да създадете таблица :

/opt/lampp/bin/mysqladmin -u root create name_db

след като въведете паролата си трябва само да направим инсталацията на Jooma, която е графична, в 4 стъпки и е доста лесна.