Skocz do zawartości

Zabawy algorytmiczne i programowanie


Maklak2

Recommended Posts

> SQL 

Ponownie przeczytałem książkę "SQL clearly explained", bo chociaż jest oparta na standardzie SQL 92, to podstawy aż tak bardzo się nie zmieniły. Później znalazłem 3 edycję z 2010 roku i jest trochę uaktualniona i pozmieniana. Ten SQL i tak nie jest mi potrzebny do żadnych bieżących projektów, tylko do tego żebym mógł powiedzieć że "znam SQLa". 

 

> IDE do Javy 

A to jest coś innego niż Eclipse? 

Link do komentarza
Udostępnij na innych stronach

>dyskusja o V8 vs. Java

 

Z doswiadczenia wiem, ze o ile predkosc V8 do zastosowan webowych zupelnie wystarcza, to o tyle zuzycie RAMu w aplikacjach serwerowych (node.js) bije na glowe nawet Jave. Nie wiem, czemu garbage collector nigdy nie chce dzialac poprawnie.

 

A to jest coś innego niż Eclipse? 

 

NetBeans, IntelliJ IDEA (czy jakos tak) na pewno. Nie wiem, jak inne - sam uzywam Eclipse, choc na ekranach HiDPI scrolling sie chorobliwie wiesza.

 

Oczywiście wiele projektów korzysta z ORMów, więc można nie ruszyć SQL a po ludzku korzystać z relacyjnej bazy danych. Jednak jeżeli ktoś myśli przyszłościowo to jednak zamiast tego radził bym się zainteresować ogólnie ruchem NoSQL :MJTQO:

 

>NoSQL

 

Zalezy jaki i do czego. NoSQL to nie jest zastępstwo dla SQLa! Silniki SQL (zwłaszcza PostgreSQL) są bardzo stabilne, dopracowane i używane od co najmniej dekady. Wielokrotnie słyszę jednak o horror stories po krachu np. MongoDB. Przyznam jednak, że key-value store'y (Redis) mają przyszłość - jako cache i przechowalnia danych mają niezrównaną prędkość.

 

O jakim dialekcie SQLa najlepiej sobie poczytać? Wiem że są różne w różnych bazach danych i nie trzymają standardów, ale może jest jakaś odmiana SQLa która wygląda podobnie prawie wszędzie. 

 

Dla programistów node.js istnieje Knex, czyli oparty na funkcjach "twórca" żądań SQL, który obsługuje zarówno MySQL, PostgreSQL jak i SQLite3 przy takim samym kodzie.

Link do komentarza
Udostępnij na innych stronach

Zależy jaki i do czego. NoSQL to nie jest zastępstwo dla SQLa! Silniki SQL (zwłaszcza PostgreSQL) są bardzo stabilne, dopracowane i używane od co najmniej dekady. Wielokrotnie słyszę jednak o horror stories po krachu np. MongoDB. Przyznam jednak, że key-value store'y (Redis) mają przyszłość - jako cache i przechowalnia danych mają niezrównaną prędkość.

Hm... też słyszałem wiele opowiedzianych historii, możliwe że to prawda, ale te projekty się dopiero od niedawna są i szybko się rozwijają, ktoś po prostu miał pecha.

Akurat Redis to nie tylko Key Value Store, ale też serwer struktur danych, których operacje są atomowe przez co odpowiednie algorytmy nie wymagają transakcji, dzięki czemu wszystko jest wydajniejsze.

 

To prawda że NoSQL nie zastępuje tego co mamy w relacyjnej bazie danych, problem w tym że wiele spotykanych przypadków użycia pokrywa KVS, a akurat baza danych to tego jest bardzo niewygodna i często niezoptymalizowana.

 

Dla programistów node.js istnieje Knex, czyli oparty na funkcjach "twórca" żądań SQL, który obsługuje zarówno MySQL, PostgreSQL jak i SQLite3 przy takim samym kodzie.

Jak dla mnie takie API łatwiej używać niż SQL'a. Przejrzałem też Bookshelf ale dziwne jest dla mnie więc się nie wypowiem.

Link do komentarza
Udostępnij na innych stronach

  • 1 month later...

Cześć, naszedł mnie pomysł, żeby na firmę założyć nowe konto pocztowe. Masz może jakieś sugestie? Moim pierwszym pomysłem był gmail, ale jakoś tak agresywnie domaga się numeru telefonu. 

Wiem że to nie na temat, ale i tak nikt tu nic od dawna nie pisał. 

Link do komentarza
Udostępnij na innych stronach

Odnośnie "Javascript the good parts" to przeczytałem większość tej książki i jakoś mnie nie przekonuje. Opowiada o konstruktach językowych które mało mnie interesują, przynajmniej w porównaniu do rzeczy do których jestem przyzwyczajony. No i duża część z tego to gimnastyka dookoła złych części Javascriptu. 

 

Teraz jestem zmuszony pracować w .NET i wolałem C++. W .NET jest duża biblioteka standardowa i kilka rzeczy jest fajnie zrobionych (np. można zrobić w klasie / strukturze pole które posiada gettery i settery, ale używa się tego jak publicznego pola w strukturze i funkcje varargs są sensowniej zrobione), za to jest javopodobne i używanie długich nazw i tworzenie dużej liczby klas należy do dobrego tonu. W C++ programista ma więcej wolności i w C++ 11x poprawili sporo rzeczy. 

Edytowano przez Maklak2
Link do komentarza
Udostępnij na innych stronach

Cześć, naszedł mnie pomysł, żeby na firmę założyć nowe konto pocztowe. Masz może jakieś sugestie? Moim pierwszym pomysłem był gmail, ale jakoś tak agresywnie domaga się numeru telefonu. 

Może outlook.com?

 

Mnie osobiście podoba się biblioteka standardowa .NET, ale co kto lubi.

A propos c++11 rzeczywiście sporo fajnych rzeczy dodali. Chociażby takie podstawy jak wyrażenia regularne. Niestety z obsługą tego przez kompilatory dalej jest różnie. Wczoraj męczyłem się godzinę próbując użyć wyrażeń regularnych w MinGW 4.8, żeby w końcu odkryć, że są one nieskończone/nie działają (mają działać w 4.9). Oczywiście nie mogli dać warninga w nagłówku czy coś...

Link do komentarza
Udostępnij na innych stronach

> Może outlook.com? 

Meh, nie lubię Microsoftu. Wystarczy mi że muszę pracować na ich programch :/ 

 

Hehe, parę miesięcy temu napaliłem się na to C++ 11x, też chciałem użyć regexów w gcc, ściągnąłem sobie jakiś prosty przykład z neta i błąd kompilacji. Wróciłem do Perla. 

Edytowano przez Maklak2
Link do komentarza
Udostępnij na innych stronach

  • 3 weeks later...

Fajna gierka. Przeszedł bym całą ale już późno... Doszedłem do poziomu 8.

Z drugim też miałem problem, gdyż jeszcze się nie wkręciłem, ale to było banalne.

Odpowiedź do drugiego (mam nadzieję, że nie przeszkadza, że nie jestem Arpegiusem :P)

Musisz użyć instrukcji, która zablokuje wykonanie kodu niżej.

Zwykły IF załatwia sprawę.

Link do komentarza
Udostępnij na innych stronach

Znalazłem dziwną grę, ale nie mogę przejść drugiego poziomu. Arpegius? 

Lol X_X wstaw sobie exit koło siebie i wykonaj kilka razy:

  

var p= map.getPlayer();
map.placeObject(p.getX(),p.getY()+1, 'exit');

Inna sprawa że gra nie jest zbyt dobrze zabezpieczona przed oszukiwaniem, mnie się nie chciało myśleć i większość plansz przeszedłem tym kawałkiem kodu:

    if(map.abc!==0) {
      var g= map[String["from"+"Char"+"Code"](95)+"getGrid"](); 
      for( var x= 0; x< map.getWidth(); ++x)
        for( var y= 0; y< map.getHeight(); ++y) {
          if( g[x][y].type == 'exit') { g[x][y].type= 'empty'; }
        }
      var p= map.getPlayer();
      g[ p.getX() + (p.getX()?1:-1) ][p.getY()].type = 'exit';
      map.abc=0; }

A jak już wam się znudzi jakaś plansza i chcielibyście przejść dalej...

Uruchomcie gdziekolwiek ten kawałek kodu i odświeżcie stronę ;-]

localStorage.setItem('levelReached', 99);

Daje to dostęp do wszystkich leveli ;-]

Inna sprawa że gra niezbyt mi się podoba, wolę gdy trzeba coś zaprogramować niż hackować.

Dla przykładu podam moją ulubioną grę czyli Colobot.  Ostatnio stał się OpenSourcowy i można sobie go ściągać za darmo. Można tez sobie skompilować pod Linuksem, działa świetnie.

Jedynie czego brakuje to rozgrywki sieciowej ;-> było by to naprawdę świetne do nauki programowania przez zabawę.

 

Edytowano przez Arpegius
Link do komentarza
Udostępnij na innych stronach

  • 3 weeks later...

Taka tam ciekawostka o pętlach for w javascripcie. Na Operze 12 róznice dochodzą do 100%,  w Firefoxie 28 są w okolicach 2%. 

 http://jsperf.com/fastest-array-loops-in-javascript/2

 

I nie wiem co to jest, ale może spodoba się Arpegiusowi: http://vanilla-js.com/

 

BTW, co daje niezmienność stringów, tak popularna w wielu językach programowania? Jak dla mnie to że StringBiulder jest osobną klasą to jeden z głupszych pomysłów na jakie można wpaść, zaraz po algorytmie malarza na C-stringach. 

 

Wizualizacja i udźwiękowienie algorytmów sortowania: 

Edytowano przez Maklak2
  • +1 1
Link do komentarza
Udostępnij na innych stronach

I nie wiem co to jest, ale może spodoba się Arpegiusowi: http://vanilla-js.com/

Jest to strona która  wyśmiewa wszystkie frameworki JSowe, które według autora wręcz utrudniają pisanie i spowalniają całą stronę. Wanilia oznacza po prostu „czysty”.

Nie znam się na WebDeveloperce więc nie powiem ile w tym racji.

Link do komentarza
Udostępnij na innych stronach

  • 7 months later...

Thx za bumpa tej nici, właśnie sobie przypomniałem że miałem coś tu wrzucić:

 

http://www.codingame.com

 

Wiec programujemy w ulubionym języku, rozwiązując jakiś prosty problem, który następnie obserwujemy jako grę, Może nic nadzwyczajnego ale przynajmniej dobrze zrobione.

Edytowano przez Arpegius
Link do komentarza
Udostępnij na innych stronach

Nawet nie bumpa. Musiałem pisać do moderatorów i czekać aż odblokują. Znowu :/

Wszedłem na tę stronę, zamknałem tutorial i nie mogłem edytować kodu. Nie podobają mi się też te wszystkie wodotryski i tutorial.

 

Kiedyś polecałeś grę "Colobot" czy coś takiego. Znalazłem podobną, nazywa się "Space Engineers". Chodzi się ludzikiem jak w Minecrafcie i kopie asteroidy, przerabia na żelazo i buduje z tego statki kosmiczne.

Edytowano przez Maklak2
Link do komentarza
Udostępnij na innych stronach

Kiedyś polecałeś grę "Colobot" czy coś takiego. Znalazłem podobną, nazywa się "Space Engineers".

Tak bardzo niepodobna ;-P

Naprawdę, to zupełnie inne gry. Nawet fabuła jest inna, mimo że obie rzeczy dzieją się w kosmosie. W Colobocie wszystko da się zrobić automatycznie i nic nie możesz sam skonstruować, to zupełnie odmienne od wszystko możesz zrobić ale nic się nie będzie dziać automatycznie.

 

Co do Space Engineers to po prostu MineCraft w kosmosie, nic szczególnego i po prostu z lepszą grafiką. Grałbym, ale niestety nie wydali na SteamOsa (no dobra wiecie że chodzi mi o Linuksa ale to taka bardziej znajoma nazwa).

 

Niestety projekt Notcha pod nazwą 0x10ᶜ padł, bo autor nie znalazł w nim dobrej zabawy,  a mógłby być ciekawy.

 

Musimy częściej pisać w tym wątku to go nie będą zamykać.

 

Co ciekawe za niedługo będzie jakiś ogólnoświatowy ewent pod nazwą  http://godzinakodowania.pl/  organizowana przez http://code.org/ , jak dla mnie zazna incjatywa.

Edytowano przez Arpegius
Link do komentarza
Udostępnij na innych stronach

Nawet nie bumpa. Musiałem pisać do moderatorów i czekać aż odblokują. Znowu :/

 

Temat musi być nieco bardziej aktywny, bo skrypt automatycznie zamyka i przenosi do archiwum tematy, których ostatni post datowany jest ~3mc wstecz.

 

Offtopując minimalnie

Przeglądałem temat i widziałem jakiś problem z trójkątem pascala. Jak ktoś słusznie zauważył, liczenie rekurencyjne jest "trochę" nieefektywne, a więc lepszym rozwiazaniem jest symbol newtona. Problemem symbolu newtona jest jedynie to, iż wykorzystuje silnie (acz łatwo to można skrócić). Gdyby jednak komuś nie chciało się skracać tej silni, polecam korzystać ze wzoru Stirlinga, aby szybko obliczyć wartości silni dla dużych liczb. Potem wystarczy tylko zaokrąglić wynik do całości i voila :^)

Co do dziedziczenia w javascripcie z tego co pamiętam aby odziedziczyć prototyp wystarczy zrobić cuś takiego

Object1.prototype.__proto__ = Object2.prototype
Acz w innych językach istnieją wygodniejsze rozwiązania :P

Bodajże ES6 implementuje już coś takiego jak 

Class NazwaKlasy extends InnaKlasa
@B2T

 

Arpegius, mógłbyś coś więcej napisać o tej godzinie kodowania? Nie mogę na stronie znaleźć jakichś informacji :P (być może jestem ślepy :v)

Link do komentarza
Udostępnij na innych stronach

Arpegius, ta godzina kodowania to chyba trochę poniżej naszego poziomu.

 

> Temat musi być nieco bardziej aktywny, bo skrypt automatycznie zamyka i przenosi do archiwum tematy, których ostatni post datowany jest ~3mc wstecz.

Cały czas się kłócę, że to bez sensu, bo nieaktywny temat sobie spada na dół listy i nie przeszkadza. Może nekromancja wątków i cytowanie czegoś co ktoś powiedział rok temu jest irytujące, ale istnieje sporo tematów / wątków "ponadczasowych". Na, ale przenoszenie wątków do archiwum żeby było trudniej je znaleźć to jedna sprawa, a naprawdę wściekły byłem dopiero kiedy się okazało, że w 2013 skasowało mi kilka dużych wątków z 2012.

 

Wracając do zabaw algorytmicznych, czy ktoś potrafi wykombinować, jak mając 6 boków czworościanu policzyć jego objętość? Ten problem zastanawiał mnie mniej więcej od 2001 i nie znalazłem rozwiązania. Nie chodzi o czworościan foremny, ale o "nieforemny". Boki są podawane jako 6 liczb w koreślonej kolejności (można przyjąc dowolną, ale największy sens mają 3 krawędzie "podstawy" i 3 pozostałe krawędzie). Jeśli dla jednej z 4 ścian nie jest spełniony warunek trójkąta, to rozwiązanie nie istnieje, ale to łatwo sprawdzić.

Edytowano przez Maklak2
Link do komentarza
Udostępnij na innych stronach

Nie jest to zbyt skomplikowane, ale w kilku punktach objaśnię:

Biorę pod uwagę czworościan ABCD

1. Obliczam pole podstawy (niech stanowi ją trójkąt ABC) z wzoru Herona (bo najprościej)

Aby obliczyć objętość potrzebuje wysokości ostrosłupa, a żeby ją uzyskać potrzebuję obliczyć wysokość ściany bocznej

2. Wybieram dowolną ścianę boczną (ja wezmę ABD) i obliczamy jej pole za pomocą wzoru Herona (znowu - bo najszybciej)

3. Mając pole obliczam wysokość (nazwijmy ją odcinkiem DK)

Następnie biorę pod uwagę trójkąt który składa się z obliczonej przed chwilą wysokości, boku będącego 'naprzeciwko' wysokości (u mnie CD) i odcinka łączącego (u mnie punkt KC)

4. Obliczam pole DKC wzorem Herona

5. Obliczam wysokość czworościanu.

No i mając pole podstawy i wysokość, podstawiam pod wzór na objętość i voilà.

Link do komentarza
Udostępnij na innych stronach

Arpegius, ta godzina kodowania to chyba trochę poniżej naszego poziomu.

Nie no tak, ale chodzi mi o zainteresowanie nie tylko twoje ale i ogólnie wszystkich bo znam dużo osób które chcą się uczyć.

Po za tym jest to fajny czas aby przedstawić i zaciekawić innych np Colobotem, bo zawsze możesz zostać organizatorem.

 

 

[...], jak mając 6 boków czworościanu policzyć [...]

Powinno być 6 krawędzi.

No to w sumie zadanie z matematyki.

 

 

Arpegius, mógłbyś coś więcej napisać o tej godzinie kodowania? Nie mogę na stronie znaleźć jakichś informacji :P (być może jestem ślepy :v)

Niestety nie tylko pobieżnie mi ta informacja przeleciała przed okiem, wszystko powinno być na tej stronie, ale jakoś to co chce wiedzieć to po angielsku jest.

Link do komentarza
Udostępnij na innych stronach

Problem z tym rozwiązaniem jest taki, że nie masz długości KC. To prawie nigdy nie będzie wysokość ABC liczona z odcinka C. Poza tym nie jestem przekonany, że wysokość ostrosłupa leży na trójkącie CDK. Bo niby czemu na CDK a nie na CDM, gdzie M jest wysokością ABC z wierzchołka C.

 

Tak przy okazji: to zadanie było na programowaniu 2 jako praca domowa i prawie nikt go nie zrobił, a ci którzy zrobili, gadali coś o wektorach.

Link do komentarza
Udostępnij na innych stronach

  • 3 weeks later...

Średnio pasuje do tematu, ale widziałem grę Robocraft i mi się podoba. Buduje się roboty z klocków lego, a później walczy z innymi robotami. Niestety tylko jeden typ broni ma automatyczne śledzenie celu, nic się nie programuje i za dużo zależy od zręczności gracza. Jak dla mnie to zapiast fotelika powinien być duży klocek z akumulatorem, CPU powinno być w klocku i w MFLOPach a nie w PFLOPach (co jest niedorzeczne). Do tego jakieś rakiety i jakieś bronie do walki w zwarciu. No i walka bardziej jak w Eve Online, czyli wybierasz sobie cel, każesz go śledzić i atakować i czekasz na koniec.

 

Próbowałem to uruchomić pod Linuzem, ale nie dałem rady. Jakaś usługa co niby ma zabezpieczac przed oszukiwaniem w tym przeszkadza. Na razie sobie wstępnie zainstalowałem W7 pod Virtual boxem do gier.

 

Link do komentarza
Udostępnij na innych stronach

Chcesz dodać odpowiedź ? Zaloguj się lub zarejestruj nowe konto.

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to bardzo łatwy proces!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
×
×
  • Utwórz nowe...