Archiwum autora dla masterix

13
lip

AdWords API pierwszy projekt

Wbrew pozorom odpalenie pierwszego projektu w środowisku Visual Studio dla języka C# nie jest takie proste w AdWords API.

Po pierwsze należy ściągnąć przygotowany przez Google zestaw bibliotek Clients Library dl wybranego języka ( w tym przypadku dla C# i platformy .NET ). Ale na tym nie koniec. Kolejnym krokiem jest ściągnięcie pliku ICSharpCode.ShapZipLib oraz dodaniego jego referencji do projektu w VS. Oprócz tego należy jeszcze dodać referencję do System.Web.Services oraz do google-api-adwords-dotnet.

Na czas developingu oprogramowania przyda się jeszcze konto Sandbox w AdWords, wystarczy posiadać zwykłe konto na GMail - automatycznie mamy dostęp do Sandbox’a. Jeśli go nie mamy to należy założyć sobie takie konto.

Po tym możemy pisać już pierwsze programy do zarządzania kampaniami Google AdWords. Dla przykładu poniżej kod, który połączy się z Sandbox’em i wylistuje  dostępne konta klientów ( domyślnie w Sandbox’ie jest takich 5 ):

Hashtable headers = new Hashtable();
headers.Add( “email”, “mail@gmail.com” );
headers.Add( “password”, “haslo” );
headers.Add( “useragent”, “C# demo” );
headers.Add( “developerToken”, “mail@gmail.com++PLN” );
headers.Add( “applicationToken”, “1234567890123456789012″ );
headers.Add( “alternateUrl”, “https://sandbox.google.com/” );
AdWordsUser user = new AdWordsUser( headers );

AccountService account = ( AccountService )user.getService( “AccountService” );
String[] clientAccounts = account.getClientAccounts();

Console.Out.WriteLine( “++++ Users ++++” );
foreach ( String client in clientAccounts )
{
Console.Out.WriteLine( “Client account: ” + client );
}

Dla aplikacji w Sandbox’ie applicationToken jest dowolny natomiast developerToken to adres e-mail z dołączoną domyśłną walutą ( dla Polski jest to PLN ).

09
lip

Integracja Kohany i OPT

Jak pisałem w poprzednim poście - pierwsze co należało zrobić z Kohaną to zintegrować ją z systemem szablonów OPT.

Poszło wszystko dość gładko, już przy pierwszym podejściu. Łatwo bo miałem już zintegrowane CI z OPT, w Kohanie było analogicznie. Więc krok po kroku:

  1. Stworzyć katalog application/libraries/opt i wgrać do niego pliki OPT
  2. Stworzyć plik Opt.php i umieścić w nim kod:

    defined(’SYSPATH’) or die(’No direct script access.’);
    define( ‘OPT_DIR’, ‘application/libraries/opt/’ );
    require_once( OPT_DIR . ‘opt.class.php’ );
    class OPT extends optClass
    {
    public function __construct()
    {
    $this -> root = ‘application/views/’;
    $this -> compile = ‘application/views_c/’;
    $this -> cache = ‘application/cache/’;
    $this -> plugins = OPT_DIR . ‘plugins/’;
    $this -> charset = ‘UTF-8′;
    $this -> httpHeaders( OPT_HTML );
    }
    };

  3. Stworzyć katalog application/views_c i nadać mu chmod 0777
  4. Można w application/config/config.php dodać autoładowanie biblioteki:

    $config['preload'] = array
    (
    ‘libraries’ => ‘Opt’,
    ‘models’ => ”,
    );

Teraz w kodzie kontrolera można umieścić przykładowy kod:

//$this->Opt = new Opt(); // jeśli nie ma autoładowania biblioteki Opt
$this->Opt->assign( ‘title’, ‘My welcome to Kohana!’ );
$this->Opt->parse( ‘welcome.tpl’ );

Oczywiście szablon welcome.tpl musi istnieć i mieć zmienną $title, aby można było zobaczyć efekt. I to tyle, można się cieszyć tandemem Kohana + OPT

08
lip

Kohana się rozwija

Od mojego ostatniego wpisu o Kohanie musiałem wykonać jeszcze jeden projekt w CodeIgniterze ( mam nadzieję, że ostatni ). Teraz już zasiadam do Kohany - widzę, że się rozwija i framework i dokumentacja. Zaimplementowane jest też ORM - ta część wiedzy jeszcze przede mną, nigdy z tego nie korzystałem, ale zdaje się, że w Symfony jest to powszechne ‘zjawisko’.

Kohana pojawiła się już w wersji 2.2 - liczę, że jej intergracja z systemem szablonów OPT pójdzie tak zgrabnie jak w CI.

07
lip

Hanselminutes

Scott Hansel od 2 lat wypuszcza podcasty o tematyce nowoczesnych technologi, gadżetów oraz .NET i programowania. Forma wywiadów, około 30-minutowych. Polecam posłuchać choć część. Scott mówi dość szybko, ale na szczęście są transkrypcje tych wywiadów.

Archiwum podcastów: http://hanselminutes.com/archives.aspx

04
lip

Generatory liczb pseudolosowych cz.3

Przyszedł czas na kolejne generatory liczb pseudolosowych. Znowu pojawi się nieco kodu oraz ogólnego wyjaśnienia pt. “Why?” ( i odpowiedzią nie będzie “For money” ;) ).

Więc do kodu start..
Czytaj dalej ‘Generatory liczb pseudolosowych cz.3′

06
cze

Pauza w Javascript

Szukałem ostatnio ( jak się okazało, niepotrzebne ) pauzy w JS. Znalazłem więc podrzucam od razu kod, może w przyszłości się jednak przyda:

function pause( numberMillis )
{
var now = new Date();
var exitTime = now.getTime() + numberMillis;
while (true)
{
now = new Date();
if (now.getTime() > exitTime)
return;
}
}

Kod się sam wyjaśnia.

31
maj

KDE4 na Ubuntu

Instalacja KDE4 na Ubuntu jest wręcz dziecinnie prosta i sprowadza się do wykonania kilku poleceń, resztę za nas “wykona się samo”. Więc do dzieła!

sudo gedit /etc/apt/sources.list

Dodajemy taką linijkę:

deb http://ppa.launchpad.net/kubuntu-members-kde4/ubuntu gutsy main

I update listy pakietów:

sudo apt-get update

I lecimy:

sudo apt-get install kde4-core kde-l10n-pl

Po ściągnięciu pakietów pojawi się monit z pytanie o domyślny display manager, ja miałem do wyboru gdm i kdm. Wybierasz co chcesz ;)

I to wszystko, można się już cieszyć nowym KDE.

31
maj

Najprostsze rozwiązania zawsze działają

Domyślnie Visual Studio 2008 daje taki nagłówek funkcji main:

int _tmain( int argc, _TCHAR* argv[] )

Niestety miałem problem z typem _TCHAR*, aby rzutować/skonwertować go na cokolwiek użytecznego jak std::string. Pogooglałem chwilę i zanim znalazłem naszła mnie prościutka myśl - zmienić nagłówek main’a!

int _tmain(int argc, char** argv)

Życie od razu stało się prostsze, bo konwersja char* na std::string jest prosta, łatwa i przyjemna - wystarczy podać char* jako argument do konstruktora string’a.

Proste rozwiązania sa świetne :)

28
maj

PHP pójdzie do lamusa?

Odwiedziłem dzisiaj stronę code.google.com - dawno tam nie byłem. I pierwsze co mnie naszło jak zobaczyłem zbiór produktów Google to myśl, że jeszcze trochę i całe strony będzie można budować bez użycia PHP lub z jego szczątkowym użyciem. Jest API do map google, jest do użycia AJAX’a z poziomu Javy, są API do tworzenia wykresów, kalendarzy oraz App Engine API, o którym piszą:

Google App Engine lets you run your web applications on Google’s infrastructure. App Engine applications are easy to build, easy to maintain, and easy to scale as your traffic and data storage needs grow. With App Engine, there are no servers to maintain: You just upload your application, and it’s ready to serve your users.

Poczekamy i zobaczymy, ale ekspansja potenta jest dla mnie czasami porażająca…

25
maj

Asynchroniczna komunikacja za pomocą Google Maps API

GM API udostępnia własną nakładkę na obiet HttpRequest, standardowo używany przy korzystaniu z technologii AJAX ( zakładając nie korzystanie z bibliotek pomocniczych ). Ostatnio siedzę więcej w Google Maps no i uznałem, że bez sensu jest zaprzęgać zewnętrzną bibliotekę skoro API GM udostępnia do tego własne funkcje. Oto jak wygląda prototyp funkcji:

GDownloadUrl(url, onload, postBody?, postContentType?)

Bardzo często ostatnie dwa parametry nie są używane ( są opcjonalne ). Wtedy komunikacja odbywa się za pomocą metody GET. Jak wiadomo, ma to swoje wady, bowiem są problemy z przesyłaniem dużej ilości informacji oraz z kodowaniem polskich znaków diakrytycznych. W dokumentacji można bez problemu znaleźć przykłady z wykorzystaniem GDownloadUrl i metody GET więc opiszę pokrótcę metodę POST. Najlepszym tłumaczeniem jest zwykle przykład kodu więć oto on:

function saveData()
{
var name = document.getElementById(”name”).value;
var info = document.getElementById(”info”).value;
var latlng = marker.getLatLng();
var lat = latlng.lat();
var lng = latlng.lng();

var url = “file.php”;

GDownloadUrl(url, function(data, responseCode) {
if (responseCode == 200 && data.length <= 1)
{
marker.closeInfoWindow();
document.getElementById(”message”).innerHTML = “Znacznik dodany.”;
}
}, “name=” + name + “&info=” + info +
“&lat=” + lat + “&lng=” + lng, “application/x-www-form-urlencoded”);
}

Funkcja ta przetwarza formularz i przesyła dane do pliku PHP metodą POST. Na początku pobierany wartości pól z formularza i ustalamy URL pliku, do którego prześlemy dane. Jest to też pierwszy argument funkcji GDownloadUrl. Kolejnym jest funkcja zwrotna, wykonywana po zakończeniu GDownloadUrl. Trzeci argument to lista danych w postaci nazwa=wartość a ostatni to typ MIME.

I to w zasadzie tyle, prosty przykład można dostosować do swoich potrzeb i wykorzystać.