Month: April 2019

[GIT] Jak poradziś sobie ze znakami końca linii (.gitattributes)

Posted on Updated on

Już kiedyś o tym pisałem tylko z tamtego wpisu muszę wywalić że autocrlf.true jest dobre: Rozwiązanie CRLF dla git (znaki końca linii w Windows)

Na różnych systemach znaki końca linii są inne (Windows – CRLF, Unix – LF, Mac – CR).

Więc podczas zapisywania historii plików potrzebna jest standard jak to zapisywać. Tym standardem jest LF. Podczas wyciągania takich plików z repo na dysk następują na Windowsie zmiana na CRLF a na Macu na CR. Podobnie w drugą stronę, pliki na Windowsie edytowane z CRLF podczas zapisu do repozytorium zostaną zamienione na LF.

Kiedyś, żebo to zrobić to ustawiało się opcję autocrlf.true globalnie dla systemu. Teraz już tak nie należy robić, trzeba to zrobić w repozytorium. Żeby to dobrze zrobić na dziś dzień korzysta się z plików .gitattributes.

Poniżej taki plik jako gist, którego sobie będę utrzymywał:

# taken from https://github.com/aspnet/SignalR-samples/blob/master/.gitattributes
# Auto detect text files and perform LF normalization
* text=auto
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
*.jpg binary
*.png binary
*.gif binary
*.cs text=auto diff=csharp
*.vb text=auto
*.resx text=auto
*.c text=auto
*.cpp text=auto
*.cxx text=auto
*.h text=auto
*.hxx text=auto
*.py text=auto
*.rb text=auto
*.java text=auto
*.html text=auto
*.htm text=auto
*.css text=auto
*.scss text=auto
*.sass text=auto
*.less text=auto
*.js text=auto
*.lisp text=auto
*.clj text=auto
*.sql text=auto
*.php text=auto
*.lua text=auto
*.m text=auto
*.asm text=auto
*.erl text=auto
*.fs text=auto
*.fsx text=auto
*.hs text=auto
*.csproj text=auto
*.vbproj text=auto
*.fsproj text=auto
*.dbproj text=auto
*.sln text=auto eol=crlf
*.sh eol=lf
#####
# End of core list, below put you custom 'per project' settings
#####

view raw
.gitattributes
hosted with ❤ by GitHub

Chcę wrzucić commita na nie mój projekt na githubie

Posted on Updated on

– Forkuję ten projekt.
– clonuję mojego forka.
– ustawiam nowy remote wskazujący na oryginalne repo (to tak bardziej na przyszłość) – nazywam go upstream
– tworzę brancha (konwencją dowolna, byle się nazywał podobnie jak Pull Request który zrobię)
– wrzucam moje zmiany
– robię Pull Request z mojego brancha na mastera w oryginalnym repo.
– gdy master oryginalny posuwa się do przodu to się z nim synchronizuję: ‘git checkout master; git reset –hard upstream/master’
– analogicznie działa ‘git pull upstream’, a potem ‘git push’ (bo mój master ma “origin” jako domyślny)

!!! nie działa w C:\Work\GitHub\Tellurium\.git – nie wiem jak zrobić update do upstream/master

ZoomIt – powiększanie i rysowanie na ekranie

Posted on

ZoomIt to bardzo przydatne narzędzie do prowadzenia szkoleń i prezentacji (pod Windows, od Sysinternals). Ma 3 proste feature’y:

zoomit features

  • Timer – prosty licznik w dół, przydaje się podczas przerw, aby pozostały czas był widoczny. To pomaga się zorganizować grupie.
  • Draw – Pozwala rysować na ekranie. Najlepszym kolorem jest niebieski, który widzą osoby nawet mające problemy z kolorami (czerwonego nie widzą) – takie w przybliżeniu info.
  • Zoom – Wygodnia lupa, gdy już wejdziemy w tryb lupy, to scrolem możemy powiększać/pomniejszać. Możemy też wtedy wejść w tryb rysowania.

A to wszystko dostępne pod intuicyjnymi skrótami Ctrl + 1 do Ctrl + 4

Sekwencyjne guidy

Posted on

Unikalność Guidów jest ich istotą. Pojawia się jednak problem gdy taki guid ma być kluczem głównym w tabeli bazy danych. Wtedy jest gorzej przy INSERTowaniu rekordów. Więc jest coś takiego jak “Sekwencyjne Guidy” które rozwiązują ten problem.

WIP.

https://stackoverflow.com/questions/1752004/sequential-guid-generator

https://stackoverflow.com/questions/170346/what-are-the-performance-improvement-of-sequential-guid-over-standard-guid?noredirect=1&lq=1

http://developmenttips.blogspot.com/2008/03/generate-sequential-guids-for-sql.html

Jak powinna wyglądać prosta CRUDowa aplikacja

Posted on Updated on

Często gdy omawiane są dobre podejścia typu DDD (czasem z Event Sourcingiem) oraz architektura heksagonalna to wspomina się “ale gdy jest prosty kawałek CRUDowy to zrób to CRUDowo”. Osobny kontekst osobna subdomena.

Tylko co to znaczy w tym przypadku sławne “encje na twarz i pchasz”? Nie miałem takiej potrzeby więc trochę posiłkuję się rozmowami z 125. Spotkanie WG.NET – Unconference i doświadczeniem.

CQRSa bym zdecodowanie dodał. Rozdzielenie Commandów od Queries ma bardzo dużo zalet nawet gdy baza jest prosta. CQRS sam w sobie nie mówi nic o tym jak ma wyglądać baza, czy mają być encje, agregaty w modelu DDD, czy może jeszcze Event Sourcing.

Więc:
Query pobiera sobie dane/widok skomponowany z kilku tabel.
Command robi Inserty/Updaty w bazie (w najprostszym przypadku nawet przenosząc klasy bazodanowe na FE, a może tylko DTO które jest 1 do 1 z modelem bazy).

Bez skomplikowanych Agregatów, bez przekombinowanego Event Sourcingu.

PS, jeszcze nie oglądałem w całości, ale Kamil którą tą rozmowę zainicjował wrzucił swoje repozytorium warte uwagi: https://github.com/kgrzybek/sample-dotnet-core-cqrs-api