title: Doświadczenie wystarczy na stopień naukowy w dziedzinie informatyki

text: Zastanawiam się nad karierą programisty. Problemem jest to, że uważam, że studia nie są dla mnie odpowiednie. Planuję dołączyć do Sił Powietrznych jako programista systemów komputerowych, czy będą mnie szkolić i zdobędę trochę punktów na studiach. Z tego, co mogę zrozumieć, jest duża liczba osób, które studiują informatykę, ponieważ słyszą, że komputery zarabiają pieniądze. Większość rezygnuje, ale niektórzy kończą studia, ale okazuje się, że tak naprawdę nie wiedzą nic o programowaniu. Zawsze słyszałem, że ci studenci często otrzymują dobre oceny, ale nie zmuszają się do nauki poza kursem. Jestem bardzo zmotywowanym uczniem i świetnie się bawię ucząc się C++, a także kocham komputery i od tego czasu nawet czytałem lub pisałem. Więc nauka rzeczywistego handlu nie jest problemem. Mogłem iść na studia za darmo lub prawie za darmo. Najprawdopodobniej zaciągnę się na 6 lat. Ale kiedy (lub jeśli zdecyduję się na karierę) wyjdę z wojska, będę mógł znaleźć pracę z 6-letnim doświadczeniem zamiast dyplomu. Przypuszczam, że tak, ponieważ wspomniany pracodawca wiedziałby, czy mógłbym wykonać tę pracę, a nie musiałby mieć do czynienia z jakimś dzieciakiem z college'u, który nie jest nawet pewien, czy wie, jak programować.


title: Czy dla programisty WWW priorytetem jest znajomość kodu źródłowego przeglądarki internetowej?

text: Jak ważne jest dla programisty zajmującego się aplikacjami internetowymi (powiedzmy pisanie html i js) pobranie kodu źródłowego przeglądarki (np. Chromium) i poznanie działania silnika (renderer, javascript vm, przetwarzanie sieciowe itp.)?


title: Wykorzystanie wymagań dla ukończonego projektu firmowego jako podstawy do osobistego projektu szkoleniowego

text: Tło: Chcę się uczyć, wypróbowywać nowe frameworki, narzędzia, języki, ale nie potrafię wymyślić czegoś do zbudowania. Firma, w której pracuję, dla której niedawno zakończyły się prace nad budową oprogramowania do użytku wewnętrznego. W ogóle nie byłem zaangażowany w projekt. Oprogramowanie jest czysto wewnętrzne, nie sprzedajemy go dalej. Wyniki nie są tym, na co liczyli ludzie. Czy akceptuję budowanie własnego rozwiązania w wolnym czasie, ale korzystanie z dokumentacji wymagań dla projektu firmy? Czy istnieją pułapki, na które powinienem uważać przy takim podejściu, rzeczy, które mogę zrobić, aby złagodzić to ryzyko? Ewentualnie mógłbym go zbudować tak, jak uważam, że powinno to być zrobione bez odwoływania się do tych dokumentów. Czy to lepsze podejście, ponieważ na pewno uwalnia mnie później do robienia tego, co lubię z kodem?


title: Zaprojektuj wzorzec dla zachowania polimorficznego, jednocześnie umożliwiając separację bibliotek

text: Załóżmy, że mam hierarchię klas `Item`: `Prostokąt, Okrąg, Trójkąt`. Chcę móc je rysować, więc moją pierwszą możliwością jest dodanie wirtualnej metody `Draw()` do każdego: class Item { public: virtual ~Item(); wirtualna pustka Draw() =0; }; Jednak chcę podzielić funkcjonalność rysowania na oddzielną bibliotekę Draw, podczas gdy biblioteka podstawowa zawiera tylko podstawowe reprezentacje. Jest kilka możliwości, o których mogę pomyśleć: 1 - `DrawManager`, który pobiera listę `Item`s i musi użyć `dynamic_cast<>`, aby dowiedzieć się, co zrobić: class DrawManager { void draw(ItemList& items) { FOREACH(pozycja* pozycja, pozycje) { if (dynamic_cast<Prostokąt*>(pozycja)) { drawRectangle(); } else if (dynamic_cast<Circle*>(item)) { drawCircle(); } .... } } }; Nie jest to idealne rozwiązanie, ponieważ opiera się na RTTI i zmusza jedną klasę, aby była świadoma wszystkich elementów w hierarchii. 2 - Innym podejściem jest przeniesienie odpowiedzialności za rysowanie do hierarchii `ItemDrawer` (`RectangleDrawer`, itd.): class Item { virtual Drawer* GetDrawer() =0; } class Rectangle : public Item { public: virtual Drawer* GetDrawer() {return new RectangleDrawer(this); } } Pozwala to na oddzielenie problemów między podstawową reprezentacją elementów i kodem do rysowania. Problem polega jednak na tym, że klasy Item są zależne od klas rysunkowych. Jak mogę wydzielić ten kod rysunkowy do osobnej biblioteki? Czy rozwiązanie dla elementów zwraca klasę fabryczną o pewnym opisie? Jak jednak można to zdefiniować, aby biblioteka podstawowa nie była zależna od biblioteki Draw?


title: Jak znaleźć „dobrą” stronę seed dla robota internetowego?

text: Zacząłem budować robota internetowego i przeczytałem gdzieś, że znalezienie dobrej strony źródłowej dla robota jest bardzo trudnym problemem. Czy ktoś może mi wyjaśnić, czy istnieje jakaś wcześniej zdefiniowana procedura / wytyczne dotyczące znalezienia dobrej strony z nasionami? lub jak mówisz, że dana strona jest dobrą stroną z nasionami?


title: Utrzymywanie zrównoważonego drzewa wyszukiwania binarnego

text: Kształcę się w zakresie algorytmów i struktur danych. W tym celu robię prosty program, który odczytuje wiersze w następujący sposób: bdhj 168.24 dahf 42.88 dhfa 128.92 Pierwsza kolumna reprezentuje nazwę konta (i nie musi to być 4 znaki), a druga reprezentuje wartość do dodania (lub usunięcia jeśli wartość jest ujemna) na to konto. Mam ogromne dane testowe, które mogłem profilować różnymi algorytmami. Do tej pory próbowałem przechowywać te informacje w połączonych listach i tablicach dynamicznych oraz w mieszaninie tych dwóch. Chociaż dynamiczne tablice były dobre w umożliwianiu wyszukiwania binarnego, wstawianie elementów wymaga wywołania memmove (ponieważ wstawiam posortowane) i zajmuje dużo czasu. Chcę wypróbować drzewa wyszukiwania binarnego dla tego programu, jednak nie mam pojęcia, jak utrzymać równowagę drzewa wyszukiwania. Próbowałem wyszukać w Google, ale nie mogłem znaleźć żadnych wyjaśnień na temat algorytmu, którego mógłbym użyć, ani żadnych wskaźników. Czy mógłbyś podać wskazówki i/lub źródła, które mógłbym sprawdzić?


title: Zmieniasz __class__ w fabryce?

text: Analizuję zestaw plików XML różnych rodzajów (te rodzaje są znane z góry). Oto moje wymagania: * Chcę, aby obiekt reprezentował każdy dokument XML (mapowanie obiekt-xml) * Wolałbym mieć inną klasę dla każdego rodzaju, aby identyfikacja typu pliku XML była równoważna patrzeniu na klasę przykładu * nie znam z góry rodzaju * Chcę określonego zachowania dla każdego obiektu Ale dla uproszczenia rozważmy, że muszę tylko otworzyć różne liczby, z dwóch znanych rodzajów: * liczba parzysta * nieparzysta number Jeśli chodzi o wzorzec projektowy, używam odmiany _wzorca projektowego fabryki_ , gdzie actory znajduje się w `__init__` klasy najwyższego poziomu, a poprawną implementację ustawiam dynamicznie zmieniając klasę `__class__` Number(): def __init__(self, val): # wspólna implementacja (w przypadku XML robię rekurencję importów xml) self.value = val # Jest to również punkt, w którym odkrywam typ mojego obiektu # Stąd konstruktor jest także fabryka odpowiedniego typu if val % 2 == 0: self.__class__ = EvenNumber elif val % 2 == 1: self.__class__ = OddNumber else: # zachowaj domyślną klasę przepustki implementacji Number EvenNumber(Number): def half(self ): ''' specyficzne zachowanie dla liczb parzystych ''' return self.value / 2 class OddNumber(Number): def next_int(self): return self.value if __name__ == '__main__': for x in (Number(2 ), Number(3)): ''' W głównym algorytmie przetwarzanie zależy od typu obiektu ''' if isinstance(x, EvenNumber): print(x.half()) elif isinstance(x, OddNumber) ): print(x.next_int()) Co myślisz o tym podejściu? Wiedziałem, że `__class__` można przeczytać i byłem bardzo zaskoczony, że można go również napisać. Co myślisz o dynamicznej zmianie `__class__`? Czy to dobrze znany wzorzec projektowy (nie jest to _wzorzec fabryczny_ ani _wzorzec stanu_ ani _wzorzec strategii_ , nawet jeśli wydaje się powiązany z nimi wszystkimi) **Edytuj** Mój prawdziwy przypadek użycia Chcę otworzyć XBRL taksonomia, która składa się z baz danych XML. Oprócz ogólnej bazy linków XML, chcę dokładniej obsłużyć niektóre z nich: * baza linków etykiet XML * baza linków definicji XML * itp. W istocie, oto co zrobiłem: class Linkbase(etree.xml.ElementTree): ''' Generic linkbase ''' def __init__(self, filename): # parse XML if self.type == 'definicja': self.__class__ = DefinitionLinkbase elif self.type == 'label': self.__class__ = LabelLinkbase @property def type (self): return self.find('//xpath/expression').tag class LabelLinkbase(Linkbase): @property def label(self): # znajdź wszystkie odpowiednie elementy i zwraca listę Labels class DefintionLinkbase(Linkbase): @property def definitions(self): # zwraca wszystkie definicje Alternatywnie mogłem użyć fabryki. Przychodzi mi do głowy coś takiego, ale nie wygląda to tak elegancko jak pierwsze podejście. class Linkbase(etree.xml.ElementTree): ''' Generic linkbase ''' def __init__(self, tree): self.tree = tree @property def type(self): return get_type(self.etree) class LabelLinkbase(Linkbase ): @property def labels(self): # znajdź wszystkie odpowiednie elementy i zwraca listę klasy Labels DefintionLinkbase(Linkbase): @property def definitions(self): # zwraca wszystkie definicje def build_Linkbase(file): tree = etree.parse (plik) if get_type(drzewo)== "definicja" return DefintionLinkbase(drzewo) elif get_type(drzewo) == "label": return LabelLinkbase(drzewo) else: return Linkbase(drzewo) def get_type(drzewo): zwróć drzewo. znajdź('//xpath/wyrażenie').tag


title: Struktura URL i kontrolera dla relacji rodzic-dziecko

text: Używam frameworka MVC do tworzenia aplikacji, która zawiera hierarchię: Lokalizacja <1-N> Urządzenia <N-M> Usługi Mam kilka lokalizacji. Każda lokalizacja może mieć kilka urządzeń (reprezentowanych przez relację 1-N w bazie danych). Każde urządzenie uruchamia usługi. Usługi (takie jak http, ftp itp.) są zdefiniowane w dodatkowej tabeli i są połączone z urządzeniami za pomocą relacji N-M. Do tej pory mam model dla każdego z encji i jeden kontroler lokalizacji dla operacji CRUD. Ponieważ urządzenia w jakiś sposób należą do lokalizacji, wszystkie funkcje CRUD urządzenia znajdują się również w kontrolerze lokalizacji. Usługi posiadają własnego kontrolera. Adres URL dostępu do danych ma następującą strukturę: /lokalizacje/ #, aby uzyskać przegląd lokalizacji /lokalizacje/*identyfikator*/ #, aby wyświetlić szczegóły jednej lokalizacji /lokalizacje/*id*/edytuj #, aby edytować szczegóły jednej lokalizacji /locations/*id*/device/*deviceid*/ # aby wyświetlić szczegóły urządzenia /locations/*id*/device/*deviceid*/edit # aby wyświetlić szczegóły urządzenia /services/ # lista wszystkie usługi /services/*id/ # zobacz szczegóły usługi Uwaga: Istnieją również adresy URL do tworzenia i usuwania wpisów, które są pomijane. Ale myślę, że masz pomysł. A teraz moje pytania: to źle i myślę, że źle jest umieszczać wszystkie funkcje wewnątrz kontrolera lokalizacji, dlatego chciałbym przenieść je do oddzielnych kontrolerów. Z drugiej strony podoba mi się struktura URL, ponieważ dość dobrze reprezentuje hierarchię danych. Ponadto lubię, gdy struktura adresu URL odpowiada kontrolerom. Jakie jest „lepsze” rozwiązanie: oddzielne kontrolery z połączonymi adresami URL? Oddzielne kontrolery, osobne adresy URL? Albo połączony kontroler z połączonymi adresami URL?


title: czy istnieje język programowania przeznaczony do wyrażania kombinacji danych?

text: Bardzo często, gdy używasz wiersza poleceń lub po prostu programujesz, chcesz wyrazić jakąś kombinację, którą kończysz używając `for` - co często jest gadatliwe. for (int i = 0; i<10; ++i) std::cout << "img_" << i << std::endl; dla f w *; wykonaj echo "$f"; gotowe Zawsze zastanawiałem się, czy istnieje jakiś język, który uprości tę sprawę? Na przykład: „mv img_[0~6] imgs” przetłumaczyłoby na mv img_0 imgs mv img_1 imgs mv img_2 imgs mv img_3 imgs mv img_4 imgs mv img_5 imgs `img_[0~1][0~1]` może działać dla `img_00, img_01, img_10, img_11` `img_[x:0~2][x]` może działać dla `img_00, img_11, img_22` Itd. Nie proszę o tę konkretną składnię, tylko jeśli jest jakaś języka/funkcji kiedykolwiek zaimplementowanych w celu wyrażenia takich kombinacji w możliwie najprostszy sposób?


title: Nie wiem, jak uczyć się programowania internetowego

text: Witam wszystkich i dziękuję za poświęcony czas :) Mam więc 17 lat i zastanawiam się nad założeniem strony internetowej, ale ponieważ nie mam dużo pieniędzy, postanowiłem, że sam muszę się tego nauczyć . Dostałem więc kilka książek o głównych językach ([X]HTML, AJAX, JS, PHP, MySQL, CSS), ale nie jestem pewien, co z nimi zrobić. Zacząłem je studiować w styczniu, a ponieważ myślałem, że to trudne, postanowiłem skopiować książki do kilku zeszytów, a potem, gdy miałem ogólny obraz działania tych języków, ponownie zacząłem stosować wiedzę . Trwa to jednak zbyt długo. Studiuję to od ponad 6 miesięcy, zmarnowałem ponad 20 dolarów na zeszyty, a wciąż jest kilka książek, które pozostają nietknięte. Myślę: może lepiej byłoby po prostu przestudiować książki i bezpośrednio zastosować wiedzę i robić to krok po kroku, zamiast przesadzać w ten sposób. Znaczenie: zamiast robić notatki, jak to robisz w normalnej klasie szkolnej, po prostu zignoruj to, zanurz się w akcji i ucz się na własnych doświadczeniach. Myśli? :) Dzięki jeszcze raz.


title: Jak mogę przetestować dźwięk jednostkowy?

text: Odziedziczyłem mały projekt i chcę go jednocześnie rozszerzyć i ustabilizować, pisząc testy jednostkowe dla całego dodawanego przeze mnie nowego kodu. Pierwsza klasa, `TypedAudioCreator`, tworzy pliki audio, co okazało się bardzo łatwe do przetestowania w pierwszej kolejności i napisania kodu w drugiej. Jednak gdy przyszedł czas na napisanie `TypedAudioPlayer`, nie miałem pojęcia, jak mogę go przetestować. Jest to bardzo mała klasa skupiająca się na podstawach odtwarzania dźwięku: public class TypedAudioFilePlayer { public event StartedPlayingHandler StartedPlaying; zdarzenie publiczne StoppedPlayingHandler StoppedPlaying; public readonly int Czas Międzyodtwarzaniami; private Queue<TypedAudioFile> _playlist = nowa kolejka<TypedAudioFile>(); public TypedAudioFilePlayer(int timeBetweenPlays) { TimeBetweenPlays = timeBetweenPlays; } public void AddFile(TypedAudioFile file) { _playlist.Enqueue(file); } public void StartPlaying() { ThreadPool.QueueUserWorkItem(ignoredState => { while (_playlist.Count > 0) { var audioFile = _playlist.Dequeue(); if (StartedPlaying != null) StartedPlaying(audioFile); audioFile.SoundPlayer.PlaySync (); audioFile.SoundPlayer.Dispose (); if (StoppedPlaying ! = null) StoppedPlaying (audioFile); } }); } public void StopPlaying() { if (StoppedPlaying != null) StoppedPlaying(null); } } Nadal jestem bardzo nowy w TDD, ale zdaję sobie sprawę z korzyści płynących z praktyki i chciałbym spróbować i być w tym lepszy. Najpierw napisałem kod, nie ma tu żadnych testów, ale to było po prostu zbyt leniwe, by właściwie wymyślić sposób rozwiązania tego problemu przez TDD. Mam pytanie, jak powinienem/mogłbym przetestować tę klasę?


title: Czy powinienem się martwić, jeśli mój stosunek LOC/dzień jest zbyt wysoki?

text: Obecnie pracuję nad projektem niezależnym, więc nie mam luksusu testowania przez ludzi lub zewnętrznego przeglądu kodu — jednak nie widzę żadnych trudnych błędów w moim bieżącym kodzie (naprawiam je tak, jak je widzę , i przez większość czasu są to po prostu błędne nazwy pól i tym podobne rzeczy, które naprawisz za minutę lub dwie), a ja testuję to po zaimplementowaniu dowolnej funkcji, zanim ją wypchnę. Ostatnio mój numer LOC wynosił około 400 dziennie (dla przypomnienia, to C#) i nie tylko wdrażam nowe systemy, ale także przepisuję rzeczy, które już napisałem i naprawiam kilka błędów. Czy powinienem się martwić? Czy to znak, że muszę się zatrzymać i przejrzeć cały kod, który napisałem do tej pory i dokonać refaktoryzacji?


title: Projektowanie zorientowane obiektowo

text: Załóżmy, że masz: +--------+ +------+ | Zwierzę | | Jedzenie | +-+------+ +----+-+ ^ ^ | | | | +------+ +-------+ | Jeleń | | Trawa | +------+ +-----------+ `Jeleń` dziedziczy po `Zwierzęciu`, a `Trawa` po `Żywności`. Na razie w porządku. Obiekty typu „zwierzę” mogą jeść obiekty typu „Żywność”. Teraz trochę pomieszajmy. Dodajmy „Lwa”, który dziedziczy po „Zwierzę”. +--------+ +------+ | Zwierzę | | Jedzenie | +-+-----++ +----+-+ ^ ^ ^ | | | | | | +------+ +------+ +-------+ | Jeleń | | Lew | | Trawa | +------+ +------+ +-------+ Teraz mamy problem, ponieważ `Lew` może jeść zarówno `Jeleń`, jak i `Trawę`, ale `Jeleń` to nie jest „Żywność”, to „Zwierzę”. Jak rozwiązać ten problem bez używania wielokrotnego dziedziczenia i projektowania zorientowanego obiektowo? FYI: Użyłem http://www.asciiflow.com do stworzenia diagramów ASCII.


title: Przedstawiamy Scala kierownikowi technicznemu

text: Promuję Scala w pracy jako coś, co powinniśmy wypróbować do takich rzeczy, jak testowanie ze specyfikacją http://code.google.com/p/specs/ i szybkie prototypowanie usług internetowych za pomocą narzędzi takich jak Scalatra https://github. com/scalatra/scalatra i Lift http://liftweb.net. Kierownik techniczny chce dowiedzieć się więcej o Scali i nie ma doświadczenia z językiem. Wskazałem, w jaki sposób prototypy Scala można szybko napisać i wdrożyć w naszej istniejącej infrastrukturze Java, a także korzystać z naszych istniejących bibliotek Java. Jest w dużej mierze zainteresowany konkretnymi korzyściami płynącymi z używania Scali w porównaniu z Javą i będzie zainteresowany konkretnymi przykładami. Chciałabym usłyszeć jakieś przemyślenia lub doświadczenia ludzi wprowadzających Scala do zarządzania technicznego. Bardzo mile widziane byłyby przemyślenia na temat dobrego kodu, jasnych, zwięzłych przykładów, które pokazują dużą przewagę nad odpowiednikiem Javy. Kilka przykładowych obszarów do dyskusji, o których myślałem, to: **REPL** Wielka wygrana z Javą i używam jej codziennie do testowania kodu Javy, który piszę. **Basic Collection Iteration** Jeden z pierwszych obszarów, który moim zdaniem programiści Java widzą natychmiastowe korzyści. **Wnioskowanie o typach** W pracy używamy dużo Pythona - myślę, że mniej typowania w języku silnie typizowanym będzie atrakcyjne. **Integracja z Javą** Biorąc pod uwagę naszą inwestycję w Javę, będzie to wielka sprawa. **Współczesność** Krótki przegląd aktorów Akka i nowych równoległych kolekcji. Chciałbym zobaczyć małe, skoncentrowane przykłady, które ktokolwiek ma tutaj. **Specyfikacje** Uważam, że BDD ze specyfikacją doskonale nadaje się do testowania aplikacji Java. **Tworzenie stron internetowych** Uważam, że Scalatra jest idealna do szybkiego rozwoju usług REST. Podziel się wszelkimi innymi obszarami, które Twoim zdaniem mogą być interesujące, a także wszelkimi przykładami kodu w tych lub innych obszarach, które Twoim zdaniem pokazują zalety Scali nad odpowiednikiem Javy. **EDYTUJ:** Aby było jasne, interesują mnie przede wszystkim **zwięzłe, konkretne przykłady kodu** odpowiednie do tej sytuacji. Wcale nie interesuje mnie kolejny wątek "Java vs Scala". Mam nadzieję, że to było jasne. Coś takiego: **Java:** Foo theFoo = null; for(Foo aFoo: allTheFoos) { if (aFoo.getId().equals(theIdIWant)) { theFoo = aFoo; przerwanie; } } **Scala:** val thefoo = allTheFoos.find(aFoo.id == theIdIWant)


title: wyjątek dla konwencji literałów ciągów znaków

text: Jeśli jestem przyzwyczajony do używania ' dla literałów ciągów znaków w PHP, czy byłoby lepiej, gdybym się go trzymał w każdej sytuacji, czy też mogą istnieć wyjątki, gdy zwiększy to czytelność? przykład: `$foo = "bar'baz"; // to może być łatwiejsze do odczytania $foo = 'bar\'baz'; // ale to byłoby zgodne z konwencją`


title: Jak nazwać obiekty, które mogą usuwać dane z pamięci podręcznej, aby spełnić ograniczenia dotyczące pamięci?

text: Tworzę oprogramowanie wieloplatformowe, które jest przeznaczone do uruchamiania na urządzeniach mobilnych. Zarówno iOS, jak i Android zapewniają ostrzeżenia o małej ilości pamięci. Planuję stworzyć klasę opakowującą, która zwolni buforowane zasoby (takie jak tekstury) po pojawieniu się ostrzeżeń o małej ilości pamięci (zakładając, że zasób nie jest używany). Jeśli zasób wróci do użycia, przechowa go ponownie w pamięci podręcznej itp. Próbuję pomyśleć, jak to się nazywa. W .Net jest to podobne do „słabego odniesienia”, ale ma to sens tylko w przypadku wyrzucania śmieci, a ponieważ używam c++ i shared_ptr, słabe odniesienie ma już znaczenie, które różni się od tego, którego używam Myślę o. Jest też różnica, że ta klasa będzie w stanie odbudować pamięć podręczną w razie potrzeby. Co to za wzór/jakkolwiek się nazywa? Edycja: możesz polecić tagi dla tego pytania.


title: Jak mogę zabezpieczyć program obsługi żądań, aby odpowiadać tylko właściwym klientom?

text: Oto scenariusz... Mam witrynę sieci Web, która ma ogólny program obsługi napisany w asp.net (plik .ashx), który akceptuje żądania http, pobiera odpowiednie dane, konwertuje wynik na xml, a następnie przekazuje go z powrotem za pośrednictwem odpowiedzi. Zostanie to ostatecznie wykorzystane, aby aplikacja Windows mogła wysyłać żądania danych do tej witryny internetowej. Obawiam się, że każdy, kto wie, jak złożyć wniosek, może uzyskać dostęp do potencjalnie osobistych danych. Dane nie są tak wrażliwe jak informacje finansowe, ale będą miały nazwy i adresy, więc oczywiście muszę pomyśleć o ich zabezpieczeniu. Moją pierwszą myślą było zaszyfrowanie informacji przed udzieleniem odpowiedzi, a może nawet zaszyfrowanie prośby i cieszę się, że to robię, ale chciałem tylko zapytać innych głupców o ich opinię w tej sprawie. Czy jest to coś, co ma „standardowy” sposób robienia tego, czy jest to po prostu przypadek wymyślenia czegoś odpowiedniego i wdrożenia tego. Nawiasem mówiąc, aplikacja Windows będzie dystrybuowana w całym kraju, więc prośby będą pochodzić z wielu miejsc. Korzystanie z adresu IP jest nie tylko pracochłonnym sposobem na zrobienie tego, ale również nie pomaga, ponieważ można oczywiście wysłać wiadomość z adresu IP bez korzystania z aplikacji. TL;DR Jak mogę się upewnić, że to moja aplikacja Windows poprosiła moją aplikację internetową o informacje?


title: Co muszę wiedzieć o strukturach danych i algorytmach w „rzeczywistym” świecie?

text: Właśnie ukończyłem kurs struktur danych i algorytmów w szkole, wziąłem go latem, więc kurs 6 tygodni vs kurs 16 tygodni podczas zwykłego semestru. Kurs był więc nie tylko trudny, ale i naprawdę bardzo szybki. Moje pytanie brzmi, co muszę wiedzieć o strukturach danych w świecie rzeczywistym? Rozumiem, co robią i jak działają, w większości, ale miałem naprawdę trudny czas na ich kodowanie, nie byłbym w stanie napisać od podstaw kodu dla klasy drzewa binarnego lub klasy zbalansowanego drzewa ... . Czy to złe? czy powinienem to powtórzyć, czy wiedza o tym, jak one działają, jest wystarczająca, bez możliwości pisania zajęć od podstaw?


title: Jakie są konsekwencje przekształcania oprogramowania open source w oprogramowanie o zamkniętym kodzie źródłowym?

text: Jeśli firma korzysta z licencjonowanej aplikacji open source, a następnie tworzy z niej aplikację o zamkniętym kodzie źródłowym, przerabiając obszerne części aplikacji, dodając nowe funkcje i stosując poprawki błędów... Ignorowanie wszelkich wymagań licencyjnych... * Jak przebiega przejście i co można zrobić, aby temu zapobiec, poza wyborem licencji różnicowej? * Jakie są (etyczne lub społeczne) obowiązki firmy? (Na przykład: oddanie się projektowi o otwartym kodzie źródłowym byłoby etyczną rzeczą do zrobienia) * Jeśli zarówno wersja open source, jak i wersja zamkniętego kodu źródłowego są dostępne, w jaki sposób konkurencja wpływa na którykolwiek z produktów? Czy są jakieś przykłady firm lub produktów, które zrobiły to (z powodzeniem lub bez powodzenia) w przeszłości? Jaki był stosunek społeczności do tych projektów?


title: Asembler jako pierwszy język programowania?

text: Jak myślisz, jak dobrym pomysłem byłoby nauczenie ludzi asemblera (jakiś wariant) jako pierwszego języka programowania? Zajęłoby to dużo więcej wysiłku niż nauka na przykład Javy lub Pythona, ale można by dobrze zrozumieć maszynę mniej więcej od „pierwszego dnia programowania” (przynajmniej w porównaniu z wieloma językami wyższego poziomu). Co myślisz? Czy to realistyczny pomysł, przynajmniej dla tych, którzy są gotowi podjąć dodatkowy wysiłek? Zalety i wady? _Uwaga: nie jestem nauczycielem, tylko ciekawa_


title: Eclipse RCP - Programowanie czy konfiguracja?

text: kiedy tworzę aplikację RCP, zawsze zadaję sobie pytanie, czy powinienem to zrobić „ręcznie”, czy też powinienem użyć konfiguracji XML? Czy to tylko kwestia gustu, jakich korzyści mi brakuje, gdy nie korzystam z podejścia konfiguracyjnego. Czy jest coś, o czym warto pomyśleć podczas konwersji aplikacji RCP na e4 w przyszłości? Dziękujemy za podzielenie się swoimi przemyśleniami! Tomasz


title: Dziedziczenie a mixiny w językach dynamicznych?

text: **Kiedy powinieneś preferować wzorce dziedziczenia nad domieszki w językach dynamicznych?** Przez domieszki mam na myśli właściwe dodawanie, jak wstawianie funkcji i składowych danych do obiektu w czasie wykonywania. Kiedy użyjesz na przykład dziedziczenia prototypowego zamiast mixinów? Aby lepiej zilustrować, co rozumiem przez mixin, trochę pseudokodu: asCircle(obj) { obj.radius = 0 obj.area = function() { return this.radius * this.radius * 3.14 } myObject = {} asCircle(myObject) mójObiekt.obszar() // -> 0


title: Licencja dla programistów programu Visual Studio jest podwójna jako licencja osobista?

text: Mogę się całkowicie mylić, ale niejasno pamiętam, jak usłyszałem z podcastu, że zgodnie z licencją Visual Studio programista, który zawodowo pracuje z Visual Studio w swoim miejscu pracy, automatycznie ma licencję na używanie go w życiu osobistym. Oznacza to, że programista może nie musieć płacić za program Visual Studio, aby legalnie go używać/być właścicielem. Znowu mogę się całkowicie mylić, ale jeśli mam rację, czy ktoś może potwierdzić źródło?


title: Czy istnieje jakiś „prawdziwy” powód, dla którego nienawidzone jest wielokrotne dziedziczenie?

text: Zawsze podobał mi się pomysł obsługi wielokrotnego dziedziczenia w języku. Najczęściej jednak celowo się o tym zapomina, a rzekomą „zamiennikiem” są interfejsy. Interfejsy po prostu nie obejmują wszystkich tych samych podstaw, co dziedziczenie wielokrotne, a to ograniczenie może czasami prowadzić do większej liczby standardowych kodów. Jedynym podstawowym powodem, jaki kiedykolwiek o tym słyszałem, jest problem diamentów z klasami bazowymi. Po prostu nie mogę tego zaakceptować. Dla mnie brzmi to strasznie w stylu: „Cóż, można to schrzanić, więc automatycznie jest to zły pomysł”. Jednak w języku programowania można schrzanić wszystko i mam na myśli wszystko. Po prostu nie mogę traktować tego poważnie, przynajmniej nie bez dokładniejszego wyjaśnienia. Sama świadomość tego problemu to 90% bitwy. Co więcej, wydaje mi się, że słyszałem coś wiele lat temu o uniwersalnym obejściu obejmującym algorytm „obwiedniowy” lub coś w tym rodzaju (czy ktoś to dzwoni?). Jeśli chodzi o problem z diamentami, jedynym potencjalnie prawdziwym problemem, o którym mogę pomyśleć, jest to, że próbujesz użyć biblioteki innej firmy i nie widzisz, że dwie pozornie niepowiązane klasy w tej bibliotece mają wspólną klasę bazową, ale oprócz dokumentacji, prosta funkcja językowa może, powiedzmy, wymagać, abyś wyraźnie zadeklarował zamiar stworzenia diamentu, zanim faktycznie go skompiluje. Z taką cechą każde stworzenie diamentu jest albo zamierzone, lekkomyślne, albo dlatego, że nie jest się świadomym tej pułapki. Tak więc wszystko powiedziane... Czy istnieje jakiś ** prawdziwy ** powód, dla którego większość ludzi nienawidzi wielokrotnego dziedziczenia, czy to tylko histeria, która powoduje więcej szkody niż pożytku? Czy jest coś, czego tu nie widzę? Dziękuję Ci. **Przykład** Samochód rozszerza pojazd kołowy, KIASpectra rozszerza samochód i elektronikę, KIASpectra zawiera radio. Dlaczego KIASpectra nie zawiera elektroniki? 1. Ponieważ jest to Elektronika. Dziedziczenie a złożenie zawsze powinno być relacją „jest-związek” a „jest-związek”. 2. Ponieważ jest to Elektronika. Są druty, płytki drukowane, przełączniki itp. Wszystko w górę iw dół tej rzeczy. 3. Ponieważ jest to Elektronika. Jeśli zimą rozładuje się bateria, masz takie same kłopoty, jak gdyby nagle zniknęły wszystkie koła. Dlaczego nie skorzystać z interfejsów? Weźmy na przykład #3. Nie chcę tego pisać w kółko i _naprawdę_ nie chcę tworzyć jakiejś dziwacznej klasy pomocniczej proxy, aby to zrobić: private void runOrDont() { if (this.battery) { if (this.battery .working && this.switchedOn) { this.run(); zwrócić; } } this.dontRun(); } (Nie zastanawiamy się, czy ta implementacja jest dobra czy zła.) Możesz sobie wyobrazić, jak może istnieć _kilka_ z tych funkcji związanych z elektroniką, które nie są związane z niczym w WheeledVehicle i na odwrót. **Edytuj** Nie byłem pewien, czy poprzestać na tym przykładzie, czy nie, ponieważ jest tam miejsce na interpretację. Możesz również myśleć w kategoriach Plane rozszerzających Vehicle i FlyingObject i Bird rozszerzających Animal i FlyingObject, lub w kategoriach znacznie czystszego przykładu.


title: Podłączanie natywnej aplikacji iOS do backendu i bazy danych

text: Mam spore doświadczenie w pracy z Object-C i tworzeniu aplikacji na iOS, które działają lokalnie i z dostawcami BaaS (Parse.com). Chciałbym jednak przenieść mój rozwój mobilny na wyższy poziom i chciałbym uzyskać wskazówki dotyczące kolejności wykonywania czynności oraz wskazówki dotyczące korzystania z usług/technologii. Potrzebuję więc bazy danych i miejsca do hostowania mojej bazy danych. Używałem Amazon AWS do pewnych rzeczy i mogę łatwo skonfigurować tam bazę danych mySQL na instancji EC2. Ewentualnie słyszałem, że GAE jest bardzo przydatne. Naprawdę nie wiem, czy muszę pisać jakiś kod zaplecza. Wydaje mi się, że cel-C może zastąpić mój kod zaplecza. Czy to jest bezpieczne? Czy powinienem tworzyć całą usługę, która jest po prostu wywoływana z iPhone'a? Tak więc wiem, że jest to obciążone pytanie i może wymagać kilku różnych opinii, aby naprawdę uzyskać dobrą odpowiedź. Przepraszam za to. Ale zakładając, że jestem wystarczająco biegły w Obj-C, aby wszystko działo się po stronie klienta i że jestem wystarczająco wrażliwy, aby uczyć się innych języków, których mogę nie znać i postępować zgodnie z samouczkami i przykładami online - Jakie są kroki (i najlepsze technologie/usługi na każdym etapie) do tworzenia natywnej aplikacji na iOS, która nie korzysta z dostawcy BaaS, takiego jak Parse.com lub Stackmob.com. Dziękuję!


title: Typowa diagnostyka, do której służy VisualVM

text: Istnieje wiele dokumentacji na temat tego, jak _używać_ profilera 'jvisualvm', ale bardzo mało (jeśli w ogóle) porad z życia wziętych, jak _analizować_ wszystkie te wykresy i zrzuty. Jestem trochę przytłoczony wszystkimi wykresami i mam problem ze zrozumieniem tego wszystkiego. Wiem, że jest to pytanie typu monolitycznego, ale _musi_ być sposób na skondensowanie jego _typowych_ zastosowań w dość zwięzłej liście - znajdowanie wycieków pamięci, wątków zombie i tym podobnych. Jakie konkretnie są niektóre z typowych analiz dla VisualVM?


title: Czy powinienem zmusić użytkowników do aktualizacji aplikacji?

text: Piszę aplikację dla średniej wielkości firmy, z której będzie korzystać około 90% naszych pracowników i naszych klientów. Planując na przyszłość zdecydowaliśmy się dodać funkcjonalność, która zweryfikuje, że wersja uruchomionego programu jest wersją, którą nadal obsługujemy. Obecnie aplikacja zostanie zamknięta, jeśli wersja nie znajduje się wśród obsługiwanych przez nas wersji. Oto moja troska. Hipotetycznie w wersji 2.0.0.1 metoda "A" wywala i pali się w chwalebny sposób, a metoda "B" działa dobrze. Wydaliśmy 2.0.0.2, aby naprawić metodę A i przestarzać wersję 0.1. Teraz, jeśli ktoś używa 0.1, aby użyć metody B, będzie zmuszony do aktualizacji, aby naprawić coś, co nie stanowi dla niego problemu w tej chwili. Moje pytanie brzmi, czy czas zaoszczędzony na rozwiązywaniu problemów ze starymi, nieobsługiwanymi wersjami przeważy nad kosztami użyteczności?


title: Jak odpowiedziałbyś na to pytanie podczas rozmowy kwalifikacyjnej?

text: Jedna z pięciu osób, które przeprowadziły ze mną wywiad, zadała pytanie, które zaowocowało godzinną dyskusją: ** „Wyjaśnij, jak stworzyć posortowaną według częstotliwości listę dziesięciu tysięcy najczęściej używanych słów w języku angielskim”.** pierwszą reakcją było zaatakowanie założeń leżących u podstaw problemu. Język to płynna rzecz, argumentowałem. Zmienia się w czasie rzeczywistym. Słownictwo i wzorce użytkowania zmieniają się z dnia na dzień. Stworzenie listy słów i ich częstotliwości oznacza zrobienie zdjęcia poruszającego się celu. Każde zdjęcie, które zrobisz dzisiaj, nie będzie wyglądać jak zdjęcie, które zrobisz jutro, ani nawet za pięć minut. Z góry dziękując za odpowiedzi i rozważenie.


title: Jak postępować z zewnętrznymi ujściami danych?

text: Niedawno podjąłem się pracy kontraktowej, która w dużej mierze będzie polegać na generowaniu kanałów danych z danych mojego klienta i wysyłaniu ich do partnerów zewnętrznych za pośrednictwem kanałów i wywołań API. Zawsze uważałem, że ten konkretny rodzaj kodowania jest frustrujący z wielu powodów: * Musisz polegać na specyfikacjach, które często odbiegają od rzeczywistej implementacji lub po prostu nie wnikają w wystarczające szczegóły * Masz niewiele lub nie możliwość wglądu do systemu zewnętrznego, aby upewnić się, że dane zostały poprawnie zaakceptowane i zinterpretowane * Jeśli jest jakiś problem z wygenerowanymi danymi, nie zawsze jest łatwo wycofać zmiany i spróbować ponownie * Zewnętrzne testy i etapy środowiska często odbiegają od logiki produkcyjnej i produkcyjnej bazy danych. Jakie są najlepsze praktyki wykonywania tego rodzaju pracy? Tworzenie mocków i stubów niekoniecznie rozwiąże moje problemy, ponieważ moją prawdziwą troską jest: czy moje kanały mają prawidłowy wpływ na inny system, który jest w zasadzie czarną skrzynką? Mocki po prostu powielają moje założenia.


title: Kontrola źródła/wersji dla aplikacji używanej przez wiele firm

text: Czy łatwiej jest utrzymać oddział dla każdej firmy, która korzysta z oprogramowania, które wspierasz/rozwijasz? Każda firma będzie chciała „dostosowania”, a ja po prostu staram się znaleźć najlepszy sposób na poradzenie sobie z tymi zmianami. Oddział dla każdej firmy ma sens na krótką metę, ale widziałem, jak może to powodować problemy z aktualizacjami, gdy opracowywana jest nowa wersja. Czy lepiej mieć oddział dla każdej firmy, czy skonfigurować dostosowania, aby zawsze były połączone z głównym oddziałem, aby zminimalizować problemy z przyszłymi wydaniami?


title: Trudność w zrozumieniu różnicy między Project Managerem (Business Analyst) a Software Architectem i Scrum Masterem

text: Z tego co zebrałem: **Kierownik Projektu (PM)(lub Analityk Biznesowy (BA))** : Decyduje WSZYSTKO. Potrafi rozwiązywać problemy. Oznacza to, że będzie miał umiejętności niezbędne do przeglądania danych i innych istotnych informacji w celu ustalenia, gdzie w firmie znajdują się straty. Musi być biegły w negocjacjach, słuchaniu, mówieniu motywacyjnym, a także będzie dobrym liderem zespołu. * Odpowiedzialne pisanie BRD, gdzie zawarte są wszystkie wymagania biznesowe użytkowników/klientów. * BA służą jako kanał komunikacji między interesariuszami a zespołem **Architekt oprogramowania** : Architekt jest interfejsem między zespołem programistów a interesariuszami. Muszą być w stanie zrozumieć stronę biznesową i szczegóły techniczne. Architekci widzą, czego potrzebujesz teraz, co masz na myśli, mówiąc to, czego potrzebujesz, i opracowują strategię oprogramowania, która zapewni Ci to, czego potrzebujesz dzisiaj, oraz dom, w którym możesz się rozwijać (i z którego) w przyszłości. **Scrum Master** : Priorytetem nr 1 jest usuwanie przeszkód zgłoszonych przez zespół. Powinien także stale zwracać uwagę na potencjalne przeszkody… i co ważniejsze, na przeszkody, które istnieją, ale jeszcze nie zostały zidentyfikowane. Przeszkody to możliwości. Tak więc scrum-master powinien korzystać z tych możliwości przez cały dzień, aby doprowadzić swój zespół (zespoły) do hiperproduktywności. (dostępność = użyj lub skorzystaj z) Wydaje się, że kilka z tych ról nakłada się na siebie. Pomóż wyjaśnić ten problem. Jakaś historia, która łączy wszystkich tych ludzi, naprawdę pomogłaby! Dzięki wielkie.


title: harmonogram xaml kontroluje, jak radzić sobie z przedmiotami o bardzo różnym czasie trwania

text: Muszę utworzyć kontrolkę harmonogramu przy użyciu języka WPF XAML do wyświetlania elementów o czasie trwania zaledwie 1 sekundy i potencjalnie tak dużym, jak kilka godzin. Pierwszą rzeczą, która wydaje się jasna, jest to, że będę potrzebować pewnego rodzaju możliwości powiększania, aby wwiercać się w elementy o bardzo krótkim czasie trwania i oddalać, aby zobaczyć elementy o bardzo długim czasie trwania. Mam na myśli styl interfejsu użytkownika, w którym po powiększeniu kontrolki, aby wyświetlić duże elementy, wszelkie elementy o małym czasie trwania, które zwykle występują między elementami o dużym czasie trwania, są w pewnym stopniu zebrane w „wiadrze”, które ma wysokość>= minimum wysokość wyświetlacza. Abym mógł najechać kursorem myszy na to wiadro i uzyskać podpowiedź, która renderuje zawarte elementy w widoku listy uporządkowanej czasowo. Nie wiem, od czego zacząć. Czuję, że być może mógłbym coś osiągnąć w nadpisaniach Measure/Arrange w niestandardowym panelu. Ale myślę, że może to negatywnie wpłynąć na wydajność renderowania. Gdybym miał to zrobić w ten sposób, myślę, że musiałbym wstrzyknąć widok „zasobnik” do kolekcji podrzędnej paneli, ale to zepsułoby użycie ItemTemplate w mojej Kontroli elementów niestandardowych? Po drugie, tworzę niestandardową obserwowalną kolekcję, która ma możliwą do powiązania właściwość Scale, która następnie organizuje kolekcję w „zasoby” o czasie trwania wystarczająco dużym, aby można go było wyświetlić. Czy ktoś ma jakieś przemyślenia, jak najlepiej podejść do tego problemu?


title: Czy w takim przypadku naprawdę powinienem wdrożyć pozyskiwanie zdarzeń?

text: Przykład przypadku użycia, w którym ma zastosowanie źródło zdarzeń, którego fragment to: > Powiedzmy, że coś poszło nie tak w Twojej aplikacji, w wyniku czego użytkownik zostaje zablokowany > z powodu nadużycia, ale ten użytkownik twierdzi, że nie zrobił nic, aby złamać zasady. Teraz > możesz wrócić do swojego środowiska inscenizacyjnego i rozegrać wydarzenia > prowadzące > do bloku w tym systemie i zobaczyć, co się stanie z pierwszej ręki. > > Potrzebny jest do tego obszerny dziennik zdarzeń dla praktycznie każdej > interakcji, która ma miejsce wokół Twojej aplikacji, oraz system pomostowy do odtwarzania > zdarzeń. W oparciu o wrażliwość swoich danych możesz chcieć zanonimizować > niektóre szczegóły przed ręką, ale to wszystko. IMO, pozyskiwanie zdarzeń ma realną korzyść, gdy pytamy „dlaczego” był ten stan, a nie „co” było stanem. Moja aplikacja została zaprojektowana zgodnie z zasadą CQRS, ale nie używam jeszcze Event Sourcing. Jeśli moja aplikacja naprawdę koncentruje się na tym, „co”, a nie „dlaczego” (ponieważ operacje są naprawdę proste, co oznacza, że nie ma różnych sposobów na uzyskanie tego samego wyniku), czy jest to podobne do użycia wzorca temporalnego przedstawionego tutaj ( utrwalać wersje/zmiany obiektu w bazie danych) zamiast implementować źródło zdarzeń? Zwłaszcza w przypadku śledzenia nadużyć użytkowników (takich jak zamieszczanie obelg), które były tymczasowe (tak ukryte), wystarczyłoby i szybko wykonać proste zapytanie z prośbą o wersję, w której nadużycie było zatwierdzeniem, zamiast posiadania „skryptu” w środowisku pomostowym odtwarzającym zdarzeń, aby uzyskać odpowiedni obraz przedstawiający nadużycie.


title: Reprezentowanie listy stref czasowych

text: Mam aplikację internetową, która pozwala użytkownikowi wybrać strefę czasową z listy. Lista jest bardzo długa (prawie wszystkie strefy czasowe wspierane przez CLDR). Więc pytanie brzmi – jak mam to reprezentować? Jak powinno być posortowane - alfabetycznie czy według przesunięcia strefy czasowej? Jakie informacje powinien zawierać każdy element - offset, lokalizacja, długa nazwa (np. Europa/Zurych) czy krótka nazwa (np. CET)? Czy powinienem wyświetlać informacje o czasie letnim, czy tylko o bieżącym przesunięciu? Powiedzmy, że nie mogę teraz zrobić czegoś takiego jak wyświetlanie okien dialogowych konfiguracji systemu operacyjnego z fantazyjnymi mapami, więc lista jest jedyną opcją. Jednak chcę, aby lista wyglądała ładnie. Jakieś najlepsze praktyki, jak to się robi?


title: Jak zwiększyć moje umiejętności w zakresie struktur danych po długiej hibernacji?

text: Dawno, dawno temu byłem całkiem dobry w algorytmach i strukturach danych. Od tego czasu programowałem zawodowo, a potem zacząłem zarządzać małym zespołem, co całkowicie odwróciło moje umiejętności techniczne w tej dziedzinie. Postanowiłem, że chcę ponownie zostać programistą i pracować dla Google. Chodzi o to, że tak wyszedłem z praktyki, że gdybym miał teraz udzielać wywiadu, z pewnością bym oblał w 10 minut. Jaki program treningowy poleciłbyś mi, abym wróciła do formy? W ten weekend zacząłem już od powrotu do absolutnych podstaw i zaimplementowania kilku algorytmów sortowania, listy połączonej i tablicy mieszającej. Następnie, myślę, że przeczytam cały materiał kursu na temat innych podstawowych struktur danych i algorytmów grafowych. Chcę znaleźć skoncentrowany zestaw praktycznych ćwiczeń, które mogę wykonać w stosunkowo krótkim czasie, aby żonglować starymi komórkami mózgowymi. Znam się na tych rzeczach - muszę sobie tylko przypomnieć, że to znam.


title: Defensywne techniki programowania

text: Próbowałem zidentyfikować element inżynierii oprogramowania, który moim zdaniem jest pomijany, nie jest podkreślany lub nie jest nauczany podczas typowych studiów licencjackich dla CS lub SE. To, co wymyśliłem, to koncepcja programowania defensywnego. Chciałbym poznać opcje społeczności dotyczące programu obronnego i/lub konkretnych technik, których regularnie używasz. Chciałbym też wiedzieć, czy istnieją techniki specyficzne dla języka. Edycja: tylko bardziej jasne. Nie szukam lekcji z programu obronnego. Rozumiem, co to jest. Miałem nadzieję, że będzie to bardziej dyskusja na temat różnych metod, które członkowie społeczności stosują lub uznają za wartościowe. Oto kilka technik, których używam. Pamiętaj, że używam C prawie wyłącznie. Standard kodowania. Nie możesz początkowo myśleć, że ma to coś wspólnego z programowaniem defensywnym, ale tak jest. Aby to zilustrować, załóżmy, że Twój standard kodowania wymaga dodawania nazw zmiennych z typem zmiennej, takim jak IntValue lub UIntValue. Konwencja pozwala łatwo wykryć potencjalne problemy z regułami promocji, takie jak (IntX = IntValue * UIntValue) Użyj makr preprocesora dla stałych. Osobiście uważam, że dzięki temu twój program jest bardziej czytelny i łatwiejszy w utrzymaniu, ale zapewnia także siatkę bezpieczeństwa. Możesz mieć pewność, że wszystkie obszary kodu, które używają makra, zostaną zaktualizowane po zmianie wartości. Inne zastosowania makr preprocesora mogą również zawierać atrybuty obronne w kodzie. Niektóre techniki są wbudowane bezpośrednio w język, takie jak zmienne statyczne lub deklaracje funkcji lub enkapsulacja danych w języku c++. Oczywiście są bardziej oczywiste, w tym sprawdzanie wszystkich danych wejściowych i wyjściowych.


title: Wykładowe filmy CS

text: Nie mam formalnego wykształcenia w zakresie informatyki (jestem matematykiem), a niedawno odkryłem, że dobrze wykonane filmy stanowią przyzwoite substytuty prawdziwych wykładów. Szukam porady na temat kilku fajnych wykładów wideo, ale mam bardziej konkretne wymaganie niż to pytanie. Mianowicie, wiele filmów, które znalazłem w Internecie, nie korzysta z tablicy i używa aparatu fotograficznego. W tych filmach po prostu widzisz nauczyciela mówiącego i wskazującego na coś, co może być wyświetlane nad głową, ale nie masz sposobu, aby powiedzieć. Często są slajdy do naśladowania, ale nie są one zbyt pomocne. Zamiast tego wykłady, takie jak SICP lub ten kurs na Channel 9, wykorzystują tablice i zostały poddane odpowiedniej edycji wideo, co zapewnia, że zawsze widzisz odpowiednie slajdy. To robi ogromną różnicę w stosunku do wykładów z kamerą, które w większości są dla mnie bezużyteczne. Mogę łatwo wyszukiwać wykłady w Google, ale potrzebuję pomocy osób, które faktycznie je śledziły, aby znaleźć odpowiednie. Najbardziej interesuje mnie następujący temat, w kolejności malejącej: 1. Kompilatory i interpretery 2. Systemy operacyjne 3. (Zaawansowane) struktury danych i algorytmy 4. Sieci i protokoły Nie mam nic przeciwko językowi używanemu w kursie, ale na wszelki wypadek mówię (na różnych poziomach) PHP, Javascript, Python, Scheme, C i Haskell. Jeszcze lepiej, jeśli kursy przebiegają w szybkim tempie. Generalnie uczę się dość szybko, ale nie mam dużo wolnego czasu.


title: Najlepszy wzorzec projektowy dla biblioteki z modelem danych

text: Refaktoryzuję starą bibliotekę Codeigniter, aby była agnostyczna dla frameworka php. Oto podstawowe części: * obiekt połączenia - będzie pochodził od "użytkownika"; tj. połączenie frameworka lub ich własna biblioteka połączeń. Moja biblioteka nie będzie chciała "o tym wiedzieć" poza tym, że (na początku) będzie to obiekt conn PDO (ale należy napisać rzeczy, aby obsłużyć natywny typ sterownika) * obiekt modelu - uruchamia zapytania i zwraca tablicę wyników ( lub tablica błędów) do głównej biblioteki. W obecnej postaci jest bardzo "cienki" i zawiera tylko transakcje, budowanie zapytań i rzeczywiste zapytanie db * interfejs modelu - jestem wielkim fanem interfejsów i widzę ten model jako wymienny na model NoSQL, na przykład * biblioteka główna - w mojej obecnej bibliotece CI ta 1) otrzymuje żądanie funkcji, 2) waliduje przekazane do niej parametry, 3) żądania z modelu, 4) tworzy tablicę odpowiedzi zawierającą dane i kody błędów i wiadomości (konfigurowalne w wielu językach, ale tak naprawdę nie są częścią tego pytania) Podsumowując, sposób działania TERAZ jest w kontrolerze lub stronie wywołującej: 1) wywołanie funkcji main lib 2) model wywołań main lib 3) powrót modelu do głównego lib 4) main lib wraca do kontrolera * * * TERAZ zaczyna się moje prawdziwe pytanie dotyczące wzorca projektowego: chciałbym przekazać mój obiekt conn przez DI do mojej głównej biblioteki, ale chciałbym również przekazać mój model przez DI do głównej biblioteki zachować elastyczność. Celem elastyczności, za którym jestem, byłoby umożliwienie ludziom tworzenia własnych modeli Native DB lub NoSQL i przekazywanie do tego conns nie-PDO, więc utrzymywanie ich w separacji wydaje się optymalne. ALE, aby to zrobić, jedyne, o czym mogę pomyśleć, skończyłoby się jako: (kontroler - gdzie mógłbym faktycznie wykonać zapytanie w bibliotece, a nie w modelu) $conn //od użytkownika $model = new MyModel(); $lib = nowa MyLib($conn, $model); lub $conn //od użytkownika $model = new MyModel($conn); $lib = nowa MyLib($model); co wydaje się bardziej „naturalne”, ponieważ zapytanie i połączenie mają tendencję do współdziałania Każdy przypadek wydaje się dość niezdarny dla użytkownika i nie mogę się powstrzymać od zastanawiania się, czy nie przesadzam z tym całym DI lub po prostu wybrałem zły projekt wzór do tego. Wszelkie wskazówki dotyczące tego, jak najlepiej to skonfigurować, byłyby bardzo mile widziane - spędziłem więcej czasu na myśleniu o tym, niż zajmie mi refaktoryzacja rzeczywistego kodu! TIA


title: Organizacja projektu z profesjonalistami i studentami

text: Pracuję jako doktorantka opracowując symulacje naukowe/inżynierskie i algorytmy do testowania w tych symulacjach. W dzisiejszych czasach pierwszy student zaczął pracować nad moim projektem (do swojej pracy licencjackiej) i zastanawiam się: jak mam teraz zorganizować projekt? Myślę, że mam dobrą znajomość C++ (chociaż nadal chcę się codziennie doskonalić!), a kod zawiera kilka wzorców projektowych, wiele klas szablonowych itp. Te techniki są dla ucznia nowe i zastanawiam się, czy to dobry pomysł, aby go mieć pracować bezpośrednio w bagażniku projektu. Czy masz jakieś doświadczenia, co się dzieje, gdy początkujący programiści i bardziej doświadczeni programiści są mieszani? Czy kod się popsuł, czy też nowicjusze uczą się przez to więcej? Czy mądrze jest mieć gałąź dla ucznia, aby przetestować swoje algorytmy i może później połączyć je z trunkiem? Czy powinienem najpierw dać mu do przeczytania książkę taką jak The Pragmatic Programmer (lepsze sugestie?)? Dzięki za każdą odpowiedź! UWAGA: zadałem to pytanie na Stackoverflow. Odpowiedź dotyczyła recenzji kodu i myślę, że to dobry sposób, ale poinformowano mnie również, że ta strona może być bardziej poprawna, więc chciałem sprawdzić, czy jest więcej rzeczy, które mogą pomóc lub inne opinie?


title: Jak wybrać język, biorąc pod uwagę społeczność, w której się znajduje?

text: Czytałem następujący artykuł: Wielcy hakerzy Moją uwagę przykuła następująca część: > „Kiedy wybierasz język, wybierasz również społeczność. Programiści, których będziesz mógł zatrudnić do pracy nad projektem Java, wygrają” być tak > sprytnym, jak ci, których można dostać do pracy nad projektem napisanym w Pythonie. I > jakość hakerów prawdopodobnie ma większe znaczenie niż język, > który wybierzesz. Chociaż, szczerze mówiąc, dobrzy hakerzy wolą Pythona od Javy > powinien ci coś powiedzieć o względnych zaletach tych języków." Chciałbym zastosować jego rady do tworzonej przeze mnie komercyjnej aplikacji internetowej (bardzo wierzę w kulturę i społeczność), jednak ten artykuł został napisany w 2004 roku, a python zyskał na popularności w ostatnich latach. Jak mogę wybrać język, biorąc pod uwagę jego społeczność, a nie popularność? Jakieś zalecenia? Czy jest jakaś społeczność językowa, która wykazuje poświęcenie i pasję do rozwoju, zamiast uczyć się języka, aby dostać pracę i wypłatę?


title: Pozycja okna podczas uruchamiania

text: Oto pytanie do mnie, które naprawdę sprawia, że zastanawiam się za każdym razem, gdy zaczynam projektować i rozwijać aplikację desktopową dla grubego klienta. Jestem programistą .NET i przy moich formularzach (głównie WinForms, ale platforma powinna być nieistotna) również wybieram pozycję startową na **Centrum**. Powodem, dla którego to robię, jest to, że nie znoszę losowości, a jako użytkownik nie lubię, gdy okna przeskakują na moim monitorze. Więc moje pytanie do ciebie, jak najlepiej się do tego zabrać? Wyśrodkuj okno startowe aplikacji lub umieść je losowo? I dlaczego?


title: Definicja miksowania idiomów programistycznych?

text: Powiedzmy, że mam klasę, która jest częściowo zaimplementowana jako klasa statyczna i częściowo zaimplementowana jako singleton. Czy poza „klude” i „code-smell” (imo to jest jedno i drugie) jest bardziej odpowiednie określenie na tego typu mieszanie idiomów programistycznych?


title: Tabele statyczne a konfiguracje pamięci masowej atrybutów jednostek dynamicznych

text: Próbuję znaleźć lepszy sposób decydowania o konfiguracjach przechowywania tabel, czy będzie używał **konfiguracji statycznych przy użyciu tabel** czy **konfiguracji dynamicznych przy użyciu EAV** (wartość atrybutu encji) Podczas tworzenia tabel bazy danych, formularzy i raporty, kiedy decydujesz, że program powinien używać normalnej bazy danych (w której wszystko jest skonfigurowane statycznie, być może ostatecznej) lub używać wartości atrybutu encji (w której wszystkie dane są dynamiczne i można je dostosować)? Czy to wszystko zależy od klienta/osób z niego korzystających? Czy programy static-table-customized- mają zastosowanie tylko dla małych i średnich firm? i dynamiczne programy terenowe z możliwością dostosowania (takie jak Quickbooks) tylko dla ogółu społeczeństwa lub dużych firm, w których nie chcą, aby inny programista ponownie majstrował przy ich oprogramowaniu?


title: Dlaczego w Javie nie ma modyfikatora dostępu „tylko do podklas”?

text: W Javie dostępne są cztery modyfikatory dostępu do metod: `public` - każda klasa może używać tej metody. `protected` - klasy w tym samym pakiecie i podklasy w dowolnym pakiecie mogą używać tej metody. `private` - tylko ta klasa może używać tej metody. `no modifier` ("pakiet prywatny") - tylko klasy w tym samym pakiecie mogą używać tej metody. Często zdarza się, że chcę mieć przydatne metody w superklasie, z których mogą korzystać wszystkie podklasy. Ale dostęp innych klas do tej metody nie miałby sensu iw pewnym sensie złamałby enkapsulację. Więc muszę zadeklarować te przydatne metody w nadklasie `public` lub `protected`, co udostępnia je wszystkim innym klasom przynajmniej w pakiecie. Nawet jeśli mają być używane tylko przez podklasy. Czy istnieje powód, dla którego w Javie nie ma modyfikatora dostępu „tylko do podklas”? Wydaje mi się to bardzo dziwne. Czy czegoś mi brakuje? _Ponadto, modyfikator dostępu `subclasses-only` byłby również przydatny, gdy chcesz udostępnić zmienne tylko podklasom. Co mi się często zdarza._


title: Co robi analityk technologiczny w firmie bankowej?

text: Właśnie skończyłem studia i dostałem pracę jako _Analityk Technologiczny_ w firmie bankowej. Powiedziano mi, że będę pracować na .Net lub Javie. Jaką pracę będę wykonywać? Czego potrzebuje programista w firmie bankowej?


title: Jak mam programować w dynamicznym języku pisania, nawet jeśli żaden typ nie jest odnotowany w dokumentacji?

text: Żyłem długo w świecie statycznych maszynopisów. Wszystkie typy zostały wyraźnie odnotowane w każdej zmiennej i argumencie. Teraz muszę użyć jakiegoś dynamicznego języka pisania. (Smalltalk) Problem polega na tym, że w żadnym argumencie komunikatu, a nawet w dokumentacji, nie ma zapisanego typu. Skąd więc mogę wiedzieć, co należy przekazać do każdego argumentu? Dlaczego ludzie nie wpisali w argumenty wiadomości? Naprawdę, czy to nie jest potrzebne?


title: MBA vs MSIS

text: Rozważam powrót do szkoły dla moich mistrzów i szukam kilku dróg, którymi mogę się zająć. Rozważam tytuł MBA lub MSIS. Ogólnie wiem, że studia MBA dadzą mi solidny zestaw umiejętności, które pomogą mi zostać kierownikiem. Jednak wydaje się, że w dzisiejszych czasach jest ich bez liku, a uniwersytet, na który mogę się dostać, jest dobry, ale nie znajduje się dokładnie w pierwszej setce. Mój licencjat MINOR był w Business Information Systems. Jestem zardzewiały jak diabli, biorąc pod uwagę, że tego nie dotknąłem, ale MSIS byłby bardziej w kierunku moich wcześniejszych doświadczeń akademickich i wydaje się, że dotyka zarówno zarządzania biznesem, jak i IT. Pytanie... Czy z MSIS będę tylko pośrednikiem? Czy naprawdę będę ważną osobą z prawdziwym zestawem umiejętności, czy po prostu będę kimś, kto nie nadaje się na menedżera i nie ma pojęcia o stronie technologicznej? Czy stopień MSIS da mi realną szansę na szybkie podniesienie skali płac, czy też lepiej będzie, jeśli nauczę się programowania, nawiążę kontakty z innym stopniem BS? Co da mi więcej możliwości rozwoju kariery zawodowej? MBA czy MSIS?


title: Zbieranie wszystkich danych w pojedynczej iteracji vs używanie funkcji do czytelnego kodu

text: Powiedzmy, że mam szereg biegaczy, z którymi muszę znaleźć najwyższego, najszybszego i najlżejszego biegacza. Wydaje się, że najbardziej czytelnym rozwiązaniem byłoby: runners = getRunners(); tallestRunner = getTallestRunner(biegacze); najszybszyRunner = getFastestRunner(biegacze); lightestRunner = getLightestRunner(biegacze); ..gdzie każda funkcja iteruje nad biegaczami i śledzi największą wysokość, największą prędkość i najniższą wagę. Jednak trzykrotne iterowanie po tablicy nie wydaje się dobrym pomysłem. Zamiast tego lepiej byłoby zrobić: int największa wysokość, największa prędkość, najmniejsza waga; Biegacz najwyższybiegacz, najszybszybiegacz, najlżejszybiegacz; for(biegacz wśród biegaczy){ if(biegacz.wzrost > największawysokość) { największawysokość = biegacz.wzrost; najwyższy Biegacz = biegacz; } if(runner.speed > ... } Chociaż nie jest to zbyt nieczytelne, może stać się bałaganem, gdy dla każdej informacji wyodrębnionej w iteracji jest więcej logiki. Jaki jest tutaj środek? Jak mogę używać tylko pojedyncza iteracja przy jednoczesnym zachowaniu kodu podzielonego na jednostki logiczne?


title: wyjaśnienie dotyczące analizy zamortyzowanej

text: Przeglądałem tutaj artykuł W sekcji zatytułowanej Metoda agregacji autor mówi > Następnie sumuje cały ciąg, wszystkie sumy jedynek do O(n) i wszystkie > di również do O(n). To znaczy, a następnie daje to Σ1≤i≤n ci ≤ n + Σ0≤j≤m 2j−1 Rozumiem, jak zsumować jedynki, aby uzyskać n , Ale nie jestem zbyt jasny, jak drugi składnik staje się `Σ0≤j≤ m 2j−1` i tym samym O(n) Przepraszamy za formatowanie..Nie jestem pewien, jak mają być wydrukowane notacje matematyczne.. Czy mógłbyś zobaczyć oryginalny artykuł?


title: Idealny sposób na dekodowanie dokumentów JSON w C?

text: Zakładając, że mam interfejs API do wykorzystania, który używa JSON jako metody transmisji danych, jaki jest idealny sposób na dekodowanie JSON zwróconego przez każdy zasób API? Na przykład w Javie utworzyłbym klasę dla każdego zasobu API, a następnie zainicjował obiekt tej klasy i zużył z niego dane. na przykład: class UserJson extends JsonParser { public function UserJson(String document) { /*Istnieje tutaj wstępne parsowanie dokumentu...*/ } //Wiele metod pobierających. . . . } Prawdopodobnie zrobisz coś takiego: UserJson userJson = new UserJson(jsonString);//Początkowe parsowanie odbywa się w konstruktorze String username = userJson.getName();//Parse właściwość nazwy JSON, a następnie zwróć ją jako String. Lub w przypadku używania języka programowania z tablicami asocjacyjnymi (tj. tablicą mieszającą) proces dekodowania nie wymaga tworzenia klasy: _(PHP)_ $userJson = json_decode($jsonString);//Decode JSON as key=>value $ nazwa użytkownika = $userJson['nazwa']; Ale kiedy programuję w proceduralnych językach programowania (C), nie mogę wybrać żadnej metody, ponieważ C nie jest ani OOP, ani nie obsługuje tablic asocjacyjnych (przynajmniej domyślnie). Jaka jest „poprawna” metoda analizowania wstępnie zdefiniowanych ciągów JSON (tj. dokumentów JSON określonych przez dostawcę interfejsu API za pomocą przykładów lub dokumentacji)? Metoda, której obecnie używam, to tworzenie pliku dla każdego zasobu API do przetworzenia, problem z tą metodą polega na tym, że jest to w zasadzie kiepska wersja metody OOP, ponieważ wygląda dokładnie jak metoda OOP, ale nie zapewnia żadnego OOP korzyści (np. nie może przekazać obiektu parsera itp.). Zastanawiałem się nad enkapsulacją każdego pliku parsera zasobów API w strukturze **dostępnej publicznie** (wskazując wszystkie funkcje/zmienne do użytku publicznego w strukturze), a następnie uzyskanie dostępu do kodu pliku parsera z poziomu struktury (`parser.parse() `, `parser.getName()` itd.). Ponieważ ten sposób wygląda trochę lepiej niż moja obecna metoda, nadal jest to tylko zdzierstwo z OOP, prawda? Jakieś sugestie dotyczące metod parsowania dokumentów JSON w procedurach programowania proceduralnego? Jakieś komentarze na temat metod, których _obecnie_ używam (każda z nich 3)?


title: Przykłady maszyn skończonych

text: Szukam dobrych przykładów automatów skończonych, język nie jest szczególnie ważny, tylko dobre przykłady. Implementacje kodu są przydatne (uogólniony pseudokod), ale bardzo przydatne jest również zebranie różnych zastosowań FSM. Przykłady niekoniecznie muszą być oparte na komputerach, na przykład przykład sieci Railroad Mike'a Dunlaveya jest bardzo przydatny.


title: Dlaczego programiści używają `Acme` jako pakietu, przestrzeni nazw lub nazwy katalogu?

text: To może, ale nie musi być głupie pytanie, ale naprawdę chciałbym poznać odpowiedź na coś, co od jakiegoś czasu mnie niepokoi. Dość często widuję przykłady/konwencje programowania, w których programista utworzył katalog o nazwie `acme`, w którym umieszczane są różne rzeczy. Co oznacza `Acme`? Dlaczego Acme, a nie Emca czy inne? Czy Acme to ogólna nazwa folderu do grupowania różnych klas OOP? Skąd wzięło się określenie w konwencji programowania. O ile widzę, nie ma to nic wspólnego z interfejsem programisty http://plan9.bell-labs.com/sys/doc/acme.html


title: Jedno zdarzenie wysłane do wielu słuchaczy, chcesz zarejestrować powiadomienie raz

text: ![Układ systemu](http://i.stack.imgur.com/jc40i.png) Mam system, w którym pamięć podręczna składa się z wielu węzłów pamięci podręcznej. Po dodaniu CacheNodeAdded zdarzenie jest wywoływane przez Cache. Pamięć podręczna ma nadmiarowy zestaw monitorów nasłuchujących tego zdarzenia. Monitory są odpowiedzialne za powiadamianie o zdarzeniach w pamięci podręcznej. Ponieważ mam wiele monitorów, ale chcę otrzymywać powiadomienia tylko raz, **Krok 3** jest tym, co chcę wdrożyć. Rozwiązania, których nie mogę użyć: * Bezpośrednie powiadamianie pamięci podręcznej. Należy używać monitorów. * Niech każdy monitor sprawdzi dziennik, aby sprawdzić, czy powiadomienie zostało wysłane. Ponieważ wszystkie działają osobno, wszyscy mogą jednocześnie uzyskać dostęp do listy powiadomień, zobaczyć, że powiadomienie nie zostało wysłane, i w rezultacie wielokrotnie powiadamiać. Rozwiązanie, z którym się bawię: * Po odebraniu zdarzenia pobierz listę wszystkich identyfikatorów monitorów (GUID), uporządkuj listę, a pierwszy monitor na liście otrzyma powiadomienie. To proste rozwiązanie, ale wydaje się trochę nieeleganckie. Czy są jakieś inne proste rozwiązania, których mogę przeoczyć?


title: Czy kierownicy projektów są przydatni w Scrum?

text: W Scrumie zdefiniowane są trzy role: Zespół, Właściciel Produktu i Scrum Master. Nie ma kierownika projektu, zamiast tego **zadanie kierownika projektu jest podzielone na trzy role**. Na przykład: * **Scrum Master:** Odpowiedzialny za proces. Usuwa przeszkody. * **Właściciel produktu:** zarządza listą prac do wykonania i ustala ich priorytety, aby zmaksymalizować zwrot z inwestycji. Reprezentuje wszystkie zainteresowane strony (klientów, interesariuszy). * **Zespół:** Samozarządzanie swoją pracą poprzez szacowanie i rozdzielanie jej między sobą. Odpowiada za wywiązywanie się z własnych zobowiązań. Tak więc w Scrumie nie ma już jednej osoby odpowiedzialnej za sukces projektu. Nie istnieje struktura dowodzenia i kontroli. To wydaje się zbijać z tropu wiele osób, szczególnie tych, którzy nie są przyzwyczajeni do zwinnych metod i oczywiście PM. Bardzo mnie to interesuje i jakie są twoje doświadczenia, ponieważ uważam, że jest to jedna z rzeczy, które mogą stworzyć lub zepsuć implementację Scrum. _**Czy zgadzasz się ze Scrumem, że kierownik projektu nie jest potrzebny? Czy uważasz, że taka rola jest nadal wymagana? Czemu?_**


title: Jak ocenić bezpieczną autoryzację dla serwera do klienta?

text: Mam klienta, który chce, abym zbudował portal internetowy (Asp.net 4.0), który będzie komunikował się z klientem stacjonarnym, tabletem i/lub smartfonem (np. iOS i/lub Android). Myślałem o użyciu oAuth 2.0. Ale nie znam żadnych potencjalnych wad korzystania z OAuth. I nie wiem, jak porównać OAuth z innymi metodami/protokołami bezpiecznej autoryzacji, które byłyby odpowiednie w tej sytuacji. Jak powinienem ocenić OAuth, aby sprawdzić, czy jest odpowiedni dla mojego projektu, czy powinienem użyć innego protokołu?


title: Jak oceniasz naukę C# z filmów dla początkującego?

text: Mam ogólny pomysł na programowanie, więc wiem, co to jest zmienna i metoda, ale wcześniej nie programowałem. Podobał mi się C# ze względu na Visual Studio i wypróbowałem w nim tylko program Hello Word. Nadal niewiele wiem o OOP. Teraz mam filmy do nauki, z których znalazłem na (LearnVisualStudio.net). Jednak nie jestem pewien, czy autor filmów na tej stronie jest profesjonalistą, czy tylko hobbystą, ponieważ chcę, aby ktoś nauczył mnie dobrych nawyków ćwiczeniowych, chcę uczyć się we właściwy sposób! Mam też kilka książek, ale okazało się, że większość z nich nie wyjaśnia zasad w jasny sposób. Zaczynają więc od programu „hello world”, a potem gubisz się w wielu koncepcjach, które są wyjaśniane losowo. Daj mi znać, jeśli wiesz coś o wyżej wymienionej witrynie, jeśli jest ona dobra lub nie, i daj mi znać, czy uczenie się z filmów jest uważane za dobre do nauki programowania i programowania obiektowego?


title: Jak zaprojektowałbyś aplikację, która w dużej mierze jest zbiorem schematów blokowych?

text: Pracuję z nauczycielem historii nad aplikacją historii. Ma około 200 schematów blokowych, które chce umieścić w aplikacji (między innymi). Dwa najbardziej prawdopodobne sposoby na zrobienie tego: 1. HTML/CSS. Dużym minusem jest to, że żaden z nas nie jest wielką osobą zajmującą się HTML/CSS. Chociaż trochę o nich wiem. 2. Adobe Illustrator. Interfejs ułatwia rysowanie, a my możemy tworzyć pliki grafiki wektorowej i z nich pracować. Wadą jest to, że tekst ramki, ramka graficzna i odpowiednie hiperłącze będą różnymi jednostkami, podczas gdy HTML/CSS są wykonane poprawnie, mogą być jedną rzeczą. Istnieje kilka stron internetowych z diagramami blokowymi. Ale te, na które patrzyłem, mają pewne problemy: 1. W tych, które oglądałem, HTML jest duży i niechlujny. Nasze muszą być krótkie i proste. 2. Często w grę wchodzi duża ilość kodu JavaScript. Moglibyśmy to zrobić, ale zwiększa to złożoność naszej aplikacji mobilnej, a także ryzyko awarii. Zaczynamy na iOS, ale później możemy dodać inne platformy.


title: Projekt kodu: czy ten konkretny przypadek łatania małp w pytonie jest akceptowalny?

text: Używam Pythona do wykonywania niektórych zadań badawczych. Mam hierarchię klas dla "narzędzi", gdzie każdy obiekt jest instancją określonego narzędzia. Wszystkie mają pewną funkcjonalność i mają wiele podobieństw w swoich stanach. Niektóre z tych narzędzi mogą korzystać z jednej z kilku metod opartych na bieżącym stanie obiektu narzędzia. Konkretne narzędzie, o które zamierzam zapytać, faktycznie wywołuje funkcje z zewnętrznych modułów zamiast metod pisanych bezpośrednio w klasie. Podstawowym powodem tego jest podzielenie kodu na wiele plików, tj. brak dużego pliku potwora, który zawiera wszystkie różne metody i funkcje pomocnicze, których używają te metody, gdy wszystko, czego potrzebuje w danym momencie, to konkretny, bardzo ukierunkowany podzbiór . Tj. gdy trybem narzędzia jest "clean_house", używałbym tylko funkcji takich jak "wash_windows", "vacuum_carpet" i "ask_girlfriend_for_help", podczas gdy trybem jest "do_work", używam funkcji takich jak "write_code", "debug_code", i „zapytaj_SO_pytanie”. Podzbiory w żaden sposób nie przecinają się, np. „write_code” nigdy nie wywoła „ask_girlfriend_for_help” itp. Zamiast wywoływać te funkcje z zakresu modułu w ramach metod klasy, wydaje mi się, że lepszym pomysłem jest załatać je do klasy narzędzia, ponieważ istnieją metody instancji, które muszą wywołać, które przechodzą dalej w hierarchii klas i modyfikują stan niektórych (chronionych) obiektów części, które są używane później w destruktorze. Wiem, że monkeypatching jest często uważany za kiepski projekt lub praktykę ostatniej szansy, gdy poprawki są w porządku (tutaj post programisty SE), ale czy w tym przypadku jest to uzasadnione? Jakieś alternatywne sugestie dotyczące projektowania kodu?


title: Grupowanie algorytmów koncepcyjnych w jedną klasę lub kojarzenie z ich modelami obiektowymi

text: Jeśli mam kilka klas, powiedzmy różne budynki. Każdy z tych budynków ma różne właściwości i robi pewne rzeczy itp. Teraz muszę wykonać zestaw operacji na tych budynkach, które są koncepcyjnie takie same. Nazwijmy tę konceptualną grupę operacji _Przenieś ścieki z budynku_. Ta funkcjonalność jest zasadniczo odpowiedzialna za wykonywanie metod opartych na informacjach o każdym budynku a następnie ustawianie właściwości w innych obszarach kodu jak również za ustawianie informacji o samym budynku (nie może obecnie pomóc w potrzebie ustawienia właściwości w innych obszarach ze względu na obecne ograniczenia projektowe systemu). Należy zauważyć, że chociaż te metody są koncepcyjnie takie same i ustawiają wiele takich samych właściwości w różnych klasach, sposób obliczania i uzyskiwania tych wartości jest inny (jednak mają wspólny kod). Moje pytanie brzmi, czy powinienem umieścić kod, aby to zrobić, w jednej klasie o nazwie powiedz _EffluentBuildingDistribution_, czy powinienem umieścić go w każdej własnej klasie budynków za pomocą odpowiednich metod, aby wykonać zasadniczo ten sam kod. Więc albo coś takiego: public class EffluentBuildingDistribution { public void DistributeEffluent() { // parametry tylko przykład DistributeBuildingHouse(var param1, var param2); DistributeBuildingDogHouse(var param1, var param2); DistributeBuildingSecondHouse(var param1, var param2); } // i różne prywatne metody pomagające w pracy z trzema metodami, niektóre współdzielone // inne nie } lub public class HouseBuilding { public void DistributeEffluent(var param1, var param2) { // do rzeczy } } public class DogHouseBuilding { public void DistributeEffluent (var param1, var param2) { // do rzeczy } } A może żadna z tych opcji!. Nie jestem pewien, czy umieszczenie kodu na obiektach, nad którymi pracują, jest właściwą drogą, czy umieszczenie go w klasie, która reprezentuje koncepcyjnie to, co próbujemy zrobić. To jest przykład mojego obecnego dylematu, ale jest to również pytanie o ogólną odpowiedzialność, jak proporcjonalnie zastosować metody i działania itp. Jeśli nie jest wystarczająco szczegółowe lub wymaga więcej wyjaśnień itp., daj mi znać, a postaram się wyjaśnić więcej mojego problemu. EDYCJA: Ze względu na pewne zrozumiałe zamieszanie z użyciem terminu _Struktura_ w moim przykładzie, od tego czasu zmieniłem go na _Budynek_. Niektóre z poniższych odpowiedzi odnoszą się do Struktury, ale są nadal aktualne, ponieważ nie zmieniłem sedna pytania.


title: Łatwe w użyciu oprogramowanie do wspólnej edycji?

text: Mój przyjaciel i ja zwykle nie mamy czasu, aby spotykać się osobiście, aby zrobić prawdziwe programowanie w parach. Ponieważ i tak chcemy programować razem, przeszliśmy do świata wspólnej edycji oprogramowania. Niestety większość rozwiązań, które wypróbowaliśmy, jest albo słaba, albo w ogóle nie działa. Cloud9 (fuzja Mozilla Skywriter, ACE) rzuca błędy, jakby nie było jutra, i uniemożliwia rozwój projektu. Wygląda na to, że wtyczka Notepad++ jest zepsuta. CollabEdit pozwala tylko na jeden plik na raz. To prawda, że możesz otworzyć wiele okien, ale to sprawia, że edycja wielu plików jest naprawdę niezręczna i niezdarna. Czy istnieje oprogramowanie online lub offline umożliwiające rozsądną edycję zespołową? Wypróbowaliśmy Skype'a ze wspólnym ekranem i chociaż programowanie w parach jest prawdziwsze niż kodowanie przez dwie osoby naraz, nie chcemy być w ten sposób ograniczani.


title: Posortowany zestaw iterowalny w Pythonie, modyfikowalny podczas iteracji

text: Szukam struktury danych do obsługi przechodzenia przez dużą liczbę uporządkowanych podprogramów, z których niektóre są aktywne, a większość nie. Myślę, że potrzebuję implementacji zestawu Pythona, takiego jak obiekt, który pozostaje uporządkowany po modyfikacji, można go łatwo iterować (nie obchodzi mnie, czy rzeczywista pętla for działa, o ile istnieje prosty i wydajny sposób na odczytanie każdego element w kolejności). A co najważniejsze, można je modyfikować podczas iteracji. Ma to na celu umożliwienie implementacji bardzo specyficznej formy programu podprogramów (niestety nie mogę używać wbudowanych modułów podprogramów, ponieważ mój program python dokładnie emuluje zachowanie starszego systemu, więc potrzebuję dokładniejszej kontroli). podprogramy, do których odwołuje się numer indeksu w słowniku, podprogramy są powtarzane w kolejności rosnącej, aż do osiągnięcia ostatniego, w którym to momencie wracamy do najniższego numeru jeden. Istnieje jednak duża liczba podprogramów i tylko kilka w danym momencie będzie „aktywnych”, a te, które nie są aktywne, są pomijane w kolejności wykonywania. Rozważałem po prostu nadanie każdej podprogramie aktywnej flagi, która byłaby testowana przed uruchomieniem, jednak ogromna liczba potencjalnych podprogramów w porównaniu z niewielką liczbą aktywnych powoduje, że ta metoda jest bardzo powolna. Podprogramy są tylko sporadycznie aktywowane lub dezaktywowane, ale ich uruchamianie musi być bardzo szybkie. W związku z tym szukałem listy kluczy aktywnych i iterowałem przez nią, dodając lub usuwając je, gdy są aktywowane lub dezaktywowane, ale szukam rozsądnie wydajnego sposobu utrzymania tej listy. Dwa główne systemy, które wydają mi się wykonalne, to zestawy sortowane blistami, jednak nie jestem pewien, czy obsługują one modyfikację podczas iteracji, a także używanie dwóch heapq i przesuwanie elementów między nimi w kolejności, to z pewnością będzie wspierać modyfikację w dowolnym momencie, ale wymagałoby znacznie więcej pracy ręcznej i prawdopodobnie byłoby wolniejsze. Jednak ktoś może mieć znacznie lepszą odpowiedź niż którykolwiek z tych, więc docenię wszelkie pomysły, jak osiągnąć to z rozsądną wydajnością i najlepiej w „pytoniczny” sposób, chociaż mogę sobie z tym poradzić, że jest trochę brzydki, jeśli działa .


title: Czy właściwe jest obejście swojego szefa, aby otrzymać odpowiedź? Jeśli tak to jak?

text: Jeśli masz projekt i są pytania, na które należy odpowiedzieć w odniesieniu do określonej jego części, ale odpowiedzi nie wracają do Ciebie z powodu takiego jak: „Projekt nie jest objęty zakresem i jako projekt poboczny nie zamierzamy naciskaj na odpowiedzi”, czy właściwe jest wyjście na zewnątrz/wokół swojego szefa, aby uzyskać te odpowiedzi. Jeśli tak to jak? Jeśli nie dlaczego? Moja sytuacja: W przyszłym miesiącu mamy dużo projektów dla naszego zespołu, ale obecnie mamy dużo przestojów i niektóre projekty poboczne, w których naprawdę chcę uczestniczyć, zatrzymują się z piskiem opon z powodu braku odpowiedzi. otrzymałem w odniesieniu do niektórych specyfikacji. Mój szef nie będzie naciskał na odpowiedzi, ponieważ powiedział, że ponieważ jest to projekt poboczny, „nie powinniśmy” naprawdę wkładać w niego pełnych wysiłków, jednak wariuję w pracy z powodu przestoju, chyba że znajdę coś konstruktywnego do zrobienia . Tj. naucz się nowego języka, weź udział w projekcie pobocznym, takim jak ten. Jak mogę uzyskać odpowiedzi, których potrzebuję, aby rozpocząć pracę nad tym projektem, ponieważ pojawiają się projekty czarterowe, które wymagają mojego pełnego czasu i muszę przerzucić ten poboczny projekt do studenta-programisty? Dodatkowo, jak mogę to zrobić, nie wkurzając nikogo nade mną?


title: Zduplikowany kod w modelu DCI i przypadek użycia

text: Właśnie wchodzę do aplikacji, która jest już zbudowana w architekturze DCI. Odkryłem, próbując zaimplementować funkcję, że istnieje zduplikowany kod w przypadku użycia i modelu. Nie jest to ogólny kod narzędziowy, ale specyficzny dla domeny kod dotyczący pobierania danych z usługi. Jak rozumiem teraz DCI, nie widzę oczywistego dobrego sposobu na rozłożenie tego, abym mógł wywołać ten sam kod z obu miejsc. Jaki jest zalecany sposób radzenia sobie z takim problemem w DCI?


title: Szukasz konkretnego rodzaju sztucznej inteligencji

text: Chcę stworzyć ambitny projekt AI. Istnieje gra karciana online, która pozwala zbudować talię do gry z losowo przedstawionych kart. Za każdym razem musisz wybrać jedną z kilku kart. Chcę zbudować sztuczną inteligencję, która wybiera karty, tak jak sam bym je wybierał, korzystając z mojej wiedzy o grze. Domyślam się, że musiałbym stworzyć system, który może być trenowany w oparciu o „doświadczenie” (nauczone przez trening) i dostosowuje swoje wybory na podstawie wcześniej wybranych kart. Szukam konkretnej nazwy dla tego typu sztucznej inteligencji, abym mógł zacząć szukać zasobów do tego lub podobnych projektów, jeśli je znasz.


title: Jak trudne jest łączenie czystego JS z CoffeeScript w zespole?

text: Ciągle wpadam na stanowiska Senior JS, gdzie chcą CoffeeScript. Powodem, dla którego nie używam CoffeeScript jest to, że moje pierwsze wrażenie było takie, że nakłada ograniczenia na funkcje JS OOP, które uważam za wartościowe. Widziałem twierdzenia, że te dwa elementy mogą się swobodnie mieszać, ale brzmi to dla mnie wątpliwie. Czy powinienem w ogóle zawracać sobie głowę aplikowaniem na te stanowiska, jeśli tylko CoffeeScript jest dla mnie przełomem?


title: Czy właściwe jest wydawanie tylko części kodu na licencji GPL jako open source?

text: Czy właściwe jest wydawanie niekompletnego oprogramowania układowego z otwartym kodem źródłowym, czy innymi słowy, wydawanie tylko oprogramowania na licencji GPL, ale nie kodu źródłowego oprogramowania zastrzeżonego? W jaki sposób programy inne niż open source w skompilowanym oprogramowaniu dla routera/urządzenia osadzonego są dozwolone w systemie operacyjnym opartym na systemie Linux i innym oprogramowaniu na licencji GPL? Na przykład: Jeśli firma wydaje skompilowane oprogramowanie układowe i kod źródłowy routera, ale udostępnia tylko kod źródłowy oprogramowania na licencji GPL w ramach oprogramowania układowego, czy zgodnie z GPL jest w porządku, że kod źródłowy oprogramowania układowego byłby niekompilowany, ponieważ jest niekompletny i brakuje zastrzeżonej części oprogramowania?


title: Kod modyfikujący GPL

text: Jeśli wezmę kod GPL i zmodyfikuję go, czy nadal musi być na licencji GPL?


title: Indywidualny stopień informatyki - Jaka inna dziedzina dobrze pasowałaby do informatyki?

text: Oto moja sytuacja: mam siedmioletnie doświadczenie w tworzeniu stron internetowych. Mogę robić PHP, MySQL, OOP, wszystkie te rzeczy. Chciałbym argumentować, że mam wystarczające doświadczenie techniczne, aby wyjść w realny świat i dostać dobrze płatną pracę na pełny etat, gdybym miał teraz odejść (otrzymałem ostatnio wiele ofert pracy , i mam już dużo rzeczywistego doświadczenia zawodowego), ale chciałbym zostać w szkole i zdobyć dyplom z wielu powodów, od aspektów społecznych po to, że chcę tylko mieć licencjat z jednej rzeczy lub inny, ponieważ wydaje się, że posiadanie takiego jest ważne dla wielu prac, nawet jeśli nie ma to nic wspólnego z pracą. Mając to na uwadze, nie ma sensu studiować informatyki, ponieważ byłoby to jak studiowanie wszystkiego, co już wiem. Nie chcę specjalizować się w czymś CAŁKOWICIE innym, ponieważ byłoby to sprzeczne z moimi celami zawodowymi. Zastanawiam się nad znalezieniem interdyscyplinarnego, dostosowanego do potrzeb stopnia, który pozwoli mi połączyć moje obecne umiejętności z nową edukacją. Myślę o biznesie, a nawet psychologii (projektowanie interfejsu?). Czy mogę uzyskać kilka pomysłów na specjalizację i wskazówki, z kim mógłbym porozmawiać? Dziękuję!


title: Czy technologia informacyjna to naprawdę inżynieria?

text: Podczas podróży spotkałem matematyka, który siedział obok mnie. W dyskusji powiedział: „... _nie ma to jak inżynieria w IT, a raczej programowanie_”. Prawdziwa inżynieria jest tym, czym jest architektura, czym jest elektryka i mechanika. To sprawiło, że pomyślałem i byłem zdziwiony. Jeden procent mojego mózgu zgodził się również dlatego, że w armii indyjskiej nie ma takiego przedmiotu jak inżynieria komputerowa w korpusie inżynieryjnym. Nie uważają programowania za inżynierię. Tak słyszałem kilka lat temu, nie wiem, co myśli teraz armia indyjska. Jakie są twoje poglądy?


title: Czy SRS wystarczy, aby programiści wykonali swoją pracę bez dodatkowych kosztów związanych z FS?

text: Zawsze sporządzamy 2 dokumenty, dokumenty SRS (specyfikację wymagań oprogramowania) i dokumenty FS (specyfikacje funkcjonalne) dla programistów, czyli programistów. Jak sprawdziłem, SRS bardziej przypomina zarówno wymagania funkcjonalne, jak i niefunkcjonalne w porównaniu z FS, który zajmuje się tylko wymaganiami funkcjonalnymi. Krótko mówiąc, czy SRS wystarczy, aby programiści wykonali swoją pracę? i nie robić już żadnych FS?


title: Dlaczego Java używa UTF-16 do wewnętrznej reprezentacji ciągów?

text: Wyobrażam sobie, że powodem był szybki, tablicowy dostęp do znaku w indeksie, ale niektóre znaki nie mieszczą się w 16 bitach, więc to nie zadziała... Więc jeśli i tak musisz obsługiwać specjalne przypadki, dlaczego nie tylko użyć UTF-8?


title: tworzenie parametrów obiektu w {}?

text: Próbuję rozszyfrować fragment kodu z książki: List<Person> people = new List<Person>() { new Person {FirstName="Homer",LastName="Simpson",Age=47}, new Person { FirstName="Marge", LastName="Simpson",Wiek=45} }; Person to po prostu prosta klasa, którą stworzyli, z mnóstwem pól: Name, Last Name, itp. Nie rozumiem, czy nie wysyłamy parametrów do konstruktora Person w nawiasach klamrowych? Próbowałem zreplikować ten kod, ale wydaje się, że nie działa, jacyś chętni? Dzięki za wkład.


title: Dobry przykład poprawnie przetestowanego jednostkowo projektu PHP?

text: W nadziei, że ja i moi współpracownicy przyjmą metody zautomatyzowanego testowania jednostkowego w przyszłych projektach, chciałbym zobaczyć odpowiedni przykład tego, jak to się robi. Proste lekcje wprowadzające do testów jednostkowych obejmują tylko bardzo podstawowe przykłady i nie wydają się przekonywać nikogo do korzyści, jakie może zaoferować testowanie jednostkowe. Jakie są niektóre projekty open source napisane w PHP, które zawierają szeroką gamę testów jednostkowych, które są wykonywane „prawidłowo” i mogą być użyte jako przykład tego, jak należy przeprowadzać testowanie?


title: Jakie są zalety korzystania z operacji bitowych?

text: Po przeczytaniu najnowszego biuletynu CodeProject natknąłem się na artykuł o operacjach bitowych. Jest to ciekawa lektura i na pewno widzę korzyści ze sprawdzania, czy liczba całkowita jest parzysta, czy nieparzysta, ale testowanie, czy ustawiono n-ty bit? Jakie mogą być tego zalety?


title: Czy w dzisiejszych czasach warto napisać narzędzie do wykrywania błędów pamięci dla C++?

text: Od 2 lat piszę narzędzie w C++, przeznaczone dla C++ jako mój projekt hobbystyczny. Powoli zdałem sobie sprawę, że można go skomercjalizować, ponieważ może konkurować z innymi wykrywaczami wycieków pamięci. Narzędzie to wyszukuje: * wszelkiego rodzaju wycieki pamięci * wyjątek zerowego wskaźnika * uszkodzoną stertę * tablicę statyczną/dynamiczną poza zakresem * wielokrotne lub nieprawidłowe cofnięcie alokacji * Daje również przepływ kodu w czasie rzeczywistym, tj. jakie funkcje są wywoływane (bez żadnych instrukcji debugowania) Napisałem parser (który również analizuje złożoną składnię szablonu), który zastępuje wszystkie wskaźniki w kodzie moimi niestandardowymi inteligentnymi wskaźnikami i nowe/usuń z moimi wrapperami. Po wykonaniu kilku podstawowych testów to narzędzie wydaje się działać dobrze. Nadal pracuję nad tym, aby ukończyć pozostałe 20%. Zastanawiam się jednak, czy warto nad tym popracować ? Teraz dni, tak wiele technik programowania zostało opracowanych, aby przezwyciężyć takie błędy. Ludzie po prostu nie używają surowych wskaźników (podczas gdy większość błędów pojawia się z powodu wskaźników). Takie myśli trochę mnie demoralizują. Bardzo doceniłbym niektóre opinie ekspertów.


title: Czy koszyki na zakupy powinny być bezpieczne przez SSL/TLS?

text: Więc całkiem proste pytanie. Ktoś mi powiedział, że wszystkie wózki sklepowe powinny być zabezpieczone. Widzę w niektórych przypadkach, w których byłoby to korzystne ... ale we wszystkich przypadkach? Zdaję sobie sprawę, że zazwyczaj koszyki są przechowywane na serwerze przez sesję, ale ostatecznie szczegóły koszyka muszą zostać przesłane użytkownikowi, aby mógł zobaczyć, co jest w jego koszyku. Jest to bardzo trudne do wyszukania w Google, ponieważ wszystko, co się pojawia, to reklamy komercyjnych koszyków na zakupy. Pytanie: Czy zabezpieczenie wszystkich koszyków zakupowych jest standardowe/typowe? (strony, które wyświetlają koszyk)


title: Drzewa AVL i RZECZYWISTY świat

text: w szkole uczymy się, jak możemy zrównoważyć drzewo AVL po wstawieniu lub usunięciu. W jaki sposób ten rodzaj wiedzy będzie faktycznie przydatny w realnym świecie? Czy ktoś może podać przykład, kiedy taka wiedza byłaby rzeczywiście przydatna? Z tego, co widziałem, w miejscu pracy takie szczegóły rzadko się pojawiają... Widzę, jak ważna może być szczegółowa wiedza o algorytmach i niektórych strukturach danych, ale nie takie szczegóły, jak rotacje drzew AVL (i podobne szczegółowe koncepcje). Dziękuję!


title: Reguły biznesowe front-endu / JSON

text: Pracuję nad projektem, który potrzebuje teraz reguł biznesowych. Jednym z omawianych projektów jest wykonywanie wywołań API (w oparciu o formularz, na którym się znajdujemy), które odpowiada regułami biznesowymi dotyczącymi wprowadzania formularza. Nie jestem pewien, czy to najlepszy sposób. Reguły biznesowe są w formacie JSON, ale serwer reguł biznesowych w rzeczywistości ma silnik reguł biznesowych (więc silnik przetwarza reguły i wypluwa JSON). Trochę tła: W naszej aplikacji internetowej istnieją różne formularze, takie jak do logowania, rejestracji, edycji profilu itp. Może 25-30 formularzy. Są zarządzane treścią. W przypadku każdego z tych formularzy istnieją różne reguły umożliwiające pokazywanie lub ukrywanie pól lub wyświetlanie komunikatów o błędach w formularzu w oparciu o logikę, na przykład za długą lub za krótką nazwę pola lub niezgodność z wyrażeniem regularnym. Istnieją inne rzeczy, takie jak wymagane walidatory pól itp. Pomysł polegał na scentralizowaniu wszystkiego w innym środowisku (jak wspomniano powyżej... na serwerze reguł biznesowych). Martwię się o wykonywanie tak wielu połączeń do serwera, aby uzyskać proste zasady, takie jak wymagane imię lub pokazywanie lub ukrywanie przycisku na podstawie tego, czy dana osoba sprzedaje określoną liczbę widżetów itp. Być może lepszym rozwiązaniem byłoby posiadanie ten silnik reguł publikuje na naszym serwerze, a my po prostu wywołujemy serwer lokalny, zamiast za każdym razem wykonywać wywołania API z interfejsu użytkownika. Co wszyscy myślą? Czy naturalne jest wykonywanie wywołań API z naszych formularzy .net (za pomocą jquery), aby za każdym razem uzyskać nasze reguły dla każdego formularza? Dziękuję!


title: Obiektowe transformacje obiektów

text: W mojej firmie rozważamy przepisanie naszej logiki biznesowej i bazy danych, aby mieć lepszą architekturę po latach organicznego i nieprzewidzianego wzrostu, co prowadzi do nieuniknionego koszmaru konserwacji. Model biznesowy to taki, w którym, powiedzmy, plik cookie przechodzi przez wiele etapów, zmieniając po drodze stany. Jest otrzymywany na surowo, jest gotowany i potencjalnie dzielony na dwa lub więcej mniejszych ciasteczek, w zależności od kolejności. W tym momencie może zdarzyć się jedna z dwóch rzeczy: po pierwsze, ciasteczko lub ciasteczka są uważane za gotowe i wysłane do klienta, albo po drugie, ciasteczka wymagają zewnętrznej obróbki (dodanie polewy, dodanie barwnika spożywczego, przycięcie do wzoru (jest brak teoretycznego ograniczenia przetwarzania zewnętrznego zmienia się na plik cookie, ale zawsze zmienia on właściwości fizyczne), z którego jest on wysyłany bezpośrednio do klienta lub z powrotem do nas w celu wysyłki. Klient może odrzucić pliki cookie, jeśli nie uzna ich za zgodne ze swoimi standardami, a następnie możemy przechowywać i próbować odsprzedać pliki cookie mniej wymagającemu klientowi i/lub ponownie wysłać je do przetwarzania zewnętrznego, zgodnie z kaprysem klienta. Sposób, w jaki obecnie działa nasz system, to początkowo przypisanie mu numeru surowego pliku cookie, a następnie pieczenie i/lub wycinanie go i przypisywanie wynikowym plikom cookie numeru gotowego pliku cookie, po jednym dla każdego pliku cookie. Jednak nie ma wspólnej płaszczyzny między dowolnymi rodzajami plików cookie, co skutkuje dużą ilością dodatkowego kodu. Staram się zaproponować podejście obiektowe. Jestem świeżo po studiach, podczas gdy moi współpracownicy są o 30 lub więcej lat starsi ode mnie; niewiele o tym wiedzą, a niektórzy wahają się, czy coś zmienić, więc mój model musi być całkiem solidny. Pracowałem z tym naukowo, ale nigdy praktycznie, a zwłaszcza nie przy monitorowaniu formy przepływu konkretnego obiektu. Może trochę nie rozumiem, ale uważam, że OO jest najlepszym wyborem dla tego problemu. Mam diagram UML przedstawiający proponowaną hierarchię klas. Każdy rodzaj pliku cookie, który można utworzyć, ma dostęp do funkcji, która zamienia go w plik cookie następnego kroku. Czy to właściwy sposób na zrobienie tego? Czy nie byłoby lepiej mieć dostęp do tych funkcji toCookie() za pośrednictwem statycznej abstrakcyjnej klasy Cookie? ![](https://www.dropbox.com/s/663zilppijft8uq/cookies.png) Nie przejmuj się zbytnio rozmieszczaniem metod dziedziczonych, po prostu próbuję zrozumieć, jak obiekty się tutaj przekształcają.


title: TDD i kontrola wersji

text: Obecnie uczę się o TDD i staram się zastosować to w praktyce w moich osobistych projektach. W wielu z tych projektów intensywnie korzystałem również z kontroli wersji. Interesuje mnie wzajemne oddziaływanie tych dwóch narzędzi w typowym przepływie pracy, szczególnie jeśli chodzi o maksymę, aby utrzymać małe commity. Oto kilka przykładów, które przychodzą mi do głowy: 1. Rozpoczynam nowy projekt i piszę prosty test, aby utworzyć jeszcze nieistniejącą klasę. Czy powinienem zatwierdzić test przed napisaniem klasy, nawet jeśli test się nie kompiluje? A może powinienem odciąć minimalną ilość kodu, która jest potrzebna do skompilowania testu przed zatwierdzeniem? 2. Znajduję błąd i piszę test, aby go odtworzyć. Czy powinienem zatwierdzić nieudany test, czy zaimplementować poprawkę błędu, a następnie zatwierdzić? To są dwa przykłady, które od razu przychodzą na myśl. W swojej odpowiedzi możesz podać dodatkowe przykłady. **Edytuj:** W obu przykładach założyłem, że zaraz po napisaniu testu napiszę kod, który sprawi, że test przejdzie. Może też zaistnieć inna sytuacja: pracuję nad projektem przy użyciu TDD przez kilka godzin bez podejmowania zobowiązań. Kiedy w końcu dokonuję zmian, chcę podzielić moją pracę na małe kawałki. (Git sprawia, że jest to stosunkowo łatwe, nawet jeśli chcesz zatwierdzić tylko niektóre zmiany w jednym pliku.) Oznacza to, że moje pytanie dotyczy zarówno _co_ zatwierdzić, jak i _kiedy_ zatwierdzić.


title: Szybkie sortowanie i nie zawracaj sobie głowy?

text: Zwłaszcza pisząc „standardowe” (nie-HPC) aplikacje, czy zastanawiasz się, jaki algorytm sortowania wybrać, czy po prostu decydujesz się na szybkie sortowanie (co większość bibliotek nazywa po prostu sortowaniem)? W pewnym stopniu może się to opłacać w określonych sytuacjach, ale z drugiej strony właściwa optymalizacja wymaga trochę czasu na analizę problemu i wykonanie benchmarków.


title: Testowanie jednostkowe - jeden test jest częściowo „nadzbiorem” innego, czy to źle?

text: Nie wiesz, jak sformułować ten tytuł, przepraszam! Właśnie natknąłem się na to w naszej bazie kodu i zastanawiałem się, jaki był konsensus dotyczący sposobu testowania jednostkowego: **C#** (-ish, przepraszam, jest to parafraza z pamięci) class DateCalculator { public static DateTime CalculateLeadTime (DateTime deliveryDate) { //zwróć wynik określonego obliczenia dotyczącego daty dostawy } } //Nowa przykładowa klasa OrderController { public ActionResult GetLeadTime(WidgetOrder order) { var leadTime = DateCalculator.CalculateLeadTime(order.GetDeliveryDate() ); return Json(leadTime.Value.Date.ToString("dd/MM/rrrr") ); } } //Stara, niepoprawna przykładowa klasa OrderService { public DateTime GetLeadTime(WidgetOrder order) { return DateCalculator.CalculateLeadTime(order.GetDeliveryDate() ); } } Następnie mamy dwa testy jednostkowe, jeden sprawdzający, czy CalculateLeadTime działa (jest to bardzo proste, możesz wstawić kilka wartości testowych i przewidzieć, co wyjdzie), a drugi, że GetLeadtime działa (nadal łatwe, ale... ). Moje pytanie brzmi: co byś tutaj testował i gdzie? Dla mnie sensowne jest testowanie CalculateLeadTime w izolacji, ponieważ może to być skomplikowana kalkulacja, a to już ładna mała przewidywalna jednostka. Ale czy następnie przetestowałbyś niektóre z tych samych rzeczy (może pojedyncze reprezentatywne dane wejściowe i wyjściowe?) w swojej metodzie GetLeadTime? A może po prostu przetestujesz, że zwracana jest wartość _any_ DateTime i założysz, że obliczenie jest poprawne, ponieważ testujesz to gdzie indziej? A może nie przetestowałbyś samej metody Calculate, ponieważ wiesz, że przetestujesz ją, gdy jej użyjesz, a nie podoba ci się duplikacja? EDYCJA: aby trochę zamazać wody, widzę teraz kod, a zamiast usługi, klasa wywołująca jest kontrolerem MVC, a akcja pod kontrolą jest metodą AJAX, więc zwraca wynik obliczenia opakowany w JSON. Bieżący test sprawdza, czy zwracany jest JSON, ale nie jego zawartość. Czy to coś zmienia?


title: co zrobić, gdy UX prosi o brzydki, zawiły projekt oparty na zdarzeniach, a nie wiesz, jak go zaimplementować w czysty sposób?

text: Otrzymałem zadanie stworzenia aplikacji klienckiej na komputery stacjonarnej, która pobiera dane z interfejsu API i prezentuje je użytkownikowi. W ciągu ostatniego miesiąca poświęciłem większość czasu i energii na ożywienie funkcjonalności, którą UX opisał za pomocą dwóch zdjęć. Patrząc na zdjęcia, wydaje się, że jest to prosty projekt. Dostępne są tylko 4 kontrolki: Jedna rozwijana lista, która uruchamia zdarzenie wyboru. Kolejna lista rozwijana, która jest wypełniana na podstawie wybranych danych z pierwszej listy rozwijanej, a także uruchamia zdarzenie wyboru. Dwa kontrolki radiowe, które włączają lub wyłączają drugą listę rozwijaną. Trzecia lista rozwijana, która w zależności od tego, który przycisk opcji został ostatnio wybrany, jest wypełniana danymi na podstawie pierwszej lub drugiej listy rozwijanej. Nie wydaje się trudne. Ale kiedy faktycznie zaczynam implementować ten projekt, stwierdzam, że nie wiem na przykład, co zrobić, jeśli użytkownik wybierze przycisk radiowy B (który ma włączyć drugą listę rozwijaną), ale lista rozwijana ma brak elementów; w takim razie mam wymusić ponowne wybranie pierwszego przycisku opcji A? Czy wyświetlam komunikat o błędzie? Czy pytam użytkownika o działanie? To właśnie te małe „narożne” przypadki, które niekoniecznie rzucają się na ludzi, którzy proszą o te projekty, sprawiają, że zastanawiam się, czy jestem w złej branży, czy też utknąłem w pracy z ludźmi, którzy nie mają jasnego obraz tego, czego chcą lub nie wiedzą, czego chcą, ale oczekuj, że wypełnię kropki bez samodzielnego projektowania UX. UX ma na celu poprawę doświadczenia użytkownika, a nie doświadczenia programisty, rozumiem, ale czy jest to rodzaj wkładu, którego zwykle oczekuje się od programistów od UX? Czy od programistów zawsze oczekuje się wypełniania kropek, nawet jeśli właściwe zachowanie nie zostało wyraźnie określone?


title: Programowanie przepływu danych w czasie rzeczywistym

text: ## Tło Ostatnio zafascynowały mnie możliwości podejścia do programowania opartego na przepływie danych - w szczególności koncepcje oparte na sygnałach/zdarzeniach realizowane przez reaktywne programowanie funkcjonalne, Boost::Dataflow::Signals i tym podobne. ## Przykładowy scenariusz: Rozważmy samochód, który ma cztery czujniki prędkości, po jednym na każdej z opon. Uprośćmy i powiedzmy, że te czujniki są czujnikami analogowymi podającymi zmierzoną prędkość na tej oponie. Samochód ma ponadto indywidualne hamulce na czterech oponach (siłownikach), które można zaprogramować tak, aby łamały się z większą lub mniejszą siłą. Nie ma konkretnego zadania, ale wyobraź sobie, że musisz realizować takie rzeczy, jak wykrywanie opon, które nie obracają się z powodu aquaplaningu lub wspomagania ABS, lub lub lub... Krótko mówiąc: musisz ocenić dane czujnika prędkości i sterować siłownikami zgodnie do jakiejś logiki. Z punktu widzenia programowania można by pomyśleć o realizacji tego poprzez sieć sygnałową typu: timer ------------\ sensor1/2/3/4 -> logika -> hamulce1 /2/3/4 (Oznacza to, że timer uruchamia logikę, która pobiera najnowsze wartości analogowe z czujników) W ten sposób timer można zaprogramować tak, aby uruchamiał się w stałych odstępach czasu (szczególnie ważne, aby zapewnić ograniczenia w czasie rzeczywistym) . Zaletą podejścia opartego na przepływie danych jest to, że powyższy diagram jest bezpośrednio realizowany w kodzie, tj. masz logiczne okablowanie sygnałów i wystarczy dostarczyć implementację, która zamienia rzeczywiste dane z czujnika twardego w sygnał (odpowiedniej biblioteki ty używasz). Jeśli chodzi o wymagania czasu rzeczywistego, maksymalna długość ścieżki sygnału może być również obliczona (lub przynajmniej łatwiej wyprowadzona ze źródła). ## Pytanie Oczywiście wszystko to jest tylko pomysłem na aplikację i jestem pewien, że kilka genialnych osób wpadło na to wcześniej. To, czego szukam, to kontynuacja. Czy są jakieś trudne problemy z tym scenariuszem, które uniemożliwiają jego realizację w praktyce? Czy istnieją doświadczenia z rzeczywistych projektów dotyczących podążania takim tokiem myślenia? Czy istnieje w ogóle istniejąca literatura na ten temat? Aby wszystko było jaśniejsze i bardziej obiektywne, szukam odpowiedzi, która albo pokazuje wrodzony błąd w moim toku myślenia, albo daje odniesienie do istniejącej pracy/literatury wraz z ocenami. Dodatkowe punkty, jeśli brane są pod uwagę ograniczenia w czasie rzeczywistym.


title: Prawa autorskie w schemacie bazy danych przy użyciu licencjonowanej aplikacji Windows

text: Pracuję dla firmy, która kupiła licencję na oprogramowanie klienckie Windows, która pozwala tylko na 20 uruchomionych klientów na firmę. Próbuję znaleźć sposób na obejście tego ograniczenia dla 20 użytkowników, programując interfejs WWW PHP, który łączy się z istniejącą bazą danych. Pozwoli to nieograniczonej liczbie użytkowników na dostęp do bazy danych. Problem, który mam, polega na tym, że licencja stwierdza, że żaden interfejs typu CRM nie może być używany z pakietem. Ponieważ nie będę w żaden sposób używać binarnego systemu Windows, co powstrzyma mnie przed studiowaniem schematu bazy danych i tworzeniem własnego interfejsu? Pomyślałbym, że schemat, który wykorzystuje wspólne tabele, na przykład adresy klientów, materiały, części, zamówienia itp., nie może być chroniony prawem autorskim, w przeciwnym razie monopol może mieć na niego pojedyncza firma. Co sprawia, że baza danych jest wystarczająco ogólna lub odrębna, aby uzasadniać prawa autorskie? Jakieś przemyślenia na ten temat?