Jeszcze jeden blog o PHP

Radosne twórczości leniwego programisty PHP

cd na sterydach – narzędzie do szybkiej zmiany katalogów w konsoli

Skomentuj »

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>.

Written by filipgorczynski

2013.02.28 at 23:43:11

Eksport wszystkich baz z MySQL do plików SQL

z 5 uwagami

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 />';
   }

Written by filipgorczynski

2012.10.12 at 19:09:15

Drupal 6 – Własny blok zmiany języka

Skomentuj »

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;
}

Written by filipgorczynski

2012.10.12 at 18:56:26

Drupal 7 – instalacja w języku polskim

Skomentuj »

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.

Written by filipgorczynski

2012.09.08 at 21:22:46

Przenoszenie linii lub zaznaczonego bloku w górę i w dół w Komodo Edit

Skomentuj »

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.

Written by filipgorczynski

2012.09.08 at 21:01:22

PhpMyAdmin – konfiguracja autologowania

Skomentuj »

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

Skomentuj »

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.

Written by filipgorczynski

2012.06.29 at 20:08:04

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.

Join 30 other followers

%d bloggers like this: