- Ściągnij Ant'a z ant.apache.org i rozpakuj do dowolnego katalogu. Dla skupienia uwagi przyjmijmy, że to będzie D:\Ant
- Teraz trzeba ustawić zmienne systemowe, a dokładnie ANT_HOME. W naszym przypadku ANT_HOME=D:\Ant. Uwaga! W zmiennych systemowych JAVA_HOME i ANT_HOME nie może wystąpić na końcu znak cudzysłowu (") ani slash/backslash (/) lub (\). Nie pytajcie mnie dlaczego!
- System musi posiadać zmienną Path do katalogu Ant'a bin, czyli do zmiennej systemowej Path po średniku dodajemy D:\Ant\bin. Po tej operacji wejdźmy do konsoli systemowej i zawołajmy ant. Powinien nas poinformować, że plik build.xml nie istnieje. To jest normalne zachowanie. Wszelkie inne komunikaty sugerują błędy.
- Mimo, że Ant działa, to nadal niestety nie będzie można przesyłać nim plików po ftp ani korzystać z możliwości sieciowych. Potrzebne nam będą jeszcze dwie biblioteki: http://commons.apache.org i jackarta-oro. Pobieramy je, rozpakowujemy i wyciągamy jedynie pliki jar. Pliki te hurtem skopiujmy do katalogu lib Ant'a, czyli w naszym przypadku D:\Ant\lib. Powinno działać. Ale nie działa! Dlaczego? Nasz ukochany Windows...
-
Odpalmy konsolę w trybie administracyjnym i wpiszmy w niej:
netsh advfirewall set global StatefulFTP disable
teraz powinno zadziałać.
piątek, 9 listopada 2012
Instalacja Ant'a w systemie Windows 7 oraz przystosowanie go do przesyłania danych po ftp
Jak zwykle jakieś schody. Ant jako oprogramowanie Open Source nie ma jakiegoś specjalizowanego instalatora. Wszystko trzeba zrobić "rękami".
Kilka stopni prowadzących do zadziałania Ant'a zwindowsami:
czwartek, 8 listopada 2012
Różnica pomiędzy delete a destroy w Rails
Najkrócej rzecz ujmując operacja delete wykonuje SQL DELETE z pominięciem wszelkich callbacków w Rails. Jest to więc rozwiązanie szybkie i wydajne.
Jeśli natomiast chcemy aby Rails panowało nad wszystkim zastosujmy destroy. Wolniej ale w zgodzie z wszelkimi regułami pisanej przez nas aplikacji.
Jeśli natomiast chcemy aby Rails panowało nad wszystkim zastosujmy destroy. Wolniej ale w zgodzie z wszelkimi regułami pisanej przez nas aplikacji.
Używanie w Rails tekstu typu String zamiast nazwy pola, metody, alboasocjacji
Czasami występuje potrzeba aby w Rails wywołać jakąś asocjację w kodzie ale zamiast standardowego kodu niech nazwy asocjacji będą stringami.
Czyli zamiast pisać tak:
możemy napisać tak:
Czyli zamiast pisać tak:
customer=Customer.find(params[:id]) customer.orders.each do |order| # ... tu jakieś operacje z użyciem order .... end
możemy napisać tak:
customer=Customer.find(params[:id]) customer.send("orders").each do |order| # ... tu jakieś operacje z użyciem order .... end
wtorek, 30 października 2012
Jak przenieść emaile i profil Thunderbirda z komputera na komputer
Oczywiście standardowe zachowania Thunderbirda nie przewidują takiej skomplikowanej operacji. Trzeba więc radzić sobie jakoś samemu.
Oto przepis:
Na nowym komputerze instalujemy świeżą wersję Thunderbirda.
Ze starego komputera kopiujemy pocztę do nowego, dokładnie w takim samym katalogu, w jakim była na starym. Dla skupienia uwagi przyjmijmy, że na starym komputerze cała poczta była w katalogu D:\mail, to i na nowym powinna znaleźć się na D:\mail. Maile przeniesione. Ale co z tego, skoro Thunderbird nic o tym jeszcze nie wie? Potrzebny nam będzie profil Thunderbirda ze starego komputera. Jak go znaleźć? Ano tak:
Prawie gotowe. Wystarczy tylko na nowym komputerze wyedytować plik %AppData%\Thunderbird\profiles.ini i w linijce "Path" wpisać położenie profilu. W naszym przykładzie będzie to D:\profile. Warto jeszcze sprawdzić wpis "IsRelative=0". Jeśli używamy ścieżki z nazwą dysku jak w tym przykładzie, to musi tu być koniecznie 0 (zero).
Teraz odpalamy Thunderbirda i cieszymy się nową (starą) instalacją.
Oto przepis:
Na nowym komputerze instalujemy świeżą wersję Thunderbirda.
Ze starego komputera kopiujemy pocztę do nowego, dokładnie w takim samym katalogu, w jakim była na starym. Dla skupienia uwagi przyjmijmy, że na starym komputerze cała poczta była w katalogu D:\mail, to i na nowym powinna znaleźć się na D:\mail. Maile przeniesione. Ale co z tego, skoro Thunderbird nic o tym jeszcze nie wie? Potrzebny nam będzie profil Thunderbirda ze starego komputera. Jak go znaleźć? Ano tak:
type %AppData%\Thunderbird\profiles.iniNas zainteresuje linijka zaczynająca się od słowa "Path". Podaje ona gdzie dokładnie znajduje się katalog z profilem. Przyjmijmy, że profil jest w katalogu "D:\Users\admin\profile". Kopiujemy więc cały ten katalog ze starego komputera na nowy. Tu już nie jest ważne w jakim katalogu profil się ten znajdzie. Załóżmy, że przekopiujemy na nowym komputerze go do folderu D:\profile.
Prawie gotowe. Wystarczy tylko na nowym komputerze wyedytować plik %AppData%\Thunderbird\profiles.ini i w linijce "Path" wpisać położenie profilu. W naszym przykładzie będzie to D:\profile. Warto jeszcze sprawdzić wpis "IsRelative=0". Jeśli używamy ścieżki z nazwą dysku jak w tym przykładzie, to musi tu być koniecznie 0 (zero).
Teraz odpalamy Thunderbirda i cieszymy się nową (starą) instalacją.
piątek, 21 września 2012
Jak przesłać więcej niż jedną zawartość pola Ajaxem
W Ruby on Rails jest bardzo wygodna pseudokontrolka observe_field. Jednak w swojej podstawowej postaci można przesłać zawartość tylko tego pola, które jest obserwowane. Aby przesłać za jednym razem zawartość większej ilości pól trzeba się trochę pogimnastykować:
<%= f.text_field :first_name %> <%= f.text_field :last_name %> <%= observe_field "employee_last_name", :url => {:action => :nazwa_metody_w_kontrolerze}, :update => "div_to_update", :frequency => 1, :with => "Form.serializeElements($('employee_last_name', 'employee_first_name'))" %>No i jest. Teraz w metodzie nazwa_metody_w_kontrolerze zmienna parameters dostarcza nam imię i nazwisko pracownika w postaci:
params[:employee][:first_name] params[:employee][:last_name]
niedziela, 27 maja 2012
Dzielenie modulo
Dzielenie modulo zwraca resztę z dzielenia. Tzn jeżeli dzielimy liczbę całkowitą
przez drugą całkowitą (bo tylko na takich liczbach operacja ta jest dozwolona)
to często wynikiem jest ułamek. np wynik dzielenia 3/2 będzie 1 (jeżeli wynik ma być typu int)
żeby określić jaka liczba jest po przecinku stosujemy dzielenie modulo. Wynik tego dzielenia też jest zawsze typu int.
Jeżeli wynikiem dzielenia jest liczba całkowita np: 4/2=2,
to wynikiem dzielenia modulo jest 0 (4%2=0). W ten sposób bada się parzystość liczby.
Składnia:
liczba1 % liczba2
poniedziałek, 16 kwietnia 2012
Powershell - uruchamianie własnych skryptów
Windows jak to windows - wie wszystko lepiej. Wie lepiej od Ciebie drogi czytaczu czy Ty chcesz uruchomić własny skrypt, czy nie. Na tyle wie lepiej, że jak napisz swój skrypt w sensacyjnym powershell, to i tak go nie uruchomisz. Twój windows wie, że nie można tobie go uruchamiać. Tę wyjątkową złośliwość systemu uzasadnianą troską o Ciebie czytaczu można (na szczęście) jakoś ominąć.
Uruchom więc powershell jako administrator.
W linii komend wpisz:
Uruchom więc powershell jako administrator.
W linii komend wpisz:
Set-ExecutionPolicy RemoteSignedteraz własne skrypty będziesz mógł uruchamiać, a te pobrane z Internetu muszą być wiarygodnie podpisane.
czwartek, 15 marca 2012
Mapy tras zgodne z architekturą REST W Rails
Twórcy Ruby on Rails dokonali dużego wysiłku aby się dostosować do architektury REST. Niektórzy określają to jako na wyrost, a inni jako na siłę. Faktem jest jednak to, że dzięki takiemu podejściu powstało wiele udogodnień. Jednym z nich jest unifikacja tras.
Tu szczegóły dla modelu Product:
w pliku routes.rb powstał zapis
Tu szczegóły dla modelu Product:
w pliku routes.rb powstał zapis
map.resources :productsdzięki temu jednemu zapisowi powstała mapa tras:
Metoda | Ścieżka | Akcja | Metoda pomocnicza |
---|---|---|---|
GET | /products | index | products_url |
GET | /products/new | new | new_product_url |
POST | /products | create | products_url |
GET | /products/1/edit | edit | edit_product_url(:id => 1) |
PUT | /products/1 | update | products_url(:id => 1) |
GET | /products/1 | show | product_url(:id => 1) |
DELETE | /products/1 | destroy | product_url(:id => 1) |
piątek, 9 marca 2012
Warunkowy operator trójargumentowy lub po prostu '?'
Nigdy nie mogę zapamiętać tej składni więc raz na zawsze sobie to tutaj zapiszę.
Zapis
Zapis
label = length == 1 ? " argument" : " argumenty"Powyższe wyrażenie przypisuje do zmiennej label łańcuch tekstowy w liczbie pojedynczej lub mnogiej. Oczywiście w zależności od wartości logicznej warunku
length == 1Jeśli warunek jest prawdziwy to liczba pojedyncza, jeśli warunek jest fałszywy, to liczba mnoga.
poniedziałek, 13 lutego 2012
Jak usunąć plik z repozytorium GIT'a nie usuwając go z dysku
Jak?
Ano tak:
Czasami jest jeszcze gorzej. Okazuje się, że wpisanie nazwy pliku do .gitignore niczego nie zmienia! Wcale nie jest ignorowany, a wszystkie zmiany dokonują się z pominięciem tego wpisu. Nie pytaj mnie dlaczego taki idiotyzm nadal funkcjonuje. Funkcjonuje. I tyle.
Tak to zmienić:
Ano tak:
git rm --cached mylogfile.log
Czasami jest jeszcze gorzej. Okazuje się, że wpisanie nazwy pliku do .gitignore niczego nie zmienia! Wcale nie jest ignorowany, a wszystkie zmiany dokonują się z pominięciem tego wpisu. Nie pytaj mnie dlaczego taki idiotyzm nadal funkcjonuje. Funkcjonuje. I tyle.
Tak to zmienić:
git rm -r --cached . git add . git commit -m "fixed untracked files"
Pamiętaj o kropkach na końcu.
Pojawianie się zmodyfikowanych plików zaraz po "clone" w GIT'cie
Zainicjowanie w GIT'cie nowego repozytorium to
Niestety czasami (oczywiście w Windows) zaraz po tej operacji git status pokazuje kupę właśnie co wyedytowanych plików. Jest to arcyirytujące i nie mija po wykonywaniu ślepych commit'ów itp. Bywa, że po dowolnym pull'u problem znów odradza się niczym fenix z popiołów.
Okazało się, że problem tkwi w windowsowych znacznikach końca linii CRLF.
Wystarczy na repozytorium wywołać:
Problem ten opisany jest szczegółowo tutaj:
http://stackoverflow.com/questions/5009096/files-showing-as-modified-directly-after-git-clone
git clone ssh://nazwa_uzytkownika.serwer.pl/ nazwa_repoStandardowo zaraz po tej operacji wszystkie zaciągnięte pliki są gotowe do edycji, ale nie edytowane. Innymi słowy
git statusnic nie pokazuje.
Niestety czasami (oczywiście w Windows) zaraz po tej operacji git status pokazuje kupę właśnie co wyedytowanych plików. Jest to arcyirytujące i nie mija po wykonywaniu ślepych commit'ów itp. Bywa, że po dowolnym pull'u problem znów odradza się niczym fenix z popiołów.
Okazało się, że problem tkwi w windowsowych znacznikach końca linii CRLF.
Wystarczy na repozytorium wywołać:
git config core.autocrlf falsei wszystko wraca do normy.
Problem ten opisany jest szczegółowo tutaj:
http://stackoverflow.com/questions/5009096/files-showing-as-modified-directly-after-git-clone
piątek, 20 stycznia 2012
Jak wyeleminować duplikaty w tabelach złączeń
W standardowej asocjacji Rails zwanej has_and_belongs_to_many do utworzenia złączenia pomiędzy dwoma tabelami potrzebna jest trzecia tabela z parami kluczy id. Na przykład tabele firms i categories łączy tabela categories_firms. Włożenie do tej tabeli pary kluczy łączy daną firmę z kategorią. Problem w tym, że system dopuszcza wkładanie dowolnej ilości par kluczy. Pomaga w wielu wypadkach zastosowanie zapisu :uniq => true tak jak tu w modelu firm:
Aby zabezpieczyć się przed umieszczaniem duplikatów najpierw robimy migrację, która przygotuje unikalny indeks zabezpieczający bazę danych przed zduplikowaniem wpisu:
Przjdźmy więc do modelu firmy i tam dopiszmy do has_and_belongs_to_many:
Proste, łatwe i przyjemne.
Inspirację zaczerpnąłem z
http://stackoverflow.com/questions/4988630/habtm-uniqueness-constraint
has_and_belongs_to_many :categories, :uniq => trueale niestety nie zawsze.
Aby zabezpieczyć się przed umieszczaniem duplikatów najpierw robimy migrację, która przygotuje unikalny indeks zabezpieczający bazę danych przed zduplikowaniem wpisu:
. add_index :categories_firms, [ :category_id, :firm_id ], :unique => true, :name => 'unique_by_category_and_firm' .Teraz co prawda nie da się zrobić duplikowanego wpisu, ale baza danych wywala błędy.
Przjdźmy więc do modelu firmy i tam dopiszmy do has_and_belongs_to_many:
. has_and_belongs_to_many :categories, :uniq => true, :before_add => :validates_category .czyli zanim dokona się wpisu należałoby wykonać jakąś walidację:
def validates_category(category) raise ActiveRecord::Rollback if self.categories.include? category end
Proste, łatwe i przyjemne.
Inspirację zaczerpnąłem z
http://stackoverflow.com/questions/4988630/habtm-uniqueness-constraint
Subskrybuj:
Posty (Atom)