czwartek, 3 listopada 2011

Jak zrobić i wykonać patcha w subversion

Tworzenie patcha w SVN:
svn diff > bugfix.patch

Zastosowanie stworzonego patcha:
patch -p0 -i bugfix.patch

sobota, 17 września 2011

Zapominanie o dodaniu plików do repozytorium

Jest niewiele rzeczy, które tak frustrują jak brak jednego jedynego pliku, którego akurat potrzebujemy do dalszej pracy nad projektem. Zdarza się to często gdy inna osoba z teamu przed commitem nie doda pliku do repozytorium. W takiej sytuacji możemy się spodziewać, że inny developer nie będzie mógł kontynuwoać swojej pracy.

Przy projektach w symfony czasem zdarza się taka sytuacja, że ktoś dodał nową tabelę do bazy, wygenerował nowe modele i zapomniał o ich dodaniu. Pracując nad tym samym modułem niewiele mogę zrobić... Jeśli to tylko pliki Base* mogę wygenerować brakujące klasy na podstawie schema.yml ale jeśli któraś z klas implementuje metodę stworzoną przez kolegę z zespołu musiałbym ją napisać od nowa. W takiej sytuacji zostaje tylko kontakt z danym developerem, o ile oczywiście jest możliwy...

Jak nie zapominać o dodawaniu plików do repozytorium?
Jedynym skutecznym sposobem jest dyscyplina w zespole polegająca na tym, że każdy developer przez commitem sprawdza czy nie powinien dołączyć nowych plików.

Korzystając nawet z samej konsoli i klienta SVN możemy sprawdzić to poprzez komendę:

svn st --ignore-externals | grep '^?'


Samo "svn st" pokazałoby nam wszystkie zmiany. Czasem może być to długa lista, więc czytelniej będzie jeśli ograniczymy ją grepem do nowych plików. Taka lista plików wygląda mniej więcej tak:

?    lib/model/CampaignPeer.php
?    lib/model/Campaign.php
?    lib/model/om/BaseCampaignPeer.php
?    lib/model/om/BaseCampaign.php
?    lib/model/map/CampaignMapBuilder.php


Brakujące pliki dodajemy i sprawdzamy JESZCZE RAZ:
svn st --ignore-externals | grep '^?' 
?    lib/model/map/CampaignMapBuilder.php


Jeśli nadal czegoś brakuje (jak wyżej) to uzupełniamy. W ten sposób unikniemy spowodowania fatal errora u kolegi :)

Dobrze także przed każdym commitem przejrzeć co "narobiliśmy", do tego także niewiele trzeba. Wystarczy konsola i np kompare.


svn diff > diff
kompare diff




poniedziałek, 21 marca 2011

Wielkanoc tuż tuż

Ponieważ Wielkanoc już tuż tuż, a ja nigdy nie wiem kiedy te święta przypadają i jak planować urlop itp postanowiłem utrwalić tę informację na stronie internetowej. Także jakby co datę można zawsze spradzić na easterdate.net

czwartek, 10 marca 2011

Instalacja xls2csv w wersji 1.06 na Ubuntu

Instrukcja instalacji xls2csv w wersji 1.06 na Ubuntu.
http://software.krimnet.com/xls/guide-converting-xls-files-csv-with-xls2csv-ubuntu.htm

Jest tam jeden błąd, 8 komenda w CPAN powinna być:
install Text::CSV_XS


zamiast:
install Test::CSV_XS

środa, 21 lipca 2010

Optymalizacja LAMP

Świetny artykuł dla początkujących osób zmagających się z optymalizacją serwisów działających na serwerach Apache2.

http://onlamp.com/pub/a/onlamp/2004/02/05/lamp_tuning.html

Autor zwraca uwagę na zużycie pamięci procesów apache i podaje propozycje rozwiązania problemu.

środa, 19 sierpnia 2009

AdWords API v2009 w PHP5 - część 1

Od release nowej wersji API minęło już parę miesięcy. Dopiero niedawno miałem okazję bliżej się temu przyjrzeć i trochę pokodować.
Nowa wersja znacznie różni się od poprzednich. Wygląda na to, że będziemy mieli więcej serwisów, w każdym serwisie tylko 2 metody. Np CampaignService w wersji 13 udostępniał szereg metod:
  • addCampaign
  • addCampaignList
  • getCampaign
  • getCampaignList
  • getCampaignStats
  • updateCampaign
  • ...
W nowej wersji API V2009 wszystkie te metody zostały zastąpione dwoma - get i mutate.
Metoda get zastępuje w zasadzie wszystkie metody z wersji 13 zaczynające się od get.... Mutate zastępuje metody add oraz update.

Metodą get możemy pobrać zarówno dane kampanii jak i jej statystyki. Jako parametr metody podajemy CampaignSelector, w którym to możemy zdefiniować o jakie kampanie i jakie dane nam chodzi. Np wybieramy tylko kampanie o statusie "ACTIVE" albo ID mieszczącym się w zbiorze 1,2,3,4,5.

Zanim przejdziemy do przykładu, najpierw kilka rzeczy które musimy mieć aby skorzystać z API:
  1. Konto Google
  2. Auth Token (autoryzacja była inaczej rozwiązana w v13)
  3. Zainicjalizowane konto adwords sandbox
Przykłady zapytań do AdWords API v2009 możemy znaleźć na Google Code. Zawarte tam przykłady korzystają z biblioteki nusoap i są to raczej "klejone z ręki" xmle.
W moim przykładzie korzystam z rozszerzenia php5-soap.

Dane do nagłówka/autoryzacji:
$headers = array (
'authToken' => 'xxxxxxxxxxx',
'clientEmail' => 'client_1+webdevday.sandbox@gmail.com',
'userAgent' => 'webdevday',
'developerToken' => 'webdevday.sandbox@gmail.com++EUR',
'applicationToken' => 'token',
);
Inicjalizacja klienta i header:
$ns = 'https://adwords.google.com/api/adwords/cm/v200906';
$service = 'https://adwords-sandbox.google.com/api/adwords/cm/v200906/CampaignService';

$client = new SoapClient($service .'?wsdl', array('trace' => true, 'connection_timeout' => 60, 'exceptions' => 1));

$soapHeaders = array(new SOAPHeader($ns, 'RequestHeader', $headers));


Przykład zapytania - odpowiednik metody getAllAdWordsCampaigns() z wersji 13:

$selector = array('ids' => array());
$params = array('selector' => $selector);
$method = 'get';


try {
$response = $client->__soapCall($method, array($params), null, $soapHeaders);
} catch (Exception $e)
{
var_dump($e->getMessage());
var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());
}

var_dump($response);



wtorek, 23 czerwca 2009

Postgresql i unix time (epoch)

Funkcją abstime możemy w łatwy sposób przekonwertować datę w formacie unix time (epoch). Np.

db=# select abstime(1245535200);
abstime
------------------------
2009-06-21 00:00:00+02
(1 row)


Możemy też użyć nazwy kolumny;


db=# select abstime(time), * from events;
abstime | city
-------------------------|---------
2009-06-21 00:00:00+02 | krakow
(1 row)



W drugą stronę jest trochę więcej pisania:


db=# select extract(epoch from timestamp '2009-06-21');
date_part
------------
1245535200
(1 row)


Przy użyciu tych funkcji możemy manipulować danymi zmieniając unix time na datę i odwrotnie. Mam nadzieję, że komuś się przyda.

Funkcje date/time dla postgresqla są na http://www.postgresql.org/docs/8.3/interactive/functions-datetime.html