Zaloguj się, aby obserwować  
UthersonL

Programowanie - pytania, problemy, przykłady programów

1812 postów w tym temacie

Dnia 13.05.2014 o 23:49, Daronn_Darker napisał:

Może ktoś wie o co się pluje Eclipse?


Sprawdź czy masz dodaną Javę w zmiennej środowiskowej PATH.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.05.2014 o 22:08, Darkstar181 napisał:

Pragnę nauczyć się htmlu z css oraz programowania w javie, wszystko w celu projektowania
stron. Jestem kompletnie zielony, mam za sobą jedynie parę wstępnych lekcji z c++ i i
całkiem dobrą znajomość angielskiego.


Na początek musisz sam określić czego bardziej chcesz się nauczyć - frontendu czy backendu. Frontend to część którą dostaje użytkownik czyli HTML + CSS + (opcjonalnie) JavaScript. To jest właśnie strona internetowa tak jak się ją widzi w przeglądarce. Backend z kolei to to co dzieje się na serwerze czyli generowanie strony (pobieranie odpowiednich danych z bazy danych, wyszukiwanie treści, itp.). Tu używa się całej masy języków: PHP (najpopularniejszy), Ruby, Python, Java, JavaScript itp.
Jak nie wiesz za co się brać to zacznij od HTML+CSS (podstawy) i jak już będziesz potrafił zrobić formularz, tabelę itp. to dorzuć PHP + MySQL (baza danych) i wtedy zobaczysz co ci bardziej potrzebne.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../

Umm, różnice między Javą a Javascriptem są mniej więcej takie jak między 15-metrowym smokiem a jaszczurką :P Rozwinę nieco myśl:

Javascriptu zazwyczaj używa się do dodania dodatkowej logiki po stronie użytkownika. Np. "jeśli najedziesz na to pole to wyświetl jakiś komunikat" albo do napisania jakiegoś kalkulatorka który pokaże się na ekranie. Czy modyfikacji (w locie) wyglądu strony, dodaniu animacji itp. Język bardzo prosty (zwłaszcza że mało kto się obecnie uczy "czystego" Javascriptu, zazwyczaj korzysta się z jQuery itp) jednak tak naprawdę jego możliwości są niepowalające.

Java z kolei jest językiem ogólnego przeznaczenia. Możesz w niej napisać np. Minecrafta ;P To o czym mówisz, że Java jest niezbędna w tworzeniu stron to... jednocześnie prawda i nieprawda. Zazwyczaj wykorzystuje się ją bowiem bardzo rzadko.

Rzeczywiście pozwala ona na dodanie do strony logiki po stronie SERWERA. Jaka jest różnica? Kod HTML, CSS, Javascript itp po prostu przesyłasz użytkownikowi i wykonuje się u niego. Ale np. chciałbyś dodać mechanizm logowania do swojej strony. Użytkownik wpisuje w panelu swój login i hasło i jeśli te się zgadzają z tym co masz np. w bazie danych to może spojrzeć na określoną treść. Raczej wolałbyś żeby użytkownik nie "widział" potrzebnego loginu i hasła, on ma tylko widzieć gotową stronę. I do tego właśnie służy wówczas Java - pozwala na przesyłanie i odbiór danych od użytkownika, może także kontrolować JAKIE dane przesłać użytkownikowi - np. jeśli nie jest zalogowany to wyświetli mu tylko "permission denied to see this resource". Tak samo jakiekolwiek zapytania od użytkownika do strony (np. choćby pole ''szukaj'' w google) wymagają już wsparcia ze strony serwerowej.

Więc dlaczego mówię że to jednocześnie prawda i nieprawda? Bo mało kto używa w tym konkretnym celu Javy - zazwyczaj wykorzystywany jest PHP (którego nie znoszę choć jest to najpopularniejsze rozwiązanie), Ruby on Rails (którego uwielbiam) i Python z Django (który jest w porządku). Java jest od tych języków zdecydowanie szybsza ale trudniejsza w nauce i wykorzystaniu.

No i tak naprawdę... to ogólnie jest zupełnie inna szkoła jazdy - samemu pisząc kod średniego wielkościowo portalu (sklepik internetowy + kilka innych dodatków) to powiem że praca rozkłada się mniej więcej tak:
- HTML: 3%
- Javascript: 3%
- CSS: 2%
- Ruby on Rails: 92%

Skąd takie różnice? Otóż przy tworzeniu profesjonalnych witryn pracuje się nad nimi "nieco" inaczej niż nad jakąś małą wizytówką. Ogólnie PHP/Railsa/Django/Javy używa się do w zasadzie wszystkiego - to one decydują CO wyświetlić użytkownikowi i kiedy, pobierają niezbędne dane np. z bazy danych, dokonują obliczeń po stronie serwera, interpretują dane otrzymane od użytkownika i przetwarzają je dalej. Mnóstwo kodu jest też skupionych wobec zabezpieczenia witryny bo każde miejsce na interakcję z użytkownikiem to potencjalna luka w bezpieczeństwie.

IMHO w web developmencie od dłuższego czasu dość rzadko używa się Javy chyba że piszesz aplikację która ma mieć zapewniony poziom wydajności na poziomie Twittera/Facebooka (aka coś NAPRAWDĘ dużego z dziesiątkami tysięcy użytkowników w ciągu minuty gdzie każda milisekunda się liczy). Tanie hostingi online zwyczajowo mają wsparcie tylko dla PHP. Railsa i Django używa się często w portalach z nieco większym budżetem (musisz mieć albo serwer wirtualny albo dedykowany a te jednak kosztują tak od 200 do 5000 zł rocznie). No ale faktem jest że programista Javy (Pythona i Ruby zresztą też) wcale nie musi oznaczać kogoś związanego w jakikolwiek sposób ze stronami internetowymi.

Podsumowując:
- Javascript - pomaga upiększyć witrynę i dodać do niej nieco "życia".
- Java - język ogólnego przeznaczenia. Możesz w nim zrobić wszystko od gry komputerowej po arkusze kalkulacyjny.

IMHO więc jeśli już chcesz się czegoś uczyć i interesują cię aplikacje sieciowe to sens ma Javascript + PHP (a jak już go trochę opanujesz to framework CodeIgniter lub Symphony2)/Ruby z frameworkiem Rails/Python z Django.
Java tylko jeśli masz naprawdę dużo czasu na naukę (Helion niedawno wydał całkiem fajne podręczniki obejmujące ten język, coś koło 2000 stron... a tylko poruszają one tematykę stron WWW :P) i interesuje cię "coś więcej".

Samemu polubiłem Ruby i od niego zacząłem poważne pisanie aplikacji sieciowych. Całkiem fajna żeby zacząć jest książka:
http://helion.pl/ksiazki/programowanie-w-ruby-od-podstaw-peter-cooper,prubpo.htm#szczegoly

A potem, jak już opanujesz samą składnię języka i nauczysz się pisać jakieś programy to twoim kolejnym celem jest to:
http://pragprog.com/book/rails4/agile-web-development-with-rails-4
Które tłumaczy krok po kroku jak w ogóle wygląda tworzenie stron internetowych z użyciem Ruby i frameworka Rails. Tematyka tej książki to akurat ''jak napisać sklep internetowy'' czyli całkiem praktyczne zagadnienie. Oczywiście, wymagana będzie pewna wiedza z dziedziny HTML, CSS i choć szczypta JavaScriptu.

Alternatywą jest PHP - co prawda samemu go wyjątkowo nie lubię ale nie ma co ukrywać, to zdecydowanie najprostszy sposób żeby w zasadzie OD RAZU móc pisać kod którego efekty będzie można zobaczyć w przeglądarce użytkownika. Tutaj książek i poradników znajdziesz mnóóstwo.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 14.05.2014 o 00:09, eNcore napisał:

> Może ktoś wie o co się pluje Eclipse?

Sprawdź czy masz dodaną Javę w zmiennej środowiskowej PATH.

Właśnie wszystko mam ok. Nawet specjalnie na necie szukałem rozwiązań z dodawaniem -vm , ale nic nie działa :/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 14.05.2014 o 01:17, ziptofaf napisał:

Javascriptu /.../ jednak tak naprawdę jego możliwości są niepowalające.

To akurat jest bzdura. Sam osobiście JS uważam za wyrafinowane narzędzie tortur, ale obecnie do JS portuje się normalne gry i coraz częściej wykorzystuje się go do tworzenia aplikacji serwerowych. Tu akurat ograniczeniem nie jest język, tylko programista.

Dnia 14.05.2014 o 01:17, ziptofaf napisał:

Java jest od tych języków zdecydowanie szybsza ale trudniejsza w nauce i wykorzystaniu.

Jakieś źródła? Z moich doświadczeń jest to ociężała krowa, która potrafi pochłonąć każdą ilość RAM i jest niekompatybilna z każdym sensownym serwerem www, przez co wymaga jakichś nakładek/pomostów. W dodatku gdy przez semestr uczyłem się Javy EE na uczelni, miałem wrażenie, że jest przekombinowana, a implementacja niektórych operacji to celowe rujnowanie wydajności.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 14.05.2014 o 09:48, rob006 napisał:

To akurat jest bzdura. Sam osobiście JS uważam za wyrafinowane narzędzie tortur, ale
obecnie do JS portuje się normalne gry i coraz częściej wykorzystuje się go do tworzenia
aplikacji serwerowych. Tu akurat ograniczeniem nie jest język, tylko programista.


Eh, to jest częściowo prawda - jasne, mamy NodeJS i podobne rozwiązania. Ale nie będę ukrywać - nie widziałem jeszcze realnych witryn w nim napisanych, z dokumentacją i ilością osób które tego używają też na chwilę obecną jest przeciętnie. No i prawdę mówiąc chodziło mi tylko o rozróżnienie tych dwóch pojęć - Java ma się tak do Javascriptu jak pięść do nosa w większości przypadków. Ale fakt, mój błąd, mogłem o tym wspomnieć.

Dnia 14.05.2014 o 09:48, rob006 napisał:

Jakieś źródła? Z moich doświadczeń jest to ociężała krowa, która potrafi pochłonąć każdą
ilość RAM i jest niekompatybilna z każdym sensownym serwerem www, przez co wymaga jakichś
nakładek/pomostów. W dodatku gdy przez semestr uczyłem się Javy EE na uczelni, miałem
wrażenie, że jest przekombinowana, a implementacja niektórych operacji to celowe rujnowanie
wydajności.


Porównujemy język skryptowy z takim korzystającym z JIT i maszyny wirtualnej? Ale masz rację, źródła by się przydały:
http://www.unlimitednovelty.com/2012/06/ruby-is-faster-than-python-php-and-perl.html

http://benchmarksgame.alioth.debian.org/ - dane oparte na tym:
http://puu.sh/8LN7a.png - single core, Ruby vs Java
http://puu.sh/8LN8X.png - multicore, Java vs PHP
http://puu.sh/8LN9J.png - singlecore, Java vs PHP
http://puu.sh/8LNcb.png - ładniejsze porównanie tego co jest wyżej.

PHP w kilku miejscach potrafi nawet nieznacznie wyprzedzić Javę ale w równie wielu zostaje nieprawdopodobnie w tyle (choć trzeba przyznać, mniej linii kodu). Ogólnie rzecz biorąc, Java 1.8 (i 7 EE)wyprzedza PHP5.5, kilka lat temu jeszcze było pod tym względem gorzej ale wydajność Javy powoli dogania C#.

Ale prawdopodobnie najlepszym dowodem będzie to:
http://blog.redfin.com/devblog/2010/05/how_and_why_twitter_uses_scala.html#.U3NEkvl_vwo

Jak widać, po uznaniu Railsa za zbyt wolnego dla niektórych części Twittera (który jednak jest olbrzymi i ma naprawdę dobre wsparcie programistyczne) zastanawiali się nad Javą, C++, Haskellem i Scalą. To że Java przegrała i ostatecznie wybrali Scalę mnie nie dziwi bo też jej nie lubię :P Ale mimo wszystko jej pojawienie się na liście i fakt że Scala korzysta z wielu elementów Javy sugeruje że tam gdzie naprawdę liczy się wydajność, jej wybór jest lepszy od języków skryptowych.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 14.05.2014 o 12:34, ziptofaf napisał:

Eh, to jest częściowo prawda - jasne, mamy NodeJS i podobne rozwiązania. Ale nie będę
ukrywać - nie widziałem jeszcze realnych witryn w nim napisanych, z dokumentacją i ilością
osób które tego używają też na chwilę obecną jest przeciętnie.

Ale pojawia się też dużo więcej narzędzi programistycznych, które wykonują jakieś czynności po stronie serwera, np z poziomu linii komend. Przykładem może być np less.

Dnia 14.05.2014 o 12:34, ziptofaf napisał:

Porównujemy język skryptowy z takim korzystającym z JIT i maszyny wirtualnej?

Porównujemy język od samego początku projektowany do generowania stron internetowych, z językiem, który do tego został tylko zaadoptowany. A Java była projektowana z głównym naciskiem na uniezależnienie od środowiska uruchomieniowego, co na serwerze nie ma praktycznie znaczenia.
Co do benchmarków - może coś przeoczyłem, ale nie widzę tam żadnego sprawdzającego zastosowania webowe. Jest masa porównań, które pokazują, że język X jest szybszy od PHP przy obliczaniu mediany przy filtrowaniu dużych grafik, tylko co z tego? Przy generowaniu stron nie wykonuje się skomplikowanych obliczeń matematycznych, na których zwykle bazują benchmarki, główne opóźnienia są na operacjach na tablicach/kolekcjach, operacjach na stringach, wyświetlaniu zawartości i połączeniach z bazami danych. Brak też dokładnej informacji o konfiguracji - sama instalacja APC/APCache potrafi aplikację przyspieszyć nawet 4-krotnie, podobnie wybrany worker serwera www i sposób obsługi skryptów.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzięki za rady panowie, sporo mi rozjaśniliście. O język programistyczny chodziło mi właśnie z powodu wzięcia się za poważnie do tematu, i pewnie pomyślę nad Javą lub Railsem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Była sobie kiedyś gra, która miała wewnętrzny market przedmiotów. Dawno dawno temu ktoś zrobił do niej fajny program, który umieścił na swoim serwerze, i analizował on co jakiś czas (godzinę czy coś takiego) ceny w markecie, a następnie na tej podstawie generował wykresy zmian cen (wpisywało się nazwę i wyświetlał trend). Potem jednak zniknął on ze świata tej gry, a po jakimś czasie i program przestał działać, bo nie opłacał miejsca na serwerze (ruch był mały i się to nie opłacało widocznie).

W czym robi się tego typu aplikacje? Czy zrobienie czegoś takiego byłoby bardzo czasochłonne? Czy laik (napisanych aplikacji użytkowych, czyli nie liczących całki numerycznie / generujących wykresy: równe ZERO; liznąłem odrobinę C w zakresie nauczanym na polibudzie, czyli do obliczen numerycznych i tyle) poradziłby sobie z tym, gdyby włożył w to trochę wysiłku? Gdzie powinien zacząć?

Aby pokazać, jak wygląda ten market:
http://forum.toribash.com/tori_market.php
http://forum.toribash.com/showthread.php?t=444661 <--- API, tacy dobrzy są developerzy

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../

Jak wiesz co robisz to to jest z 20-80 minut pracy zależnie od tego jak chcesz to rozwiązać:

a) Na razie nie interesuje cię "internetowa" część zagadnienia i po prostu chcesz mieć na kompie coś co będzie sczytywać listę przedmiotów w markecie z pomocą API, zapisać dane gdzieś na dysku w bazie danych (np. ich nazwę/id, cenę i datę aktualizacji) co kilka minut i na tej podstawie generować wykres.

API z tego co widzę daje ładne odpowiedzi w formacie JSON co mnie cieszy bo do tego są już gotowe rozwiązania w zasadzie każdym języku. Jestem strasznym leniem więc przykładową część rozwiązania napiszę w Ruby bo zajmie mi z 5 linii kodu zamiast 60 w C (mógłbym nawet w 3 ale robiłoby się to nieco nieczytelne ;P):

require ''json''
require ''open-uri''

api=" http://forum.toribash.com/ingame_store.php?json"
response = open(api).read
response = JSON.parse(response)

puts response[2]

Wynikiem działania naszego kodu jest:
http://puu.sh/8P1cr.png

Czyli wyświetli nam się trzeci przedmiot z listy które dało nam API (response[2]), znaczy się program działa.

To co nas pewnie obchodzi to "itemid", "itemname" i "price".

I teraz zastanówmy się jakie potencjalnie rzeczy należy zrobić żeby nasza aplikacja się do czegoś nadawała:
a) Przed sczytaniem danych należałoby zapisać konkretną godzinę o której to zrobiliśmy.
b) Wszystkie wyniki tniemy tak żeby zostały nam same przydatne części - czyli właśnie itemid, itemname i pewnie price.
c) Zapisujemy je sobie wszystkie w jakiejś bazie danych (bądź nawet pliku tekstowym) wraz z godziną.
d) Robimy niekończącą się pętlę która robi powyższe kroki np. co 3 minuty.

Wiec po kilku iteracjach naszej pętli będziemy mieli pełną listę wszystkich przedmiotów która się rozrasta zgodnie z danymi pobranymi z API.


Teraz pozostaje nam napisać drugą aplikację - taką która coś robi z naszymi pobranymi danymi. Ja osobiście bym zapewne wyszukiwał wszystkie rekordy które mają takie samo ID i zaczął przedstawiać je w jakiejś fajniejszej formie. Jak pisałeś, chcesz jakiś ładny wykres. Dane mamy - cena i data, zaś nasz program należy "nakarmić" albo ID przedmiotu albo jego nazwą (zakładam że jest unikatowa dla uproszczenia sprawy) żeby ten wiedział dla jakiego przedmiotu ma wygenerować ten wykres. Znajdź wszystkie jego wystąpienia, posegreguj w jakąś tablicę i 75% pracy za tobą. Można jeszcze np. wyszukiwać tylko dane z okresu ostatnich 24-48 godzin żeby było bardziej czytelnie.

Ostatnie pytanie brzmi - czymże jest wykres jak nie zwykłym plikiem graficznym (bądź nawet kodem w javascriptcie który zinterpretuje już twoja przeglądarka internetowa)? Wniosek - potrzebujemy jakiejś wiedzy w temacie jak się generuje obrazy/wykresy w danym języku programowania (możemy też to zrobić ręcznie ale nie polecam, to brzmi jak WYSIŁEK a tego należy unikać! ;P). W c++ pewnie bym użył pplot czy czegoś podobnego ( http://pplot.sourceforge.net/ ). Możemy też użyć allegro (choć to spory overkill ale pozwala na dość łatwe rysowanie po ekranie bezpośrednio w pliku .exe). W Ruby on Rails do dyspozycji jest bardzo ładna biblioteka http://ankane.github.io/chartkick/

I tyle. Wczytać dane, gdzieś zapisać, stworzyć osobną aplikację która może je wyświetlić w bardziej czytelnej formie. Zależnie od języka programowania od 20 do 150 linii kodu.

A teraz część druga - chcesz żeby to było widoczne z poziomu internetu. Potrzebny jest ci więc serwer WWW (Apache, Nginx czy co tam jeszcze chcesz). W wersji "najprostszej" - dane już mamy, wykres jest wygenerowany (co zrobiliśmy w poprzednim kroku). Musimy tylko stworzyć plik html który go linkuje (zakładam że nasze programy pobierające dane i generujące wykresy sobie spokojnie działają w tle). I tyle.

Ale oczywiście jest to bardzo toporne rozwiązanie - użytkownik nie może sobie wpisać jakiego przedmiotu zmian w cenie szuka, jedyne co widzi to jakiś plik z konkretnym przedmiotem (albo listą wszystkich).

Jeśli chciałbyś żeby miał np. pole wyszukiwania to... musisz opanować PHP, Pythona z Django lub Ruby on Rails.
Bo chcesz stworzyć stronę internetową która reaguje na działania użytkownika. Wtedy o ile pierwsza część programu sczytująca dane i zapisująca je gdzieś pozostaje bez zmian, to ta druga generująca wykres będzie działać już nieco inaczej - użytkownik wysyła zapytanie, nasza aplikacja sieciowa przekazuje je do bazy danych (np. "znajdź mi wszystkie wystąpienia przedmiotu Great Firesword"), na tej podstawie generuje wykres i pokazuje go użytkownikowi. Jest to typowy Web Development - trochę Javascriptu, trochę PHP/Railsa/Django czy co tam lubisz. A i pewnie też trochę doświadczenia z tym jak należy zadawać zapytania bazom danych.

W sumie ogółem nic trudnego tak długo jak się nie zaczniesz pchać w zbyt niskopoziomowe rozwiązania (aka ja osobiście bym C++ i jego winsocka nie polecał, jeśli już to Boost::Asio albo QT i jego QNetwork, nie walił głową w mur próbując ręcznie parsować format JSON do wektora map hashowych ani bawił się w ręczną obróbkę plików graficznych piksel po pikselu).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../

Dobry człowieku, dziękuję Ci za łopatologiczne wytłumaczenie zagadnienia. I jestem przerażony tym, jak bardzo zabawa w programowanie pod metody numeryczne i pisanie algorytmów wypaczyło moją wizję tworzenia czegoś takiego. Spodziewałem się setek linii kodu na samo to, co zaprezentowałeś w kilka linijek.

Postaram się jutro zacząć w to bawić. Zobaczymy, co z tego wyjdzie i czy coś z tego wyjdzie, a jeżeli się uda to nie omieszkam zaprezentować tego, co otrzymałem dzięki Twojemu naprowadzeniu mnie na właściwy tok myślenia.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 17.05.2014 o 03:44, Thrandir napisał:

Dobry człowieku, dziękuję Ci za łopatologiczne wytłumaczenie zagadnienia. I jestem przerażony
tym, jak bardzo zabawa w programowanie pod metody numeryczne i pisanie algorytmów wypaczyło
moją wizję tworzenia czegoś takiego. Spodziewałem się setek linii kodu na samo to, co
zaprezentowałeś w kilka linijek.


Jak będziesz pisać w czystym C to to będą setki linijek, zapewniam :P Pewnie dlatego coraz rzadziej się go używa i ucieka od niego gdy tylko nie interesuje cię czy kod wykona się w 1 czy 10 ms.

Jeśli chcesz robić to w C++ to zresztą mogę ci powiedzieć ILE to zajmie bo się w swoim czasie w to bawiłem.
Bo od strony technicznej to robimy to tak:
a) Wykonujemy zapytanie GET do serwera WWW na którym jest interesujące nas API.
Boost::Asio: ok. 70 linii kodu. Trzeba odrobinę uważać bo odpowiedź otrzymana od serwera będzie miała kilka rzeczy których normalnie się nie zobaczy - nagłówek, długość, jaki to serwer WWW itd. Coś koło 10-11 linijki dopiero zawiera interesującą cię część.
Qt: ok. 20-25 ( http://puu.sh/8PeOU.png - to co prawda jest POST a nie GET ale powinno być zbliżone)

b) Odpowiedź jest w formacie JSON czyli np.
[{"id":1, "name":"Hello"}, {"id":2, "name": "Cat"} ]

To możemy albo zrobić ręcznie - tworzymy wektor map hashowych:
Czyli vector<map <string,string> > json;
Każdy znak { oznacza dodanie nowego elementu do wektora, a wewnątrz niego już tylko robimy json[x]["id"]="1" itp.

Ewentualnie korzystamy z czegoś pokroju:
http://jsoncpp.sourceforge.net/
Zakładam że będzie z 30 linii kodu jeśli używamy biblioteki.

c) Zapisujemy sobie gdzieś wyniki. Jeśli do pliku to starcza nam zwykłe #include <fstream> i pewnie z 15 linii kodu. Jeśli do bazy danych MySQL to... no, jeśli sobie to ładnie rozpiszesz to będzie ze 100-150 linii.

d) Część druga - generowanie wyników w formie graficznej na podstawie zapisanych danych. Tutaj akurat C++ o dziwo sprawdza się nieźle - dojrzałych bibliotek potrafiących generować grafikę w tym języku jest PEŁNO, zresztą po to się go właśnie zazwyczaj używa. Pewnie też ze 100 linii kodu.


Dla porównania w Ruby on Rails (czyli właśnie we frameworku służącym do tworzenia portali internetowych opartym na języku Ruby) to zazwyczaj wygląda tak:
a i b już widziałeś.
c - 5 linii kodu. Niezależnie od tego czy używasz SQLite, MySQL, PostgreSQL. Wygląda to tak:
- generate model Entry game_id:integer name:string price:decimal date:datetime - tworzymy sobie "prototyp" wpisu do bazy danych o odpowiednich parametrach. Od teraz wolno nam stosować takie instrukcje:
entry = Entry.new
entry.game_id =1
entry.name = "big sword of doom"
entry.price = 99.99
entry.date = Time.now
entry.save

I tyle, w momencie użycia .save Rails zapisuje nam rekord w bazie danych. A żeby jakiś odnaleźć:
entry = Entry.where ("game_id=?", 1)

I voilla, mamy wszystkie wystąpienia rekordu o id 1.

d - hmm... to może być 1 linijka kodu jeśli ma to widzieć użytkownik używający przeglądarki internetowej:
http://ankane.github.io/chartkick/

Dnia 17.05.2014 o 03:44, Thrandir napisał:

Postaram się jutro zacząć w to bawić. Zobaczymy, co z tego wyjdzie i czy coś z tego wyjdzie,
a jeżeli się uda to nie omieszkam zaprezentować tego, co otrzymałem dzięki Twojemu naprowadzeniu
mnie na właściwy tok myślenia.


Więc jak łatwo zgadnąć, z góry odradzę ci pisanie tego typu rzeczy w C/C++. I poleciłbym jeśli chcesz pracować nad tego typu rzeczami raczej skupić się na Pythonie/Ruby/PHP, może nawet Javie lub C#. Bo ty masz rację - w niskopoziomowym języku to BĘDĄ setki linii kodu. Używanie C do tak mało energożernych zadań jest zwykłym overkillem graniczącym wręcz z masochizmem - może i Python czy Ruby są od C++ z 40x wolniejsze ale kod do takich typowych zastosowań pisze się 40x szybciej :P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Twoje wyliczenia dotyczące C++ są grubo przesadzone. Wykorzystując np curla pobranie zawartości z api to jakieś 10 linijek. Wykorzystując mechanizmy ORM zapis do bazy danych jest praktycznie analogiczny do tego z RoR. Wszystko to kwestia wykorzystania istniejących bibliotek, czyli jedna z pierwszych umiejętności, jakie powinien nabyć programista. Nie twierdzę, że zrobienie tego w C++ nie będzie dłuższe/trudniejsze, ale twoje wyliczenia są z kosmosu - równie dobrze ja mógłbym pisać czyste zapytania w RoR i rozpaczać jakie to trudne i ile linijek zajmuje ;]

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 17.05.2014 o 09:58, rob006 napisał:

Twoje wyliczenia dotyczące C++ są grubo przesadzone.

Dnia 17.05.2014 o 09:58, rob006 napisał:

Wykorzystując mechanizmy ORM zapis do bazy danych jest praktycznie analogiczny do tego z RoR. Wszystko
to kwestia wykorzystania istniejących bibliotek, czyli jedna z pierwszych umiejętności, jakie powinien nabyć
programista.


Masz 100% racji! Problem jest taki że najpierw musisz wiedzieć której biblioteki użyć i do czego. A dla wielu języków jest to bezpośrednio wbudowane w bibliotekę standardową. W przypadku C++ to możesz użyć czegoś co jest fajne - czyli właśnie curl. Albo możesz nie wiedzieć o jego istnieniu i wykorzystać do tego samego celu część biblioteki standardowej z C++11 (Asio). A w tym drugim to to już naprawdę jest kilkadziesiąt linii kodu.

Podobnie z bazami danych - zakładałem wykorzystanie zwykłego mysql.h. Który znowu zbyt krótki ani wygodny nie jest. Więc musisz odsiać ziarno od plew i upolować sobie biblioteki które robią to czego chcesz w rozsądnej długości kodu. Dlatego pod tym względem wolę Ruby/Pythona czy nawet C# - więcej sensownych elementów wbudowanych od początku bez potrzeby googlowania 100 różnych rzeczy. Zwłaszcza że:

a) Wpiszesz np. "http get c++" i pierwszą odpowiedź jaką dostajesz to "use winsock2 or cpp-netlib". A jak jeszcze strona używa https a nie http to możesz już siąść i płakać (chyba że masz Linuxa, wtedy jest ok bo robisz tylko sudo apt-get install openssl). A oba te rozwiązania są dość niskopoziomowe.
b) Podobnie jest zresztą z "MySQL c++" - dostajemy namiary na mysql.h którego wygoda jest wręcz wyjątkowa (i w zasadzie koniecznością jest rozpisanie sobie wrappera wokół jego funkcji).

Ale masz rację - tutaj wychodzi moja nieznajomość C++ w tych dziedzinach (co mam ukrywać, od jakiegoś czasu korzystam w zasadzie z rozwiązań dostępnych w Qt, czasem tylko wspartych zewnętrznymi bibliotekami) i wykorzystywaniem nieoptymalnych pod względem objętościowym bibliotek. Co jednak nie zmienia faktu że i tak w nowoczesnym języku skryptowym napiszę to samo szybciej (5 linii kodu na pobranie czegoś przez GET i przeparsowanie tego do tablicy z obiektami JSON), w C++ zajmie to tak czy siak dłużej. Więc mój argument pozostaje taki sam, po prostu nieco słabszy ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 17.05.2014 o 11:48, ziptofaf napisał:

Masz 100% racji! Problem jest taki że najpierw musisz wiedzieć której biblioteki użyć
i do czego. A dla wielu języków jest to bezpośrednio wbudowane w bibliotekę standardową.
W przypadku C++ to możesz użyć czegoś co jest fajne - czyli właśnie curl. Albo możesz
nie wiedzieć o jego istnieniu i wykorzystać do tego samego celu część biblioteki standardowej
z C++11 (Asio). A w tym drugim to to już naprawdę jest kilkadziesiąt linii kodu.

Równie dobrze można założyć, że ktoś nie zna RoR i będzie to pisał w czystym Ruby i też będzie dłużej i trudniej. Porównywanie podejścia doświadczonego programisty Ruby z niedoświadczonym programistą C++ to zwykłe nadużycie. Poza tym różne technologie różnią się podejściem - jedne dają wszystko na starcie i narzucają jakieś standardy, inne dają wolną rękę stawiając na minimalizm i podejście "jeśli coś chcesz, to sobie to weź". I w ogólnym rozrachunku żadne nie jest lepsze od drugiego, wszystko zależy od zastosowania i programista wybierając jakiś język, powinien sobie z tego zdawać sprawę.

Dnia 17.05.2014 o 11:48, ziptofaf napisał:

a) Wpiszesz np. "http get c++" /.../
b) Podobnie jest zresztą z "MySQL c++" /.../

No nie wiem, ja nie jestem programistą C++, ale znalezienie bibliotek do obsługi http, JSONa i bazy zajęło mi dosłownie 5 minut. Może to kwestia tego, że wiem czego szukam i jak to wygląda w innych językach, plus proste założenie, że tak dojrzały i popularny język jak C++ musi mieć do tego jakieś sensowne biblioteki :P.

Dnia 17.05.2014 o 11:48, ziptofaf napisał:

Co jednak nie zmienia faktu że i tak w nowoczesnym języku skryptowym napiszę
to samo szybciej (5 linii kodu na pobranie czegoś przez GET i przeparsowanie tego do
tablicy z obiektami JSON), w C++ zajmie to tak czy siak dłużej. Więc mój argument pozostaje
taki sam, po prostu nieco słabszy ;)

Akurat z tymi linijkami to różnie bywa. Na przykładzie PHP: pobranie zewnętrznego zasobu przez http to dosłownie jedna linijka - i to działa. Ale okazuje się, że działa tylko, gdy zewnętrzny zasób działa tak jak oczekujemy. Problemy pojawiają się gdy zewnętrzny serwer zaczyna sypać błędami albo zrywać połączenia - wtedy potrzebujemy już więcej linijek, aby lepiej skonfigurować ustawienia połączenia i dodać jakąś obsługę błędów. Ale jeśli chcemy wyjść poza prosty schemat "spróbuj ściągnąć zasób XXX", i tak musimy skorzystać z curla i wtedy liczba linijek rośnie do kilkunastu. Chyba ze skorzystamy z biblioteki/frameworka, który jest/ma nakładkę na curla - wtedy znowu mamy jedną linijkę. Dlatego takie przekrzykiwanie się na liczbę linijek kodu ma niewielką wartość merytoryczną, bo może twoje jednolinijkowe rozwiązanie faktycznie działa, ale działa byle jak.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../

Cóż, nic dodać nic ująć. Masz większą wiedzę w tych dziedzinach niż ja więc po prostu tutaj wychodzą moje braki w edukacji :P Choć i tak nie lubię C++ w tego typu rzeczach i to się raczej nie zmieni - bo co prawda też biblioteki sobie znalazłem w 5 minut to jednak zbyt wygodne w użyciu nie były.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 17.05.2014 o 03:44, Thrandir napisał:

Postaram się jutro zacząć w to bawić. Zobaczymy, co z tego wyjdzie i czy coś z tego wyjdzie,
a jeżeli się uda to nie omieszkam zaprezentować tego, co otrzymałem dzięki Twojemu naprowadzeniu
mnie na właściwy tok myślenia.


O takie coś chciałeś? :P
http://puu.sh/8PN5l.png - lista przedmiotów i ich ceny w danej chwili. Jestem leniem więc na razie są tylko dwa.
http://puu.sh/8PMSF.png - wykres ceny pierwszego z nich.
http://puu.sh/8PNyz.png - dla drugiego :P Jak widać, wystarczy w przeglądarce wpisać item/:id i o ile taki rekord istnieje (przed czym lepiej się zabezpieczyć żeby po wpisaniu tam np. 10 nie wywaliło błędu krytycznego) to zostanie dla niego wygenerowany ładny wykres. Jak najedziesz na któryś z punktów to zobaczysz dokładną godzinę i cenę.

W sumie nawet fajnie się to pisało ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 17.05.2014 o 16:37, ziptofaf napisał:

> Postaram się jutro zacząć w to bawić. Zobaczymy, co z tego wyjdzie i czy coś z tego
wyjdzie,
> a jeżeli się uda to nie omieszkam zaprezentować tego, co otrzymałem dzięki Twojemu
naprowadzeniu
> mnie na właściwy tok myślenia.

O takie coś chciałeś? :P
http://puu.sh/8PN5l.png - lista przedmiotów i ich ceny w danej chwili. Jestem leniem
więc na razie są tylko dwa.
http://puu.sh/8PMSF.png - wykres ceny pierwszego z nich.
http://puu.sh/8PNyz.png - dla drugiego :P Jak widać, wystarczy w przeglądarce wpisać
item/:id i o ile taki rekord istnieje (przed czym lepiej się zabezpieczyć żeby po wpisaniu
tam np. 10 nie wywaliło błędu krytycznego) to zostanie dla niego wygenerowany ładny wykres.
Jak najedziesz na któryś z punktów to zobaczysz dokładną godzinę i cenę.

W sumie nawet fajnie się to pisało ;)


tak, mniej-więcej coś takiego :D

Ja obecnie jestem na etapie rozkminiania, jak owej stronie dostarczyć dane logowania, bo adres:

http://forum.toribash.com/tori_market.php?format=json

wymaga bycia zalogowanym, a że ja programowania na takim poziomie nigdy nie uprawiałem, to jest to dla mnie spory problem do przeskoczenia :)
Tym niemniej, dzięki Twojej pomocy (a raczej: mocno acz ze zrozumieniem powielając Twój kod) podołałem napisaniu DZIAŁAJĄCEGO (w sposób, który rozumiem!) skryptu w ruby który pobierał mi dane z http://forum.toribash.com/ingame_store.php?json/ i zapisywał mi go do pliku w postaci obrabialnej w excelu. Wiem, że to brzmi głupio, ale dla mnie to jest naprawdę spore osiągnięcie xd

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 17.05.2014 o 17:15, Thrandir napisał:

wymaga bycia zalogowanym, a że ja programowania na takim poziomie nigdy nie uprawiałem,
to jest to dla mnie spory problem do przeskoczenia :)


Zależnie od tego jaki sposób autoryzacji jest tam w użyciu:
require ''net/http''

url = URI.parse(" http://forum.toribash.com/tori_market.php?format=json")
Net::HTTP.start(url.host, url.port) do |http|
req = Net:HTTP::Get.new(url.path)
req.basic_auth(''username'', ''password'')
puts http.request(req).body
end

To zadziała o ile panel logowania wygląda mniej więcej tak:
http://puu.sh/8PR3l.jpg (wygląd różni się zależnie od użytej przeglądarki) aka utworzony bezpośrednio przez serwer WWW a nie przez stronę internetową.

W przeciwnym razie niezbędnym okaże się zrozumienie czego od ciebie chcą i na czym polega logowanie (swoją drogą, dość rzadki sposób zabezpieczenia API, normalnie widuję API Keys czy właśnie serwerowe logowanie bo to łatwo zautomatyzować). Otóż:
a) wchodzisz na stronę logowania
b) wpisujesz swój login i hasło
c) klikasz na submit/login.
d) Wysyła to żądanie POST do serwera WWW (zazwyczaj HTTPS POST a nie zwykłe HTTP) na konkretny link (np. login.php).
e) Jeśli odpowiedź jest pozytywna to dostajesz plik cookie z danymi sesji dzięki któremu można zapewnić że serwer wie że ty to ty (normalnie HTTP jest bezstanowy, on nie wie kim ty jesteś nawet jeśli zalogowałeś się 5 sekund temu, potrzebna mu jakaś zmienna sesyjna żeby cię rozróżnić).
f) Przy próbie wejścia do zasobu chronionego sprawdzane jest czy jesteś zalogowany (aka - czy zmienna sesyjna istnieje i czy nie jest to ktoś podszywający się pod ciebie itp).

Innymi słowy, musisz się "podszyć" pod przeglądarkę WWW w swoim kodzie (bądź przynajmniej pod coś co potrafi wysyłać i odbierać pliki cookie). Możesz do tego użyć np. Mechanize:
http://mechanize.rubyforge.org/
http://stackoverflow.com/questions/6629579/using-ruby-with-mechanize-to-log-into-a-website

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Umiem programować w asm, ale gdy chciałem znaleźć informacje na temat mnemoników, a dokładnie jak one działają i są powiązane z układem, to nie mogłem. Może ktoś polecić literaturę?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować