cd na sterydach – narzędzie do szybkiej zmiany katalogów w konsoli
Przeglądając dziś RSSy natrafiłem na genialne w swej prostocie narzędzie – przydatne szczególnie dla osób spędzających dużo czasu w konsoli. Narzędzie to nosi prostą nazwę “go-tool” i dostępne jest pod adresem http://code.google.com/p/go-tool/, a jego jedynym zadaniem jest skrócić czas dostępu do najczęściej odwiedzanych katalogów poprzez tworzenie skrótów.
Instalacja narzędzia jest dość prosta – o ile posiadamy zainstalowanego Pythona:
1. Pobranie archiwum.
2. Rozpakowanie.
3. Przejście do rozpakowanego katalogu z poziomu konsoli.
4. Uruchomienie polecenia: python setup.py install.
5. Uruchomienie pliku go.py w nowo utworzonym katalogu: build/lib/go.py.
6. Wybranie lokalizacji umieszczenia pliku go.bat poprzez wybranie z listy ścieżek.
7. Konfiguracja skrótów już w trakcie korzystania z narzędzia.
Instrukcja obsługi dostępna jest po wywołaniu (http://code.google.com/p/go-tool/wiki/GettingStarted):
$ go --help Quick directory changing. Usage: go <shortcut>[/sub/dir/path] # change directories # same as "go -c ..." go -c|-o|-a|-d|-s ... # cd, open, add, delete, set go --list [<pattern>] # list matching shortcuts Options: -h, --help print this help and exit -V, --version print verion info and exit -c, --cd <path> cd to shortcut path in shell -s, --set <shortcut> <dir> set a shortcut to <dir> -a, --add-current <shortcut> add shortcut to current directory -d, --delete <shortcut> delete the named shortcut -o, --open <path> open the given shortcut path in explorer (Windows only) -l, --list [<pattern>] list current shortcuts
Ciekawą opcją – dostępną tylko w Windows – jest przełącznik -o, który w momencie użycia:
go -o <SKRÓT>
powoduje otwarcie okna w Eksplorerze Windows z katalogiem wskazywanym na <SKRÓT>.
Eksport wszystkich baz z MySQL do plików SQL
Eksport wszystkich baz danych z MySQL.
<?php
header('Content-type: text/html; charset=utf-8');
class Config {
public static $host = '127.0.0.1';
public static $username = 'root';
public static $password = '';
public static $port = 3306;
}
if (!file_exists('dbdumps') || !is_dir('dbdumps'))
mkdir('dbdumps', 0700);
$dsn = 'mysql:host=' . Config::$host . ';port=' . Config::$port;
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
$dbh = new PDO($dsn, Config::$username, Config::$password, $options);
$result = $dbh->query('SHOW DATABASES;');
if ($result !== false)
foreach ($result->fetchAll() as $row) {
$cmd = 'mysqldump -u ' . Config::$username . ' -p' . Config::$password
. ' ' . $row['Database'] . ' > dbdumps/' . $row['Database'] . '.sql';
system($cmd);
$fileSize = filesize('dbdumps/' . $row['Database'] . '.sql');
echo 'File ' . $row['Database'] . '.sql saved [' . $fileSize . ' bytes] .<br />';
}
Drupal 6 – Własny blok zmiany języka
Domyślny blok “Przełączanie języków” nie posiada zbyt ciekawych możliwości formatowania. Często tego typu elementy opisuje się w HTML na liście, co później znacznie ułatwia dla tej struktury określanie kaskadowych arkuszy stylów. Poniżej sposób na zastosowanie swojego bloku bazujący na module locale domyślnie dostarczanym z Drupalem:
<?php
/**
* Implements hook_block();
*/
function hook_block($op = 'list', $delta = 0, $edit = array()) {
if ($op == 'list') {
$blocks['custom_language_switcher'] = array(
'info' => t('Custom Language Switcher'),
);
return $blocks;
} else if ($op == 'view') {
switch ($delta) {
case 'custom_language_switcher':
if (variable_get('language_count', 1) > 1
&& variable_get('language_negotiation', LANGUAGE_NEGOTIATION_NONE) != LANGUAGE_NEGOTIATION_NONE) {
$path = drupal_is_front_page() ? '<front>' : $_GET['q'];
$languages = language_list('enabled');
$links = array();
foreach ($languages[1] as $language)
$links[$language->language] = array(
'href' => $path,
'title' => $language->native,
'language' => $language,
'attributes' => array('class' => 'language-link'),
);
drupal_alter('translation_link', $links, $path);
$block = array(
'subject' => t('Custom Language Switcher'),
'content' => _custom_get_language_switcher($links)
);
}
break;
}
return $block;
}
}
function _custom_get_language_switcher($links = array()) {
global $language;
$html = '';
if (count($links)) {
$html = '<ul class="language-switcher">';
foreach ($links as $key => $value) {
$active = '';
if ($key == $language->language)
$active = ' class="active"';
$html .= "\t\t" . '<li' . $active . '><a href="' . url($value['href'], array('language' => $value['language'])) . '"' . $active . '>' . $value['title'] . '</a></li>' . "\n";
}
$html .= "\t" . '</ul>' . "\n";
}
return $html;
}
Drupal 7 – instalacja w języku polskim
System Drupal sprowadza proces instalacji do możliwie najprostszych kroków i instalacja w języku angielskim jest bardzo intuicyjna, jednak czasem może zaistnieć potrzeba wprowadzenia instalacji w języku ojczystym.
Podczas uruchomienia procesu instalacyjnego Drupala drugi krok prosi nas o wybranie języka instalacji.
Jeśli potrzebujemy innego języka niż angielski dostajemy link prowadzący do opisu jak zrealizować instalację we własnym języku (Learn how to install Drupal in other languages – Naucz się jak zainstalować Drupala w innych językach). Jeśli ktoś nie poradziłby sobie z instalacją Drupala w języku angielskim, to zapewne także niewiele zrozumie z tego opisu.
Zgodnie z tym opisem przechodzimy na stronę z tłumaczeniem projektu Drupal (http://localize.drupal.org/translate/downloads) i wyszukujemy interesujący nas język. W naszym przypadku pobieramy język Polski
a ponieważ instalujemy Drupala w wersji 7 pobieramy najaktualniejsze tłumaczenie – dla wersji 7.15.
Zgodnie z krokiem drugim poradnika pobrany plik musimy skopiować do katalogu w którym przechowujemy Drupala – dokładnie do katalogu /profiles/standard/translations/.
Ostatni krok to kliknięcie linka “Reload the language selection page after adding translations” lub najzwyklejsze odświeżenie strony co przeniesie nas do kroku drugiego naszej instalacji:
Wybieramy język Polski i cieszymy się instalacją w rodzimym języku.
Przenoszenie linii lub zaznaczonego bloku w górę i w dół w Komodo Edit
Komodo Edit jako jeden z ciekawszych edytorów pozwala pisać własne makra w językach JavaScript i Python. Mimo ogromnej ilości przydatnych funkcji nie posiada wbudowanego przenoszenia bloków oraz zaznaczenia w górę i w dół. Poniżej makra, które dodają takie działanie do Komodo Edit. Aby wszystko działało jak należy w Views | Tabs & Sidebars | Toolbox klikamy prawym przyciskiem myszy i wybieramy Add > New macro. Podajemy opisowe nazwy, np: Move Line or Move Selection Up, Move Line or Move Selection Down, jako język wybieramy JavaScript i w pole tekstowe wprowadzamy poniższe bloki kodu – otrzymujemy 2 makra. Aby korzystanie było wygodne podpinamy w drugiej zakładce (Key Bindings) skróty klawiaturowe, u mnie Ctrl+Shift+Up oraz Ctrl+Shift+Down.
Przenoszenie linii lub zaznaczonego bloku w dół:
komodo.assertMacroVersion(3);
if (komodo.view) { komodo.view.setFocus() };
var ke = komodo.editor;
if( ke.lineFromPosition( ke.currentPos ) == (ke.lineCount - 1) )
return;
if (ke.selText){
// Extend selection to beg of line at front and end of line at back
var selStartLine = ke.lineFromPosition(ke.selectionStart);
var selEndLine = ke.lineFromPosition(ke.selectionEnd);
var numLinesSelected = selEndLine - selStartLine;
var selStart = ke.positionFromLine(selStartLine);
var selEnd = ke.getLineEndPosition(selEndLine);
ke.setSel(selStart, selEnd);
// Copy the selected text and remove it
var text = komodo.interpolate('%s');
komodo.doCommand('cmd_delete'); // This leaves a blank line in place of selection
// Move our selection to a new place
// First move our blank line up
komodo.doCommand('cmd_lineNext')
ke.lineTranspose();
// Insert our text
ke.insertText(ke.currentPos, text);
// Restore selection
var newSelStartLine = ke.lineFromPosition( ke.currentPos );
var newSelEndLine = newSelStartLine + numLinesSelected;
var newSelStart = ke.currentPos;
var newSelEnd = ke.getLineEndPosition(newSelEndLine);
ke.setSel(newSelStart, newSelEnd);
} else {
komodo.doCommand( 'cmd_lineNext' );
ke.lineTranspose();
}
Przenoszenie linii lub zaznaczonego bloku w górę
komodo.assertMacroVersion(3);
if (komodo.view) { komodo.view.setFocus() };
var ke = komodo.editor;
if( ke.lineFromPosition( ke.currentPos ) == 0 )
return;
if (ke.selText){
// Extend selection to beg of line at front and end of line at back
var selStartLine = ke.lineFromPosition(ke.selectionStart);
var selEndLine = ke.lineFromPosition(ke.selectionEnd);
var numLinesSelected = selEndLine - selStartLine;
var selStart = ke.positionFromLine(selStartLine);
var selEnd = ke.getLineEndPosition(selEndLine);
ke.setSel(selStart, selEnd);
// Copy the selected text and remove it
var text = komodo.interpolate('%s');
komodo.doCommand('cmd_delete'); // This leaves a blank line in place of selection
// Move our selection to a new place
// First move our blank line up
ke.lineTranspose();
komodo.doCommand('cmd_linePrevious')
// Insert our text
ke.insertText(ke.currentPos, text);
// Restore selection
var newSelStartLine = ke.lineFromPosition( ke.currentPos );
var newSelEndLine = newSelStartLine + numLinesSelected;
var newSelStart = ke.currentPos;
var newSelEnd = ke.getLineEndPosition(newSelEndLine);
ke.setSel(newSelStart, newSelEnd);
} else {
ke.lineTranspose();
komodo.doCommand( 'cmd_linePrevious' );
}
Jeśli dobrze pamiętam to rozwiązanie pochodzi z forum ActiveState dotyczącego Komodo.
PhpMyAdmin – konfiguracja autologowania
Po ściągnięciu najnowszej wersji PhpMyAdmin praktycznie każda próba wejścia do panelu będzie wymagała od nas podania loginu i hasła. Na komputerach developerskich często jest to niewielkie utrudnienie. Aby logowanie następowało automatycznie należy:
1. Otwieramy plik PhpMyAdmin/libraries/config.default.php, gdzie PhpMyAdmin to lokalizacja panelu na serwerze.
2. Zmieniamy wartość:
$cfg['Servers'][$i]['host'] = 'localhost'; // lub odpowiednia nazwa hosta, o ile wcześniej nie była ustawiona
3. Zmieniamy wartość:
$cfg['Servers'][$i]['auth_type'] = 'config'; // wcześniej cookie
4. Zmieniamy wartość:
$cfg['Servers'][$i]['user'] = 'mysql_username'; // nazwa użytkownika, najczęściej root
5. Zmieniamy wartość:
$cfg['Servers'][$i]['password'] = 'mysql_password'; // hasło użytkownika, najczęściej użytkownika root
6. Wchodzimy na stronę PhpMyAdmin na naszym serwerze i powinniśmy automatycznie być zalogowani.
Creative Zen Style M100 8GB MP3 – opinia
W związku z zakupem tego odtwarzacza i kilku miesiącach jego raczej normalnego użytkowania chciałbym się podzielić moją subiektywną opinią.
Dokładny opis techniczny samego odtwarzacza znajduje się na stronie Creative – pod adresem http://pl.store.creative.com/urzadzenia-multimedialne-odtwarzacze-mp3/zen-style-m100/948-20612.aspx.
A teraz kilka uwag z punktu widzenia użytkownika.
1. Czas uruchamiania/wyłączania.
Wyłączanie jest dość szybkie, jednak włączanie potrafi uśpić. Odtwarzacz wypełniony muzyką w ok 75% sprawia wrażenie, że musi przetworzyć wszystko co w sobie ma – nie wiadomo po co – i potrafi się uruchamiać ok 10 sekund. Po odłączeniu od komputera może mielić nawet z 30-40 sekund.
2. Wygoda użytkowania – przyciski
Przycisków z prawdziwego zdarzenia w tym odtwarzaczu BRAK. Zostały wbudowane w ekran dotykowy. I to jest podstawowy problem utrudniający korzystanie z tego odtwarzacza. Po dłuższym czasie przełączania się między utworami, szlajania się po menu odtwarzacz nagle traci orientację i nie potrafi rozpoznać czy został naciśnięty przycisk następnego utworu czy wyświetlający menu dla danego utworu. Potrafi to być wyjątkowo irytujące.
3. Odtwarzanie muzyki.
Jeśli pliki nie zostały odpowiednio otagowane to czeka nas prawdziwy koszmar. Przedzieranie się przez niezbyt intuicyjne menu (połączone z czasem dziwnie zachowującymi się pseudoprzyciskami) w poszukiwaniu konkretnego utworu sprzyja podcięciu sobie żył w akcie desperacji. Coś takiego jak odtwarzanie na podstawie katalogów w odtwarzaczu nie istnieje.
4. Wykonanie.
Niewielka, solidna kostka, dobrze leżąca w dłoni. Tutaj nie ma się do czego przyczepić. Dobrym pomysłem jest podświetlanie ekranu gdy się go wyciąga z kieszeni. Czas pracy baterii także jest zadowalający.
Jak widać, więcej minusów niż plusów, szczególnie za taką cenę. Przy kolejnym zakupie na pewno będę trzymał się daleko od ekraników dotykowych. Osoby planujące zakup tego urządzenia proszone są o ponowne tego przemyślenie.


