2015-12-17

Install Oracle JDK on Linux Mint 17.3

Ściągamy (do katalogu Pobrane) najnowsze JDK ze strony Oracle w odpowiedniej dla systemu operacyjnego wersji (32-bit lub 64-bit). Następnie rozpakowujemy ściągnięty plik, odpalamy terminal i wpisujemy:

sudo apt-get update
sudo apt-get remove openjdk*
sudo mkdir -p /opt/java
sudo mv ~/Pobrane/jdk1.8.0_65 /opt/java/
sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/jdk1.8.0_65/bin/java" 1
sudo update-alternatives --set java /opt/java/jdk1.8.0_65/bin/java
java --version

źródło: community.linuxmint.com

2015-12-02

bootstrap-datepicker: position bug

Korzystając z biblioteki bootstrap-datepicker spotkałem się z pewnym błędem w pozycjonowaniu okienka:

Problem rozwiązałem modyfikując kilka linijek w pliku js/bootstrap-datepicker.js:

Przed modyfikacją:

var left = offset.left - appendOffset.left, top = offset.top - appendOffset.top;

Po modyfikacji:

var left = offset.left - appendOffset.left, top = offset.top;

2015-11-27

Z underscore na CamelCase

Jak zamienić w PHP string z this_is_test na ThisIsTest? Poniżej znajduje się linijeczka kodu, która robi taką fajną rzecz.

preg_replace('/(?:^|_)(.?)/e', "strtoupper('$1')", "this_is_test");

źródło: devops.zone

Umieściłem to polecenie w bibliotece tools dostępnej w serwisie GitHub.

2015-10-21

SOLID w programowaniu obiektowym

Nazwa SOLID w programowaniu obiektowym to skrót, który określa pięć założeń:
  • S - Single responsibility (jedna odpowiedzialność)
  • O - Open/close (otwarcie na rozszerzanie, zamknięcie na modyfikowanie)
  • L - Liskov substitution (zasada podstawienia)
  • I - Interface segregation (segregacja interfejsów)
  • D - Dependency inversion (odwrócenie zależności)

The Single Responsibility Principle

A class should have only one reason to change.

Klasa powinna mieć tylko jedną odpowiedzialność. Klasy zbyt rozbudowane mogą powodować konflikty - kilka zespołów programistów może pracować na tym samym kodzie co może generować problemy i niepotrzebną stratę czasu.

The Open/Closed Principle

Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.

Liskov substitution

Subtypes must be substitutable for their base types.

Podklasy powinny w taki sposób nadpisywać metody głównej klasy aby zburzyć założonej funkcjonalności z punktu widzenia klienta.

Interface segregation

Zasada segregacji interfejsów mówi o sposobie komunikacji między logiką biznesową a klientem. Aplikacja złożona z modułów powinna opierać się na interfejsach z których klient może korzystać. Należy przy tym pamiętać, że klient nie powinien mieć dostępu do części interfejsu, z których nie korzysta.

Dependency inversion

Dependency inversion - odwrócenie zależności - założenie, która polega na tym aby moduły wyższego poziomu komunikowały się z modułami niższego poziomu za pomocą ustalonego poza nimi zbiorem zasad (interfejsem). Zabieg ten pozwala na łatwiejsze późniejsze modyfikowanie programu.

Źródła

2015-10-13

PHP DateTime: Pierwszy i ostatni dzień poprzedniego miesiąca

Od PHP 5.3 pierwszy i ostatni dzień miesiąca można wybrać w bardzo prosty sposób:
$dataod = new \DateTime('first day of previous month');
$datado = new \DateTime('first day of previous month');
Można w ten sposób w prosty sposób przypisać domyślne wartości w formularzu:
$command = new EksportSwiadczenDoCsvCommand();
$command->setDataod(new \DateTime('first day of previous month'));
$command->setDatado(new \DateTime('last day of previous month'));

$form = $this->createForm('platne_eksport_zlecen_do_csv', $command);

$form->handleRequest($request);

if($form->isValid()){
    //...
}
W ten sam sposób możemy wybrać również pierwszy i ostatni dzień aktualnego miesiąca - odpowiadają za to zmienne 'first day of this month' oraz 'last day of this month'.

2015-10-06

Finch - Instant Messaging client

Konfiguracja konsolowego komunikatora Finch znajduje się w katalogu ~/.purple - przenosząc się na inną maszynkę linuxową warto zabrać ten właśnie katalog ze sobą. :-)

2015-10-03

Auto-update paczki w Packagist

Aby w portalu packagist.org była zawsze aktualna wersja naszej paczki z GitHub'a należy wpisać w konsoli następujące polecenie:

curl -XPOST -H'content-type:application/json' 'https://packagist.org/api/update-package?username=m4rc1no5&apiToken=API_TOKEN' -d'{"repository":{"url":"git@github.com:m4rc1no5/ColorBashPrompt.git"}}'

Gdzie API_TOKEN to nasz token z serwisu Packagist (dostępny na stronie profilu).