Wyrażenia Regularne (regular expressions/regex) oraz HTML Pattern

Jak działają wyrażenia regularne? Sam się nad tym przez pewien czas zastanawiałem. W pracy zawodowej musiałem czasem z nich korzystać, ale zbytnio nie przywiązałem do nich uwagi, bo głównie polegało to na znalezieniu pasującego przykładu z internetu.

Ze względu na to, że potrzebowałem odpoczynku od głównego projektu to postanowiłem na szybko napisać w PHP ten mały web-programik do tworzenia palety kolorów w PHP.

Read More

Poradnik do frameworka ToneJS #1 Generowanie dźwięku.

Gdy postanowiłem zaprogramować syntezator to z początku zastanawiałem się w jaki sposób odbywa się generowanie dźwięku w aplikacjach webowych. Pierwszym sposobem, najprostszym byłoby użycie gotowych, wcześniej przygotowanych dźwięków w formacie .mp3, bądź .wav.

Jednak jest to trochę obchodzenie problemu dookoła i wydajnościowo mało opłacalne.

Lepszym sposobem jest wykorzystanie Audio-Context. I mimo, że oferuje on bardzo dużo, to wydaje mi się, że wykorzystanie zewnętrznego frameworka jak Tone.js jest o wiele lepszym pomysłem. Czemu tak myślę? Gdyż framework ten posiada szereg funkcji, metod, efektów oraz możliwość dalszego ich rozwijania bez konieczności pisania wszystkiego od zera. W końcu po co wynajdować koło na nowo?

Read More

Nauka programowania #5 W jaki sposób czytać i rozumieć cudzy kod?

Prawdopodobnie nie jest to najlepsze rozwiązanie jeżeli chodzi o bardzo duże projekty, ale jeżeli właśnie zaczynacie swoją przygodę z programowaniem, to może być to świetny sposób, aby lepiej zrozumieć cudzy kod.

Była to praktyka, którą stosowałem na początku mojej drogi z nauką programowania. Ale jest to też praktyka, którą stosuje teraz jeżeli właśnie się uczę nowej technologii.

Jeżeli się właśnie uczysz czegoś nowego i nie ogarniasz zbytnio składni to radzę poszukać projektów na GitHubie lub z innych źródeł do 100 linijek. W przypadku, gdy czujesz się w danym języku pewniej, to można zacząć z projektami posiadającymi 1000-2000 linijek.

Na początek zaczniemy od tych prostych projektów.

Przy 100-200 linijkach jeżeli rozumiesz zasady OOP to nie powinno być problemu. Jeżeli projekt posiada wiele funkcji  i jest dobrze ponazywany to wystarczy zrozumieć jego logikę. Ale co jeżeli projekt jest słabo napisany i ciężko się go czyta?

Wtedy należy spróbować mojej metody. A jak ona działa?

Od końca kasujemy kolejne funkcje i sprawdzamy na którym etapie program się “wysypie”. Jeżeli nasz program mówi nam, że brakuje danej funkcji, to albo zostawiamy ją pustą, albo usunęliśmy funkcję w złej kolejności.

I teraz gdy mamy kod zmniejszony do tych kilku linijek, próbujemy dopisywać kolejne linijki (te które wcześniej usunęliśmy) i patrzymy jak zachowuje się nasz program. Co się zmienia w konsoli, jak zmienia się nasz program w przeglądarce etc.

Jeżeli program jest podzielony na kilka klas i plików to oczywiście mamy łatwiej. Jednak z doświadczenia wiem, że wiele projektów to programy na 500-1000 linijek. W tym przypadku robimy to samo co powyżej. Jednak zasada ta w większych projektach działa lepiej, bo większe projekty z natury mają lepszą strukturę. Ale i potrafią być czasem zakręcone.

 

 

 

Gotowe Prototypy projektów na DSP 2017 (można zagrać)

Gotowe prototypy projektów można już przetestować pod tym adresem:

Syntezator:

http://www.noob-programmer.com/piano/piano.html

Drum Pad:

http://www.noob-programmer.com/drum/

W pierwszym została użyta technologia Tone.js oraz jQuery. Przy drugim jedynie jQuery.

Projekty na GitHubie kolejno: https://github.com/petercrowed/PianoGame oraz https://github.com/petercrowed/DrumPad

Jak stworzę kilka takich elementów, to potem spróbuję to wszystko ze sobą połączyć i stworzyć wspólnie ze sobą działającego DAWa.

Nauka Programowania #4 Co zrobić gdy program wywali błąd?

Znacie to, gdy piszecie jakiś projekt i własnie utknęliście?  Wasz kompilator wywala błąd? Co wtedy robicie?

Akurat jeżeli jesteście na początku nauki programowania, to spotkacie się z tym problemem wielokrotnie. W miarę lepszego rozumienia koncepcji programistycznej, jak działają poszczególne elementy komputera, jak działają obiekty i jak na siebie oddziałują, to jest o wiele łatwiej. Ale mimo wszystko. To wciąż się będzie wam zdarzało. Rzadziej. Pewnie. Problem nawet szybciej rozwiążecie. Ja natomiast chciałbym wytłumaczyć początkującym jak do takich problemów podchodzić.

Read More

Nauka Programowania #3 Kondycja programistyczna

Pamiętam, że gdy zaczynałem moją przygodę z programowaniem to miałem straszne trudności kondycją programistyczną, czyli z wytrzymaniem przy programowaniu dłużej niż godzinę.

Męczyłem się, wiedza gorzej wchodziła mi do głowy. Potem to całe programowanie zaczynało mi się nudzić, aż w końcu odpuszczałem. Próbowałem również takich suplementów jak Kawa czy Yerba Mate, ale niewiele one pomagały.

Read More

Nauka Programowania #2 Rozwiązywanie problemów.

Bo czymże jest programowanie jak nie rozwiązywaniem problemów? I nie ważna zbytnio jest ich natura… Jak jego skomplikowanie. Nie da się wszystkiego rozwiązać od ręki. Są sprawy które jest trudniej rozwiązać. Które wymagają szeregu algorytmów, wielu linijek kodu, wielu miesięcy pracy i czasem dobrego zespołu programistów.

Ale problemy początkujących nie są wcale takie skomplikowane. One są “trudne” ze względu na brak zrozumienia istoty problemu.

Read More

Nauka programowania dla początkujących. #1 Wstęp

Nie będzie to poradnik jakich wiele w internecie. Sam kilka takich poradników przerobiłem i ich skuteczność uważam za średnią.

Sam zmagałem się kiedyś z programowaniem. Wiem jak trudne jest wejście i zrozumienie działania kodu. Kupujesz książkę do wybranego języka, przerabiasz kilkanaście rozdziałów po czym dochodzisz do wniosku, że nic z tego nie rozumiesz. Znam to. Byłem tam. Kupujesz kolejną książkę z nadzieją, że się coś zmieni. Kończy się na tym, że masz ponad 5 książek odnośnie programowania, a mimo to wciąż nie umiesz programować. Szukasz kursu na YouTube, bądź on-line i przepisujesz kod. Czasem bezmyślnie, czasem coś “zrozumiesz”. Przynajmniej u mnie tak to wyglądało. Dla osób umiejących już programować ciężko to zrozumieć, bo albo nauczyli się programowania dawno temu, albo może przyszło im to naturalnie?

Read More

Budowanie projektu i pierwszy prototyp.

Programując już od jakiegoś czasu, zdałem sobie sprawę, że nie wszystkie rzeczy będą takie na jakie wyglądają. Szczególnie jeżeli chodzi o naprawę bugów i błędów.

Znacie to, gdy zaczynacie coś programować i się okazuje, że napotykacie na problemy, które na pierwszy rzut oka nie wydają się takie trudne, ale gdy tylko trochę nad danym problemem spędzicie czasu, to się okazuje, że jest ciężej niż moglibyście się tego spodziewać.

Długo nie pisząc, możecie obejrzeć sobie pierwszy prototyp na GitHubie: https://github.com/petercrowed/PianoGame/tree/master

A “zagrać” możecie tutaj: http://www.noob-programmer.com/piano/piano.html

Błędy, które wciąż występują to:

  • Dźwięk kliknięcia podczas przyciśnięcia klawisza
  • Możliwość “surfowania” po klawiaturze (choć to nie jest błąd, ale lepszy UX (User Experience))
  • Opóźnienie przy naciśnięciu klawisza
  • Przy dłuższym naciśnięciu “dublowanie” się dźwięku

Najwięcej kłopotów miałem z CSSem i HTMLem. Z takich głupot początkującego programisty… Na przykład użyłem znaku # (sharp) w nazwie klasy. Jak się okazuje jest to błąd. Co prawda ten błąd nie wyświetli się wam w logach, ale po prostu klasa w CSSie nie zostanie wywołana.

Obejście problemu, gdy ma się 25 klas ze znakiem “#”? W końcu dźwięki taki znak posiadają. Choćby: “A#, C#, D#, F#, G#”.

Zamienić nazwy na końcówkę “is”, a następnie w kodzie przetłumaczyć, przy pomocy “String replace”.

var blackKeyName = ".black." + notes[e.keyCode];
substring = "#";
var newBlack = blackKeyName.replace("#", "is");

W ten sposób CSS nam nie wariuje, a mimo to dalej html przekazuje dany dźwięk do wywołania.

Co zostało do zrobienia to na początek naprawa błędów, a potem można się zabrać za rozbudowywanie programu o nowe funkcje.

Z technologii które póki co użyłem to jQuery i Tone.js. Co prawda ten jQuery słabo mi pasuje i pewnie go zastąpię… jeżeli tylko znajdę inne, lepsze rozwiązanie.

I trochę dodatkowej dawki humoru na koniec.

Ulubiona tonacja gitarzysty programisty?

C#