Prechod k Octopressu, koncim s WordPressom

Ako som uz stihol napisat na svojom novom blogu, po niekolkych rokoch prechadzam od WordPressu ku Octopressu. Dovody su jednoduche — kontrola nad svojim vlastnym serverom, moznost hrabat sa v kode (a moznost domrvit funkcne veci :) ) a prilezitost naucit sa nieco nove. Naviac, uz dlhsie som planoval pisat v anglictine a novy blog je skvelou prilezitostou zacat.

Vlastny GIT server: 2. cast

V predchadzajucej casti sme si zabezpecili manazment GIT repozitarov vdaka gitolite. V tomto diele nastavime webserver — gitlist je lightweight nahrada za gitorious alebo github. Zobrazuje repozitare, ich obsah, commity, jednoduche statistiky a ma v sebe este par dalsich drobnosti.

Gitlist je PHP aplikacia. Na serveri mi bezi nginx spolu s php-fpm, takze konfiguraciu budem ukazovat pre tietu sluzby.

Stiahnutie gitlistu a zavislosti

Predpokladam, ze nginx spolu s php-fpm je uz nastaveny. Ak nie, tak navodov na googli je hojne. Naklonujme si gitlist:

git clone https://github.com/klaussilveira/gitlist.git
#gitlist je moderna aplikacia, zavislosti projektu riesi composer, da sa pouzit na sposob ruby gems
curl -s http://getcomposer.org/installer | php
#nainstaluje zavislosti projektu do adresara vendor
php composer.phar install

Nginx

Tu je moj konfigurak:

server {
    server_name ~^git.moja_masina.tld$;
    access_log /var/log/nginx/git.access.log;
    error_log /var/log/nginx/git.error.log;

    root /srv/http/git/;
    index index.php;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location ~* ^/index.php.*$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include /etc/nginx/fastcgi_params;
        fastcgi_index  index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    }

    location / {
        try_files $uri @gitlist;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        add_header Vary "Accept-Encoding";
        expires max;
        try_files $uri @gitlist;
        tcp_nodelay off;
        tcp_nopush on;
    }

#   location ~* \.(git|svn|patch|htaccess|log|route|plist|inc|json|pl|po|sh|ini|sample|kdev4)$ {
#       deny all;
#   }

    location @gitlist {
        rewrite ^/.*$ /index.php;
    }
 }

Nastavenia pristupu gitlistu ku repozitarom

Nech nginx daemon bezi pod usero, ktory patri do skupiny http. Nech repozitare su ulozene v /home/git/repositories. Logicky je nutne zabezpecit citanie suborov v tomto adresari. Zmenme vlastnikov skupin adresara /home/git a /home/git/repositories na http a nastavme prava na citanie.

chgrp http /home/git
chmod g=rx /home/git
chgrp http -R /home/git/repositories
chmod g=rX -R /home/git/repositories # nastavim atribut x len pre adresare

Tu sa treba zamysliet nad buducnostou. Ked gitolite vytvori nove repozitare, mali by byt citatelne http daemonom. Takze spravme toto:

chmod g+s -R /home/git/repositories #nove subory budu dedit vlastnika skupiny

Pre dokonalost upravme /home/git/.gitolite.rc; hodnotu “UMASK” zmenme na 0027. Vlastnikovi suborov ponechame povodne prava, skupina bude mat atributy r-s a ostatni nic.

Nastavenia gitlistu

Gitlist sa nastavuje cez subor config.ini. Skopirujeme teda config.ini-example do config.ini a rozumne ho upravme.

Polozka “repositories” ukazuje na adresar, kde su vsetky repozitare. Ak si, drahy citatel, sledoval prvy diel navodu, tak cesta je “/home/git/repositories/”.

Upravme aj hidden[] a priradme mu tuto hodnotu: “/home/git/repositories/gitolite-admin.git”.

Polozka debug zapina alebo vypina cachovanie, takze pri hackovani aplikacie treba mat debug nastaveny na false, inak je true rozumna volba.

A to je vlastne vsetko. Teraz by gitlist mal bezat ako po masle. Bezi aj na mojom serveri, tu.

Trochu som sa hral s kodom aplikacie, a pridal link na hlavnej stranke kazdeho repozitara pre read-only pristup, podobne to ma aj github. Na to treba git-daemon, o tom bolo tiez pisane v prvom diele. Pozri commit.

Vlastny GIT server: 1. cast

Od kupy virtualneho servera zazivam po nociach (a v skorych rannych hodinach) neuveritelne mnozstvo zabavy. Jednou takou uzitocnou zabavkou, pri ktorej sa clovek comusi priuci a aj realne vyuzije, je rozbehanie vlastneho GIT serveru. Budeme chciet jednoducho vytvarat nove repozitare a nastavovat pravomoci pouzivatelom (do akych repozitarov mozu citat/zapisovat). Tiez sa budeme chciet pochvalit svojimi projektami, preto rozbehame webove rozhranie.

Tento navod je urceny pre Linuxy, BSD a asi aj OS X. Zjednodusene, pre krasny UNIXovy svet. Na server sa budeme pripajat cez SSH a pochopitelne treba mat nainstalovany GIT.

Git user

Zacnime vytvorenim git usera na serveri. Na tohoto usera sa budeme neskor pripajat cez SSH, v jeho domovskom adresari budu ulozene repozitare a ine pomocne veci, o ktorych budem pisat.

useradd -m -U git

Z ne-serverovej masiny (odkial sa pripajame na server cez SSH) treba skopirovat ssh pubkey do domoskeho adresara git usera. Odkazem na navod, kedze toto je rutinna zalezitost. Osobne sa na server pripajam bez hesla, na autentifikaciu pouzivam svoj verejny kluc (je to pohodlnejsie, bezpecnejsie a vhodne pre skriptovanie, kedze sa skript nemusi pytat na heslo). Cielom je, aby som svoj verejny kluc (napr ~/.ssh/id_rsa.pub) dostal na server (/home/git/admin.pub).

Gitolite

Gitolite sluzi na spravu pouzivatelov, ktori sa mozu pracovat s repozitarmi, a na spravu repozitarov (vytvaranie napriklad). Vdaka nemu kvoli nastavovaniu repozitarov sa nepotrebujem rucne pripajat cez SSH na git usera, vytvarat repozitare cez “git init –bare” a podobne veci. O vsetko sa postara gitolite a este mi usetri pracu.

Dalsie veci bude vykonavat git user:

su - git
git clone git://github.com/sitaramc/gitolite.git
mkdir -p $HOME/bin #pripravim si adresar, kde sa ulozi binarka gitolite
gitolite/install -to $HOME/bin #skopirujem subory z naklonovaneho repozitara do adresara bin
bin/gitolite setup -pk admin.pub #nastavim gitolite a poviem, ze sa gitolite-adminom bude clovek, ktoreho verejny kluc je ulozeny v subore admin.pub

Teraz by v /home/git mali existovat nove adresare: bin, gitolite, repositories. V adresari repositories sa vytvoril dolezity repozitar gitolite-admin.git (a asi aj testing.git, ale ten je nepodstatny).  Subor admin.pub uz nie je potrebny, skopiroval sa do .gitolite/keydir/admin.pub a nachadza sa tiez v .ssh/authorized_keys.

V tomto stadiu je gitolite nainstalovany a je pripraveny na pouzivanie. Na ne-serverovej masine napisme toto a stlacme enter :)

git clone git@moj_server:gitolite-admin

V naklonovanom repozitari su dva adresare, jeden na nastavenie pristupov k repozitarom a druhy na ukladanie ssh klucov pouzivatelov, ktori chcu mat pristup k repozitarom. Spravme si teda repozitar playwithme (subor conf/gitolite.conf):

repo playwithme
  RW+ = admin

A potom:

git commit -a
git push origin master

Na serveri sa vdaka hookom vytvori novy repozitar. Ak by sme chceli pridat dalsieho pouzivatela (povedzme nebuchadnezzar), tak ho pripiseme do gitolite.conf (riadok sa zmeni na “RW+ = admin nebuchadnezzar”, ak mu chceme zabezpecit plny pristup) a jeho pubkey ulozime do adresara keydir pod menom nebuchadnezzar.pub. Commit & push. Gitolite nastavi repozitar a aktualizuje ~/.ssh/authorized_keys. Teraz by mal pouzivatel nebuchadnezzar vediet klonovat, pullovat, pushovat a co ja viem co este repozitar playwithme (ale nema pristup ku gitolite-admin, co je dobre a je to tak spravne, lebo gitolite.conf je tak nastaveny).

Read-only pristup pre vsetkych

Na tuto ulohu sluzi git-daemon. Gitolite take nieco nevie zabezpecit, lebo na git pouzivatela sa pripajame cez SHH a v ~/.ssh/authorized_keys neexistuje nieco ako “public access for all”. Git-daemon je sucastou balika git a jeho nastavenie je velmi jednoduche. V zavislosti od distribucie najprv treba upravit jeho konfiguracny subor (v Arch Linuxe je to /etc/conf.d/git-daemon.conf). Daemon pri spustani pouziva parameter “–base-path=<path>”. V nasom pripade zmenime <path> na “/home/git/repositories/”. Spustime daemona. To vsak nie je vsetko :) Aby git-daemon mohol citat repozitar, musi byt v repozitari existovat subor “git-daemon-export-ok”. Do repozitarov nechceme rucne zasahovat, preto na ne-serverovej masine upravime “conf/gitolite.conf” a pridame do kazdeho repozitara, ktory ma byt public, novy riadok “R = daemon”. Commit & push. Gitolite vytvoril v pozadovanych repozitaroch prazdne subory “git-daemon-export-ok” a tym padom si ich git-daemon dovoli citat.

Skusme naklonovat nejaky repozitar:

git clone git://moj-server/moj-public-repo.git

Co bude v dalsej casti?

Nastavime webove rozhranie (nie, nepouzijeme odstrasujuci git-web).

Mozne chyby

Neviem naklonovat repozitar gitolite-admin.git

Nuz, treba sa najprv skusit pripojit cez ssh na git usera. Ak toto funguje, tak je nieco zle s gitolite. Ak toto nefunguje, je zle nastaveny SSH server.

Klonovanie repozitara zamrzlo

Mozno je len zle nastaveny firewall. Git pouziva port 9418.

Instalacia Archlinuxu s GPT, LVM a GRUB2 konfiguraciou

Instalacia Archlinuxu sa v poslednych mesiacoch trosku stazila, kedze instalator bol odstraneny a vsetko sa musi robit rucne. Nastastie je dost navodov (link na oficialny navod), ako co urobit. Jednym z nich je mierne zastarale video popisujuce vytvorenie particii v tabulke GPT, vytvorenie LVM oddielov, instalaciu a konfiguraciu GRUB2. K dnesnemu dnu sa da pouzit len cast o rozdeleni disku, navod na instalaciu a nastavenie GRUBu je aktualny na wiki.

Casti, ktore su vo videu zastarale, som prepisal do tychto prikazov, ktore su spustitelne na live CD verzie 2012.11.01:

  1. pacman -S grub-bios #narozdiel od videa sa balik vola inak
  2. modprobe dm-mod
  3. grub-install --target=i386-pc --recheck --debug /dev/sda #vo videu boli ine parametre
  4. mkdir -p /boot/grub/locale #vo videu chyba
  5. cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo #vo videu chyba
  6. grub-mkconfig -o /boot/grub/grub.cfg

Pulseaudio ekvalizer len pre MPD daemona, a pre nic ine

Hudbu hrajucu cez MPD daemon chcem prehnat cez ekvalizer, ale ostatne zvuky (napr. z filmu) chcem pocut neupravene tymto ekvalizerom. Riesenim je nastavit MPD tak, aby pouzival ekvalizer (zmenim pulseaudio sink) a ostatne aplikacie necham pouzivat defaultny sink.

Najprv nastavim defaultny sink. Na to potrebujem vediet nazvy sinkov. Tie ziskam z vypisu prikazu “pacmd list-sinks”. U mna vyzera takto:

>>> 2 sink(s) available.
* index: 0
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
driver: <module-alsa-card.c>
flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY
state: RUNNING

...

index: 1
name: <ladspa_output.mbeq_1197.mbeq>
driver: <module-ladspa-sink.c>
flags: HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY
state: RUNNING

Mam teda dva sinky: alsa_output.pci-0000_00_1b.0.analog-stereo (toto bude defaultny sink) a ladspa_output.mbeq_1197.mbeq (to je ekvalizer). Ich nazvy su napisane v polozke ‘name’. Do ~/.pulse/default.pa pridam riadok “set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo” a restartujem pulseaudio server. Pripadne mozem zmenit defaultny sink aj za behu, bez restartu, prikazom “pacmd set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo”. Teraz mam nastaveny defaultny sink.

Este treba spravne nastavit MPD vystup. Toto som uz robil v tomto clanku (prvy odstavec, predposledny riadok konfiguraku (sink “ladspa_output.mbeq_1197.mbeq”)). Jednoducho povedane, treba k nastaveniu Pulseaudio vystupu pridat riadok hovoriaci o tom, aky sink sa ma pouzit. Ja som si teda vybral ekvalizer.

Parovanie viacerych Logitech s jednym USB prijimacom pod Linuxom

Logitech sa chvali svojim Unifying receiverom. Je to USB prijimac, ktory umoznuje prijimat signal od viacerych periferii. Netreba mat teda pre mys jeden receiver a pre klavesnicu druhy — staci jeden. Pre sparovanie zariadeni s prijimacom vsak treba nastavit zariadenie (mys, klavesnica, cokolvek ine). Pre Windows a Mac je software priamo na webe (http://www.logitech.com/unifying), na slobodne operacne systemy sa (ako zvycajne) zabudlo. Nastastie riesenie je jednoduche a priamociare.

Staci skompilovat tento program, ktory som pouzil nasledovne

  1. najprv som vypol logitech zariadenia
  2. spustil som program
  3. zapol som mys
  4. znova zapol program
  5. zapol klavesnicu
  6. spokojne fungujem s jednym USB prijimacom.

Zdrojak:

/*
 * Copyright 2011 Benjamin Tissoires <benjamin.tissoi...@gmail.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <linux/input.h>
#include <linux/hidraw.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>

#define USB_VENDOR_ID_LOGITECH                  (__u32)0x046d
#define USB_DEVICE_ID_UNIFYING_RECEIVER         (__s16)0xc52b
#define USB_DEVICE_ID_UNIFYING_RECEIVER_2       (__s16)0xc532

int main(int argc, char **argv)
{
        int fd;
        int res;
        struct hidraw_devinfo info;
        char magic_sequence[] = {0x10, 0xFF, 0x80, 0xB2, 0x01, 0x00, 0x00};

        if (argc == 1) {
                errno = EINVAL;
                perror("No hidraw device given");
                return 1;
        }

        /* Open the Device with non-blocking reads. */
        fd = open(argv[1], O_RDWR|O_NONBLOCK);

        if (fd < 0) {
                perror("Unable to open device");
                return 1;
        }

        /* Get Raw Info */
        res = ioctl(fd, HIDIOCGRAWINFO, &info);
        if (res < 0) {
                perror("error while getting info from device");
        } else {
                if (info.bustype != BUS_USB ||
                    info.vendor != USB_VENDOR_ID_LOGITECH ||
                    (info.product != USB_DEVICE_ID_UNIFYING_RECEIVER &&
                     info.product != USB_DEVICE_ID_UNIFYING_RECEIVER_2)) {
                        errno = EPERM;
                        perror("The given device is not a Logitech "
                                "Unifying Receiver");
                        return 1;
                }
        }

        /* Send the magic sequence to the Device */
        res = write(fd, magic_sequence, sizeof(magic_sequence));
        if (res < 0) {
                printf("Error: %d\n", errno);
                perror("write");
        } else if (res == sizeof(magic_sequence)) {
                printf("The receiver is ready to pair a new device.\n"
                "Switch your device on to pair it.\n");
        } else {
                errno = ENOMEM;
                printf("write: %d were written instead of %ld.\n", res,
                        sizeof(magic_sequence));
                perror("write");
        }
        close(fd);
        return 0;
}

Program sa skompiluje a spusti nasledovne:

gcc -o pair <subor_so_zdrojakom>

sudo ./pair /dev/hidraw0

Cesta ku hidraw sa moze lisit (napr. /dev/hidraw1). Treba skusat.

Posielanie notifikacii cez dbus v Pythone

Posielanie upozorneni/notifikacii cez notify-send alebo kdialog nie je nic tazke, avsak ani jeden program neumoznuje nahradit existujucu notifikaciu tou novou. Cez kdialog si posielam notifikaciu o atualnej pesnicke, ako som pisal v clanku o Ncmpc++ (hudobny prehravac). Avsak, ked preskakujem pesnicky, teda na 2 sekundy hra pesnicka ‘A’, potom sekundu pesnicka ‘B’ a az na pesnicku ‘F’ mam naladu, vytvori sa fronta 6 notifikacii, z ktorych kazda trva napr. 3 sekundy. Jednak to otravuje (dokopy 18 sekund trvajuce notifikacie v rohu obrazovky) a jednak notifikacie nezodpovedaju skutocnosti (vsetky notifikacie okrem najnovsej su zastarale). Rozne hudobne prehravace, napr. Amarok, notifikacie neradia do fronty, ale vzdy sa nahradi posledna notifikacia tou najnovsou. Takze ja to tiez takto spravim.

Problem som chcel vyriesit volanim qdbus takymto sposobom:

qdbus org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.Notify '' 0 '' 'NADPIS' 'TELO' '' 0 0

Ta prva 0 je cislo notifikacie, ktoru chcem nahradit. Info o ostatnych argumentoch je k dispozicii cez program ‘qdbus’ alebo graficky ‘qdbusviewer’. Horny prikaz skonci chybou

Sorry, can't pass arg of type 'QVariantMap'

Podla mudrych ludi na internete je to riesitelne jedine tak, ze si napisem vlastny skript v C/Pythone/nieco_ine, ktory by volal metodu org.freedesktop.Notifications.Notify().

Vystraha ;) Nie som pythonista a kod nizsie je v poradi druhy subor v pythone, ktory som kedy napisal.

Kod pre Python2.7 je stiahnutelny tu. Okrem volania metody Notify() si musim pamatat aj ID poslednej notifikacie, ktore na zaciatku citam a na konci zapisujem do suboru cat /tmp/dbus-notify-id-file. Kod ako taky funguje, a pouzivam ho spolu s ncmpcpp (dolezity riadok v ~/.ncmpcpp/config:

execute_on_song_change = "/home/cinan/system/bin/dbus-notify.py \"`ncmpcpp --now-playing %t{\ \(%l\)}`\" \"`ncmpcpp --now-playing {%a}{\ -\ %b}`\""

Celkove nastavenie Ncmpc++, MPD a KDE (notifikacie, globalne skratky…)

Okrem KDE, vsetky ostatne kompenenty nasledovnej konfiguracie, su nenarocne na systemove prostriedky aj pri rozsiahnej hudobnej kolekcii. Obrovsky rozdiel oproti prehravacom ako Clementine, Amarok, alebo Rhythmbox.

Ako integrovat hudobny daemon MPD a prehravac Ncmpc++ do KDE? Predpoklad je, ze MPD funguje (moze pomoct predchadzajuci clanok, ako nastavit Pulseaudio spolu s MPD). Takze hudba vdaka daemonovi moze hrat, len chyba prehravac :)

Ncmpc++

Ncmpc++ je silno konfigurovatelny, nenarocny ale mocny prehravac. Ponuka celkom prijemne nastavenia ihned po instalacii. Tu je moj konfigurak so screenshotom.

Ako nastavit notifikacie v KDE pri zmene pesnicky? Podobne ako to ma Amarok alebo Clementine alebo Rhythmbox alebo… Nainstaloval som si Colibri a nastavil podla pokynov na https://gitorious.org/colibri/pages/SetupHowto. Ak teda bezi Colibri, staci poslat z Ncmpc++ notifikaciu. V konfiguraku je to uz spravene, je to option ‘execute_on_song_change’. Namiesto kdialog sa da pouzit aj notify-send. V mojom pripade notifikacia nastavi titulok na ‘(dlzka) nazov_piesne’, telo notifikacie tvori ‘skupina – album’.

Kedze krkolomny prikaz ncmpcpp sa tazko pise, vytvoril som si funkciu n(), ktoru volam ako alias. Uryvok z .zshrc (alebo .bashrc):

function n {
  SESSION_ID=`qdbus org.kde.konsole /Konsole org.kde.konsole.Window.currentSession`
  qdbus org.kde.konsole /Sessions/$SESSION_ID org.kde.konsole.Session.setTitle 1 "ncmpc++"
  ncmpcpp
}

O co vo funkcii ide? Okrem toho, ze sa spusti ncmcpp, este pred tym sa nastavi v aktivnom tabe v Konsole titulok ‘ncmpc++’.

Globalne skratky v KDE pre ovladanie Ncmpc++

V Systemsettings->Shortcuts and Gestures->Custom Gestures staci pridat vlastne skratky, u mna to vyzera takto:

Ako je vidiet, na ovladanie sluzi prikaz ‘ncmpcpp <akcia>’ . Ten isty vysledok sa da dosiahnut aj programom mpc, ktory sluzi vlastne len na ovladanie MPD cez terminal.

Ako nastavit MPD, Pulseaudio a Pulseaudio-ekvalizer

1. MPD (Music Player Daemon)

Konfiguracia MPD jednoducha. Sprievodca konfiguracnym suborom /etc/mpd.conf:

# Kde je ulozena hudobna kolekcia
music_directory "/media/data/hudba"
# Kde sa budu ukladat playlisty
playlist_directory "/var/lib/mpd/playlists"
# Subor s informaciami o kolekcii
db_file "/var/lib/mpd/mpd.db"
# Zapisovanie logov
log_file "/var/lib/mpd/mpd.log"

pid_file "/var/lib/mpd/mpd.pid"
state_file "/var/lib/mpd/mpdstate"

# Fiktivny pouzivatel, ktory bude pustat hudbu/pod ktorym bude bezat mpd. 
# Je dobre nechat tuto hodnotu nezmenenu.
# Pre ilustraciu, vypis `ps aux | grep mpd':
# mpd 27842 2.8 0.3 697716 14600 ? Ssl 21:16 0:28 /usr/bin/mpd --no-daemon
user "mpd"
# Skupinu nie je nutne nastavovat
#group "nogroup"
# Dobrym zvykom je dat jasne najavo svoju prislusnost a hrdost k adrese a portu.
bind_to_address "127.0.0.1"
port "6600"

# Nutne pre spojenie s pulseaudiom.
audio_output {
  type "pulse"
  name "My Pulse Output"
  # Tato adresa nema suvis s bind_to_address. Musi byt rovnaka, ako adresa nastavena v pulseaudio.
  server "127.0.0.1"
  # Nazov vystupu, na ktorom je zapnuty pulseaudio-ekvalizer.
  sink "ladspa_output.mbeq_1197.mbeq"
}

Takato konfiguracia nam zaruci to, ze mpd bude pouzivat ekvalizer (teda ten ladspa_output.mbeq_1197.mbeq sink), zatial co ostatne aplikacie nemusia.

2. Pulseaudio

Do suboru ~/.pulse/default.pa staci pridat tento riadok:

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1

Adresa 127.0.0.1 sa musi zhodovat s adresou v mpd.conf v casti audio_output.

3. Pulseaudio ekvalizer

Ako ekvalizer pouzivam stary http://aur.archlinux.org/packages.php?ID=48316. Funguje out-of-the-box a ma aj GUI. Dokonca automaticky urobi potrebne zmeny v ~/.pulse/default.pa, priblizne taketo:

### BEGIN: Equalized audio configuration
### Generated from: pulseaudio-equalizer
load-module module-ladspa-sink sink_name=ladspa_output.mbeq_1197.mbeq master=alsa_output.pci-0000_00_1b.0.analog-stereo plugin=mbeq_1197 label=mbeq control=5.3,2.6,2.6,-8.5,-10.5,-11.2,-16.0,-14.7,-6.6,-5.7,-3.0,3.0,6.7,7.3,7.3
set-default-sink ladspa_output.mbeq_1197.mbeq
set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo 65536
set-sink-mute alsa_output.pci-0000_00_1b.0.analog-stereo 0
### END: Equalized audio configuration

Dolezita je hodnota sink_name, ktora sa musi zhodovat s nastavenim mpd.conf (sekcia audio_output).

Teraz je vsetko nastavene a staci spustit/restartovat Pulseudio a MPD.

4. Chcem ekvalizer len pre MPD, ostatne aplikacie ho nemaju pouzivat.

Toto riesim v tomto clanku.

Prechod od Netbeans k PhpStorm

Posledny mesiac som pouzival namiesto Netbeans pre vyvoj webovych aplikacii postavenych na PHP/JS zaujimave IDE PhpStorm. PhpStorm kombinuje WebStorm s podporou PHP a stoji za nim JetBrains (ma centralu aj v CR, JetBrains bolo zalozene v CR v roku 2000). Fakty a moje zistenia:

Netbeans 7.1:

  • + je open source a free
  • + aktivne sa vyvija
  • + nepada
  • ma k dispozicii vela pluginov
  • relativne jednoduche (napr. oproti Eclipse)
  • podpora svn/git je slusna, posobi jednoducho
  • + zobrazuje dokumentaciu pre funkcie
  • – pomale
  • – nepodarene doplnanie javascriptoveho kodu
  • – nepekne temy pre syntax highlighting (cumiet na biele pozadie — srsly? Tmave temy su nepodarene…)

PhpStorm 4:

  • + citelne vacsia rychlost (hlavne je sviznejsie pri pisani kodu, pri doplnovani, celkovo rozhranie je sviznejsie)
  • aktivne sa vyvija (v Q3 2012 ma vyjst PhpStorm 5.0)
  • nepada
  • ma k dispozicii vela pluginov
  • velmi dobre doplnanie PHP/JS/HTML kodu, lepsie nez v Netbeanse
  • ovela vacsia moznost konfiguracie, pricom okno s nastaveniami dava vacsi zmysel nez nastavenia v Eclipse
  • podpora svn/git je slusna
  • + zobrazuje dokumentaciu pre funkcie
  • lepsie rozumie php kodu, zobrazi aj take chyby, ktore si netbeans nevsimlo
  • zobrazuje cestu k suborom v taboch, ak nazvy suborov nie su unikatne
  • krajsie temy pre syntax highlighting a krajsie prostredie :)
  • + este raz rychlost
  • – nie je open source
  • – nie je zadarmo, trial na 30 dni, ale oproti Zend Studio alebo Komodo je o dost lacnejsie (Zend Studio aj Komodo stoja okolo 300USD; PhpStorm Personal Licence – 94Eur, pre opensource projekty moznost ziskat licenciu zadarmo)
  •  obcas chce byt mudrejsie nez programator :)
  • OpenJDK nie je oficialne podporovana (iba Oracle JDK, ale nespozoroval som ziadne problemy s OpenJDK)

Som smutny, ze PhpStorm nie je opensource (aspon platforma IntelliJ Platform je kompletne otvorena…).  Kedze PhpStorm pouzivam pre komercne ucely, planujem si kupit licenciu (treba sa nejak odmenit vyvojarom za to, ze mozem pomocou ich softwaru zarabat peniaze). Bohuzial, plati len pre jednu verziu programu -hoci na neobmedzenu dobu (a verziu uvolnenu do 1 roka od kupy licencie). To je dost zle. Poplatok za upgrade je lacnejsi. Hasin na http://hasin.me/2012/01/03/getting-comfy-with-phpstorm/ pisal, ze pri troche stastia sa da ziskat zlava :)

Kazdopadne, PhpStorm aj Netbeans su kvalitny software a o rok budem porovnavat zase (lebo Netbeans je free).