Recenzja Książki: Rozmowa Rektrutacyjna Dla Programistów – Przewodnik Do Sukcesu

Recenzja książki: Rozmowa Rektrutacyjna dla programistów – Przewodnik do sukcesu

Krótko: Jeżeli planujesz dostać się do Google, Amazon, Microsoft, Facebook Yahoo, Apple jako programista, to kup tę książkę. W innym przypadku odpuść sobie.

Trochę dłusza, ale nadal krótka wersja

Tytuł oryginału: Cracking the Coding Interview: 150 Programming Questions and Solutions.
Autorka: Gayle Laakmann MacDowell.
Wydawnictwo Helion.pl.
ISBN: 978-83-246-9332-0

Czytaj resztę...
Ustaw Visual Studio Code Jako Domyślny Edytor Oraz Diff Tool

Ustaw Visual Studio Code jako domyślny edytor oraz diff tool

Jeżeli korzystasz z Visual Studio Code to też duże prawdopodobieństwo, że korzystasz także z Gita jako system kontroli wersji.

Według tych porad możesz ustawić Visual Studio Code jako domyślny edytor dla Gita oraz jako domyślny difftool czyli narzędzie pokazujące zmiany pomiędzy dwoma commitami.

Aby ustawić Visual Studio Code jako domyślny edytor to wykonaj taką komendę w konsoli

git config --global core.editor "code --wait"

Czytaj resztę...
Visual Studio Code – Synchronizacja Ustawień Między Komputerami

Visual Studio Code – Synchronizacja ustawień między komputerami

Korzystasz z wielu komputerów lub wielu maszyn wirtualnych? Lubisz mieć zawsze te same:

  • skróty klawiaturowe
  • snippety
  • ustawienia edytora
  • zainstalowane rozszerzenia

Jeżeli tak, to mam coś dla ciebie. Visual Studio Code Settings Sync rozszerzenie do Visual Studio Code, które korzystając z twojego konta na GitHub synchronizuje ustawienia pomiędzy komputera.

Czytaj resztę...
Benchmark-test Algorytmu LFU O(1) Vs. O(n)

Benchmark-test algorytmu LFU O(1) vs. O(n)

Komentarz Michała sprowokował ten wpis, aby porównać dwie implementacje LFU, jedną bazującą na dwóch słownikach (o złożoności obliczeniowej O(n)) oraz opartą na listach dwukierunkowych i słowniku (o złożoności obliczeniowej O(1)).

Zasady benchmarku

Czytaj resztę...
Algorytm LFU Dla Pamięci Cache – Rozwiązanie W Stałym Czasie – O(1)

Algorytm LFU dla pamięci cache – rozwiązanie w stałym czasie – O(1)

Z nieistniejącego jeszcze cyklu: pytania algorytmiczne oraz struktury danych u gigantów doliny krzemowej: Google, Amazon, Microsoft etc.

Pamięć podręczna cache to pamięć o bardzo szybkim dostępie, której jest bardzo mało. Tworząc procesor twórcy implementują jeden z algorytmów do zarządzania pamięcią, który decyduje, który element z pamięci ma wylecieć, aby utworzyć miejsce dla nowego elementu.

Wikipedia podaje kilkanaście różnych podejść w celu rozwiązania tego problemu. Miedzy innymi jest:

  • Usuwanie najdawniej użytego elementu – Least Recently Used (LRU)
  • Usuwanie ostatnio użytego elementu – Most Recently Used (MRU)
  • i bohater dzisiejszego odcinka – Usuwanie najrzadziej używanego elementu – Least Frequently Used (LFU)

Tych co nie wiedzą czym jest notacja Dużego-O, przypomnienie: O(x) określa jak rozwiązanie problemu w czasie, będzie wzrastać razem z zwiększeniem problemu. O(n) wzrost liniowy (szukanie elementu w tablicy), O(n^2) wzrost kwadratowy (sortowanie bąbelkowe), O(lg n) wzrost logarytmiczny (wyszukiwanie binarne), O(1) czas stały (dostęp do elementu w tablicy).

Jeżeli masz trudność z zdecydowaniem się jaki algorytm lub struktura danych ma jaką złożoność obliczeniową to udaj się na Big O Cheat Sheet.

Algorytmu do obsługi pamięci cache muszą być dwa.

  • wstawianie wartości metoda set(key, value): void
  • wyciąganie wartości metoda get(key): value

(po dwukropku informacja o wartości zwracanej przez funkcję).

Prostym rozwiązaniem, nie optymalnym jest wykorzystanie dwóch Hash Table, więc .NET’owych Dictionary.

Pierwszy Dictionary przechowuje wartości pod kluczem Dictionary<string, TValue>, drugi Dictionary przechowuje jak często dany klucz jest wykorzystany czyli Dictionary<string, int>.

Metoda get(key) zwiększa licznik użycia dla danego klucza oraz zwraca wartość przechowywaną w pierwszym Dictionary. Obie te operacje są operacjami O(1) więc wyjściowa złożoność get(key) jest równa O(1). Połowa za nami.

Druga metoda set(key, value), musi znaleźć najmniej używany klucz i go w to miejsce podmienić. Niestety operacja szukania najmniej używanego klucza „kosztuje nas” O(n), więc cała metoda kosztuje nas O(n).

Jak zoptymalizować to rozwiązanie? Do czasu O(1)

Czytaj resztę...
Visual Studio 1.8 Tryb Zen, Wyjście Na Gorąco Oraz łatwiejsza Edycja Ustawień Aplikacji.

Visual Studio 1.8 Tryb Zen, Wyjście na gorąco oraz łatwiejsza edycja ustawień aplikacji.

Nowy miesiąc duże zmiany w Visual Studio Code, bo zbliża się okres świąteczny, więc trzeba było zrobić nowych funkcjonaliści „na zapas”. Styczeń powinien być chudy jeżeli chodzi o usprawnienia mojego ulubionego edytora.

Pełna wersja angielska jest dostępna pod grudniowym adresem. A najlepsze kąski po polsku znajdziesz poniżej.

Hot Exit

Od teraz Visual Studio Code nie wyświetli takiego komunikatu przy wychodzeniu z programu (przez X w górnym prawym rogu):

unsaved_file

Nie zapisane zmiany będą trzymane w pamięci podręcznej aplikacji. W momencie gdy wrócisz z powrotem do twojego projektu, wszystkie zmiany bądą zachowane, czekając na twój zapis.

Funkcjonalność można wyłączyć w ustawieniach programu (File->Preferences->User Settings) ustawiając files.hotExit na wartość false. Domyślnie Hot Exit jest włączony.

To także oznacza, że przypadku kiedy Visual Studio Code przestanie nagle działać, to przywróci dane z swojego backupu, nie zależnie czy Hot Exit jest włączony czy nie.

Zmiany w Activity Bar

Activity Bar to nazwa dla tego paska narzędziowego:

activityBar

Czytaj resztę...
Czego Nauczyłem Się Po 5 Latach Programowania; Wspominki Soltys Programmer Bot

Czego nauczyłem się po 5 latach programowania; Wspominki Soltys Programmer Bot

Wstęp

3 grudnia minie 5 lat od kiedy zacząłem pisać grę Soltys Programmer Bot.

5 lat temu napisałem dwa posty na ten temat moich doświadczeń przy pisaniu tej gry.

Na moich studiach inżynierskich, na 2 drugim roku trzeba było napisać grę 3D z wykorzystaniem OpenGL. Gołego OpenGL, bez silników graficznych.

Cały rok pisał w C++, ja jak Che Guevara rewolucyjnie postawiłem, że napiszę grę w C#. Wiązało się, że nie będę miał supportu od prowadzących zajęcia, ale opłaciło się podjąć to ryzyko. Dzięki temu, że nie skupiałem na prawidłowej alokacji pamięci udało mi się „dostarczyć” więcej w krótszym czasie.

Kod jest dostępny na GitHub. Uruchomienie tego kodu wymaga jego znajomości. 😀

Gra jest klonem light-Bot. Jeżeli chcesz zobaczyć jaka to była gra to zagraj w light-bot.

Ostatecznie gra zajęła 3 miejsce w konkursie wewnątrz wydziałowym na najlepszą grę roku.

Co sądzę o swoim projekcie po 5 latach?

„Domyślny” dla Visual Studio .gitignore ignoruje pliki .obj

Jak pisałem ten kod to nie używałem systemu kontroli wersji git. Nie pamiętam czy nie używałem systemu kontroli wersji w ogóle czy używałem lokalnego SVNa.

Tak czy siak, po skończeniu poznałem GitHuba.

Czytaj resztę...
TypeScript Dzielenie Kodu Na Wiele Plików, Moduły I WebPack – Krok Po Kroku

TypeScript dzielenie kodu na wiele plików, moduły i WebPack – Krok po kroku

Ostatnio skończyliśmy na HelloWorld, teraz skupimy się jak można podzielić nasz kod na wiele plików.

Kod TypeScript tak jak JavaScript dzieli się na moduły.

Aby umożliwić korzystanie z modułów w TypeScript należy z edytować tsconfig.json i dodać

Określając module określamy jaki wzorzec, akceptowany przez popularne ładowarki-pakietów. Zmiana ustawienia module zmienia kod, który jest generowany przez słowa kluczowe export i import

Czytaj resztę...
Nowości W Visual Studio Code 1.7.1. Automatyczne Poprawki Lintera, Formatowanie Zaznaczonego Kodu.

Nowości w Visual Studio Code 1.7.1. Automatyczne poprawki lintera, formatowanie zaznaczonego kodu.

Nowy miesiąc – nowa wersja mojego ulubionego edytora – Visual Studio Code.

Wydanie listopadowe nie odbyło się bez problemów. Wersja 1.7.0 posiadała możliwość automatycznego ściągania plików opisujących typy w bibliotekach JavaScript dla języka TypeScript. Problem w tym, że popularność automatycznego ściągania plików nie spodobała się serwerom npmjs.org. Po paru godzinach dużego obciążenia serwerów npmjs.org Microsoft był zmuszony wycofać wersję 1.7.0. No i teraz mamy wersję 1.7.1 pozbawione możliwości automatycznego ściągania typów.

Listę zmian można przeczytać na stronie listopadowej.

A oto moja lista najważniejszych zmian wydanych w wersji 1.7.1.

Poziome dzielenie edytora

Od jakiegoś czasu mogłeś mieć otwarte kilka plików jednocześnie w jednym oknie. Pliki pokazywały się w kolumnach, od 1.7.1 mogą pokazywać się w wierszach.

Horizontal Layout

Czytaj resztę...