czwartek, 7 lipca 2016

Simple replacement for AutoMapper

AutoMapper is great library, but it introduces another dependency and requires configuration. I try to stick to convention and use the same names in DTOs and domain objects. That is why I decided to write simple Object extension methods. Usage is simple:

There are also some other useful functions:

Not a big thing, but I copy this code from one project to another from time to time.

And here is source code:

sobota, 30 stycznia 2016

O dzisiejszych wiadomościach

Dobra zmiana miała wprowadzić nową jakość, więc postanowiłem przyjrzeć się dokładnie dzisiejszym wiadomościom. Oto krótkie podsumowanie:

Na początku mamy zajawki. W pierwszej mowa o zatwierdzonym budżecie i wypowiedź Pana Kuczyńskiego "Minister finansów robił wszystko, aby móc wypełnić obietnice". Wyraźnie słychać, że to nie koniec zdania, ale zajawka się skończyła. Mozna pomyśleć, że minister finansów stara się jak może, ale w sumie nie wiem, bo to nie koniec zdania.

Potem kolejna zajawka z Kanclerz Merkel i komentarzem w tle "Walka o przetrwanie". Oglądamy nagranie, na którym jakaś Pani mówi "Słyszałam plotkę, że ma jechać do Chile". Najwyraźniej kanclerz Merkel jest w tak złej sytuacji, że została jej jedynie ucieczka z kraju. Podpowiadam, że w jednym z ostatnich sondaży partia Pani Merkel ma 32,5% poparcia i wygrywa wybory. Źródłem tego sondażu jest wiadomość z portalu wPolityce, którego nie posądzałbym o sprzyjanie Kanclerz Merkel, wręcz przeciwnie.

Potem już materiał o budżecie. Minister finansów mówi, że budżet "trzyma te podstawowe parametry finansowe niejako w ryzach", w "rdzeniu opiera się na stanie finansów, który zastaliśmy", czyli wychodzili z budżetu stworzonego przez PO. O tym, że wydatki wzrosły o 17 miliardów, czyli będzie trzeba wygenerować 17 miliardów nowych podatków, nie ma w materiale mowy. Potem wypowiedź Pana Kuczyńskiego "Minister finansów robił wszystko, aby móc wypełnić obietnice przedwyborcza Prawa i Sprawiedliwości i na dzień dzisiejszy wydaje się, że mu się to uda.". Wszystkie obietnice to chyba tylko program 500+, bo darmowe leki, obniżenie wieku emerytalnego czy kwoty wolnej od podatku zostało chyba zapomniane. Nie wiem co Pan Kuczyński sobie myślał, ale wypowiedź jest fatalna. Na swoim blogu Pan Kuczyński rzeczywiście pochodzi optymistycznie do budżetu w 2016, ale równocześnie wskazuje, że w 2017 będzie bardzo ciężko, bo wydatki wzrosną znacząco, a dochody znacząco spadną.

Zaraz potem dr Andrzej Sadowski z centrum Adama Smitha: "Ten rząd ma historyczną możliwość w postaci wychodzenia z długu publicznego.". Ciekawa wypowiedź, chociaż kompletnie nic nie znaczy. Można było to samo powiedzieć o poprzednich rządach. Tak samo można było powiedzieć, że "Ten rząd ma historyczną możliwość w postaci doprowadzenia Polski do kompletnej ruiny.". No ale chyba mieliśmy mieć wrażenie, że ten rząd będzie robił dobrze.

Potem materiał o PO. Nie widzę nic specjalnie ciekawego. PO kompletnie mnie nie interesuje.

Kolejny materiał o planie wprowadzenia równouprawnienia małżeństw osób tej samej płci we Włoszech i manifestacji z okazji "Family day". W manifestacji wzięły udział 2 miliony osób, przeciwnicy zrównania praw. Mamy wypowiedź uczestniczki, która jest oczywiście przeciwko. Mamy wypowiedź kogoś z rządu, który mówi, że głos dwóch milionów protestujących trzeba wziąć pod uwagę. Zwolennika zrównania praw chyba nie znaleźli, bo nie było go w materiale. Były za to skaczące zakonnice. Szukam newsa o manifestacji w Internecie. NBC News pisze o setkach tysięcy demonstrujących. W środku artykułu piszą, że organizatorzy mówią o dwóch milionach, ale to nie są potwierdzone liczby. W NBC News czytamy wypowiedzi zwolenników nowego prawa oraz o tym, że tydzień wcześniej odbyły się ich manifestacje w stu miastach, w których także wzięło udział kilkaset tysięcy osób. W "Wiadomościach" nie było o tym mowy, dziwne.

Potem o Merkel. Kanclerz jeździ po kraju, aby przekonać działaczy swojej partii, że nadal może być skuteczną liderką. Prowadzący mówi, że "największym atutem okazuje się fakt, że nie ma żadnych konkurentów". Zaraz potem kilka ujęć z Niemiec z muzyką z "House of cards". Śmieszne. Potem lektor zastanawia się kiedy Kanclerz odejdzie, bo codziennie stawiane jest to pytanie. Potem powrót do wypowiedzi Pani, która mówiła o wyjeździe do Chile. Pani to wiceprzewodnicząca AfD, czyli "Alternatywy dla Niemiec", eurosceptycznej i antyimigranckiej partii, która jest w tej chwili trzecia w sondażach. Wszyscy w studiu śmieją się z tej wypowiedzi, ale wydawała się najlepsza do "Wiadomości" TVP. W ramach "obiektywizmu" wyemitowano też śmiech. Z newsa wynika, że właściwie kanclerz jest do wymiany, ale nie ma na kogo. Najwyraźniej największym problemem Niemiec jest Pani Merkel.

Potem materiał o prawyborach w USA. Pani Clinton mówi przez ponad 45 minut, ale TVP postanawia wyemitować krótką część o złych bankach. Co za zbieg okoliczności. W Polsce banki też są złe, więc PiS je opodatkuje. Brawo PiS.

Kolejny materiał o poszukiwaniu Ewy Tylman. Czy o tym trzeba mówić? Polecam poczytać: https://en.wikipedia.org/wiki/Missing_white_woman_syndrome. O Ewie Tylman mówią dłużej niż o prawyborach w USA.

Na koniec materiał o raku trzustki, nie mam zastrzeżeń.

Mam wrażenie, że wiadomości nie były obiektywne, ale może po prostu kwiczę, bo oderwali mnie od koryta.

Link do wiadomości:  http://vod.tvp.pl/23776549/30012016-1930

piątek, 3 kwietnia 2015

Opinie na temat hostingu linuxpl.com

Od kilku lat korzystam z hostingu linuxpl.com i zdecydowałem, że czas wyrazić opinię na ten temat. Dla dwóch klientów używałem konta W1GB (około 50 zł na rok, strona + e-mail). Mam też dwa konta W5GB do developmentu i hostowania kilku mniejszych stron, oraz od niedawna konto WPRO, bo oferuje 100GB miejsca. Generalnie polecam, ale mam kilka spostrzeżeń, którymi chciałbym się podzielić:

  • Kontakt z klientem - Odpowiadają na e-maile szybko i raczej są pomocni, chociaż mogliby być bardziej sympatyczni. Gdy PHPMyAdmin chodził wolno z jedną z moich baz, Pan z supportu znalazł przyczynę problemu (bardzo wolno działający widok). Na prośby o zmiany dotyczące konta (wyższy pakiet, włączenie funkcji) reagują szybko. Płatność idzie przez DOTPAY i zaraz po jej wykonaniu następuje reakcje ze strony providera.
  • Uptime Robot pokazuje dostępność na poziomie 99.9% - 100%, więc jest nieźle. Kilkukrotnie doświadczyłem poważniejszych problemów, które trwały nawet kilka godzin, ale byłem w stanie z tym żyć. Nigdy nie było straty danych. Chyba tylko raz problem był na tyle poważny, że strony totalnie leżały.
  • Dostęp przez SSH odblokowywany jest po opłaceniu konta i możliwy jest za pomocą loginu i hasła na porcie 59184. Piszę o loginie i haśle, bo np. na az.pl trzeba użyć certyfikatu, co dla mnie jest niewygodne.
  • Przekroczenie limitu pojemności konta powoduje, że nagle przestają dochodzić wiadomości e-mail, a strona przestaje się wyświetlać. Kilka razy tego doświadczyłem i szybko musiałem czyścić konto. Po zejściu do odpowiedniego poziomu, wszystko wraca do normy. Wydaje mi się, że to może być lepiej rozwiązane.
  • Oprogramowanie jest stare. Większość moich stron korzysta z PHP 5.2 i 5.3 i z tym raczej nie ma problemu, ale użycie 5.4 i 5.5 na niektórych serwerach jest już problematycznie. Panel klienta nie zawsze ma opcję ustawienia nowszych wersji, mimo deklaracji ze strony LinuxPL. Włączenie nowszej wersji jest możliwe po kontakcie z supportem, ale wolałbym to sam ustawiać. Raz miałem problem ze zbyt starą wersją gita i okazało się, że mogę użyć nowszą, ale muszę podać pełną ścieżkę, bo do PATH nie jest dopisana. Z composerem do PHP był problem. Bowera nie ma.

Podsumowując: Kilka lat temu było bardzo dobrze, a teraz, przy braku aktualizacji oprogramowania i braku dostępności nowych narzędzi, jest przyzwoicie. Z developmentem części stron wyniosłem się na maszynę wirtualną z Ubuntu na Azure, gdzie mogę sobie zainstalować co chcę. Proszę pamiętać, że piszę to z punktu widzenia programisty, dla którego pisanie w PHP jest tylko dodatkową pracą.

środa, 4 lutego 2015

Validation using ASP.NET MVC + Kendo UI + jquery validate unobtrusive

I write one of my project in ASP.NET MVC with Kendo UI. I am using data annotations to emit client side validation rules. jquery.validate.unobtrusive.js picks them up and converts them into jquery validate rules. It works great for standard html inputs, but when inputs are wrapped with Kendo UI, input-validation-error class is assigned to wrong element. I was looking for solution to this problem, but didn't find really complete answer. Here is mine.

First we have to adjust jquery validate to highlight appropriate elements in DOM:

 
(function () {
    //This function checks if validated input is part of Kendo input and if it is, 
    //it returns related Kendo element. Otherwise it returns itself.
    var findKendoElement = function (element) {
        //Pickers and numerics are built differently by Kendo, so we have to check.
        var parent = (element.parent().hasClass('k-picker-wrap') || 
            element.parent().hasClass('k-numeric-wrap')) ? 
            element.parent().parent() : element.parent();

        if (parent.hasClass('k-widget')) {
            return parent.children().first();
        } else {
            return element;
        }
    };

    $.validator.setDefaults({
        ignore: function (index, e) {
            var element = $(e);
            var elementToHighlight = findKendoElement(element);
            return elementToHighlight.not(':hidden').length === 0;
        },
        highlight: function (e) {
            var element = $(e);
            var elementToHighlight = findKendoElement(element);
            elementToHighlight.addClass('input-validation-error');
        },
        unhighlight: function (e) {
            var element = $(e);
            var elementToHighlight = findKendoElement(element);
            elementToHighlight.removeClass('input-validation-error');
        }
    });
})();
 

Then we have to (unfortunately) modify jquery.validate.js a bit to handle situation properly. We are modyfing defaultShowErrors function. We have to do it, so jquery.validate doesn't hide our inputs. We are changing one of the last lines:

this.toHide = this.toHide.not(this.toShow).filter(function (index, item) {
    return !$(item).parent().hasClass("k-widget");
});

And voila, it works :) Please be aware, that findKendoElement function may require some adjustments, because I am not using all types of inputs.

wtorek, 6 stycznia 2015

Praca ze zdalnym kodem za pomocą PhpStorm

Poza pracą w Holte Software Poland, w ramach mojej działalności gospodarczej, często pracuję nad projektami w PHP. Nie mam całego środowiska na lokalnej maszynie. Wykupiłem hosting na linuxpl.com, który daje mi serwer PHP, MySQL, poczty, a dodatkowo mogę tego używać korzystając z SSH. To bardzo wygodne narzędzie. Kod źródłowy trzymam na BitBucket, robię checkout repozytorium na hosting linuxpl i tam dokonuję modyfikacji.

No i teraz powstaje problem. W jaki sposób zmieniać zdalnie kod? Mogę trzymać lokalną kopię na swoim komputerze i każdą zmianę pliku uploadować na zdalny serwer przez FTP. To dosyć popularna metoda pracy, ale ja nie lubię tego rozwiązania. To rozwiązanie nie sprawdza się, gdy na tym samym kodzie pracuje kilka osób, co mi się zdarza. Sprawdzanie wszystkich plików przy uruchomieniu PHPStorm, pod kątem zmiany przez innych użytkowników, jest bardzo czasochłonne.

Jakie są alternatywy? Ja używam Expandrive (www.expandrive.com). Expandrive pozwala na podmontowanie zdalnego katalogu jako napęd w Windows. Expandrive korzysta z protokołu SFTP. Podmontowany napęd widoczny jest tak samo, jak każdy inny dysk w systemie(screen poniżej). W PHPStorm tworzę zwykły projekt, wskazuję katalog, i jestem gotowy do pracy. Rozwiązanie sprawdza się znakomicie.

Ten post brzmiały jak reklama Expandrive, gdyby nie fakt, że ja osobiście korzystam z wersji 1.8.4. To bardzo stara wersja, najnowszą jest 4.2. 4.2 jest do mojego zastosowania słaba. PHPStorm często zawiesza się w czasie edycji projektu na dysku podmontowanym przez 4.2. Problem polega na tym, że PHPStorm dosyć intensywnie skanuje katalog przy analizowaniu klas w celu podpowiedzi kodu, czego nie da się wyłączyć. 1.8.4 nie można już kupić, i ciężko nawet ją ściągnąć. I to jest główny powód tego wpisu. To jest link do instalki: Expandrive 1.8.4. Jeśli też używacie tę wersję, tutaj możecie ją ściągnąć. Polecam:)