title: HTML + CSS lub HTML5 + CSS3 i HTML5 + jQuery

text: Chcę być dobrym programistą UI. Nie wiem, czy powinienem się uczyć ( **Potrzebuję poważnych sugestii** ): 1) **HTML + CSS + JavaScript lub HTML5 + CSS3 + JavaScript lub HTML5 + CSS3 + jQuery** 2) Czy jest to wymagane do nauki CSS najpierw przed nauką CSS3 ??? 3) Jeśli powyższe technologie muszą być traktowane priorytetowo, to jaka będzie kolejność?


title: Wybierz losowo z listy ze zwiększonymi kursami

text: Posiadam listę podmiotów. Każda jednostka zawiera liczbę, która przechowuje ile razy jednostka została wybrana. Muszę stworzyć funkcję, która losowo wybiera `n` (powiedzmy 25%) jednostek. To, co chcę zrobić, to zwiększyć szanse na podmioty, które zostały wybrane najmniej razy. Załóżmy, że po 5 uruchomieniach czasy wybrania jednostek mogą wynosić od 0 do 5. Ale nie chcę mieć takiego rozkładu. Chcę, aby czasy, w których byty były wybierane mniej więcej, były równe. Jak mogę napisać funkcję zwiększającą szanse na byty, które nie były wybierane tak często jak inne? Jednym ze sposobów, o którym mógłbym pomyśleć, jest stworzenie listy, która zawiera więcej wystąpień mniej wybranych jednostek, zwiększając szansę, że randomizator wybierze tę jednostkę. Jakieś wskazówki, porady, pomysły? **EDYCJA:** Wow. Zamknięto jako nieistotne pytanie i ponownie otwarto. Ponieważ nie było prawdziwym pytaniem, otrzymało wiele odpowiedzi i komentarzy. Dziękuję za to. Dostałem od nich dokładnie to, czego chciałem. Mam kilka fajnych pomysłów do opracowania i przetestowania.


title: Jaki jest najlepszy sposób na naukę algorytmów inspirowanych naturą?

text: Ukończyłam kurs Machine Learning (Stanford) i bardzo się zainteresowałam, również po rozeznaniu, zdecydowałam, że chcę nauczyć się algorytmów inspirowanych naturą. Znalazłem kilka zasobów takich jak: * Clever Algorithms: Nature-Inspired Programming Recipes (książka) * Wyss Institute (strona internetowa) * Programming Game AI na przykład (książka) zaimplementować wszystko w Ruby, moim preferowanym języku), a także daje implementacje ruby dla każdego kodu. Brakuje jednak ćwiczeń do ćwiczenia, co moim zdaniem jest kluczową cechą. Drugi to coś, co bardzo mnie zainspirowało do rozpoczęcia nauki w tej dziedzinie, ale nie mają żadnego kursu ani materiału do nauki. Trzecia też wygląda dobrze, ale ma niewiele ćwiczeń i może być zbyt skoncentrowana (lubię gry, ale chcę też studiować wszystko inne związane z algorytmami inspirowanymi naturą). Skupia się również na C++ (nie żeby to był trudny język, ale nie podoba mi się jego ograniczenie w porównaniu do ruby), a wolałbym coś w Rubym lub pseudokodzie (chociaż nie jest to mój główny priorytet). Czy ktoś wie coś, co ma też ćwiczenia uzupełniające teorię? Czy jest coś lepszego do nauczenia się, ze szczególnym naciskiem na ćwiczenia? (Może kursy lub wykłady wideo).


title: Czy konieczne jest przestrzeganie standardu, weź standard C?

text: Może to pytanie jest duplikatem i jestem głupi, żeby je tutaj zadać, ale trochę przeszukałem i żaden z tytułów nie sugerował dokładnej odpowiedzi na moje pytanie. Jest kilku bardzo doświadczonych ludzi na SO, którzy zawsze mówią o standardzie C. Wydaje się, że ludzie nie lubią rozwiązań nieprzenośnych, nawet jeśli dla mnie działają. Ok, rozumiem, że należy przestrzegać normy, ale czy to nie nakłada kajdan na kreatywność programisty? Jakie są konkretne korzyści wynikające z przestrzegania standardu? Zwłaszcza, że kompilatory mogą nieco inaczej implementować standard.


title: Schemat klasy kółko i krzyżyk

text: Uczęszczam na zajęcia z inżynierii oprogramowania i chcę ćwiczyć pewne umiejętności w najbardziej podstawowym możliwym przypadku: kółko i krzyżyk. Wiem, że to przesada, ale chcę to zrobić we „właściwym” OOP. Zaprojektowałem dla niego diagram klas, ale jest jeden punkt, w którym nie widzę wyraźnie, jaka byłaby najlepsza decyzja projektowa. ![tutaj wprowadź opis obrazka](http://i.stack.imgur.com/US5Er.jpg) („Joueur” oznacza „gracza”, „PlancheDeJeu” oznacza „Plansz do gry”) Biorąc pod uwagę ten diagram, zgodnie z ` Wzorce projektowe Expert”, „Niskie sprzężenie” i „Silna spójność” (przepraszam, jeśli nie są to poprawne angielskie terminy, tłumaczę) wynik powinien być przechowywany przez klasę użytkownika (Joueur). Jednakże, ponieważ nie ma bezpośredniego związku między Joueurem i Système, nie wiem dokładnie, w jaki sposób gra mogłaby wyświetlić wynik w czysty sposób. Na tym diagramie Système musiałby zapytać obiekt PlancheDeJeu o wynik, a sam musiałby go uzyskać od Joueur. To wydaje się błędne. Zastanawiam się, jak zaprojektować obiekt pośredniczący, który połączyłby Joueur i Système, ale nie mogę wpaść na dobry pomysł. Jaki byłby najlepszy sposób, aby się tutaj udać? Dziękuję !


title: Dekompozycja przypadków użycia dla systemu rejestracji klas

text: Obecnie pracuję nad refaktoryzacją systemu rejestracji na obozy letnie, aby wprowadzić kilka nowych funkcji, a także wykorzystam go jako podstawę nowego systemu rejestracji na zajęcia pozalekcyjne. W przypadku tej nowej wersji systemu chcę zacząć od napisania opisów przypadków użycia dla procesu rejestracji (i docelowo planuję udokumentować wszystkie przypadki użycia). Rozumiem, że celem przypadku użycia jest osiągnięcie celu użytkownika, ale nadal nie jestem pewien, jak proces rejestracji powinien być podzielony na przypadki użycia. Oto opcje, o których myślałem: 1. Jeden duży przypadek użycia „Zarejestruj uczniów na zajęcia” 2. Podziel go na osobne przypadki użycia: „Wprowadź informacje o uczniu”, „Wybierz zajęcia”, „Płać za rejestrację 3. Mieć oddzielne przypadki użycia, ale mieć również przypadek użycia „Zarejestruj uczniów na zajęcia”, który „obejmuje” bardziej szczegółowe przypadki użycia Innym czynnikiem do rozważenia jest czas: rodzice mogą chcieć wprowadzić podstawowe informacje o swoich uczniach (imię i nazwisko , wiek itp.) przed rozpoczęciem rejestracji, ale oczywiście niektórzy rodzice zakończą cały proces rejestracji w jednym posiedzeniu. Ponadto płatność nie zawsze następuje natychmiast po wyborze klasy; w niektórych przypadkach rodzice będą mogli dokonać płatności później (w ciągu 48 godzin). Czytałem kilka artykułów o przypadkach użycia na stronie Alistaira Cockburna, ale nadal nie rozumiem, jakie są wytyczne dotyczące dzielenia przypadków użycia w takim przypadku. Skłaniam się ku opcji 3, ponieważ system będzie miał interfejs kreatora, który potencjalnie może poprowadzić użytkownika przez proces rejestracji od początku do końca, osiągając „cel użytkownika” polegający na zarejestrowaniu swojego ucznia (uczniów) na zajęcia, ale „uwzględnione” przypadki użycia mogą być również inicjowane samodzielnie. Zastanawiałem się również, czy powinienem mieć oddzielny przypadek użycia „Modyfikuj wybór klas” na wypadek, gdy rodzic loguje się później do systemu i zmienia wybrane klasy w imieniu ucznia, czy też powinien to być alternatywny scenariusz Przypadek użycia „Wybierz klasy”. Co poleciłbyś i dlaczego? Jakie wytyczne powinny być stosowane ogólnie podczas analizy granic przypadków użycia, poza ideą „celu użytkownika”? * * * **Aktualizacja:** Uważam, że ten cytat z pierwszego rozdziału książki Alistaira Cockburna jest pomocny: > W zależności od wymaganego w danym momencie poziomu widzenia, autor wybierze > opisać sesję wielokrotną lub * *cel sumaryczny**, cel jednoosobowy lub **użytkownik > cel**, część celu użytkownika lub **funkcja podrzędna**. Komunikowanie się, które > z nich jest opisane, jest tak ważne, że moi uczniowie wymyślili > dwa różne gradienty, aby je opisać: według wysokości względem poziomu morza (nad poziomem morza, na poziomie morza, pod wodą) i według koloru (biały , > niebieski, indygo). Wydaje mi się, że „Zarejestruj uczniów” jest celem na poziomie podsumowującym, ponieważ może to potencjalnie zająć wiele posiedzeń. W tym przypadku granica jest zamazana, ale myślę, że pomysł podsumowującego przypadku użycia sugeruje, że moje podejście nr 3 powyżej jest rozsądne.


Piszę mały program, który chcę połączyć z innymi programami. Zamierzam również uruchomić go z interfejsu wiersza poleceń, a może później z interfejsem GUI. W jaki sposób może zaszkodzić elastyczności dystrybucji i ponownego wykorzystania, łącząc mój program jako bibliotekę statyczną lub dynamiczną? Dystrybuuj go jako bibliotekę i * Łącz dynamicznie dla interfejsów GUI i wiersza poleceń * Łącz statycznie dla samodzielnego pliku binarnego


title: Refaktoryzacja wdrożeń aplikacji internetowych Tomcat

text: **Tło** Mamy kilka aplikacji internetowych działających na Tomcat 7.0.x (w systemie Linux). Ze względów historycznych zapełniliśmy bibliotekę „Common” (tj. $CATALINA_HOME/lib) wieloma plikami jar aplikacji. Te słoiki to Spring, Jackson i nasze własne słoiki z warstwą utrwalającą. Gdy wdrażamy nowe pliki jar z warstwą trwałości, wpadamy w piekło ścieżki klas: niektóre jary są w porządku w ~/webapps/foo/WEB-INF/lib, ale niektóre muszą zostać wykluczone i umieszczone w Common. Ostatnie przygody pokazują, że niektórzy mogą być w _obu miejscach_. Nasza lokalna (Windows) kompilacja jest podobnie bałaganiarska: mamy jeden folder wypełniony słoikami. Budujemy za pomocą Eclipse (nie Gradle, Ant itp.) i nie mamy wyraźnej listy plików jar używanych przez aplikacje internetowe. Kompilacja Linuksa używa Anta, ale częściowo selektywnie umieszcza pliki jar w plikach WAR. **Pytanie** Chciałbym przedstawić na tablicy strategię wyjścia z tej sytuacji. Jedno podejście jest wymienione poniżej, ale byłbym wdzięczny za wszelkie udoskonalenia lub alternatywne podejścia. Celem jest poprawienie procesu wdrażania, a nie kompilacji lokalnej. **Strategia** Na komputerze lokalnym użyj Gradle do skompilowania każdej aplikacji internetowej: * dodaj zależności czasu kompilacji, aż kompilacja będzie OK * zlokalizuj lokalną pamięć podręczną Gradle (lub obserwuj dane wyjściowe), aby znaleźć przechodnie zależności czasu działania * dodaj wszystkie jary do ~ /WEB-INF/lib dla aplikacji internetowej, z wyraźnymi odniesieniami w formalnej kompilacji Ant * wdrażanie w nowej, nieskazitelnej instalacji Tomcat * obserwacja dzienników uruchamiania pod kątem wszelkich wyjątków „ClassNotFound”, zarówno dla bibliotek innych firm, jak i naszych bibliotek aplikacji * dodaj te biblioteki do formalnej kompilacji Ant * wykonaj regresyjne testy QA na aplikacji i monitoruj pod kątem "ClassNotFound"


title: LuaJit FFI i ukrywanie szczegółów implementacji C

text: Chciałbym rozszerzyć aplikację za pomocą LuaJit FFI. Po obejrzeniu http://luajit.org/ext_ffi_tutorial.html jest to zaskakująco łatwe w porównaniu z API Lua C. Na razie w porządku. Jednak nie chcę po prostu zawijać funkcji C, ale zapewnić API wyższego poziomu użytkownikom piszącym skrypty dla aplikacji. Szczególnie nie chcę, aby użytkownicy mieli dostęp do "prymitywów", tj. przestrzeni nazw `ffi.*`. Czy jest to możliwe, czy ta przestrzeń nazw ffi będzie dostępna dla skryptów Lua użytkownika? W wydaniu Sandboxing Lua znalazłem http://lua-users.org/wiki/SandBoxes, który jednak nie mówi o FFI. Ponadto plan, który opisałem powyżej zakłada, że wprowadzenie warstw abstrakcji następuje po stronie lua kodu. Czy jest to zalecane podejście, czy raczej abstrakcyjna funkcjonalność na statycznie skompilowanym kodzie (po stronie C)?


title: Uzyskiwanie powiązanych kluczy obcych od podmiotów nadrzędnych

text: Zastanawiam się nad problemem projektowym, który wpływa na bazę danych mojego projektu. Załóżmy, że istnieją trzy różne tabele: * KLIENT * ZAMÓWIENIE * PACKING_SLIP * * * Każde **zamówienie** ma swojego **klienta** i różne **dokumenty dostawy**. Tak więc istnieje kilka kluczy obcych, które są obowiązkowe, byłoby _clientId_ dla tabeli `ORDER` i _orderId_ dla tabeli `PACKING_SLIP`. To ma sens. ![Pierwszy diagram](http://i.stack.imgur.com/DLSEq.png) Załóżmy teraz, że w mojej logice chcę mieć dostęp do klienta z listu przewozowego. Ponieważ używam narzędzia ORM jako Hibernate, polega to najpierw na dostępie do zamówienia z listu przewozowego, a następnie po uzyskaniu z niego klienta. Jeśli chcę mieć bezpośredni dostęp do klienta, powinienem dodać klucz obcy _clientId_ również do tabeli `PACKING SLIP`. ![Drugi diagram](http://i.stack.imgur.com/7jwu0.png) Moje pytanie brzmi, czy to poprawny projekt, jeśli istnieje możliwość, aby klient dołączył do tabeli `ORDER`? Czy to nie jest trochę zbędne? Myślę, że to problem z kontrolą i część bazy danych nie powinna się tym przejmować...


title: Decyzje dotyczące wielu zmiennych

text: Wpadam w sytuację, w której mój program może mieć różne wyniki w zależności od stanu niektórych zmiennych. Zaangażowane są 4 zmienne i każda z nich może mieć różne (od 3 do 4 różnych stanów). Wszystkie możliwe kombinacje prowadzą mnie do około 48 różnych przypadków, które zostałyby rozwiązane przy użyciu 4-poziomowej struktury zagnieżdżonej if/else. Mam więc kilka pytań: 1. Czy istnieje lepsza technika rysowania logiki, tabel decyzyjnych lub innej struktury, aby można było modelować drzewo decyzyjne dla tak wielu wyników? Kiedy decyzja zależy tylko od 2 zmiennych, można to łatwo zamodelować w arkuszu kalkulacyjnym, który z natury jest dwuwymiarowy, ale jak poradzić sobie z przypadkiem takim jak ten, o którym wspomniałem? 2. Czy istnieje lepsza technika programowania, aby sobie z tym poradzić, poza 4-poziomową zagnieżdżoną strukturą if/else?


title: Jakich technik/metodologii używasz do organizowania własnych projektów open source i dlaczego?

text: Oprócz używania konkretnego narzędzia, takiego jak JIRA lub Bugzilla, jakich technik lub metodologii programowania używasz, aby utrzymać porządek w pracach nad rozwojem OSS? a co ważniejsze, w jaki sposób ustalasz priorytety dostarczanych funkcji, skoro tak naprawdę nie ma żadnych płacących klientów, którzy decydują, które funkcje są najważniejsze do dostarczenia?


title: Paranoja awarii dysku twardego

text: Awaria dysku twardego Paranoja Mam tendencję do tworzenia małych programów dla siebie. Za każdym razem, gdy tworzę aplikację, używam aplikacji bazodanowej, takiej jak MS Access lub MySQL. Mogę CRUD moje dane, jak chcę. Nie ma problemu z dokończeniem zadania. Problem polega na tym, że próbuję dokładniej zbadać plik IO. Słyszałem o awariach dysków twardych spowodowanych dużą liczbą operacji odczytu/zapisu. Kiedyś myślałem, że dzieje się to tylko na maszynach serwerowych. Ale potem dowiedziałem się, że dzieje się to również na komputerach stacjonarnych! Więc teraz mam tę ogromną mentalną blokadę. Za każdym razem, gdy próbuję przekonwertować moje poprzednie oprogramowanie na te z surowym FILE IO, tracę „napęd/motywację mentalną” i zawieszam się. Dostaję myśli typu „OMG to zadanie spowoduje tyle odczytów/zapisów na dysku”. Obawiam się utraty twardego dysku. Mój Boże! Zdarzyło się tak wiele razy, że żałuję, że inżynierowie komputerowi przeprojektowali wnętrze komputera, aby naprawić problem, więc bardzo ich przeklinam. Dużo czasu marnuję na remotywację, a projekty nigdy się nie kończą. Tak, tak, wiem, że za kulisami aplikacje bazodanowe wykorzystują surowe IO plików do wykonywania swojej pracy! Ale kto o tym myśli, kiedy ich używa. Wszystko, o czym myślisz głównie, to SQL i wynikowa tabela w zestawie wyników/przekodowaniu. Aplikacje bazodanowe są jak czarna skrzynka dla surowych operacji wejścia/wyjścia plików. Czy ktoś jeszcze myśli tak samo? Czy moje obawy są słuszne? Co powinienem zrobić? Jakieś widoki/pocieszenia? Pomoc! To sprawia, że jestem szalony i bezproduktywny!


title: Czy mam utrzymywać powiadomienie przed opublikowaniem go za pośrednictwem Redis pub/sub, czy po nim?

text: Wdrażam mechanizm powiadamiania grupy użytkowników o nowo wstawionych komentarzach na blogu. Architektura wykorzystuje mechanizm Redis Pub/Sub. Z definicji mechanizm pub/sub ma na celu rozsyłanie wiadomości do właściwych subskrybentów, bez przechowywania/utrzymywania czegokolwiek. Chociaż komentarze na blogu są oczywiście utrwalane w bazie danych, oczekuję również, że wszystkie powiadomienia zostaną wysłane, aby mogły zostać pobrane w dowolnym momencie przez użytkownika offline, który zostanie ponownie zalogowany. Oczywiście Redis może mieć trwałe wiadomości, ale koszt tego jest dość wysoki. Używam odrębnej głównej bazy danych, weźmy jako przykład MySql. Obecnie przepływ pracy to: 1. Komentarz na blogu opublikowany przez użytkownika jest obsługiwany przez mój backend i najpierw przechowywany w DB. 2. Zgłaszane jest zdarzenie, nazwijmy je „CommentedBlogEvent”, które uruchamia pracownika, którego celem jest wykrycie wszystkich docelowych użytkowników komentarza. 3. Zakładając, że celem komentarza jest 10 użytkowników, wstawiam 10 „wierszy powiadomień” do mojej bazy danych, kojarząc commentId i docelowy userId, każdy specyficzny dla użytkownika, ponieważ miałby znacznik przeczytany/nieprzeczytany. 4. Następnie, gdy wszystkie powiadomienia zostaną utrwalone, używam Redis Pub/Sub do wyzwalania subskrybentów, którzy chcą przesłać wyniki do odpowiednich klientów online (na przykład za pośrednictwem WebSockets). ** „Problem” polega na tym, że proces może być powolny z powodu kroku 3.** Czy byłoby tolerowane wykonanie kroku 4 przed krokiem 3, czyli przed utrwaleniem go w bazie danych, ponieważ potencjalna utrata danych nie jest dramatyczny w moim przypadku (dane niefinansowe itp.)? Korzyść: Klient szybciej uzyskuje wynik. Wada: Użytkownik mógł otrzymać powiadomienie, które nie zostało zapisane w tle, co prowadzi do braku powiadomienia, gdy użytkownik odświeży stronę. Jak najlepiej poradzić sobie z tą sprawą, zachowując główną bazę danych jako magazyn powiadomień?


title: jak radzisz sobie z długimi godzinami kodowania?

text: Jestem tylko uczennicą liceum, ale od jakiegoś czasu koduję od tygodni (od wczesnych godzin porannych do późnych godzin nocnych). Bardzo mi się to podoba, chociaż potrafi być naprawdę monotonny. Zwykle słucham niektórych radia internetowego, ale czasami odwracają moją uwagę od kodowania. Jak radzisz sobie z długimi godzinami kodowania? Jak często robisz sobie przerwy, jak je spędzasz? Czy masz jakieś dodatkowe porady?


title: Czy PHP obsługuje zdarzenia myszy?

text: Jestem nowicjuszem w php i chcę wiedzieć, czy php może obsługiwać zdarzenia myszy, takie jak mouseCicked, mouseDoubleClicked, mouseMoved, mouseHovered itp. I czy zdarzenia takie jak kliknięcie przycisku , takie jak wyświetlanie alertu po kliknięciu przycisku przesyłania Jeśli tak, w jaki sposób czy można to zrobić? Wiem, że można to zrobić w JavaScript <script> window.onbeforeunload = "Czy na pewno chcesz wyjść?"; <script/> Czy są na to inne sposoby? Dziękuję !


title: Czy powinniśmy żyć używając Suhosin z PHP?

text: Wielu moich znajomych z doświadczeniem w dziedzinie bezpieczeństwa powiedziało mi, że muszę kodować aplikacje internetowe do pracy pod łatką Suhosin PHP, Suhosin jest _"zaawansowanym systemem ochrony instalacji PHP [...] zaprojektowanym w celu ochrony serwerów i użytkowników przed znanymi i nieznane błędy w aplikacjach PHP"_. Sens stwierdzając ten wyczyn, musiałem przepisać sporo moich funkcji i klas. Czy jest to nowy standard tworzenia bezpiecznych aplikacji internetowych, tak aby trudniej było je wykorzystać i złamać? Czy Suhosin jest teraz _powszechnym_ wymogiem tworzenia stron internetowych w PHP?


title: Jakie są prawidłowe zastosowania różnych terminologii logowania?

text: Jakie są preferowane przypadki użycia dla następujących zestawów terminów: 1. Zaloguj się / Wyloguj 2. Zaloguj / Wyloguj 3. Zaloguj / Wyloguj 4. Zaloguj / Wyloguj Z tego, co mogę się domyślić, "Logowanie ” powinno być używane do długotrwałej sesji (np. strony internetowej), natomiast „Zaloguj się” powinno dotyczyć czegoś, w czym będziesz uczestniczyć (np. komunikatora internetowego lub transakcji finansowej). Jestem tu trochę rozmyty...


title: Wydajny sposób oceniania tablicy ciągów, a następnie dodawania do tablicy w Ruby

text: Szukam wydajnego sposobu oceny tablicy ciągów względem serii reguł, a następnie dodania ich do innej tablicy. Na przykład mam tablicę ciągów: 1. coś 2. a 3. 1234 4. #gohere Chcę iterować przez wszystkie elementy w tablicy i oceniać je w oparciu o serię reguł. Na przykład: * Ciągi o długości większej niż 1 * Ciągi, które nie zaczynają się od znaku #, o którym myślałem: 1. Zagnieżdżona pętla instrukcji if oceniających ciąg dla każdej reguły i jeśli wszystkie przechodzą, dodaj do innej tablicy 2. Ocena ciągu względem reguły 1, a następnie dodanie do tablicy, a następnie wykonanie kolejnej oceny — zdyskontowałem to, ponieważ wymaga wielu operacji odczytu/zapisu tablicy, aby ocenić kompletny zestaw reguł. Pamiętaj, że dla zwięzłości zachowałem liczbę reguł do dwóch, ale mogę potrzebować do 10 reguł. Dodatkowo nie kontroluję oryginalnej tablicy, ponieważ wywoływana przeze mnie funkcja zwraca tablicę ciągów. Wiem, że mogłem odpowiedzieć na własne pytanie za pomocą zagnieżdżonej pętli, ale zastanawiałem się, czy ktoś ma jakieś pomysły na optymalizację tego typu sytuacji. Wiem też, że zadałem to pytanie w odniesieniu do Rubiego, ale wystarczyłby dowolny pseudokod.


title: Co myślisz o interpreterze napisanym w Javie?

text: Obecnie dla zabawy pracuję nad wdrożeniem nowego języka programowania. Zdaję sobie sprawę, że większość języków nigdy nie staje się popularna, ale nadal chcę, aby język miał implementację wysokiej jakości. Język jest luźno sepleniący. Obsługuje domknięcia, kontynuacje pierwszej klasy, składnię homoikoniczną, funkcje pierwszej klasy itp. Ponadto chcę, aby mój język miał dostęp do już ustalonego kodu biblioteki (w szczególności biblioteki Java Standard itp.). Dynamiczna kompilacja do kodu bajtowego JVM zasadniczo nie wchodzi w rachubę ze względu na trudności w implementacji podanego zestawu funkcji (z wyjątkiem funkcji pierwszej klasy) przy użyciu maszyny wirtualnej, która nie została zaprojektowana do jej obsługi. Z drugiej strony, kompilacja do C/C++ lub innego języka niższego poziomu doprowadzi do niepożądanego stopnia zależności od platformy i/lub zmniejszy/usunie możliwość korzystania ze standardowej biblioteki Java za pomocą programów napisanych w moim języku. Moje (w dużej mierze ukończone) podejście do implementacji polega na zaimplementowaniu niestandardowego interpretera p-code w Javie. Język wysokiego poziomu po prostu kompiluje swój kod w locie do zasadniczo tablicy instrukcji dla tej niestandardowej maszyny wirtualnej. Każda instrukcja jest obiektem implementującym wspólny interfejs. Po wykonaniu instrukcje manipulują maszyną stosu. Niestety wykonanie każdej instrukcji wymaga wywołania metody wirtualnej; podczas gdy normalna implementacja takich interpreterów nie używa instrukcji obiektowych. Jednak obecne mikro-benchmarki i szacunki oparte na domysłach wskazują, że ukończona implementacja powinna odpowiadać szybkością Pythona, biorąc pod uwagę równoważne programy. **Czy uważasz, że ta metoda implementacji jest szalona czy amatorska, biorąc pod uwagę cele projektowe języka?** **Co byś zrobił inaczej?**


title: Czy są jakieś narzędzia do testowania aplikacji desktopowych Windows metodą „przeciągnij i upuść”?

text: Muszę opracować aplikację dla systemu Windows (win32 API), która będzie intensywnie wykorzystywać przeciąganie i upuszczanie w wielu formatach, w tym w moim własnym. Muszę to przetestować np. z przeciąganiem CF_TEXT, CF_RTF, CF_DIB, CF_METAFILEPICT i wieloma innymi. Narzędzie musi mieć następujące cechy: 1. Wyświetlanie zawartości przeciągniętego do niego DataObject za pomocą wszystkich dostępnych przeglądarek formatów. 2. Umożliwia przygotowanie kilku próbek różnych formatów schowka razem w jednym DataObject, gotowym do przeciągnięcia do mojej aplikacji. 3. Umożliwia dołączenie własnych nazw formatów do listy formatów narzędzia testującego.


title: Wewnętrzna firma Android Market

text: chcę wprowadzić Androida w naszej firmie. Ponieważ nasza firma nie chce, aby nasze przyszłe wewnętrzne aplikacje na Androida były dystrybuowane do Google Android Market, musiałbym skonfigurować rynek wewnętrzny. Ale nie mogę znaleźć żadnych zasobów. Może ktoś tutaj wie więcej!


title: Publikowanie rozwiązania internetowego VS2010 na WordPress

text: Zastanawiam się, czy możliwe jest opublikowanie stworzonej przeze mnie strony internetowej na WordPressie? Jeśli tak to jak? Witryna została stworzona przy użyciu VS2010. Zrobiłem trochę wyszukiwania w Internecie i wszystko, co wymyśliłem, to samouczki na temat WordPressa na temat publikowania witryny Visual Studio na innych rzeczach niezwiązanych z WordPressem. Dziękuję Ci


title: Jak radzisz sobie z ludźmi, którzy proszą Cię o naprawę swojego komputera?

text: Ponieważ jestem programistą, ludzie ciągle proszą mnie o naprawę ich komputera. Jak radzisz sobie w tej sytuacji? Czy robisz wyjątki dla krewnych, przyjaciół i współpracowników? Czy płacisz za to od ludzi?


Jakie języki po stronie serwera powinny być używane w witrynach informacyjnych tworzonych przez użytkowników, takich jak Facebook, SE, Blogi itp.?


title: Jak ograniczyć naruszenie architektury N-Tier

text: Ostatnio w naszym projekcie zastosowaliśmy architekturę 4-warstwową złożoną z następujących czterech głównych warstw: * Warstwa interfejsu użytkownika. * Warstwa dostępu do danych. * Warstwa domeny. * Warstwa biznesowa. Wszystkie warstwy spełniają swoje zwykłe role w architekturze 4-warstwowej i oddziałują na siebie w zwykły sposób. Używamy SVN do utrzymania naszego CVS. Mój problem polega na tym, że mamy wielu niedoświadczonych programistów rozwijających się w dobrze uformowanej architekturze i musimy cały czas sprawdzać kod, aby znaleźć naruszenia architektury. Na przykład: * Czasami należy uwzględnić dostęp do bazy danych w warstwie interfejsu użytkownika, a nie w warstwie biznesowej, która jest miejscem interakcji z warstwą dostępu do danych w celu odczytywania lub zapisywania danych w bazie danych. Problemy takie jak powyższe pojawiają się cały czas. Moje pytanie brzmi: Jak sprawdzić kod, zanim programiści będą mogli przesyłać swoje nowe zmiany do repozytorium i zgłaszać naruszenia architektury? Jak tego uniknąć ręcznie?


title: Jak mogę udostępnić zarządzane połączenie DBConnection w różnych obiektach?

text: Wdrażam to, co myślałem, że jest prostym opakowaniem obiektów wokół bazy danych, w której jeden obiekt "PartRecord" reprezentuje jeden wiersz tabeli bazy danych. Chcę, aby klient mógł zażądać danego rekordu i otrzymać obiekt zawierający dane. Odczytywanie i eksponowanie właściwości danych to bułka z masłem, ale staram się udostępnić obiekt MySqlConnection w spójny sposób. Moja pierwsza naiwna implementacja polegała na utrzymywaniu prywatnego obiektu MySqlConnection w module VB i posiadaniu funkcji, które mogą wywoływać moje klasy. Byłby to faktycznie singleton, którym mogłaby dzielić się każda z moich klas. Private MySqlCn as MySqlConnection Friend Function GetMySqlConnection() as MySqlConnection If IsNothing(MySqlCn) then MySqlCn = New MySqlConnection(cnstring) if MySqlCn.State = ConnectionState.Closed then MySqlConnection.n Open MySqlConnection() Close (cnstring) IsNothing(MySqlCn) AndAlso (Not MySqlCn.State = ConnectionState.Closed) Następnie MySqlCn.Close End Function Dzięki tej metodzie możesz ogólnie zapewnić, że obiekty będą współdzielić połączenie i będzie ono otwarte, gdy baza danych będzie dostępna, ale nie możesz gwarantuje, że połączenie zostanie zamknięte do czasu zakończenia programu. Kilka alternatyw, które wypróbowałem: 1. Zamknij połączenie po każdym odczycie 'w konstruktorze PartRecord: Używanie MySqlCn jako MySqlConnection = GetMySqlConnection 'odczytaj dane End Using 'to powoduje otwarcie i zamknięcie dla każdego obiektu, który tworzysz 'oczywiście źle 2. po prostu zostaw to open 'w konstruktorze: Dim MySqlCn as MySqlConnection = GetMySqlConnection 'odczyt danych' nie zamykaj ani nie usuwaj, otwórz dla następnego faceta 'udostępniamy otwarte połączenie, ale 'połączenie tak naprawdę nie zostanie zamknięte, dopóki program się nie zakończy. „Myślę, że wtedy się zamknie, ale byłem o wiele bardziej tego pewien” w czasach COM, kiedy mogłem owinąć go w klasę i „zamknąć w zdarzeniu Terminate, gdy licznik referencji osiągnie zero 3. Przestań mieć publiczne konstruktory i mieć fabrykę obiektów, która implementuje IDisposable do zarządzania połączeniem 'może nie tak dobrze dla kodu klienta ', ale wymusza udostępnianie połączeń ', a klient może wywołać PartFactory.Close lub PartFactory.Dispose po zakończeniu 'PartFactory zastępuje singleton ' nawet jeśli mógłbyś mieć więcej niż jeden , gdybyś chciał 4. swój lepszy pomysł . . . **Chciałbym wiedzieć, czy mogę zachować mój preferowany styl konstruktorów obiektów publicznych dla danego rekordu, ale nadal zarządzać współdzielonym połączeniem w sposób odpowiedzialny.** Myślę, że może to być niemożliwe, ponieważ samodzielne, tworzone publicznie obiekty nie wiedzieć, kiedy klient kiedykolwiek skończy. Myślę, że muszę ujawnić klientowi abstrakcję "łączymy się z bazą danych, wiesz" albo spowodować otwarte połączenia lub niepotrzebny ruch sieciowy. Ponadto dokumentacja mówi, że IDisposable jest zwykle używany do rzeczy niezarządzanych (pliki, uchwyty itp.). Czy jest odpowiednie/niezbędne do przechowywania obiektu zarządzanego, takiego jak obiekt .NET DBConnection? Podoba mi się, że klient miałby składnię Using i sygnalizuję, że wymaga zamknięcia w standardowy sposób, ale czy deterministyczne zamknięcie, które staram się uzyskać, jest konieczne i warte mojego wysiłku w świecie zbierającym śmieci? Nie czuję się komfortowo, mówiąc „no cóż, połączenie zostanie ostatecznie zamknięte, gdy nikt tego nie chce”, ponieważ ten komponent będzie ostatecznie używany przez wielu różnych klientów w organizacji. Co się stanie, jeśli ulegną awarii lub użyjemy ich w długotrwałym procesie serwera? Jeśli ma to znaczenie, jest to pierwsza z kilku klas opakowujących DB. Niezależnie od tego, jakiego schematu tutaj używam, chcę zachować w całym komponencie.


title: sieć społecznościowa typu open source umożliwiająca reklamę

text: Chcę zbudować sieć społecznościową ukierunkowaną na konkretne zainteresowania. Chcę generować przychody w postaci reklam. Najpierw pomyślałem o zbudowaniu go od zera, co zajmie dużo czasu (nawet jeśli jest to coś prostego), potem przypomniałem sobie, że istnieją opcje open source, takie jak Diaspora lub Friendica. Nie wiem czy są inne... Moje pytanie brzmi, czy z tymi wcześniej wymienionymi projektami lub jakimikolwiek innymi, czy można legalnie generować przychody? Licencja diaspory to: AGPLv3,[3], niektóre części są podwójnie licencjonowane na licencji MIT[5] oraz Friendica: AGPL ¡Dziękuję!


title: Uczenie się, ale potem zapominanie

text: Uczę się programować w języku C i jestem od kilku miesięcy. Niedawno zrobiłem sobie miesięczną przerwę i wróciłem tydzień temu i wszystko zniknęło. Musiałem sprawdzić niektóre rzeczy, które naprawdę włożyłem w zrozumienie (patrz: wskazówki), a niektóre po prostu utknęły we mnie. Teraz nauka o `malloc` i dynamicznie alokowanej pamięci również staje się nieco trudna. Co sugerujesz, aby zachować to wszystko? Czy przyjdzie z czasem i doświadczeniem?


title: Używanie JDBC do asynchronicznego odczytu dużej tabeli Oracle

text: Jakich strategii można użyć, aby odczytać każdy wiersz w dużej tabeli **Oracle**, **tylko raz**, ale tak szybko, jak to możliwe, korzystając z JDBC i Javy ? Weź pod uwagę, że każdy wiersz zawiera nietrywialne ilości danych (30 kolumn, w tym duży tekst w niektórych kolumnach). Niektóre strategie, o których mogę pomyśleć, to: * Pojedynczy wątek i przeczytaj tabelę. (Zbyt powolne, ale wymienione dla jasności) * Odczytaj identyfikatory do ConcurrentLinkedQueue, użyj wątków do korzystania z kolejki i zapytań według identyfikatora w partiach. * Odczytuj identyfikatory do kolejki JMS, używaj pracowników do korzystania z kolejki i zapytań według identyfikatora w partiach. Jakie inne strategie można zastosować? _Na potrzeby tego pytania załóżmy, że przetwarzanie wierszy jest bezpłatne._


title: aplikacja quizu online na Androida

text: Jestem zainteresowany pracą nad projektem. Projekt obejmuje aplikację do testów z 2 modułami, w której jest jeden quizer i wielu zdających. Chcę stworzyć aplikację internetową, która ma również aplikację na Androida do tego samego. Jak powinienem kontynuować tworzenie tego projektu, aby nie było żadnych problemów, ponieważ niektórzy użytkownicy mogą być w aplikacji internetowej, a niektórzy w aplikacji na Androida? Jak mogę to zrobić, aby nie musiałem pisać osobnego kodu dla aplikacji internetowej i aplikacji na Androida? Jakie powinno być moje podejście, ponieważ nigdy nie stworzyłem internetowej aplikacji na Androida? (Mam tylko podstawowe doświadczenie w programowaniu na Androida i jestem gotów dowiedzieć się więcej), ale mam spore doświadczenie w programowaniu z użyciem jsp/serwletów i frameworków. AKTUALIZACJA: Nie chcę szczegółowych odpowiedzi. Po prostu wskaż mi właściwy kierunek.


title: Dlaczego main() ma być krótki?

text: Programuję od ponad 9 lat i zgodnie z radą mojego pierwszego nauczyciela programowania zawsze używam bardzo krótkiej funkcji `main()`. Na początku nie miałem pojęcia dlaczego. Po prostu posłuchałem bez zrozumienia, ku uciesze moich profesorów. Po zdobyciu doświadczenia zdałem sobie sprawę, że jeśli poprawnie zaprojektowałem swój kod, po prostu pojawiła się krótka funkcja `main()`. Napisanie zmodularyzowanego kodu i przestrzeganie zasady pojedynczej odpowiedzialności pozwoliło na zaprojektowanie mojego kodu w „pęczkach”, a `main()` służył jako nic więcej niż katalizator do uruchomienia programu. Kilka tygodni temu przeglądałem kod źródłowy Pythona i znalazłem funkcję `main()`: /* Minimalny program główny -- wszystko jest ładowane z biblioteki */ ... int main(int argc , char **argv) { ... return Py_Main(argc, argv); } Yay Pythona. Krótka funkcja `main()` == Dobry kod. Nauczyciele programowania mieli rację. Chcąc wyglądać głębokoer, spojrzałem na Py_Main. Całość definiuje się następująco: /* Program główny */ int Py_Main(int argc, char **argv) { int c; o. wewn.; char *polecenie = NULL; char *nazwa pliku = NULL; char *moduł = NULL; PLIK *fp = standardowe wejście; znak *p; int niebuforowany = 0; int pomińpierwszą linię = 0; int stdin_is_interactive = 0; int pomoc = 0; wersja wewnętrzna = 0; int saw_unbuffered_flag = 0; PyCompilerFlags cf; cf.cf_flagi = 0; orig_argc = argc; /* Dla Py_GetArgcArgv() */ orig_argv = argv; #ifdef RISCOS Py_RISCOSWimpFlag = 0; #endif PySys_ResetWarnOptions(); while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) { if (c == 'c') { /* -c jest ostatnią opcją; następujące argumenty wyglądające jak opcje są pozostawione dlapolecenie do interpretacji. */ polecenie = (znak *)malloc(strlen(_PyOS_optarg) + 2); if (polecenie == NULL) Py_FatalError( "za mało pamięci do skopiowania argumentu -c"); strcpy(polecenie, _PyOS_optarg); strcat(polecenie, "\n"); przerwanie; } if (c == 'm') { /* -m to ostatnia opcja; modułowi pozostawia się do zinterpretowania następujące argumenty, które wyglądają jak opcje. */ moduł = (char *)malloc(strlen(_PyOS_optarg) + 2); if (moduł == NULL) Py_FatalError( "za mało pamięci do skopiowania -m argument"); strcpy(moduł, _PyOS_optarg); przerwanie; } switch (c) { przypadek 'b': Py_BytesWarningFlag++; przerwanie; przypadek „d”: Py_DebugFlag++; przerwanie; przypadek '3': Py_Py3kWarningFlag++; if (!Py_DivisionWarningFlag) Py_DivisionWarningFlag = 1; przerwanie; case 'Q': if (strcmp(_PyOS_optarg, "stary") == 0) { Py_DivisionWarningFlag = 0; przerwanie; } if (strcmp(_PyOS_optarg, "ostrzegaj") == 0) { Py_DivisionWarningFlag = 1; przerwanie; } if (strcmp(_PyOS_optarg, "warnall") == 0) { Py_DivisionWarningFlag = 2; przerwanie; } if (strcmp(_PyOS_optarg, "new") == 0) { /* Dotyczy tylko __main__ */ cf.cf_flags |= CO_FUTURE_DIVISION; /* A to nakazuje pętli eval traktować BINARY_DIVIDE jako BINARY_TRUE_DIVIDE */_Py_QnewFlag = 1; przerwanie; } fprintf(stderr, "opcja -Q powinna mieć wartość `-Qold', " "`-Qwarn', `-Qwarnall' lub `-Qnew' tylko\n"); zwróć użycie(2, argv[0]); /* NIE DOTYCZY */ przypadek 'i': Py_InspectFlag++; Py_InteractiveFlag++; przerwanie; /* case 'J': zarezerwowane dla Jythona */ case 'O': Py_OptimizeFlag++; przerwanie; przypadek „B”: Py_DontWriteBytecodeFlag++; przerwanie; przypadek 's': Py_NoUserSiteDirectory++; przerwanie; przypadek 'S': Py_NoSiteFlag++; przerwanie; przypadek 'E': Py_IgnoreEnvironmentFlag++; przerwanie; przypadek 't': Py_TabcheckFlag++; przerwanie;przypadek 'u': niebuforowany++; saw_unbuffered_flag = 1; przerwanie; przypadek 'v': Py_VerboseFlag++; przerwanie; #ifdef RISCOS przypadek 'w': Py_RISCOSWimpFlag = 1; przerwanie; #endif przypadek 'x': skipfirstline = 1; przerwanie; /* case 'X': zarezerwowane dla argumentów specyficznych dla implementacji */ case 'U': Py_UnicodeFlag++; przerwanie; przypadek 'h': przypadek '?': help++; przerwanie; przypadek „V”: wersja++; przerwanie; przypadek 'W': PySys_AddWarnOption(_PyOS_optarg); przerwanie; /* To miejsce zarezerwowane dla innych opcji */ default: return use(2, argv[0]); /*NIE OSIĄGNIĘTY*/} } if (pomoc) zwraca use(0, argv[0]); if (wersja) { fprintf(stderr, "Python %s\n", PY_VERSION); zwróć 0; } if (Py_Py3kWarningFlag && !Py_TabcheckFlag) /* -3 implikuje -t (ale nie -tt) */ Py_TabcheckFlag = 1; if (!Py_InspectFlag && (p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') Py_InspectFlag = 1; if (!saw_unbuffered_flag && (p = Py_GETENV("PYTHONUNBUFERED")) && *p != '\0') unbuffered = 1; if (!Py_NoUserSiteDirectory && (p = Py_GETENV("PYTHONNOUSERSITE")) && *p != '\0') Py_NoUserSiteDirectory = 1; if ((p = Py_GETENV("PYTHONWARNINGS")) && *p != '\0') { char *buf, *warning; buf = (znak *)malloc(strlen(p) + 1); if (buf == NULL) Py_FatalError( "za mało pamięci do skopiowaniaPYTHONWARNINGS"); strcpy(buf, p); for (ostrzeżenie = strtok(buf, ","); ostrzeżenie != NULL; ostrzeżenie = strtok(NULL, ",")) PySys_AddWarnOption(ostrzeżenie); free(buf); } if (polecenie == NULL && moduł == NULL && _PyOS_optind < argc && strcmp(argv[_PyOS_optind], "-") != 0) { #ifdef __VMS filename = decc$translate_vms(argv[_PyOS_optind]); filename == (char *)0 || filename == (char *)-1) filename = argv[_PyOS_optind]; #else filename = argv[_PyOS_optind]; #endif } stdin_is_interactive = Py_FdIsInteractive(stdin, (char *)0 ); if (unbuffered) { #if defined(MS_WINDOWS) ||defined(__CYGWIN__) _setmode(fileno(stdin), O_BINARY); _setmode(fileno(stdout), O_BINARY); #endif #ifdef HAVE_SETVBUF setvbuf(stdin, (char) *)NULL, _IONBF, BUFSIZ); setvbuf(stdout, (znak *)NULL, _IONBF, BUFSIZ); setvbuf(stderr, (char *)NULL, _IONBF, BUFSIZ); #else /* !HAVE_SETVBUF */ setbuf(stdin, (char *)NULL); setbuf(stdout, (znak *)NULL); setbuf(stderr, (char *)NULL); #endif /* !HAVE_SETVBUF */ } else if (Py_InteractiveFlag) { #ifdef MS_WINDOWS /* Nie musi mieć bufora liniowego -- użyj niebuforowanego */ /* Dowolny set[v]buf(stdin, ...) nakręca Tkintera :-( */ setvbuf(stdout, (char *)NULL, _IONBF, BUFSIZ); #else /* !MS_WINDOWS */ #ifdef HAVE_SETVBUF setvbuf(stdin, (char *)NULL, _IOLBF, BUFSIZ); setvbuf (stdout, (char *)NULL, _IOLBF, BUFSIZ); #endif /* HAVE_SETVBUF */ #endif /* !MS_WINDOWS */ /* Zostaw stderr w spokoju - i tak powinno być niebuforowane. */ } #ifdef __VMS else { setvbuf (stdout, (char *)NULL, _IOLBF, BUFSIZ); } #endif /*__VMS */ #ifdef __APPLE__ /* W systemie MacOS X, gdy interpreter Pythona jest osadzony w pakiecie aplikacji, jest wykonywany przez skrypt ładujący, który wykonuje os.execve() z argv[0] innym niż rzeczywisty plik wykonywalny Pythona . Jest to potrzebne, aby Finder był zadowolony, a raczej, aby obejść zbyt rygorystyczne wymagania Apple dotyczące nazwy procesu. Jednak nadal potrzebujemy użytecznego pliku sys.executable, więc rzeczywista ścieżka pliku wykonywalnego jest przekazywana w zmiennej środowiskowej. Zobacz Lib/plat-mac/bundlebuiler.py, aby uzyskać szczegółowe informacje o skrypcie ładowania początkowego. */ if ((p = Py_GETENV("PYTHONEXECUTABLE")) && *p != '\0') Py_SetProgramName(p); else Py_SetNazwaProgramu(argv[0]); #else Py_SetNazwaProgramu(argv[0]); #endif Py_Initialize(); if (Py_VerboseFlag || (polecenie == NULL && nazwa pliku == NULL && moduł == NULL && stdin_is_interactive)) { fprintf(stderr, "Python %s na %s\n", Py_GetVersion(), Py_GetPlatform()); if (!Py_NoSiteFlag) fprintf(stderr, "%s\n", PRAWA AUTORSKIE); } if (polecenie != NULL) { /* Utwórz kopię zapasową _PyOS_optind i wymuś sys.argv[0] = '-c' */ _PyOS_optind--; argv[_PyOS_optind] = "-c"; } if (module != NULL) { /* Utwórz kopię zapasową _PyOS_optind i wymuś sys.argv[0] = '-c', aby PySys_SetArgv poprawnie ustawiło sys.path[0] na '', zamiast szukać pliku o nazwie "-m ”. Szczegóły znajdziesz w numerze #8202 trackera. */ _PyOS_optind--; argv[_PyOS_optind] = "-c"; } PySys_SetArgv(argc-_PyOS_optind, argv+_PyOS_optind); if ((Py_InspectFlag || (polecenie == NULL && nazwa pliku == NULL && moduł == NULL)) && isatty(fileno(stdin))) { PyObject *v; v = PyImport_ImportModule("odczyt"); if (v == NULL) PyErr_Clear(); jeszcze Py_DECREF(v); } if (polecenie) { sts = PyRun_SimpleStringFlags(polecenie, &cf) != 0; wolny(polecenie); } else if (moduł) { sts = RunModule(moduł, 1); wolny(moduł); } else { if (nazwa pliku == NULL && stdin_is_interactive) { Py_InspectFlag = 0; /* zakończ przy SystemExit */ RunStartupFile(&cf); } /* XXX */ sts = -1; /* śledź, czy już uruchomiliśmy __main__ */ if (filename != NULL) { sts = RunMainFromImporter(filename); } if (sts==-1 && nazwa pliku!=NULL) { if ((fp = fopen(nazwa pliku, "r")) == NULL) { fprintf(stderr, "%s: nie można otworzyć pliku '%s ': [Errno %d] %s\n",argv[0], nazwa pliku, errno, strerror(errno)); powrót 2; } else if (pomiń pierwszą linię) { int ch; /* Przesuń pierwszy znak nowej linii, aby numery linii pozostały takie same */ while ((ch = getc(fp)) != EOF) { if (ch == '\n') { (void)ungetc(ch, fp); przerwanie; } } } { /* XXX: czy to działa na Win/Win64? (patrz posix_fstat) */ struct stat sb; if (fstat(fileno(fp), &sb) == 0 && S_ISDIR(sb.st_mode)) { fprintf(stderr, "%s: '%s' to katalog, nie można kontynuować\n", argv[0], Nazwa pliku); fzamknij(fp); powrót 1; } } }if (sts==-1) { /* wywołaj oczekujące wywołania, takie jak obsługa sygnałów (SIGINT) */ if (Py_MakePendingCalls() == -1) { PyErr_Print(); o. = 1; } else { sts = PyRun_AnyFileExFlags( fp, nazwa pliku == NULL ? "<stdin>" : nazwa pliku, nazwa pliku != NULL, &cf) != 0; } } } /* Sprawdź tę zmienną środowiskową na końcu, aby dać programom możliwość * ustawienia jej z Pythona. */ if (!Py_InspectFlag && (p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') { Py_InspectFlag = 1; } if (Py_InspectFlag && stdin_is_interactive && (nazwa pliku != NULL || polecenie != NULL || moduł != NULL)) { Py_InspectFlag = 0; /* XXX */ sts = PyRun_AnyFileFlags(stdin, "<stdin>", &cf) !=0; } Py_Finalize(); #ifdef RISCOS if (Py_RISCOSWimpFlag) fprintf(stderr, "\x0cq\x0c"); /* make frontend quit */ #endif #ifdef __INSURE__ /* Insure++ to narzędzie do analizy pamięci, które pomaga w wykrywaniu * wycieków pamięci i innych problemów z pamięcią. Przy wyjściu Pythona, * internowany słownik ciągów znaków jest oznaczany jako używany przy wyjściu * (którym jest). W normalnych warunkach jest to w porządku, ponieważ * pamięć zostanie automatycznie odzyskana przez system. W przypadku debugowania pamięci * jest to ogromne źródło bezużytecznego szumu, * więc rezygnujemy z wolniejszego zamykania na mniej rozpraszających * raportów pamięci. -baw */ _Py_ReleaseInternedStrings(); #endif /* __INSURE__ */ return sts; } Dobry Boże Wszechmogący... jest wystarczająco duży, by zatopić Titanica. Wygląda na to, że Python wykonał sztuczkę "Wprowadzenie do programowania 101" i po prostu przeniósł wszystkie `main()`' do innej funkcji nazwał ją czymś bardzo podobnym do "main". Oto moje pytanie: czy ten kod jest strasznie napisany, czy są inne powody, aby mieć krótką główną funkcję? W obecnej sytuacji nie widzę absolutnie żadnej różnicy między zrobieniem tego, a przeniesieniem kodu z `Py_Main()` z powrotem do `main()`. Czy mylę się, myśląc o tym?


title: Termin wycofania produkcji

text: Firma, w której pracuję, przechowuje kopię skompilowanego kodu źródłowego na produkcji. Tak więc zasadniczo na naszym serwerze produkcyjnym mamy dwa foldery: ProductionServer\SourceCode\ ProductionServer\SourceCodeRollback\ Folder Rollback zawsze zawiera jedną wersję starszego kodu. Odbywa się to w taki sposób, że w nocy wdrażania, jeśli coś jest nie tak z nowym kodem, wdrażający (który nie jest zaznajomiony z oprogramowaniem do kontroli źródła) ma starszą wersję, do której może wrócić. Moje pytanie brzmi: czy istnieje oficjalny termin/nomenklatura informatyczna dla folderu Rollback? A może samo „wycofanie” jest terminem oficjalnym?


title: Jak podejść do tego zapytania PHP/MYSQL?

text: Mam zakodowany przeze mnie system rezerwacji i moim ostatnim zadaniem jest umożliwienie użytkownikowi wprowadzenia zestawu dat, a następnie pokazanie mu wszystkich dostępnych opcji. Tabela rezerwacji jest konfigurowana za pomocą `unit_id`, `check_in` i `check_out`. Istnieje dwanaście różnych numerów jednostek. Muszę więc jakoś przejrzeć je i znaleźć jednostki, które nie mają zajętych dat w podanym przez użytkownika zakresie dat. Mam tylko trochę problemów z konceptualizacją tego, co musi się wydarzyć. Pseudokod $jednostki = tablica (wszystkie jednostki); foreach($units as $key = $value){ Uruchom zapytanie przeszukujące wszystkie rezerwacje dla tej jednostki, jeśli jednostka jest dostępna, dodaj do naszej tablicy $available_units, aby wyświetlić później } Sprawdzanie dostępności też mnie zaskoczyło. Jaki jest najskuteczniejszy sposób wykorzystania zakresu dat dostępnego dla klientów i porównania z zakresami dat w bazie danych?


title: Sortuj algorytmy, które działają na dużej ilości danych

text: Poszukuję algorytmów sortujących, które mogą pracować na dużej ilości danych, tj. które mogą działać nawet wtedy, gdy cały zestaw danych nie może być jednocześnie przechowywany w pamięci głównej. Jedynym kandydatem, jaki do tej pory znalazłem, jest sortowanie przez scalanie: możesz zaimplementować algorytm w taki sposób, aby skanował zestaw danych przy każdym scaleniu, bez jednoczesnego przechowywania wszystkich danych w pamięci głównej. Wariant sortowania przez scalanie, który mam na myśli, został opisany w tym artykule w sekcji **Korzystanie z napędów taśmowych**. Myślę, że jest to dobre rozwiązanie (o złożoności O(n x log(n)) ale jestem ciekawy, czy istnieją inne (być może szybsze) algorytmy sortowania, które mogą pracować na dużych zestawach danych, które nie mieszczą się w pamięci głównej.* *EDYTUJ** Oto kilka dodatkowych szczegółów, zgodnie z wymaganiami odpowiedzi: * Dane muszą być sortowane okresowo, np. raz w miesiącu. Nie muszę wstawiać kilku rekordów i sortować dane przyrostowo. * Mój przykład plik tekstowy ma około 1 GB tekstu UTF-8, ale chciałem rozwiązać problem ogólnie, nawet jeśli plik miał powiedzmy 20 GB.* Nie ma go w bazie danych i ze względu na inne ograniczenia nie może być. * Dane są zrzucane przez innych jako plik tekstowy, mam własny kod do odczytania tego pliku tekstowego.* Format danych to plik tekstowy: znaki nowej linii to separatory rekordów.Jednym z możliwych usprawnień, które miałem na myśli, było podziel plik na pliki, które są wystarczająco małe, aby można je było posortować w pamięci, a na koniec połącz wszystkie te pliki za pomocą algorytmu, który opisałem powyżej.


title: Jak używać przeglądarki jako GUI dla aplikacji Emacsa?

text: Zacząłem używać Emacsa i uwielbiam go. Oczywiście myślę o sposobach jej rozszerzenia. Jestem szczególnie zafascynowany myślą o tworzeniu interfejsów graficznych opartych na przeglądarce dla niektórych rzeczy, które w innym przypadku zrobiłbym w emacsie, szczególnie przeglądanie dość statycznych danych. Przykład: mam kilka plików txt (tworzonych i edytowanych w Emacsie) zawierających cytaty i fragmenty z moich ulubionych książek. Fajnie byłoby zaprezentować je w bardziej efektowny wizualnie/angażujący sposób. Na przykład z unikalnymi schematami kolorów i krojami pisma dla różnych autorów oraz kilkoma kolumnami tekstu, aby wykorzystać większą powierzchnię ekranu (jak w Stanza, czytnik .epub). Czy istnieją prostsze sposoby renderowania HTML pochodzącego ze zwykłych plików tekstowych, które są otwarte w Emacsie niż przeglądarki?


title: Podejście programistyczne: interfejs użytkownika czy model domeny?

text: Chociaż nigdy nie dostarczałem niczego za pomocą Smalltalk, mój krótki czas na zabawę z nim zdecydowanie odcisnął swoje piętno. Jedynym sposobem na opisanie tego doświadczenia jest MVC tak, jak miało być. Zasadniczo wszystkie ciężkie prace związane z Twoją aplikacją są wykonywane w obiektach biznesowych (lub modelu domeny, jeśli masz na to ochotę). Standardowe kontrolki są w pewien sposób powiązane z obiektami biznesowymi. Na przykład pole tekstowe jest mapowane na pole obiektu (samo pole jest obiektem, więc jest to łatwe do wykonania). Przycisk byłby mapowany do metody. Wszystko to odbywa się za pomocą bardzo prostego i naturalnego interfejsu API. Nie musimy myśleć o wiązaniu obiektów itp. To po prostu działa. Jednak w wielu nowszych językach i interfejsach API musisz myśleć z zewnątrz do środka. Najpierw z C++ i MFC, a teraz z C# i WPF, Microsoft podłączył swój świat programistów do konstruktorów GUI, w których budujesz swoją aplikację poprzez implementację obsługi zdarzeń . Programowanie Java Swing nie różni się tak bardzo, tylko Ty sam piszesz kod, aby utworzyć instancję kontrolek w formularzu. W przypadku niektórych projektów może nawet nie istnieć model domeny — tylko programy obsługi zdarzeń. Byłem w i wokół tego modelu przez większość mojej kariery. Każdy sposób zmusza cię do innego myślenia. Dzięki podejściu Smalltalk Twoja domena jest inteligentna, podczas gdy GUI jest głupi. Przy domyślnym podejściu VisualStudio, GUI jest inteligentny, podczas gdy model domeny (jeśli istnieje) jest raczej anemiczny. Wielu programistów, z którymi współpracuję, dostrzega wartość w podejściu Smalltalk i próbuje wprowadzić to podejście do środowiska VisualStudio. WPF ma _some_ dynamiczne funkcje wiązania, które to umożliwiają; ale są ograniczenia. Nieuchronnie część kodu, który należy do modelu domeny, trafia do klas GUI. Więc w jaki sposób projektujesz/opracowujesz swój kod? Czemu? * Najpierw GUI. Interakcja użytkownika jest najważniejsza. * Najpierw domena. Muszę się upewnić, że system jest poprawny, zanim umieścimy na nim interfejs użytkownika. Oba podejścia mają swoje plusy i minusy. Wpasowuje się tam model domeny z kryształowymi katedrami i ciastem na niebie. GUI wpasowuje się tam szybko i brudno (czasami naprawdę brudno). I dodatkowy bonus: Jak upewnić się, że kod jest możliwy do utrzymania?


title: Gdzie znajdę ciekawy projekt do pracy?

text: Jeśli chcę nauczyć się nowego języka programowania, nie mogę go opanować bez głębokiego zagłębiania się w to. Może projekt byłby dobry, ale brakuje mi na nie pomysłu. Gdzie mogę znaleźć projekty do pracy, może jakiś projekt open-source?


title: Czy dziedziczenie kontekstu, jak pokazuje przykład Kaczka Head First Design Patterns, nie ma znaczenia dla wzorca strategii?

text: We wzorcach projektowych Head First uczy wzorca strategii za pomocą przykładu Duck, w którym różnym podklasom Duck można przypisać określone zachowanie w czasie wykonywania. Z mojego zrozumienia, celem wzorca strategii jest zmiana zachowania **pojedynczego** obiektu w czasie wykonywania, ale używają dziedziczenia Duck, aby zmienić zachowanie różnych typów Duck. ![Wzorzec strategii](http://i.stack.imgur.com/EIsOf.png) ## Trafność? **Czy kontekstowe dziedziczenie kaczek nie ma związku z wzorcem strategii, czy też różnicowanie typów kaczek, a także różnicowanie ich zachowań jest dobrym powodem do zastosowania wzorca strategii?** Czy sytuacje, w których trzeba różnicować oba, stanowią dobry powód, aby użyć wzorca strategii? Dlaczego mieliby to uwzględnić jako przykład wzorca strategii? ## Prostszy przykład Czy mogę jeszcze bardziej uprościć ten przykład, mając po prostu klasę Duck (bez klas pochodnych)? Następnie podczas implementacji jednego obiektu duck można mu przypisać różne zachowania w oparciu o pewne okoliczności, które nie są zależne od jego własnego typu obiektu. Na przykład: FlyBehavior zmienia się w zależności od pogody lub QuackBehavior zmienia się w zależności od pory dnia lub tego, jak głodna jest kaczka. Zdaję sobie sprawę, że byłoby to rozwiązanie innego problemu niż ten w książce, ale to, czego szukam, to odpowiedni przykład wzorca strategii, do którego można się odwołać. Czy mój przykład powyżej stanowiłby również wzorzec strategii? ## Edycja: Udało mi się znaleźć 2 prostsze przykłady wzorców strategii, które ściślej trzymają się wzorców strategii bez dziedziczenia kontekstu: Hunter.java i solver.py.


title: Jaki byłby najszybszy sposób przechowywania lub obliczania dozwolonych zestawów posunięć dla figur szachowych?

text: Na przykład, jeśli próbuje się wykonać ruch, mogę po prostu przejść przez listę dozwolonych ruchów i porównać x,y, ale muszę napisać logikę, aby obliczyć je przynajmniej za każdym razem, gdy kawałek jest przesuwany. Lub mogę zapisać w tablicy [,], a następnie sprawdzić, czy x i y nie są równe 0, to jest to legalne posunięcie, a następnie zapisać dane w ten sposób [0][1][0][0] itd. każdy rząd, w którym 1 jest prawidłowym ruchem, ale nadal muszę go wypełnić. Zastanawiam się, jaki jest najszybszy sposób na przechowywanie i odczytywanie legalnego ruchu na obiekcie kawałka do obliczeń. Przypuszczam, że mógłbym również użyć matematyki macierzowej, ale nie wiem. **Zasadniczo chcę zachować reguły dla danego elementu, abym mógł przypisać obiektowi elementowi mały szablon wszystkich możliwych ruchów, biorąc pod uwagę, że zaczyna się od jego bieżącej lokalizacji** , która powinna być tylko jedną tabelą danych. Ale czy szybciej jest zapętlać lub pisać zapytania LINQ lub przechowywać tablice i macierze? public class Przenieś { public int x; int publicznej; } public class ChessPiece : Move { private List<Move> possibleMoves { get; ustawić; } public bool LegalMove(int x, int y){ foreach(var p in possibleMoves) { if(p.x == x && p.y == y) { return true; }              }         }     }      Ktoś wie?


title: Architektura subsumpcji a teoria kontroli percepcyjnej

text: Jestem nową osobą w dziedzinie AI i muszę zbadać i porównać dwie różne architektury do pisanej przeze mnie pracy. Zanim zaczniesz krzyczeć (wątek pracy domowej), czytałem te dwa tematy tylko po to, aby stwierdzić, że bardziej się mylę.. najpierw zacznę od krótkiego określenia tego, co do tej pory wiem. **Podsumowanie** opiera się na fakcie, że cele systemu są różne pod względem zaawansowania, co wymaga dodania ich jako **_warstwy_** , każda warstwa może tłumić (modyfikować) polecenia warstw znajdujących się pod nią, oraz powiedzmy, że istnieją inhibitory zatrzymujące sygnały z wykonania. **PCT** podkreśla, że istnieją węzły obsługujące zmiany środowiskowe ( ** _negatywne sprzężenie zwrotne_** ), więc dane wejściowe pochodzące ze środowiska przechodzą przez węzeł porównawczy, a następnie generowana jest przez ten węzeł akcja, HPCT lub (Hierarchiczny PCT) opiera się na zagnieżdżaniu tych cykli jeden w drugim, tak aby mały cykl, aby uniknąć awarii, zostałby zagnieżdżony w bardziej wyrafinowanym cyklu, którego celem jest na przykład określona lokalizacja. Moje pytania, czy odbieram to we właściwy sposób? czy brakuje mi krytycznego zrozumienia tych dwóch modeli? również każdy pomysł, w którym mogę znaleźć uproszczone wyjaśnienia dla każdej teorii (do tej pory starałem się zrozumieć artykuły z Google uczonego). * * * **Edytuj:** * Akceptowalnym wynikiem byłoby porównanie i przeciwstawienie podsumowania z PCT jako alternatywnymi strukturami kontroli w robotyce opartej na zachowaniu. * Eksperymenty zostaną wykonane na robocie Mindstorm NXT 2.0, a implementacja zostanie wykonana przy użyciu PureData. * Nie szukam złożonego zachowania, tylko kilka modeli, które zademonstrują możliwości PCT i Subsumpcji oraz przedstawią słabe i mocne strony każdego podejścia. * Jeśli chodzi o inne wymienione punkty „rwong”, nie sądzę, aby były one częścią mojego zakresu badań. _**Moim głównym celem jest pełne zrozumienie koncepcji, ponieważ jest to moja krytyczna faza wdrożenia w pełni poprawnego rozwiązania, które pozwoliłoby na porównanie_**


title: Framework Entity i aplikacja Eager ładująca i korporacyjna z podejściem DDD

text: Próbujemy stworzyć aplikację ASP.NET MVC 4 przy użyciu frameworka encji z podejściem wzorca stylu programowania opartego na domenie. Jak widać w naszej części warstwy domenowej mamy do czynienia z kompleksowym projektem. Musimy załadować encję zarówno leniwymi, jak i gorliwymi metodami. Niestety mamy duży problem z tymi metodami w frameworku encji. Jak rozumiemy, do szybkiego ładowania w EF musimy użyć metody `Include` i podaćłańcuch właściwości i właściwości właściwości itp. (W Hibernate i java mogliśmy użyć adnotacji top of member do szybkiego ładowania i było to o wiele łatwiejsze niż to podejście). Ale strasznym problemem jest to, że mamy struktury dziedziczenia i ciężki polimorfizm, w tych stanach nie mamy tego ciągu, który powinniśmy uwzględnić, ponieważ nie wiemy, która klasa pochodna klasy jest wybrana, aby zrozumieć, które właściwości powinny zawierać. ![Nasz model](http://i.stack.imgur.com/b5OCM.png) Na przykład jak widać, wynik zawiera kolekcję elementów, a następnie decyduje o dodaniu jakiejś grupy do tej kolekcji i każdej z tych grup mieć pewne grupy i pola (takie jak wzorzec kompozycji). Teraz wyobraź sobie, że chcemy załadować wynik podobny do tego, o którym mowa powyżej. Gdy chcę napisać ciąg z podanych include, nie wiem, jakie elementy tego wyniku są grupami. Ponieważ nie możemy przewidzieć, że te elementy są grupami, więc te grupy mają kolekcję elementów, które powinny się załadować. this.Items = new List<Item> { new Group(a, new List<Item> { new Field(b), new Field(c), new Field(d), Nareszcie mamy krytyczne pytanie: czy struktura encji przeznaczony dla aplikacji korporacyjnych ze złożoną domeną i podejściem DDD?Jeśli nie, to w jaki sposób podążamy za podejściem Martina Fowlera i Erica Evansa w inżynierii oprogramowania i aplikacjach korporacyjnych w C#?


title: Lepszy sposób na szkolenie nowych pracowników

text: Zespół, którego obecnie należę, ma dość dużą rotację, a członkowie zazwyczaj przenoszą się do różnych projektów w tej samej firmie. Obecnie nasze „szkolenie” dla nowych członków polega na sparowaniu ich z główną osobą kontaktową (zwykle ostatnią osobą, która ukończyła szkolenie), która zapewni im praktyczne doświadczenie i zapyta starszych programistów, jeśli nowszy pracownik zapyta o coś mentora nie wie. Daje to szansę nowemu zatrudnionemu na szybkie zaangażowanie się i stanowi wyzwanie dla mentora, aby lepiej zrozumiał system. Jednak, jak możesz sobie wyobrazić, ten styl szkolenia jest bardzo czasochłonny i nie zapewnia bardzo dobrego transferu wiedzy (propagują się nieporozumienia, powiększają się luki). Miałem za zadanie wygenerować dokumentację i materiały szkoleniowe dla naszych przyszłych nowych pracowników. Od czasu do czasu zajmuję się pisaniem technicznym, ale jest to dla użytkownika końcowego i jest bardzo szczegółowe z dużą ilością zrzutów ekranu i zajmuje dużo czasu. Tworzenie nowej dokumentacji dla nowych pracowników jest uważane za niski priorytet i obecnie mam tylko około 40 godzin na pracę nad tym. Dokumentowanie systemu w dotychczasowy sposób, w jaki piszę dokumentację techniczną, ledwo zarysowałoby powierzchnię w 40 godzin. Zwłaszcza biorąc pod uwagę, że muszę dokumentować nie tylko bazę kodu, ale także wdrożenia i wsparcie. Jak mogę szybko napisać dokumentację, aby jak najszybciej aktualizować nowych pracowników bez inwestowania znacznej ilości czasu w pisanie dokumentacji? **Dodatkowe informacje:** Obecnie mamy zarówno wiki, jak i trochę dokumentacji szkoleniowej, jednak obie są dość rzadkie.


title: Jak poinformować kolegę o zasadach kodowania .NET i C# bez obrażania go?

text: Mam dobrego kolegę w pracy, z którym często pracuję i jest całkiem mądry. Nie jest programistą .NET, ale teraz koduje też od dłuższego czasu, głównie C++, Python itp. Widzę, że używa Pythona jak wytyczne w nazewnictwie itp., a w kodzie współdzielonym wygląda to niejednolicie, aby mieć rzeczy takie jak: getEffectById, itp. i wiele innych nazw Pythona, itp. Jak myślicie, że powinienem mu to powiedzieć, żeby się nie obraził ani nie pomyślał, że patrzę z góry na jego kod lub umiejętności, ponieważ tego nie robię.


title: Dlaczego powinienem wybrać Java, Flash lub HTML5 do gry online z komunikacją z serwerem?

text: Zaczynam projektować grę, która będzie miała następujące cechy i próbuję zdecydować, jak ją zaprogramować. Dam trochę mojego doświadczenia później, aby pomóc w podjęciu decyzji. 1. Gra powinna obsługiwać zarówno integrację z Facebookiem, jak i samodzielną wersję. 2. Nie chcę tego robić od razu, ale myślę, że dobrym pomysłem byłoby przeniesienie tego na Androida / iPhone'a w pewnym momencie. 3. Gra będzie polegać na komunikacji z serwerem. Sposób komunikacji jest nadal otwarty, ale wyobrażam sobie, że większość będzie przez HTTPS. Podejrzewam, że większość pracy będzie teraz wykonywana na serwerze, a klient będzie głównie pokazywał wyniki z poprzedniej klatki i wybierał, co zrobić z następną klatką. 4. Podejrzewam, że w pewnym momencie będę chciał umieścić animacje i tym podobne, ale nie jest to krytyczne dla początku gry. 5. Gra jest zasadniczo grą planszową online, zawierającą karty, planszę itp. Obecnie przyglądam się Flashowi, HTML 5 i apletowi Java. Trochę przypadkowych informacji. 1. Mam dostęp do Adobe Flash, właściwie całego Design Premium, CS5. 2. Mam pewne doświadczenie w programowaniu aplikacji na Androida. 3. Pracowałem z HTML, ale minęło sporo czasu. Zrobiłem tylko trochę Javascript, ale nie przypominam sobie, żeby było to szczególnie trudne. 4. Rutynowo programuję w C, C++, Matlab i Android (Java). Dość często programuję w Pythonie, Perlu, Shell, a wcześniej programowałem w Basicu, HTML, JavaScript.


title: Czy równoczesne uruchamianie Node.js i Apache jest złą praktyką?

text: Mam pomysł i chciałbym wiedzieć, czy to jest właściwy sposób na moją aplikację końcową. Pomyśl o mojej aplikacji jako o systemie społecznościowym, w którym chcę zaimplementować funkcjonalność czatu. W tym celu chciałbym przesłać dane z serwera do klienta. Słyszałem, że mógłbym do tego użyć Node.js. W międzyczasie potrzebuję 'zwykłego' systemu do wysyłania aktualizacji statusu i takich, do których chciałbym używać PHP i serwera Apache. Jedynym sposobem, jaki przychodzi mi do głowy, jest równoległe działanie Node.js i Apache. Ale czy to jest droga do tego? Myślę, że byłoby na to nieco ładniejsze rozwiązanie.


title: W jaki sposób "obiekty" i "klasy" OOP są zorganizowane w pamięci pod względem języka asemblera?

text: Jak zorganizowane są obiekty w pamięci? Na przykład wiem, że funkcja jest fragmentem kodu w pamięci, który oczekuje parametrów za pośrednictwem stosu i/lub rejestrów i obsługuje własną ramkę stosu. Ale obiekty są znacznie bardziej skomplikowaną strukturą. Jak są zorganizowane? Czy każdy obiekt ma „łącza” do metod i przekazuje do siebie adres do tej metody? Byłoby wspaniale zobaczyć dobre wyjaśnienie tego tematu. UPD. Doprecyzowałem pytanie i interesuję się głównie statycznym pisaniem języków.


title: Jak zaprojektować interfejs tak, aby było jasne, które właściwości mogą zmienić swoją wartość, a które pozostaną stałe?

text: Mam problem projektowy dotyczący właściwości .NET. interfejs IX { Identyfikator Guid { get; } bool IsInvalidated { get; } void Unieważnij(); } **Problem:** Ten interfejs ma dwie właściwości tylko do odczytu, `Id` i `IsInvalidated`. Jednak fakt, że są one tylko do odczytu, sam w sobie nie gwarantuje, że ich wartości pozostaną stałe. Powiedzmy, że moim zamiarem było wyjaśnienie, że… * `Id` reprezentuje stałą wartość (która może być zatem bezpiecznie buforowana), podczas gdy * `IsInvalidated` może zmieniać swoją wartość w trakcie życia obiektu `IX` ( więc nie powinny być buforowane). Jak mogę zmodyfikować `interfejs IX`, aby umowa była wystarczająco jasna? **Moje własne trzy próby rozwiązania:** 1. Interfejs jest już dobrze zaprojektowany. Obecność metody o nazwie `Invalidate()` pozwala programiście wywnioskować, że może to mieć wpływ na wartość właściwości o podobnej nazwie `IsInvalidated`. Ten argument ma zastosowanie tylko w przypadkach, w których metoda i właściwość są podobnie nazwane. 2. Rozszerz ten interfejs o zdarzenie `IsInvalidatedChanged`: bool IsInvalidated { get; } zdarzenie EventHandler IsInvalidatedChanged; Obecność zdarzenia `…Changed` dla `IsInvalidated` oznacza, że ta właściwość może zmienić swoją wartość, a brak podobnego zdarzenia dla `Id` jest obietnicą, że ta właściwość nie zmieni swojej wartości. Podoba mi się to rozwiązanie, ale jest to dużo dodatkowych rzeczy, które mogą w ogóle się nie przydać. 3. Zastąp właściwość `IsInvalidated` metodą `IsInvalidated()`: bool IsInvalidated(); To może być zbyt subtelna zmiana. Ma to być wskazówka, że wartość jest obliczana na nowo za każdym razem — co nie byłoby konieczne, gdyby była stałą. Temat MSDN „Wybieranie między właściwościami i metodami” zawiera następujące informacje: > _W następujących sytuacjach należy używać metody, a nie właściwości. […] > Operacja przy każdym wywołaniu zwraca inny wynik, nawet jeśli parametry > się nie zmieniają._ **Jakich odpowiedzi oczekuję?** * Najbardziej interesują mnie zupełnie inne rozwiązania problemu , wraz z wyjaśnieniem, jak pokonali moje powyższe próby. * Jeśli moje próby są logicznie błędne lub mają znaczące wady, o których jeszcze nie wspomniano, takie, że pozostaje tylko jedno rozwiązanie (lub żadne), chciałbym usłyszeć, gdzie popełniłem błąd. Jeśli wady są drobne, a po uwzględnieniu kilku rozwiązań pozostaje więcej, prosimy o komentarz. * Przynajmniej chciałbym uzyskać informację zwrotną na temat tego, które rozwiązanie jest preferowane i z jakich powodów.


title: Jak symulować zdarzenia, które powodują wyjątki, aby przetestować bloki try/catch?

text: Rozumiem, jak działają wyjątki oraz jak je przechwycić i obsłużyć w C#, ale jak mogę symulować zdarzenia, które mogą spowodować wyjątek, aby upewnić się, że zostanie on poprawnie przechwycony? Na przykład, czy możliwe jest uruchomienie aplikacji w rodzaju stanowiska testowego, w którym można symulować problemy z siecią, problemy z bazą danych itp.? Wyjątki ze swej natury wydają się trudne do odtworzenia, co utrudnia zapewnienie, że Twój kod sobie z nimi poradzi. Chociaż programuję głównie w C#/.NET/Visual Studio, przydatne mogą być odpowiedzi lub zasoby dotyczące innych języków.


title: Przekazać identyfikator lub obiekt?

text: Czy udostępniając metodę logiki biznesowej w celu uzyskania jednostki domeny, parametr powinien akceptować obiekt lub identyfikator? Na przykład, czy powinniśmy zrobić to: public Foo GetItem(int id) {} lub tak: public Foo GetItem(Foo foo) {} Wierzę w przekazywanie obiektów w całości, ale co z przypadkiem, w którym otrzymujemy obiekt i znamy tylko identyfikator? Czy wywołujący powinien utworzyć puste Foo i ustawić identyfikator, czy po prostu przekazać identyfikator do metody? Ponieważ przychodzące Foo będzie puste, z wyjątkiem identyfikatora, nie widzę korzyści z konieczności tworzenia przez wywołującego Foo i ustawiania jego identyfikatora, podczas gdy może po prostu wysłać identyfikator do metody GetItem().


title: Czy istnieje sposób porównywania i rejestrowania zmian w kodzie bez VCS?

text: Pracuję dla klienta, który nie ma systemu kontroli wersji. Chcę rejestrować zmiany w kodzie bez konieczności dodawania wszystkich zmian do arkusza kalkulacyjnego. Ograniczam się do używania Notepad ++, więc czy wtyczka lub makro do tego byłoby inną opcją?


title: Czy kiedykolwiek miałeś do czynienia z pisaniem specyfikacji na późnym etapie rozwoju?

text: Posiadamy istniejącą bazę kodu, która została opracowana w celu zaspokojenia potrzeb większości naszych klientów, która zgromadziła funkcje i poprawki błędów zgodnie z potrzebami, a projekty rozwijały uniwersalnie użyteczne funkcje. W tej chwili napotykamy problem polegający na tym, że nie ma prawdziwej dokumentacji jego możliwości poza samym kodem, a przy większych zadaniach może to oznaczać, że trudno jest określić, co powinno być objęte zakresem pracy. Jak podszedłbyś do pisania zdefiniowanej specyfikacji dla istniejącej aplikacji lub frameworka?


title: Dlaczego ostatnio popularność biblioteki PowerCollections C# spadła?

text: Właśnie spojrzałem na statystyki biblioteki PowerCollections C# i zauważyłem gwałtowny spadek liczby pobrań. Jaka może być przyczyna? Czy jest coś lepszego, czego powinienem używać?


title: Reprezentowanie talii kart w C (nie C++)

text: Do tej pory moje najlepsze pomysły były jak odłogi A) Reprezentować „kartę” w jednej strukturze i mieć „talię” w innej talii składającej się z 52 kart i karty składającej się z 2 znaków, jeden dla koloru i rangi jeden dla koloru. B) Drugi wydaje się być łatwiejszy w zarządzaniu, ale mniej oczywisty w kodzie. Tworzenie tablicy intów, z których każdy ma inną wartość od 1-52. Następnie tworzymy funkcję przeliczającą, która przetłumaczyłaby wartość na strukturę karty, która miałaby ciąg dla koloru i ciąg dla rangi. Wartość zero może wskazywać na kartę, która nie została „rozdana”. Po prostu próbuję znaleźć lepszy sposób na zrobienie tego.


title: Czy istnieje nazwa liczby wartości, które może przyjąć zmienna?

text: Na przykład bit lub wartość logiczna może mieć wartość 0 lub 1, więc liczba 2 jest z nim skojarzona. Podobnie dla bajtu, który ma 8 bitów, maksymalna liczba różnych przypisań wynosiłaby 2^8. Czy istnieje nazwa tego numeru? Kiedy przepuszczamy wszystko przez nasz system, który ma ECMAScript, Javę i MySQL, wtedy wartość logiczna nie ma tylko dwóch możliwych przypisań. Na przykład fałszywa wartość logiczna jest zapisywana jako 0, a wartość w ramce może mieć wartość null, więc wartość logiczna nagle może uzyskać wartość true, false, 0, 1, null lub nawet undefined lub `<missing>`. Myślę, że w testach może być problematyczne, aby zagwarantować, że wartości nie są niespójne. Na przykład wartość „boolean zablokowane” może stać się „null”, a następnie, gdy skrypt lub szablon układu oceni ją, zostanie ona oceniona jako „false” gdzieś, jeśli rzeczywista wartość to „null” i podobne problemy. Dlaczego więc nie zawsze twierdzimy, że wartość logiczna ma taką samą liczbę możliwych wartości (2 wartości) i podobnie dla innych typów? Istnieje termin matematyczny o nazwie „arność”, który jest czymś podobnym, ale nie do końca, a statystyka i teoria prawdopodobieństwa również mają pojęcie „przestrzeni zdarzeń”, które byłoby prawie dokładnie tym, o czym mówię. Na przykład przestrzenią zdarzeń dla wartości logicznych byłby zestaw `{0,1}`, który ma kardynalność 2 i ta kardynalność nie jest zachowywana w całym systemie, zwłaszcza gdy dane są przekazywane jako poligloty i/lub serializowane (json, jsonp, XML, yaml).


title: Konfigurowanie środowiska programistycznego

text: Jestem częścią organizacji, która formalizuje swoje procesy/możliwości tworzenia oprogramowania/itd. Chociaż organizacja nie jest tradycyjnie organizacją zajmującą się oprogramowaniem, chcą zrobić to dobrze i zapewnić programistom pracującym w organizacji (w tym mnie) solidny zestaw narzędzi do pracy. W szczególności mamy do czynienia z: kontrolą źródeł, oprogramowaniem do śledzenia błędów, narzędziami do dokumentacji (dla programistów - nie dla użytkowników końcowych) i ogólnie, oprogramowaniem do zarządzania projektami (ciągła integracja, śledzenie projektów, przegląd kodu, oprogramowanie naciskać). Oto niektóre z wymagań wysokiego poziomu: * Wolny jest lepszy. Chociaż rozważymy zakup narzędzi, społeczność FOSS ma tak duże poparcie dla narzędzi programistycznych, że najpierw chcę się tam zajrzeć. * Integracja między systemami. (Na przykład, oprogramowanie do śledzenia błędów powinno być w stanie połączyć się z powrotem do kontroli źródła.) * Łatwy do importu i eksportu z. Nie chcę się zamykać. * (Względnie) Łatwy do nauczenia. W tym momencie, oto, na co patrzę, jeśli chodzi o moje zalecenia: 1. Kontrola źródła — Mercurial lub Git \- Osobiście skłaniam się bardziej w stronę Mercurial w oparciu o moje badania i fakt, że Mercurial wydaje się być łatwiejszy do skonfigurowania w Nasze środowisko. 2. Śledzenie błędów — jestem zagubiony. Używałem Bugzilli w przeszłości, ale sprawia mi to wzdrygnięcie, gdy z niej korzystam. 3. Dokumentacja - MediaWiki, Screwturn Wiki, Atlassian (oczywiście to kosztuje, więc nie jest to idealne rozwiązanie) Szukam innych propozycji narzędzi produktywności/narzędzi programistycznych, których używałeś. Proszę pamiętać, że jesteśmy małą organizacją, więc nie chcę przesadzać, ale chcę dać programistom dobre narzędzia do użycia.


title: Zarządzanie zależnościami Maven między wieloma komponentami z wieloma zespołami wprowadzającymi zmiany

text: W sytuacji, gdy wiele zespołów wprowadza zmiany w niektórych projektach Mavena z zależnościami między nimi (w przeciwnym razie projekty niepowiązane, tj. brak super POM lub coś takiego), a każdy zespół pracuje w osobnej gałęzi roboczej nad wszystkimi tymi projektami i ponownie je scala do trunkingu tylko po ukończeniu i przetestowaniu narracji, jak należy radzić sobie z zależnościami między kompilacjami migawek, które tworzy każdy zespół? Zwróć uwagę, że każdy z zespołów może wprowadzać zmiany w dowolnym projekcie: pracują nad różnymi elementami funkcjonalności tego samego systemu, a projekty są bardziej jak różne warstwy. Przed podziałem na wiele zespołów artefakty były umieszczane w centralnym repozytorium Nexusa. Oczywiście byłoby możliwe założenie oddzielnych repozytoriów Nexusa dla każdego zespołu i dodatkowego dla bagażnika, ale mam nadzieję, że będzie lepszy sposób na poradzenie sobie z tym.


title: Montaż i programowanie

text: Niejako lubię programować w asemblerze. Wiem, że z reguły montaż jest specyficzny dla platformy, więc montaż „x” nie pomoże mi, jeśli będę musiał pracować z maszynami „y”. To powiedziawszy, jak powszechni są (przynajmniej kompetentni) programiści montażowi i jaki jest ich popyt?


title: Przewidywanie wyjścia rand() PHP

text: Czytałem w wielu źródłach, że wynik rand() PHP jest przewidywalny, ponieważ jest to PRNG, i w większości akceptuję to jako fakt, ponieważ widziałem to w tak wielu miejscach. Interesuje mnie dowód koncepcji: jak mam przewidywać dane wyjściowe funkcji rand()? Czytając ten artykuł rozumiem, że liczba losowa to liczba zwrócona z listy zaczynającej się od wskaźnika (ziarno) – ale nie potrafię sobie wyobrazić, jak to jest przewidywalne. Czy ktoś mógłby rozsądnie dowiedzieć się, jaki losowy # został wygenerowany przez rand() w danym momencie w ciągu kilku tysięcy prób? a nawet 10 000 domysłów? Jak? To się pojawia, ponieważ widziałem bibliotekę uwierzytelniania, która używa rand() do tworzenia tokena dla użytkowników, którzy zgubili hasła, i założyłem, że jest to potencjalna luka w zabezpieczeniach. Od tego czasu zastąpiłem tę metodę haszowaniem mieszanką `openssl_random_pseudo_bytes()`, oryginalnego haszowanego hasła i mikroczasu. Po wykonaniu tej czynności zdałem sobie sprawę, że gdybym był na zewnątrz zaglądając do środka, nie miałbym pojęcia, jak odgadnąć token, nawet wiedząc, że jest to md5 funkcji rand().


title: Czy programista może otrzymać zniżkę na produkty firmy Microsoft?

text: Jeśli miałbym się skupiać na platformie .NET i pracować na własny rachunek, to prawdopodobnie chciałbym mieć jakieś licencje Windows 7, Windows Server 2008, Visual Studio 2010 tylko na środowisko deweloperskie i do testów, a potem kilka licencji dla środowiska produkcyjnego (Windows Server 2008 Web) i dodawane do uaktualnień, gdy dostępne są nowe wersje. Skończy się to dość dużą sumą pieniędzy. Czy jest jakaś zniżka na pakiet, którą w takim przypadku mogę uzyskać od firmy Microsoft? A jaki jest wymóg, aby móc otrzymać tę zniżkę?


title: Porządki błędów w trakcie projektu

text: W mojej obecnej firmie, we wszystkich projektach oprogramowania, w których brałem udział, zazwyczaj jest faza pod koniec projektu, która pochłania sporo czasu i jest poświęcona dopracowywaniu nowych funkcji, aby były gotowe do uruchomienia. W książce Steve'a McConnella "Przewodnik przetrwania projektu oprogramowania" zaleca robienie tego po każdym ważnym kamieniu milowym, który zostanie ukończony w projekcie (i być może również w tym momencie). Powiedzmy, że nie chcemy wypuszczać na rynek po ukończeniu głównych kamieni milowych, ponieważ nasz produkt musi zostać uruchomiony w bardziej spójnym stanie. Czy ktoś z was miał pozytywne doświadczenia z poważnymi próbami czyszczenia błędów wykonywanymi kilka razy w trakcie trwania projektu, w przeciwieństwie do robienia tego przed uruchomieniem?


title: Dlaczego sformatowane formatowanie kodu nie jest bardziej powszechne?

text: Czytałem _Kod kompletny_ iw rozdziale o układzie i stylu przewidywał, że edytorzy kodu użyją jakiegoś bogatego formatowania tekstu. Oznacza to, że zamiast kodu wyglądającego jak ta Procedura ResolveCollisions { Wykonuje rozwiązywanie kolizji a posteriori poprzez algorytm partycjonowania przestrzennego } ( CurrentMap : SpriteContext, PotentialColliders: SpriteList ) var Collider : Sprite, Collidee : Sprite, Collision : SpriteCollision begin DoStuff(); koniec. może wyglądać mniej więcej tak: # Procedura `ResolveCollisions` _Wykonuje a posteriori rozwiązywanie kolizji poprzez algorytm partycjonowania przestrzennego_ **Parameters** * `CurrentMap : SpriteContext` * `PotentialColliders : SpriteList` **Zmienne lokalne** * `Collider : Sprite` * `Kolizja: Sprite` * `Kolizja: SpriteCollision` DoStuff(); * * * Widziałem kolorowanie i podświetlanie składni, a nawet kolorowanie nawiasów, ale nic, co by tak wyglądało w rzeczywistym kodzie. Zastanawiałem się, czy coś takiego rzeczywiście kiedykolwiek istniało, a może uznano, że nie przynosi to wystarczających korzyści, albo że jest to całkowicie zły pomysł. Czy ktoś z was widział wcześniej taki bogato sformatowany kod lub wie, czy pomysł był kiedykolwiek rozważany i ostatecznie odrzucony?


title: Jak odnieść sukces jako programista bez dyplomu CS

text: ### Zastrzeżenia (Proszę przeczytać przed przejściem do odpowiedzi): Widziałem wiele pytań podobnych do tego, które chciałbym zadać, więc oto kilka _podobnych_ pytań. IMHO Nie są ani do końca tym, o co proszę, ani nie są tak dokładne, jak mam nadzieję (nie mam zamiaru odrzucać odpowiedzi na poniższe pytania, ani nie dyskredytuję pytających, po prostu chcę być trochę dokładniej): > Czy dyplom CS może przynieść korzyści starszemu programiście? >> Jak ważne są certyfikaty dla programistów Java bez dyplomu BS? > > W przypadku braku dyplomu CS, jak mogę „uzupełnić luki”, że tak powiem? > > Znaczenie stopnia CS przy ubieganiu się o pracę rozwojową? ### Powiem jasno, nie pytam: * Jak nauczyć się programowania od podstaw (bez dyplomu z CS) * Jak reklamować się jako dobry programista (bez dyplomu z CS) * Jak dostać świetną, dobrze płatną pracę programisty (bez dyplomu z CS) ### Mały kontekst: Teraz, gdy mam już na uboczu zastrzeżenia, pozwól, że rozwinę moje pytanie, zaczynając od krótkiej historii mojego doświadczenia jako programista. Po pierwsze, miałem niesamowite szczęście. Dostałem kilka możliwości pracy (kilka ciężkich projektów PHP/MySQL i kilka aplikacji WP7 w XAML/C#), dzięki którym naprawdę nauczyłem się wszystkiego, co wiem o tworzeniu oprogramowania. Prawie wszystkie prace związane z tworzeniem oprogramowania, które miałem, były tymi, do których nie miałem odpowiednich kwalifikacji (i wyjaśniłem to moim pracodawcom, zanim mnie zatrudnili). Nie chcę przypisywać sobie zasług tam, gdzie nie jest to słuszne, ale powiedziałbym, że doskonała pokora obywa się bez skromności. W prawie każdej pracy programistycznej, jaką miałem, przekroczyłem oczekiwania mojego pracodawcy i okazałem się cennym atutem. Są oczywiście wyjątki1. Ale chodzi mi o to, że jestem dość inteligentny i mogłem nauczyć się tego, co powinienem wiedzieć, aby odnieść sukces w swojej pracy. Z każdą wykonywaną pracą byłem coraz bardziej rozciągnięty. Uczęszczam do kampusu Uniwersytetu Waszyngtońskiego w Seattle, a obecnie jestem na czwartym roku z dwoma latami przed ukończeniem studiów matematycznych. Podczas różnych prac, które wykonywałem (zobacz moje CV, jeśli chcesz tę listę) uczęszczałem również do szkoły jako student w pełnym wymiarze godzin. Myślę, że większość programistów zgodziłaby się z tym, studiując typowe kursy ogólnokształcące, w tym kursy programowania wprowadzające ABSOLUTNIE blednie w porównaniu z pisaniem prawdziwego kodu, budowaniem produktów real2, pracą z niesamowitymi ludźmi i pozytywnym wpływem na życie użytkowników3. Więc... w miarę upływu czasu... Spędziłem znacznie więcej czasu i energii na pracy, zamiast skupiać się na studiach. Czasami występowałem bardzo okropnie, ale w większości udawało mi się utrzymać na powierzchni z moimi ocenami. Jednak program informatyki na UW jest _bardzo_, _bardzo_, _bardzo_, _bardzo_ konkurencyjny. Nie było więc dla mnie zaskoczeniem, kiedy zostałem odrzucony przez program. Dwa razy. Jak na ironię, w tym samym półgodzinnym oknie, w którym otrzymałem zawsze uprzejme, aczkolwiek przygnębiające zawiadomienie o odrzuceniu za pośrednictwem poczty elektronicznej, otrzymałem telefon od Amazona, który zaproponował mi letni staż4 jako SDE. Kiedy rozglądam się po innych panach w moim wieku (21), którzy mają te same cele co ja w tworzeniu oprogramowania, czuję się całkiem dobrze z tym, gdzie jestem, czego się uczę, kim jestem i czego Mogę zrobić. Jest oczywiście dużo, dużo, dużo bardziej błyskotliwych 21-latków niż ja, nie chcę powiedzieć, że wyróżniam się w tłumie, po prostu czuję, że nie jestem beznadziejnie w tyle za postępami mojego przeciętnego rówieśnika . Czuję się pewnie, że mogę odnieść sukces w świecie oprogramowania. Co ważniejsze, czuję się pewnie w swoich zdolnościach i chęci dalszego rozwoju, uczenia się i bycia zawstydzająco pokornym, kiedy naprawdę tego potrzebuję. ### Dyplom z matematyki Zdałem sobie sprawę, że staram się uzyskać dyplom z matematyki wyłącznie w celu zdobycia dyplomu. Są tacy, którzy mówią, że powinienem zrezygnować i zacząć pracować teraz (tak jak miałem okazję), a są tacy, którzy twierdzą, że naprawdę powinienem skończyć studia. Postanowiłem kontynuować studia z zupełnie innych powodów, niż te, które zwykle pojawiają się w obu obozach, więc proszę nie zachęcaj mnie w ten czy inny sposób w tej sprawie. Rozważ problem „zamknięty” :) _*GŁĘBOKI ODDECH*_ ...przepraszam, że to dłużej niż się spodziewałem. ### Zasadniczo jest to moje pytanie: * Jak obiektywnie określić, jakie obszary studiów, wiedzę ogólną i inne umiejętności zdobyłbym dzięki dyplomowi CS, a których może mi teraz brakować? * Jak posortować te umiejętności według najważniejszych? * Jaki jest najlepszy sposób (w ciągu najbliższych dwóch lat) na uzupełnienie mojego wykształcenia, aby osiągnąć te atrybuty w taki sposób, aby dorównać, a nawet przewyższyć poziom CS undergrad z najwyższej uczelni? **Oto kroki, które już podejmuję:** 1. Zapytaj społeczność programistów (ten post) 2. Prowadź mentoring z doświadczonymi programistami, którzy mają podobną do mnie ścieżkę kariery 3. Zdefiniuj krótko- i długoterminowe cele „naukowe” i kolejne sylabusy określające tematykę 4. Kontynuuj pisanie kodu i pracuj nad projektami, które mnie pasjonują Jeśli dotarłeś tak daleko, zasługujesz na ciasteczko :) Doceniam, że ze mną jesteś. Tak więc... społeczność programistów, doświadczeni programiści, koledzy, którzy są na tym samym wózku co ja, jaką radę mielibyście? Również... proszę, pamiętajcie o moich zastrzeżeniach na początku tego postu, dotyczących tego, o co _NIE_ proszę. ### Aktualizacja: Zdaję sobie sprawę, że nie podałem bardzo konkretnych parametrów dla tego, co uważam za udaną „odpowiedź” na moje pytania. Myślę, że pytanie jest bardzo niejasne i może uzasadniać szereg „poprawnych” odpowiedzi. Po rozsądnym czasie wybiorę odpowiedź, która pasuje do następujących atrybutów: * Wyjaśnia _dlaczego_ kryjącą się za ich odpowiedzią * Potrafię mówić na pewnym poziomie doświadczenia (czy to zatrudnianie/interakcja z kimś, kto ma/jest na moim miejscu) * Jest zwięzły, ale dokładny, podaje ogólne zasady, najlepiej w połączeniu z konkretnymi przykładami * Na koniec, biorąc pod uwagę długość, której wymagałoby dopasowanie powyższego, proszę, aby była to dobra, dobrze przekazana i przyjemna do czytania odpowiedź. Mam nadzieję, że inni, którzy mogą być tym zainteresowani w przyszłości, będą zabawiani i nauczeni odpowiedzią. Jest więc kilka parametrów dla "poprawności". Myślę, że są bardzo wysokie, ale zaprojektowałem je jako rodzaj zarysu tego, jak wyobrażam sobie „najlepszą” odpowiedź. Oczywiście, mając wystarczająco dużo czasu, wybiorę najbardziej pasującą odpowiedź jako „odpowiedź”. * * * (1) - pracowałem nad poprzednią wersją tej strony i choć nie prowadziliśmy na ten temat jednoznacznej rozmowy, czułem, że nie jestem w stanie w ogóle dobrze sobie radzić (o czym może świadczyć fakt że od tego czasu całkowicie zmienili swoją stronę internetową) (2) - Po pierwsze, tak, to prawdziwy produkt (mimo że piszę ten post w Chrome...) i kopie tyłek. Po drugie, byłem testowym stażystą w szkole średniej, napisałem kod koncepcyjny dla niektórych nowych funkcji dla IE8... więc to było jakiś czas temu. (3) - W chwili pisania tego tekstu jestem programistą, który napisał tę aplikację, nie odpowiadam już za jej kod źródłowy (4) - Mój staż rozpocznie się w czerwcu 2012 i będę pracował w sieci Zespół sklepu.


title: Wyzwalacze SQL oraz kiedy i kiedy ich nie używać.

text: Kiedy pierwotnie uczyłem się o SQL, zawsze mówiono mi, że używaj wyzwalaczy tylko wtedy, gdy naprawdę potrzebujesz, i zamiast tego wybierz procedury składowane, jeśli to możliwe. Niestety w tamtym czasie (kilka dobrych lat temu) nie byłem tak ciekawy i przejmowałem się podstawami jak teraz, więc nigdy nie pytałem dlaczego. Jaka jest w tym opinia społeczności? Czy to tylko czyjeś osobiste preferencje, czy też należy unikać wyzwalaczy (podobnie jak kursorów), chyba że istnieje ku temu dobry powód.


title: Jaki jest wkład techniczny branży pornograficznej?

text: Niedawno przeczytałem, że przemysł pornograficzny przyczynił się do innowacji technicznych. O czym oni do cholery mówią? Czy te firmy mają budżety na B+R?


title: Czy właściwe jest umieszczanie pozytywnych komentarzy w przeglądach kodu, czy jest to wyłącznie konstruktywna krytyka?

text: Ostatnio robię dużo recenzji kodu i nie jestem pewien pozytywnych i negatywnych efektów oraz profesjonalizmu umieszczania pozytywnych i/lub zabawnych komentarzy w recenzjach kodu. Używamy Github jako naszej platformy do przeglądu kodu w moim zespole, więc komentarze są widoczne dla każdego. Generalnie staram się korzystać z tej platformy, aby cały proces od początku do końca był widoczny i historyczny.


title: Dodaj zachowanie bez zmiany istniejącej klasy

text: Mam klasę `Container`, która reprezentuje wrapper wokół `std::list`. Ta klasa zawiera następujące metody publiczne: * `void add(Shape *item)` * `void next()` * `void setBegin()` * `Shape* curr()` i chronione zmienne * `std::list <Shape *> _container` * `std::list <Shape*>::iterator _iter` Teraz muszę dodać sortowanie kontenera bez zmiany istniejącego kodu klasy. Jakiego wzoru powinienem użyć? Myślę, że Decorator jest w tym przypadku najodpowiedniejszym wzorem. Czy powinienem przeprojektować klasę Container?


title: W iOS oś y zaczyna się od góry i rośnie w dół. To przeciwieństwo OSX. Jakie jest uzasadnienie i przewaga techniczna tej zmiany?

text: W systemie iOS współrzędna (0, 0) oznacza lewy górny róg. W OSX jest to lewy dolny róg. Jakie jest uzasadnienie lub techniczna zaleta tego układu współrzędnych firmy Apple?


title: Jak to możliwe, że oprogramowanie do rozpoznawania twarzy może działać, ale reCAPTCHA nie może zostać rozwiązany przez komputer?

text: Jeśli można zbudować oprogramowanie rozpoznające twarze i dopasowujące te twarze do imion, to jak działa CAPTCHA? Rozpoznawanie liter wydaje się o wiele łatwiejsze niż dopasowywanie twarzy.


title: Oddzielenie definicji obiektów (katalogu) od instancji (obiektów fizycznych)

text: Zastanawiam się, czy istnieje wzorzec projektowy na taki problem: Powiedzmy, że budujemy sklep internetowy dla producenta drzwi i okien, w którym klient ma katalog (listę) produktów, z których może wybrać i dostosować je wcześniej Składając zamówienie. Każdy produkt ma określone właściwości, takie jak nazwa, cena, opis. Oczywiście klient nie może zmienić żadnej z tych właściwości. Ale jest miejsce na dostosowanie produktu. Kiedy wybiera okno, może wybrać jego kolor, wymiary, być może kolor szkła i dobrać dodatkowe funkcje. Wybierając drzwi, może wybrać kolor, wymiar, ale też rodzaj zamka. Pierwszy pomysł, który przyszedł mi do głowy to: 1. Stworzenie klas definicji produktów (WindowDefintion, DoorsDefinition), które zawierają informacje o nazwie, cenie, opisie. Są one wymienione w katalogu 2. Utwórz klasy instancji produktu (Okno, Drzwi), które zawierają odniesienia do produktu, ale także dodają pola z możliwością dostosowania, które są specyficzne dla danej instancji. Wady są być może głupie, ponieważ chodzi głównie o tworzenie klasy definicji dla każdej klasy instancji, ale wiąże się to również z podwojoną liczbą tabel bazy danych i repozytoriów. Właśnie zastanawiałem się, czy jest jakieś inne rozwiązanie? Ten przykład nie jest prawdą. Używam go, aby ułatwić zrozumienie problemu. W tym przypadku produkty nie mają dobrego wspólnego uogólnienia, jakie w tym przypadku nadałby Produkt (dobre, że posiadają właściwości nazwy, opisu i ceny).


title: Jak radzić sobie z koligacjami?

text: Załóżmy, że mamy klasę abstrakcyjną mającą kilka konkretnych klas, których interfejsy publikują informacje w kilku równoważnych formach, z tą różnicą, że każda klasa ma preferowaną formę, z którą można zapoznać się bez żadnych kosztów, podczas gdy konsultowanie innych może wymagać czasochłonnych obliczeń. Jak zaimplementować strategię doboru algorytmu opartego na tym „powinowactwie” jednej klasy do jednej formy informacyjnej? ## Przykład Oryginalny przykład jest skomplikowanym przykładem bardzo wyspecjalizowanej dziedziny, więc postaram się znaleźć przykład, który będzie znany większości programistów. Załóżmy, że mamy abstrakcyjną klasę reprezentującą urządzenia I/O, która ma dwie konkretne podklasy, jedną dla urządzeń opartych na znakach i jedną dla urządzeń opartych na blokach. Każda klasa zapewnia dostęp oparty na blokach i dostęp oparty na cahr, ale każda klasa ma powinowactwo do jednej z tych metod: dostęp oparty na blokach jest preferowany dla urządzeń opartych na blokach itp. Powiedzmy, że chcemy zaimplementować procedurę kopiowania, więc że jeśli urządzenie źródłowe i docelowe są oparte na blokach, kopiowanie jest wykonywane blok po bloku, we wszystkich innych przypadkach preferowane jest podejście znak po znaku. ## Dyskusja Załóżmy, że mamy teraz nie tylko urządzenia I/O, ale kilka klas abstrakcyjnych oferujących dostęp do kilku logicznie równoważnych metod, których implementacja różni się znacznie wydajnością, przez co wykazuje większe powinowactwo do jednej metody niż do innych. Chcemy zaimplementować strategię pracującą na agregacie takich klas i wybierający algorytm uwzględniający powinowactwa tych klas. Ze względu na kombinatoryczną złożoność, jaką przynosi agregat, wzorzec odwiedzających nie wydaje się tu przydatny. ## Pytanie W jaki sposób każda konkretna klasa może ujawnić swoje powinowactwo do jednej lub drugiej metody dostępu w sposób, który jest użyteczny dla komponentu strategii wybierającego algorytm dopasowany do tych powinowactw? Kombinatoryka daje dużą liczbę kombinacji powinowactw, a strategia wymaga tylko rozważenia kilku „szczęśliwych przypadków” i użycia ogólnego algorytmu do obsługi ogromnej większości kombinacji.


title: jeśli jeszcze nawiasy w tej samej linii, najlepszy styl komentarza?

text: Robiłem tak: // Jeśli kot jest czarny if ( $catColor == 'black' ) { ... } // W przeciwnym razie zjedz taco else { ... } Ale ostatnio zacząłem podążać w kierunku ten styl instrukcji warunkowych: if (coś) {...} else {...} Ale teraz, gdzie najlepiej umieścić komentarz do mojego bloku else? if ( coś ) { ... // W przeciwnym razie... } else { ... } To wygląda dziwnie, ponieważ znajduje się w bloku if. Jedyną alternatywą jest if ( coś ) { ... } else { // Inaczej ... } Ale to wygląda/czuje dziwnie. Jakie jest najlepsze podejście do komentarzy w tym stylu bloków warunkowych?


title: Kiedy należy unieważnić pamięć podręczną poświadczeń użytkownika?

text: Tworzymy aplikację kliencką dla systemu Windows, która lokalnie buforuje poświadczenia użytkownika w celu połączenia się z naszą aplikacją serwerową za pomocą **Windows Credential Management API**. **Nasza logika buforowania działa w następujący sposób:** 1. Użytkownik otwiera aplikację i **wybiera serwer** w interfejsie użytkownika. Następnie wysyła zapytanie do serwera o wymagania dotyczące uwierzytelniania. (Jeśli nie są potrzebne żadne dane uwierzytelniające, po prostu łączymy się bez uwierzytelnienia.) 2. Aplikacja **czyta pamięć podręczną**, aby sprawdzić, czy dane uwierzytelniające są przechowywane w pamięci podręcznej. 3. Jeśli istnieją **istniejące poświadczenia w pamięci podręcznej** , są one używane. W przeciwnym razie, Windows API jest używany do wywołania **okna dialogowego**. 4. Aplikacja próbuje **uwierzytelnić się z serwerem** przy użyciu poświadczeń. 5. Jeśli połączenie się powiedzie, użyte poświadczenia są **buforowane przez cały czas trwania sesji Windows** (jest to funkcja Windows API). W przeciwnym razie **czyścimy pamięć podręczną** i wracamy do kroku 3. **Pytanie brzmi: czy istnieją inne prawidłowe sytuacje, w których pamięć podręczna danych logowania powinna zostać wyczyszczona?** Innymi słowy, co uważasz za najlepsze praktyki w zakresie jak zarządzać okresem istnienia i logiką unieważniania dla tych potencjalnie poufnych informacji? _(Ponieważ prawdopodobnie będę o to pytany, informacje, które przechowujemy za pomocą tego interfejsu API, są szyfrowane przy użyciu naszej własnej logiki szyfrowania i przechowywane w pamięci przez SecureString. Bez wątpienia istnieją potencjalne luki w tym podejściu, ale to jest do innej dyskusji.)_


title: Wywiady z deweloperami, które nie powiodły się

text: Jestem programistą Java, głównie robię rzeczy związane ze Springiem. Rozumiem wzorce, OOP, wtrysk fasoli, wielowątkowość i wszystko, co się z tym wiąże. Nie czuję się złym programistą, robię swoje rzeczy. Załóżmy więc, że idę na rozmowę z deweloperami. Nie powinno być problemu ze znalezieniem pracy, prawda. Nie. Idę na rozmowę kwalifikacyjną i zazwyczaj przechodzę na rozmowę kwalifikacyjną, w której pytają o moje marzenia, pensję i wszystkie te osobowości. Potem zadają mi zadanie techniczne, coś do zaprogramowania, jakieś podchwytliwe pytanie, test codility w ograniczonym czasie. Nie udaje mi się. Otrzymuję wyniki poniżej średniej. Nie rozumiem dlaczego? Czy jestem taki zły? Wkurza mnie nawet to, że muszę się wykazać i zawieść. Generalnie programuję od czterech lat. To nie tak, że piszę jakieś bzdury, które ledwo jakoś działają; jest uporządkowany. Dostałem obecną pracę, pokazując coś, co zrobiłem w wolnym czasie i zrobiłem wrażenie. Nie mogę dostać pracy programisty, przechodząc przez te wszystkie trudne obręcze. Również faktyczna praca nie jest taka trudna, wszystkie algorytmy sortowania, kryptografia i nieco trudne problemy są zwykle zamknięte. Dlaczego ankieterzy proszą Cię o zrobienie czegoś, co robiłeś na uniwersytecie wiele lat temu? Czy to normalne? Czy jest coś, co mogę zrobić, aby się poprawić? Jak dostanę pracę?


title: Jak rozpowszechniać aplikację internetową (hostowaną przez klienta)

text: Tworzymy aplikację internetową, która wizualizuje dane finansowe. Mamy pierwszego klienta, ale mamy nadzieję, że dostaniemy więcej. Warunki są następujące: 1. klienci płacą opłatę konfiguracyjną, aby dostosować aplikację do swoich potrzeb 2. klienci płacą miesięczną opłatę za licencję na aplikację 3. klienci instalują i hostują aplikację na własnych serwerach (niektóre szczegóły: serwer wymaga tylko prostej instalacji node.js. Nie jest wymagana baza danych. Wszystko jest łatwo instalowane przez npm. Wszystkie moduły używały open source.) Nasz kod źródłowy nie jest publiczny, ale nie musi być zaciemniany ani ukrywany od klienta. Moje pytania: 1. Jak powinniśmy dystrybuować kod źródłowy do klientów? GitHub wydaje się logiczny, z założeniem, że klienci po prostu używają git do wdrażania i aktualizacji. Ale klient powinien mieć dostęp tylko do kodu źródłowego z dostosowanymi dla niego dostosowaniami – nie dla innych klientów. Jakie jest dobre podejście do konfigurowania repozytoriów do dystrybucji tych różnych wersji? Gdzie oni mieszkają w stosunku do branży deweloperskiej? 2. Jak podchodzimy do licencjonowania kodu? To wielkie pytanie. Mam nadzieję, że nie za duży. Mile widziane są częściowe odpowiedzi lub linki do artykułów. Dziękuję...