Skocz do zawartości

Programowanie


  • Zaloguj się by odpowiedzieć
3012 odpowiedzi na ten temat

#2791 torq314 Napisany 11 marca 2016 - 12:44

torq314

    Buddhabrot

  • Forumowicze
  • 24 463 Postów:
pewnie to

http://stackoverflow...-how-to-read-it
http://bugs.java.com...?bug_id=4294586

spróbuj enkodować hash w nazwie (%23)

Ten post był edytowany przez torq314 dnia: 11 marca 2016 - 12:44

  • 0

#2792 Ryan Napisany 13 marca 2016 - 15:50

Ryan

    Dominik D.

  • Administratorzy
  • 32 571 Postów:
Chandler Carruth dostarcza. Jego prezentacje są zawsze szalenie ciekawe. :tak:


  • 0

#2793 Kradziej Napisany 17 marca 2016 - 08:59

Kradziej

    Wciąż dzieciak

  • Forumowicze
  • 16 004 Postów:

Tu kapitan obvious.

Zastąpienie pól przez propertiesy ma uzasadnienie zawsze. Chodzi o to że property może mieć skutki uboczne, a dostęp do pola - nie. Możesz na przykład w setterach zrobić sobie powiadamianie innych obiektów o zmianie stanu, czyli mieć observable.

Te skutki uboczne są opcjonalne. Natomiast jak już udostępnisz jakieś api, to nie powinno się go zmieniać, to jest zasada open-closed, nie ma tak że w wersji 1.0 masz pola a w 2.0 się zorientowałeś że obiekty muszą być obserwowalne więc wymieniasz interfejs dostępu z pól na property. Taka zmiana oznacza bowiem brak zgodności wstecznej, czyli konieczność przekompilowania kodu klienckiego. A to jest błąd projektowy.

Dlatego mądre głowy wymyśliły żeby od razu robić property, nawet jeśli nie masz żadnych skutków ubocznych. To nie wygląda ładniej, w javie i c++ wręcz fatalnie, ładnie to wygląda w c#/javascript gdzie syntaktycznie dostęp do pola i property wygląda tak samo. Natomiast to prawda, że tak się przyjęło, warto tylko wiedzieć po co to jest.

Mi po części chodzi o to, że "tak się przyjęło" to nie jest uzasadnienie kiedy podejmuje się decyzję podczas robienia projektu, przede wszystkim wtedy kiedy ktoś (jak ja przy pisaniu tego Młynka) nie za bardzo wie, skąd ta decyzja i czemu "tak się przyjęło".

Po drugie, jeśli wszystko zależy od skali projektu, nie? Bo jeśli mamy mały programik, w którym każdy setter i getter działa jakby to było zwykłe pole: setX(int val) { x = val; }, i tego jest kilkanaście w jednej tylko klasie, to ja nie widzę tu celu.

Tym bardziej, jak to w ogóle nie trzyma się kupy pod względem obiektowości. Mamy klocek w Tetrisie i on sobie wewnętrznie wie gdzie jest każdy z jego kwadratów, czy może się przesunąć w lewo albo prawo i coś jeszcze. To ruszenie klockiem powinno raczej być jego metodą, załóżmy Move(input), gdzie klocek sobie sprawdzi co może i jak nic nie może to się nie ruszy a jak może to zrobi hyc zależnie od wciśniętego na klawiaturze klawisza. I to jest okejo. Ale zrobienie banalnego getCoś i setCoś dla tego klocka i robienie całej logiki ruszania poza nim jest bezsensu, bo w efekcie klocek nie jest żadną klasą, tylko strukturą, czyli paczką danych.

Ja wiem, po co są propertisy, może w poprzednim poście się wyraziłem jakbym całą ich ideę hejtował ;) Tak czy siak dzięki za wyjaśnienie, teraz chociażby wiem po co jest to automatyczne generowanie setterów i getterów w niektórych IDE (żeby była zgodność wsteczna!). Ale IMO wszystko trzeba z umiarem i wiedzieć, kiedy, a kompletnie nieczytelny kod to chyba dobry znak tego, że trzeba na chwilkę usiąść i przemyśleć swoje założenia.
  • 0

#2794 Kurzy Napisany 17 marca 2016 - 09:31

Kurzy

    DANGA!

  • Forumowicze
  • 15 970 Postów:
Nie wiem jak w językach, ktore nie maja natywnego wsparcia getters/setters ale w tych mi znanych jest tak jak tork pisze - nie ma różnicy dla klienta obiektu i wszystko dzieje sie wewnątrz. I to jest dobry nawyk. Banalny getter może Ci choćby logować zdarzenie a setter kontrolować zakres ustawianej wartości.
  • 0

#2795 Ryan Napisany 17 marca 2016 - 10:49

Ryan

    Dominik D.

  • Administratorzy
  • 32 571 Postów:

Zastąpienie pól przez propertiesy ma uzasadnienie zawsze. Chodzi o to że property może mieć skutki uboczne, a dostęp do pola - nie. Możesz na przykład w setterach zrobić sobie powiadamianie innych obiektów o zmianie stanu, czyli mieć observable.

Settery z side effectami poza ustawieniem wartości - złoto. ;)
  • 0

#2796 lukaszSA Napisany 17 marca 2016 - 10:50

lukaszSA

    Overall expert

  • Forumowicze
  • 28 942 Postów:

Wszystko zależy od tego co i gdzie ustawiasz. 


  • 0

#2797 torq314 Napisany 17 marca 2016 - 10:58

torq314

    Buddhabrot

  • Forumowicze
  • 24 463 Postów:

Zastąpienie pól przez propertiesy ma uzasadnienie zawsze. Chodzi o to że property może mieć skutki uboczne, a dostęp do pola - nie. Możesz na przykład w setterach zrobić sobie powiadamianie innych obiektów o zmianie stanu, czyli mieć observable.

Settery z side effectami poza ustawieniem wartości - złoto. ;)


dokładnie, tak sobie robisz observery. w Twoim świecie też się da, ale jest dużo mniej eleganckie.

spróbuj ładniej napisać coś takiego:
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Observable o = new Observable();
            o.PropertyChangedEvent +=
                ( s, e ) =>
                {
                    Console.WriteLine( "W obiekcie {0} zmieniono właściwość {1} na {2}", o, e.PropertyName, e.NewValue );
                };

            o.Property = "foo";
            o.Property = "bar";

            Console.ReadLine();
        }       
    }

  
    public class Observable
    {
        public event PropertyChangedDelegate PropertyChangedEvent;

        private string _property;
        public string Property
        {
            get
            {
                return _property;
            }
            set
            {
                _property = value;
                // notyfikacja
                if (PropertyChangedEvent != null)
                    PropertyChangedEvent(
                        this,
                        new PropertyChangedEventArgs()
                        {
                            PropertyName = "Property",
                            NewValue     = value
                        } );
            }
        }
    }

    public delegate void PropertyChangedDelegate( 
        object sender, 
        PropertyChangedEventArgs e );

    public class PropertyChangedEventArgs : EventArgs
    {
        public string PropertyName { get; set; }

        public object NewValue { get; set; }
    }

}
output
 
W obiekcie ConsoleApplication1.Observable zmieniono właściwość Property na foo
W obiekcie ConsoleApplication1.Observable zmieniono właściwość Property na bar

Ten post był edytowany przez torq314 dnia: 17 marca 2016 - 10:58

  • 1

#2798 Ryan Napisany 17 marca 2016 - 14:50

Ryan

    Dominik D.

  • Administratorzy
  • 32 571 Postów:
Nie chodzi o mój świat, a o moje ideały.
  • 1

#2799 torq314 Napisany 17 marca 2016 - 16:44

torq314

    Buddhabrot

  • Forumowicze
  • 24 463 Postów:
spoko, no offense, nie miałem nic złego na myśli ;)
  • 0

#2800 Ryan Napisany 18 marca 2016 - 11:10

Ryan

    Dominik D.

  • Administratorzy
  • 32 571 Postów:
Przecież się nie zofendowałem. :) Jedynie "wyznaję" principle of least surprise.
Jeśli używam czegoś, co wygląda jak member, to oczekuję, że zapis/odczyt wykona się natychmiast. Jeśli pod spodem dzieje się jakaś magia (np. .Count musi iterować po całej kolekcji, albo foo.bar = 4; rozgłasza wydarzenie do wszystkich, a ja nie mam bezpośredniego wglądu w to kto co i jak z tym zrobi), to moja możliwość wnioskowania na temat działania programu jest mocno upośledzona.

Ten post był edytowany przez Ryan dnia: 18 marca 2016 - 11:13

  • 0

#2801 torq314 Napisany 18 marca 2016 - 13:42

torq314

    Buddhabrot

  • Forumowicze
  • 24 463 Postów:

Jeśli używam czegoś, co wygląda jak member, to oczekuję, że zapis/odczyt wykona się natychmiast


w językach w których member 'foo' może być propertisem (c#, c++, javascript, python, ruby) nie oczekujesz tego, zamiast tego sprawdzasz w dokumentacji jakie skutki uboczne może mieć property.

https://en.wikipedia...y_(programming)

nie wiem więc czy to co piszesz nie ogranicza się w zasadzie do C ze strukturami, bo tylko tam nie umiałbym z dostępu do 'foo' zrobić pod spodem efektów ubocznych...

w każdym innym języku miałbyś akcesora/mutatora do efektów ubocznych i osobno wejście "niskopoziomowe" do natychmiastowej modyfikacji.
  • 0

#2802 Ryan Napisany 18 marca 2016 - 16:42

Ryan

    Dominik D.

  • Administratorzy
  • 32 571 Postów:

w językach w których member 'foo' może być propertisem (c#, c++, javascript, python, ruby) nie oczekujesz tego, zamiast tego sprawdzasz w dokumentacji jakie skutki uboczne może mieć property.

To że mogę coś zrobić w jakimś języku nie znaczy wcale, że to dobry pomysł.

nie wiem więc czy to co piszesz nie ogranicza się w zasadzie do C ze strukturami, bo tylko tam nie umiałbym z dostępu do 'foo' zrobić pod spodem efektów ubocznych...

Mówię o nieoczekiwanych efektach ubocznych. Jeśli efektem ubocznym jest np. wewnętrzne zliczenie liczby dostępów do propsa, to to nie jest problem. Jeśli efektem ubocznym jest odpalenie sporego kodu, to taki pomysł mi się nie podoba. Przykładowo gdybyś miał klaskę będącą czymś a'la active record, to oczekiwałbym że ustawianie propsów nie robi niczego z bazą - dopiero .Commit() wykonuje kod.

w każdym innym języku miałbyś akcesora/mutatora do efektów ubocznych i osobno wejście "niskopoziomowe" do natychmiastowej modyfikacji.

A czemu nie odwrotnie?
  • 0

#2803 Schrodinger Napisany 06 kwietnia 2016 - 00:53

Schrodinger

  • Moderatorzy
  • 65 971 Postów:

hieheszki

http://gizmodo.com/t...uild-1769084655


  • 0

#2804 lukaszSA Napisany 06 kwietnia 2016 - 06:52

lukaszSA

    Overall expert

  • Forumowicze
  • 28 942 Postów:

Ach te przetargi publiczne

 

Ładnie ten Android Studio wygląda. Używa ktoś? Już od ponad roku jest niby oficjalnym IDE (wtyczka Eclipsowa już jest be). 


  • 0

#2805 Ryan Napisany 06 kwietnia 2016 - 08:46

Ryan

    Dominik D.

  • Administratorzy
  • 32 571 Postów:
AS jest zbudowana na produkcie IntelliJ, a JetBrains (czeska firma, dodam) wie jak zrobić dobre IDE. Przykładowo ichnie PhpStorm jest w zasadzie jedynym sensownym IDE do tego gówna. ;)
  • 0

#2806 torq314 Napisany 06 kwietnia 2016 - 08:58

torq314

    Buddhabrot

  • Forumowicze
  • 24 463 Postów:
od kiedy xamarin jest za darmo, jedynym słusznym ide do rozwijania aplikacji androidowych jest visual studio :tak:
  • 0

#2807 lukaszSA Napisany 06 kwietnia 2016 - 09:02

lukaszSA

    Overall expert

  • Forumowicze
  • 28 942 Postów:

Ale czy Visual Studio ma błogosławieństwo pana naszego Googla? No właśnie ;)

 

Ja pamiętam, że kiedyś z Android Studio korzystałem, ale to były czasy wczesnych bet. Pojawiały się problemy z kompatybilnością projektów pomiędzy wersjami (a updaty były co oczywiste częste), więc wróciłem do Eclipsa. W sumie to nie licząc jednego patcha do Yasga z czerwca, to nic nie robię już przy Androidzie.

 

Smartfony to rak branży


Ten post był edytowany przez lukaszSA dnia: 06 kwietnia 2016 - 09:03

  • 0

#2808 Schrodinger Napisany 08 kwietnia 2016 - 21:36

Schrodinger

  • Moderatorzy
  • 65 971 Postów:

O Android Studio 2.0 wyszło i ma emulator szybszy niż jakby się odpalało apke na normalnym urządzeniu. Pamiętam że na Eclipse emulator to była tragedia, a w porównaniu do emu WP na Visualu to była tragedia do sześcianu. Chyba aż sobie pobiorę i odpalę swoją apkę, chyba było wsparcie dla projektów z Eclipsa :hmmm:

 

http://www.engadget....roid-studio-2-0


Ten post był edytowany przez Schrodinger dnia: 08 kwietnia 2016 - 21:38

  • 0

#2809 Ryan Napisany 17 kwietnia 2016 - 11:31

Ryan

    Dominik D.

  • Administratorzy
  • 32 571 Postów:
SEEEJGAAA

http://cowboyprogram...he-sega-saturn/
  • 1

#2810 Schrodinger Napisany 28 kwietnia 2016 - 08:40

Schrodinger

  • Moderatorzy
  • 65 971 Postów:

Potrzebuje zrobić - tak wiem rozwiązanie samo w sobie jest idiotyczne, ale to nie mój pomysł - coś takiego i myślę że możecie rzucić ciekawymi pomysłami bo jeszcze sam nie badałem tematu.

 

Mam plik Excela z 400 produktami, ich cenami brutto, netto, wagą, wymiarami. Teraz potrzebuję żeby przez stronę internetową można było ten plik edytować (zmieniać jedynie pole ilość towaru, część pól była niewidoczna, obliczanie ceny po ilości i wadze) z poziomu strony a następnie kliknąć wyślij i żeby było to wysyłąne na maila razem z formularzem dostępnym nad tymi tabelkami z excela a to wszystko najlepiej w pdfie.

 

Jest jakieś gotowe rozwiązanie czy musiałbym klepnąć te dane ręcznie do tabeli?


Ten post był edytowany przez Schrodinger dnia: 28 kwietnia 2016 - 08:42

  • 0

#2811 Kurzy Napisany 28 kwietnia 2016 - 09:25

Kurzy

    DANGA!

  • Forumowicze
  • 15 970 Postów:

Jest parę bibliotek do PHP więc jak zrobisz upload pliku to go sparsujesz po stronie PHP i będziesz miał pewnie strukturę danych, niekoniecznie tabelę. No i później już możesz robić z tym co chcesz. Do generowania PDF możesz użyć DOMPDF i wtedy miałbyś to ułatwione bo generowałbyś od razu z HTML PDF bez klepania ręcznego w PHP.


  • 0

#2812 torq314 Napisany 28 kwietnia 2016 - 10:16

torq314

    Buddhabrot

  • Forumowicze
  • 24 463 Postów:

Potrzebuje zrobić - tak wiem rozwiązanie samo w sobie jest idiotyczne, ale to nie mój pomysł - coś takiego i myślę że możecie rzucić ciekawymi pomysłami bo jeszcze sam nie badałem tematu.
 
Mam plik Excela z 400 produktami, ich cenami brutto, netto, wagą, wymiarami. Teraz potrzebuję żeby przez stronę internetową można było ten plik edytować (zmieniać jedynie pole ilość towaru, część pól była niewidoczna, obliczanie ceny po ilości i wadze) z poziomu strony a następnie kliknąć wyślij i żeby było to wysyłąne na maila razem z formularzem dostępnym nad tymi tabelkami z excela a to wszystko najlepiej w pdfie.
 
Jest jakieś gotowe rozwiązanie czy musiałbym klepnąć te dane ręcznie do tabeli?


1. plik excela po stronie serwera to słaby pomysł bo edytowania online nie zrobisz i tak uniwersalnie (nie każdy oes zrozumie co to jest plik xls po stronie klienta), poza tym masz problemy ze współbieżnością
lepiej jest ten plik przepisać do prostej tabelki w czymkolwiek co wspiera tranzakcje i wielodostęp (może być mysql od biedy, albo nawet jakiś firebase/sqlite)

2. edycję danych po stronie klienta najłatwiej załatwić jakimś gotowym komponentem, w zależności od tego jakiej technologii użyjesz to będzie coś innego ale ogólnie polegałbym na frameworkach js
na przykład http://ui-grid.info/

3. generowanie pdf na kliencie to np. pdfjs.
  • 0

#2813 Ryan Napisany 06 maja 2016 - 18:56

Ryan

    Dominik D.

  • Administratorzy
  • 32 571 Postów:
Nie dla każdego, ale ja trochę śmiechłem. ;)

http://codepen.io/at...fe/full/jPavQE/
  • 0

#2814 Ryan Napisany 10 maja 2016 - 10:20

Ryan

    Dominik D.

  • Administratorzy
  • 32 571 Postów:
Dobry autor, więc polecam ten kończący się za 48h KS.

https://www.kickstar...ame-de?ref=48hr
  • 0

#2815 Kurzy Napisany 10 maja 2016 - 20:36

Kurzy

    DANGA!

  • Forumowicze
  • 15 970 Postów:

oO

 

https://github.com/g...ameboy-emulator


  • 0

#2816 Ryan Napisany 11 maja 2016 - 15:02

Ryan

    Dominik D.

  • Administratorzy
  • 32 571 Postów:
Polecam rewelacyjną dramę w światku PHP. :D

https://groups.googl...fig/cjLBp2weYaA

Niezbędne tło: PHP FIG to niezależne zrzeszenie aktywnych deweloperów z dużym "szacunem", którzy standaryzują różne rzeczy (autoloading zalezności, interfejs request/response, itp.). Jeden z członków FIG jest autorem bardzo średniawego frameworka i wiele wskazuje na to, że jest psychopatą. :D
  • 2

#2817 torq314 Napisany 11 maja 2016 - 15:47

torq314

    Buddhabrot

  • Forumowicze
  • 24 463 Postów:
nie wiadomo tego jeszcze, końcówka, w której ujawnił się rzekomo jakiś rosyjski programista podbijający te statystyki, a potem apel o to żeby ujawnił więcej informacji o sobie, jeszcze nie jest rozstrzygnięta.
  • 0

#2818 lukaszSA Napisany 11 maja 2016 - 15:50

lukaszSA

    Overall expert

  • Forumowicze
  • 28 942 Postów:

Ciekawe czy zakopał żonę w ogródku :hmmm:


  • 0

#2819 twilitekid Napisany 11 maja 2016 - 17:32

twilitekid

    HBH

  • Forumowicze
  • 6 740 Postów:

O jezu to może przez niego mamy spacje zamiast tabów w PSR2, o co pół świata PHPowego wciąż płacze.


  • 0

#2820 Ryan Napisany 11 maja 2016 - 21:36

Ryan

    Dominik D.

  • Administratorzy
  • 32 571 Postów:
O spacje i taby zawsze jest płacz. Z wiekiem się z tego wyrasta i przyjmuje notację konkretnego projektu, bo szkoda czasu na pierdoły.

@torq: Dla mnie w całej historii nie ma znaczenia, czy to autor zrobił (a jestem pewien, że tak właśnie jest). Rzeczy, które są dla mnie ciekawe/istotne/symptomatyczne, to:

1. Andrew Carter wskazał na szereg nieprawidłowości. Gdyby Dracony napisał "dane wyglądają na zmanipulowane; to nie ja [bez znaczenia czy tak jest], ale nie chcę, żeby taki syf wisiał nad moim projektem - dołożę starań by m.in. statsy się zgadzały", to miałby gigantyczna przewagę etyczną w tej dyskusji. On nie czuje się odpowiedzialny za swój wizerunek.
2. Dyskusja dotyczy wizerunku autora i, przez proxy, FIG. Pisanie o liczbach w kryteriach duże/małe to zasłona dymna. Istotne jest, czy są wiarygodne i czy na wiarygodności Dracony zależy. Wszystko wskazuje na to że nie. Poboczne wspominki (jego i innych) na temat innych małych projektów w FIG to zagrania z podstawówkowej ławki.
3. Przeraża mnie postawa a'la Pani Dulska. Nie napsuł nic w FIG, więc w czym problem? Jedyną walutą FIG jest wizerunek, a ten budowany jest przez dekorum członków w ogólności. To zarówno w wątku, jak i poza nim ssie. Sekretarze IMO nie stanęli na wysokości zadania.
4. Postawa członków też jest tchórzliwa, bo mimo bylaws na ten temat nikt nie chce byś sponsorem formalnej dyskusji na temat incydentu.
  • 0