title: iOS: używanie Jenkinsa do nocnych kompilacji wewnętrznych (TestFlight) oraz częste kompilacje klientów

text: Jestem programistą iOS pracującym w małej agencji. Obecnie jestem w kilku mniejszych projektach, w których jestem jedynym programistą. Niedawno nabyliśmy serwer Jenkins, ale każdy projekt jest pozostawiony sam sobie, jak go używać. Chciałbym go używać do tworzenia i dystrybucji kompilacji. Moim ideałem byłoby: 1. Każde zatwierdzenie jest budowane jako pojedynczy IPA, który jest umieszczony w lokalizacji dostępnej przez HTTP. (Musi tylko zachować najnowszą, w przeciwnym razie dysk się zapełni — niektóre z naszych aplikacji mają 500 MB lub więcej). koniec numeru wersji i wysyła go do naszego wewnętrznego zespołu TestFlight. 3. Po ręcznym wyświetleniu monitu buduje najnowsze zatwierdzenie, nadaje mu ręcznie określony numer wersji, podpisuje go przy użyciu profilu aprowizacji klienta i wysyła do TestFlight. Jestem całkiem nowy w Jenkinsie. Deweloper, który skonfigurował serwer, uruchamia go w jednym z naszych projektów, więc wiem, że ma zainstalowane odpowiednie elementy do tworzenia kompilacji Xcode. Uważam, że używa go tylko do uruchamiania testów jednostkowych, a nie do podpisywania kodu, tworzenia IPA lub rzeczy TestFlight. Więc moje pytania: * Wymieniłem trzy różne rodzaje budowy. Jak Jenkins sobie z tym radzi? Widzę, że w konfiguracji projektu Jenkins jest sekcja „wyzwalacze kompilacji”, ale wydaje się, że nie wspomina się o różnych typach kompilacji. Czy powinienem po prostu skonfigurować wiele projektów Jenkins o nazwach „App X (ciągły)”, „App X (nocny)” i „App X (klient)”? * Jak określić profil aprowizacji za pośrednictwem Jenkins? Jeśli nie ma sposobu, myślę, że mógłbym zrobić różne konfiguracje w projekcie Xcode… * Czy ktoś inny używał Jenkinsa do faktycznego wydania (tj. Zbudowania i wypchnięcia do TestFlight) kompilacji beta swoich aplikacji? Czy to dobry pomysł? A może powinienem kontynuować robienie tego ręcznie?


title: Wspieranie i testowanie wielu wersji biblioteki oprogramowania w projekcie Maven

text: Moja firma ma jednocześnie kilka wersji podstawowego oprogramowania, z którego korzystają nasi klienci. Moim zadaniem jest pisanie oprogramowania Java na zamówienie dla klientów w oparciu o wersję podstawowego oprogramowania, które akurat używają. Stworzyłem wspólną bibliotekę Java, która wykonuje wiele zadań, których regularnie wymagam w normalnym projekcie. To jest projekt Maven, który wdrażam w naszej lokalnej Artifactory i w razie potrzeby rozwijam w innych projektach Maven. Obecnie ta biblioteka zawiera v1.3 naszego podstawowego oprogramowania, na przykład: <dependency> <groupId>com.foo</groupId> <artifactId>oprogramowanie podstawowe</artifactId> <wersja>1.3</wersja> </dependency> W rezultacie jest to jedyna wersja, co do której mam całkowitą pewność, że jest kompatybilna ze względu na sukces testów jednostkowych. **Jak najlepiej zautomatyzować testowanie z innymi wersjami podstawowego oprogramowania, aby zapewnić kompatybilność?** * * * Jedną z możliwości jest utworzenie serii projektów Maven, które zawierają moją bibliotekę i zastępują podstawową wersję oprogramowania: <!-- Zastąp wersję podstawową --> <dependency> <groupId>com.foo</groupId> <artifactId>oprogramowanie podstawowe</artifactId> <wersja>1.2</version> </dependency> <!-- Dołącz współdzieloną bibliotekę: - -> <dependency> <groupId>com.foo</groupId> <artifactId>common-lib</artifactId> <version>1.0</version> </dependency> Mogę wtedy wykonać testy jednostkowe z mojego głównego projektu, aby zapewnić wszystkie mijają (muszę to rozgryźć). Zaletą takiego podejścia jest to, że mogę włączyć te dodatkowe projekty Maven do mojego serwera ciągłej integracji i otrzymywać powiadomienia, gdy zaewidencjonowanie naruszy zgodność z inną podstawową wersją oprogramowania. Czy ktoś może zaproponować lepszą alternatywę?


title: Java Web Frameworks (JSF vs Wicket) Pakiety komponentów innych firm w Wicket?

text: Prezentacja, do której link znajduje się w odpowiedzi, przedstawia porównanie kilku frameworków do tworzenia stron internetowych. To było dobre porównanie, ale spowodowało, że trochę się zmartwiłem z powodu stosu technologii, który od jakiegoś czasu forsuję w mojej obecnej firmie. Chociaż wydawało się, że autor był stronniczy w stosunku do RoR, zwrócił uwagę na kilka głównych problemów związanych z JSF, z których korzystam teraz i osobiście nie mam żadnych znaczących problemów. Nienawidzę JSF wydaje się modne, a ja chciałbym przyjrzeć się czemuś innemu, jak Wicket. Problem polega na tym, że bogate biblioteki komponentów innych firm, takie jak Primefaces, uzależniły mnie od niezwykłej wygody wrzucania gotowych komponentów internetowych na stronę z prostymi znacznikami zgodnymi z XHTML. Struktury takie jak Wicket są świetne, ponieważ łączą stronę z Widokiem, a Spring jest to potężna kombinacja, ale nie mogę przestać się zastanawiać, ile czasu zajęłoby mi wdrożenie w pełni funkcjonalnego komponentu Primefaces Data Table w frameworku takim jak Furtka? Oczywiście JSF jest frameworkiem opartym na komponentach, takim jak Tapestry, ale czy Wicket ma odpowiedź na szybkie tworzenie stron internetowych opartych na komponentach, takie jak JSF+Primefaces? Co więcej, zdaję sobie sprawę z głównych wad JSF, z których jedną jest poziom wysiłku i frustracji potrzebne do opracowania komponentu, ale ponieważ pakiety komponentów w JSF stają się bardziej stabilne i w pełni funkcjonalne, jest to poważny problem dla stosunkowo prostych aplikacje internetowe z luźnymi specyfikacjami otwartego interfejsu użytkownika? Jeśli wizualnie nie musi wyglądać dokładnie tak, jak specyfikacja, po co opracowywać niestandardowe komponenty? Wiem, że istnieje wiele nienawiści do JSF… samo wspomnienie o konferencji deweloperów powoduje, że ludzie zaczynają atakować z powodu tak wielu niepowodzeń. Sieć jest zaśmiecona blogami JSF Sucks, ale zrobiłem z nimi całkiem fajne rzeczy. Jakieś przemyślenia na ten temat?


title: Jakie jest dobre narzędzie bazy wiedzy wsparcia?

text: Szukałem narzędzia, które pomoże mojemu zespołowi uporządkować wiedzę do rozwiązywania powtarzających się spraw wsparcia. Kontekst: nasz zespół rozwija i wspiera ogromne aplikacje (wiele różnych ekranów i procesów przepływu pracy. Mamy już dobre narzędzie do zarządzania naszą dokumentacją, ale borykamy się z przypadkami pomocy technicznej. Działania wsparcia obejmują często sporo ręcznych kroków, aby napraw rzeczy, a wiedza na temat tych działań jest bardziej „przekazem ustnym" niż nowoczesne narzędzia. Potrzebujemy wydajnego sposobu przechowywania ich w bazie wiedzy, aby móc pobrać podobne przypadki na podstawie wzorców (ścieżka stosu, komunikat o błędzie, komponent nazwę, etap przepływu pracy, ...) i uszeregowane według podobieństwa. Nasze wyszukiwanie wiki nie jest zbyt wydajne, jeśli chodzi o tego rodzaju wyszukiwanie, a członkowie zespołu nie chcą „marnować” czasu na pisanie raportu, który nigdy nie zostanie znaleziono... Czy znasz wydajne narzędzie bazy wiedzy dla tego rodzaju przypadków użycia?


title: Zaczynając od web dev z php

text: Obecnie pracuję z Java/C++. Interesuję się tworzeniem stron internetowych i planuję zmienić swój strumień. Słyszałem, że PHP to dobra platforma na start, a także nie wymaga tak dużej wiedzy w zakresie technologii takich jak JSP/Servlets czy frameworków typu springs/struts/hibernate. Mam też podstawowe pomysły na temat HTML i JavaScript. Przejrzałem poprzednie posty w SO i znalazłem również odpowiednie zasoby: * http://net.tutsplus.com/tutorials/php/the-best-way-to-learn-php/ * http://www .webhostingtalk.com/archive/index.php/t-1028265.html * http://www.killerphp.com/ * http://phpforms.net/tutorial/tutorial.html * http://www.php5- tutorial.com/ etc. Teraz moje pytanie brzmi: słyszałem o frameworkach PHP takich jak CodeIgniter, Zend Frameworkd i Yii. 1. Czy nauka PHP i MySql nie uświadamia nam niejawnie tych frameworków? 2. Czy dokonuję dobrego wyboru w wypowiedziach w PHP? 3. Czy dobrym pomysłem jest zmiana strumieni?


title: Porównanie IDE do programowania w C++ i C w systemie Linux: KDevelop, Eclipse, NetBeans, CodeBlocks i Anjuta

text: Chciałbym zwrócić uwagę na twoje doświadczenia z pełnowymiarowymi środowiskami IDE w systemie Linux. Osobiście pracuję głównie z `vim`, jednak inni programiści chcieliby zobaczyć prawdziwe IDE. Chciałbym więc usłyszeć Twoją osobistą opinię na temat różnych IDE i porównanie ich w następującym kontekście: * C++ i może trochę programowania w C (nie Java, Python i inne rzeczy) * Programowanie po stronie serwera (nie ma potrzeby tworzenia GUI) * Praca na Linuksie, a nie "wieloplatformowy" rozwój. Opinia potrzebna do rozważenia: 1. Jaka jest stabilność? Jeśli IDE się zawiesza, nie potrzebuję go. 2. Wygodny w użyciu. 3. Potężny do debugowania. 4. Integracja z różnymi systemami budowania 5. Skalowalność nad dużymi projektami (projekty setek tysięcy linijek kodu) Kiedyś pracowałem z KDevelop i było to bardzo fajne IDE i wydaje się, że KDevelop 4 to ogromny postęp. Wydaje się również, że wiele osób woli korzystać z Netbeans i Eclipse.


title: Ochrona niewtajemniczonych (deweloperów) przed lekami generycznymi

text: Czy dopuszczalne jest posiadanie fikcyjnego parametru ogólnego na liście parametrów w celu zaoszczędzenia konsumentów metody przed koniecznością określania argumentów typu? Na przykład - public T Generate<T>(int paramForInstance) gdzie T : MyClass { return MyClass.SomeFactoryMethod<T>(paramForInstance); } //kod wywołujący musi określić typ MyDerivedClass instance = Generate<MyDerivedClass>(5); public T Generuj<T>(int paramForInstance, T dummy) gdzie T : MyClass { return MyClass.SomeFactoryMethod<T>(paramForInstance); } //Kod wywołujący musi dostarczyć „próbkę”, aby umożliwić wnioskowanie o typie MyDerivedClass instance = null; instancja = Generuj(5,instancja); Założenie jest takie, że jeśli ~~junior~~ inni deweloperzy w zespole nie muszą myśleć o generykach, są mniej skłonni do kopnięcia. ## Trochę tła (możesz to pominąć) Kilka tygodni temu pewien typ programisty zarządzającego w moim zespole przestraszył się, gdy zobaczył kod (mój kod), który wyglądał tak: //metody konwersji, używające generycznych prywatnych statycznych wyników TResult ? IfNotDangerous<TResult> (SomeType firstThing, string name, Func<object, TResult?> Conversion) gdzie TResult : struct { return IfNotDangerous(firstThing, name, (any, dummy) => conversion(any), (TResult?)null) ; } private static TResult IfNotDangerous<TResult> (SomeType firstThing, string name, Func<object, TResult, TResult> conversion, TResult defaultValue) { if (firstThing == null) return defaultValue; if (!firstThing.Contains(name)) return defaultValue; if (firstThing[name] == DangerousValue) return defaultValue; zwróć konwersję(pierwszaRzecz[nazwa], wartość domyślna); } Jego skarga brzmiała: „Dlaczego używasz struktury?! To takie zasobożerne! I co oznacza „gdzie”? wszystko!" Po przezwyciężeniu użalania się nad sobą znalazłem sposób, który nie używał generyków do tej konkretnej metody. Ustępstwo zostało osiągnięte. Ale jeśli to możliwe, chciałbym uniknąć kłopotów w przyszłości. **EDYTUJ** Doceniam wszelkie zachęty, ale pytanie nie brzmiało: „czy mam szukać pracy gdzie indziej?” - było "czy to jest użyteczne obejście?"


title: Czy programiści skłaniają się ku porządkowi czy chaosowi?

text: Wszyscy spotkaliśmy oba rodzaje ludzi, które generalnie można podzielić na kategorie według statusu ich biurek: ci, którzy mają czyste, niezaśmiecone biurko; i tych, których biurko nie wygląda na trafione pociskiem bombowym. Ale jacy są programiści? Czy programowanie kieruje się: 1. porządkiem _lub_ chaosem, ale nie obydwoma, 2. kombinacją obu, 3. czy nie ma to żadnego wpływu?


title: Czy w c/c++ zmienne o zakresie bloku są ułożone w stos tylko wtedy, gdy blok jest wykonywany?

text: Załóżmy, że: void func() { ... if( blah ) { int x; } ... } Czy miejsce na `x` jest zarezerwowane na stosie natychmiast po wprowadzeniu `func`, czy tylko wtedy, gdy blok jest faktycznie wykonywany? A może to wybór kompilatora? Czy C i C++ zachowują się w tym przypadku tak samo?


title: Jaka jest dobra metoda oceny lekkiej architektury?

text: Jestem zaznajomiony z metodami oceny architektury, takimi jak techniczna metoda analizy kompromisów w architekturze (ATAM) i bardziej zorientowana na biznes metoda analizy kosztów i korzyści (CBAM). Jednak metody te mają dość dużą skalę: zalecają kilka sesji burzy mózgów, prezentacje, opracowanie wielu scenariuszy opisujących kompromisy itp. Chociaż są przydatne w przypadku projektów o określonej wielkości, są zbyt duże dla projektów wewnętrznych lub aplikacji komputerowych, które są zwykle opracowane przez garstkę programistów (lub mniej), które mimo że są małe, mają dość strome ograniczenia jakościowe (wydajność, skalowalność, adaptacyjność). Typowa praktyka, którą stosowałem w przeszłości, polega na tym, że jeden programista (lub architekt, jeśli zespół go posiada), aby wymyślił ogólną architekturę aplikacji, a następnie omówił ją na tablicy z resztą zespołu, zwykle przy użyciu notacja pseudo-UML, która jest łatwa do narysowania i zrozumienia. Zwykle prowadzi to do sprzężenia zwrotnego i kilku iteracji architektury. Ale wydaje się to być trochę zbyt nieformalne, powodując wszelkiego rodzaju założenia, które później mogą okazać się błędnymi decyzjami. Metody takie jak ATAM zazwyczaj zmuszają wszystkich interesariuszy do głębokiego zastanowienia się nad architekturą, co prowadzi do dyskusji, aż wszyscy przynajmniej zgodzą się, czym ta architektura dokładnie _jest_. Czy ktoś ma doświadczenie w przeprowadzaniu lekkiej oceny architektury z góry? Jeśli tak, jakie są dobre praktyki?


Czy można stworzyć funkcjonalny język oparty na opkodzie PHP? Podobne do Scala/bytecode lub F#/CIL Czy ktoś już to zrobił?


title: Język programowania „kolumnowy”

text: Istnieją bazy danych zorientowane kolumnowo, takie jak HBase lub Teradata. Moje pytanie brzmi, czy istnieją implementacje języka programowania, które przechowują obiekty/struktury w podobnym formacie, gdy są przechowywane w kolekcji. (Aby poprawić lokalizację pamięci podręcznej, być może w niektórych przypadkach zmniejszyć zużycie pamięci.) (Wyszukiwanie nie ujawniło mi tego rodzaju języków, ale prawdopodobnie próbowałem niewłaściwych słów kluczowych.) Mam na myśli następujące (w składni Scala): case class Data(a: Int, b: Array[Byte]) var someData: Array[Data] = new Array(Data(2, new Array[Byte](2)), Data(3, new Array[Byte](3) ) var someData(1).b(1) = 1.toByte Może być reprezentowane w następujący sposób: Tablica dla części `a`: --- |2| --- |3| --- Tablica dla części `b ` części: --------------- ----- |byteArrayRef0|------> |0|0|----------- --- ----- ------- |byteArrayRef1|-----------------> |0|1|0|------ -------- ------- Przekazywanie obiektów wymagałoby więcej miejsca na stosie z tą strukturą, na przykład do przekazania jedynego drugiego elementu z `someData` wymagałoby to przekazania referencji do tablicy (dla „a” i d części „b” i indeks „1”. Zapewne jest to jego główna wada, ale domyślam się, że mogą być sprytne rozwiązania, inaczej nie byłby to duży problem. (Tablice powinny być wewnętrznymi szczegółami implementacji, niewidocznymi, chyba że kontener dla `someData` jest niezmienny. Prawdopodobnie tablice nie są idealne dla tego rodzaju prymitywów danych, ale implementacja ArrayList byłaby lepsza.) **Edytuj:** To Pytanie nie dotyczy tego, czy to dobry/zły pomysł, czy też, która implementacja jest lepsza. Tu chodzi tylko o istnienie - a może też zapowiedziane plany, artykuły, jeśli takowe istnieją. (Obecnie jestem dość zajęty, więc nie mogę jeszcze sprawdzić sugestii, ale sprawdzę je w weekend.) Jeśli moje pytanie nie jest jasne, postaram się je przeformułować.


title: Jak zorganizować zależności projektu

text: Mam projekt zbudowany w Gradle, który zawiera biblioteki, z których można swobodnie korzystać poza głównym projektem, na przykład: ![Struktura projektu](http://i.stack.imgur.com/KwjNy.png) Foldery z kwadrat w prawym dolnym rogu to moduły projektu. Chcę otworzyć ten projekt (używam głównie Git i GitHub do takich zadań), ale nie mam pojęcia, jak to zorganizować. Czy powinienem tworzyć osobne repozytoria dla każdej biblioteki (a jeśli tak, to jak mogę je połączyć z głównym repozytorium?), czy powinienem umieścić to wszystko w jednym repozytorium (chyba to zła praktyka)? Głównym kryterium jest to, że po uruchomieniu `git clone repo_url` należy odtworzyć strukturę projektu jeden do jednego, aby nadal można było ją zbudować za pomocą `./gradlew build`.


title: Dlaczego systemy kontroli źródła nadal są w większości wspierane plikami?

text: Wydaje się, że coraz więcej systemów kontroli źródeł nadal wykorzystuje pliki jako sposób przechowywania danych o wersji. Vault i TFS używają Sql Server jako magazynu danych, co moim zdaniem byłoby lepsze dla spójności danych, a także szybkości. Dlaczego więc SVN, wierzę, że GIT, CVS itp. nadal używają systemu plików jako zasadniczo bazy danych (zadaję to pytanie, ponieważ nasz serwer SVN po prostu uszkodził się podczas normalnego zatwierdzenia) zamiast używać rzeczywistego oprogramowania bazy danych ( MSSQL, Oracle, Postgre itp.)? EDYCJA: Myślę, że innym sposobem zadania mojego pytania jest „dlaczego programiści VCS wprowadzają własny system przechowywania danych strukturalnych zamiast korzystać z istniejącego?”


title: pokaż lub opublikuj aplikacje

text: Zastanawiam się nad wgraniem na source forge kilku osobistych projektów, które mogą być przydatne dla innych osób. Głównym powodem, dla którego zdecydowałem się to zrobić, jest to, że planuję rozpocząć pracę w innej firmie (zostaw dotychczasową). Pomyślałem, że może mi to pomóc, pokazując pracodawcom to, co zrobiłem. Czy to dobry pomysł (z powodu mojego celu) czy są jakieś pułapki? Czy Source Forge jest najlepszym miejscem na coś takiego? Dziękuję


title: Prosta obsługa zależności dla obiektów (perl)

text: Trochę utknąłem w projektowaniu projektu, w którym wiele obiektów musi mieć dostęp do tej samej informacji. Mogą to być jakieś dane, aby zbudować globalny obiekt dla siebie lub samego obiektu (zasadniczo obiekt konfiguracyjny). Zasadniczo te obiekty znajdują się na drzewie: Na szczycie znajduje się obiekt „Router”, który ma „Interfejs”, który ma „Host”. Router tworzy interfejsy, a interfejs tworzy hosty. Ponadto obiekt routera pobiera ten obiekt konfiguracyjny jako parametr w konstruktorze. Chciałbym, aby kod był czysty i łatwy do testowania, minimalizując niezbędne mockowanie i umożliwiając łatwe konfigurowanie testów. Jakie metody są zalecane w celu zapewnienia dostępu do tego obiektu konfiguracji w całym projekcie? 1. użyj pojedynczej instancji obiektu konfiguracyjnego 2. użyj superglobalnego obiektu konfiguracyjnego 3. Każdy obiekt (router, interfejs, host) powinien otrzymać obiekt konfiguracyjny poprzez konstruktor -> w każdym nowym wywołaniu obiektu powinien znajdować się ten obiekt konfiguracyjny. Wyglądałoby to tak: Host->new({config => $self->config}) 4. Każdy obiekt powinien mieć odniesienie do routera nadrzędnego. Interfejs i Host będą mieli dostęp do routera (który zostanie im przekazany w konstruktorze -> słaby_ref do głównego obiektu routera) i uzyskają dostęp do obiektu konfiguracyjnego routera 5. Interfejs będzie miał metodę delegata do pobrania obiektu konfiguracyjnego z routera i Host będzie miał dostęp do tego obiektu konfiguracyjnego za pomocą tej metody -> oznacza to, że każdy powinien być świadomy swoich rodziców (host powinien mieć odniesienie do interfejsu nadrzędnego, interfejs powinien mieć odniesienie do routera itp.) 6. A może mieć globalną pamięć obiektową singletona, z której każdy może pobrać to, czego chce (obiekt konfiguracyjny, uchwyt bazy danych itp.)? 7. Lub użyj istniejącego systemu wstrzykiwania zależności, który wydaje się przesadą (dużo)


title: Czy liczy się to jako „uczenie maszynowe”?

text: Od jakiegoś czasu pracuję nad aplikacją (projektem hobbystycznym), która tworzy melodie. Każda melodia składa się z kilku fraz (zdań muzycznych lub „submelodii”). Ostatnio wpadłem na pomysł, aby umożliwić użytkownikowi naciśnięcie przycisku, aby „polubić” melodię. To, co zrobi, to zapisanie fraz tworzących melodię w pamięci. Te frazy zostaną włączone do przyszłych melodii. Czy to się liczy jako uczenie maszynowe?


title: Czy proste przypisanie autorstwa spełni wymagania licencji BSD dotyczące ponownego wykorzystania, czy też muszę skopiować całą informację o prawach autorskich?

text: Czy coś w rodzaju `Ten program używa kodu napisanego przez Nathan2055` spełnia wymagania licencji BSD, czy też muszę skopiować całą notatkę? Wiem, że prosi, aby zawiadomienie pozostało nienaruszone, ale jeśli używam tylko jednego pliku kodu, marnotrawstwem jest kopiowanie całej licencji do głównego pliku praw autorskich.


title: MongoDB: Replikuj dane w dokumentach a „dołącz”

text: Zastrzeżenie: To jest pytanie wywodzące się z tego. Co myślisz o poniższym przykładzie przypadku użycia? 1. Mam tabelę zawierającą zamówienia. 2. Te zamówienia zawierają wiele powiązanych informacji potrzebnych do moich bieżących zapytań (pomyśl o produktach; informacje o kupujących; region, kraj i stan punktu sprzedaży; itd.) 3. Aby myśleć z de- znormalizowane podejście, nie muszę umieszczać identyfikatorów tych powiązanych pozycji w mojej głównej kolekcji zamówień. Zamiast tego muszę powtórzyć wszystkie informacje przy każdym zamówieniu (tj. powtórzę imię, nazwisko itp. kupującego przy każdym jego zamówieniu). Przyjmując poprzednie założenie, **Zobowiązuję się zachować wszystkie dane związane z zamówieniem bez wielu aktualizacji** (ponieważ jeśli zmodyfikuję nazwę kupującego, będę musiał przejrzeć wszystkie zamówienia, aktualizując te złożone przez tego samego kupującego, a ponieważ MongoDB blokuje na poziomie dokumentu przy aktualizacjach, zablokowałbym całe zamówienie w momencie aktualizacji). Rodzi to następujące pytania: 1. Czy muszę replikować wszystkie dane związane z produktami? (tj: kategoria, producent i opcjonalne atrybuty, takie jak kolor, rozmiar…) 2. Co zrobić, jeśli zażądano nowej funkcji i muszę wykonać wiele zapytań z produktami „jako punktem wejściowym zapytania”? (np. raporty pokazujące wyniki sprzedaży produktów pogrupowane według regionu, kraju itp.) 1. Czy zastosowanie operacji $unwind do oryginalnej kolekcji moich zamówień jest wystarczająco uczciwe? (A co z wydajnością?) 2. Powinienem zrobić kolejny zbiór mając na uwadze te zapytania i ponownie powtórzyć wszystkie informacje o produktach (i ich zamówieniach)? 3. Czy nie byłoby lepiej przechowywać identyfikator produktu w oryginalnej kolekcji zamówień, aby lepiej tolerować zmiany wymagań? (A co z emulacją JOIN?) 3. Optymalnym podejściem byłoby rozwiązanie mieszane z systemem RDBMS, takim jak MySQL, w celu odzyskania pełnych danych? * Mam na myśli: przechowuj produkty, użytkowników i identyfikatory lokalizacji w kolekcji zamówień i używaj zapytań w MySQL typu `getAllUsersDataByIds` w których wykonałbym `SELECT * FROM users WHERE user_id IN (:identifiers_retrieved_from_the_mongodb_query )`


title: Czy „Doświadczenie w pracy przy dużych projektach” jest czymś, do czego powinienem dążyć?

text: To jest w kontekście poszukiwania pracy. Istnieją wymyślne słowa, takie jak „Oprogramowanie dla przedsiębiorstw” (w przeciwieństwie do projektu szkolnego). Jest też doświadczenie w opracowywaniu/architektowaniu dużych produktów oprogramowania – coś, czego pragną niektórzy pracodawcy. Chociaż duże firmy mogą szczycić się tym, że potrafią stworzyć „ekwiwalent elektrowni jądrowej”, ja osobiście nie widzę w tym chwały. Z pewnością poszczególne rzeczy, takie jak wyszukiwarka Google, czy MS Office czy framework .Net robią wrażenie. Ale są też rzeczy mniej efektowne. Pracowałem dla kilku gigantów i nie rozumiem, o co chodzi. Z pewnością 50 programistów (+ 10 analityków i 5 menedżerów itp.) może zbudować coś dużego w ciągu 4 lat, ale 2 programistów w ciągu 1 roku może zbudować znacznie więcej niż 1% porównywalnej rzeczy. Właściwie, zanim zrobiłem licencjat i pracowałem w laboratorium na studiach, ułożyłem trochę kodu, który zrobił na mnie wrażenie w tamtym czasie ;), ale od tego czasu nie widziałem zbyt wielu przykładów świetnego kodu. Myślę, że na dłuższą metę chcę skłaniać się do małej firmy. Zastanawiam się więc, czy mam wymówkę do wyrażania opinii na temat dużych firm, czy naprawdę mam się czegoś do nauczenia pracując nad dużym projektem (poza: ludzie biznesu nie rozumieją oprogramowania, polityka jest do bani, poruszamy się zbyt wolno, utknęliśmy ze złą karmą, wspieramy zbyt wiele gałęzi i dostosowań, które powinny już być martwe, konfiguracja maszyny deweloperskiej powinna zająć mniej niż 2 dni, ukończenie kompilacji powinno zająć mniej niż 4 godziny , testy jednostkowe byłyby miłe)? Pracowałeś przy dużym projekcie i nauczyłeś się czegoś bezcennego, czegoś, czego nie nauczyłbyś się w mniejszym miejscu? Podziel się dobrymi i złymi historiami.


title: Czy jest różnica w użyciu między zatrzymaniem a zakończeniem?

text: Tytuł mówi wszystko: Czy zatrzymywanie i kończenie synonimów w kontekście teorii obliczalności?


title: Jakiś ważny powód, by Nest Master Pages w ASP.Net zamiast dziedziczyć?

text: Obecnie trwa debata w pracy i nie mogę pojąć, dlaczego ktoś miałby celowo unikać dziedziczenia ze stronami wzorcowymi. Dla odniesienia tutaj jest konfiguracja projektu: > * BaseProject > > * MainMasterPage > * SomeEvent > * SiteProject > > * SiteMasterPage > > * zagnieżdżony MainMasterPage > * OtherSiteProject > > * MainMasterPage (z BaseProject) > Debata pojawiła się, ponieważ jakiś kod w BaseProject musi wiedzieć o „SomeEvent”. Przy powyższej konfiguracji kod w BaseProject musi wywołać `this.Master.Master`. Ten sam kod w BaseProject dotyczy również OtherSiteProject, do którego dostęp uzyskuje się po prostu jako `this.Master`. SiteMasterPage nie ma różnic w kodzie, tylko różnice w HTML. Jeśli SiteMasterPage dziedziczy MainMasterPage, a nie ją zagnieżdża, cały kod jest prawidłowy jako `this.Master`. Czy ktoś może wymyślić powód, dla którego warto użyć tutaj zagnieżdżonej strony wzorcowej zamiast dziedziczonej?


title: Co się stanie, gdy do komputera dotrze nieoczekiwany pakiet?

text: Zastanawiałem się nad tym od kilku dni. Zasadniczo rozumiem, jak działają sieci i pakiety. Ale co się dzieje, gdy nadchodzi nieoczekiwany pakiet? Na przykład, kiedy nie wysłałem prośby o indeks witryny, ale mimo to wysyła indeks do mojego komputera? Czy wyskakuje moja przeglądarka? Czy to ignoruje? W każdym razie, żeby go złapać?


title: Dlaczego istnieją języki programowania „żart”?

text: Przede wszystkim pamiętaj, że ten post zawiera obraźliwy język, ale mam nadzieję, że nikomu to nie przeszkadza. Przepraszam za zły język, ale tak się nazywa. Kiedy robiłem dokumentację na temat istniejących języków programowania, próbując stworzyć ich pełną listę, natknąłem się na okropne języki programowania, które najwyraźniej nie zostały stworzone do rzeczywistego użytku i implementacji ze względu na ich szaloną trudność. Języki takie jak Brainfu*k i LOLCODE lub Whitespace są głupimi językami, ponieważ nie mają prawdziwego zastosowania. Na przykład program „Hello world” napisany w BrainFu*k. Zaczerpnięte z Wikipedii: Poniższy program wyświetla napis „Hello World!” i znak nowej linii na ekranie: +++++ +++++ zainicjuj licznik (komórka #0) do 10 [użyj pętli, aby ustawić następne cztery komórki na 70/100/30/10 > +++++ + + dodaj 7 do komórki #1 > +++++ +++++ dodaj 10 do komórki #2 > +++ dodaj 3 do komórki #3 > + dodaj 1 do komórki #4 <<<< - licznik dekrementacji ( komórka #0)] > ++ . wypisz 'H' > + . drukuj 'e' +++++ ++ . wypisz 'l' . wypisz 'l' +++ . wypisz 'o' > ++ . drukuj ' ' << +++++ +++++ +++++ . wypisz 'W' > . wypisz 'o' +++ . wypisz 'r' ----- - . wypisz 'l' ----- --- . wypisz 'd' > + . drukuj '!' > . print '\n' lub inny przykład zaczerpnięty z języka LOLCODE: HAI CAN HAS STDIO? PLZ OTWÓRZ PLIK "LOLCATS.TXT"? AWSUM THX WIDOCZNY PLIK O NOES NIEWIDOCZNY "BŁĄD!" KTHXBYE Te języki są bardzo trudne do nauki/czytania/pracy. Moje pytanie brzmi - dlaczego one istnieją? Jaki jest ich cel? Czy istnieje oficjalna „nazwa” dla tego typu języków?


title: Obsługa „pokrewnej” pracy w ramach jednego elementu pracy Agile

text: Jestem w zespole projektowym składającym się z 4 deweloperów, w tym ja. Odbyliśmy długą dyskusję o tym, jak radzić sobie z dodatkową pracą, która pojawia się w trakcie jednego elementu pracy. Ta dodatkowa praca to zazwyczaj rzeczy, które są nieco związane z zadaniem, ale nie zawsze są konieczne do osiągnięcia celu przedmiotu (może to być opinia). Przykłady obejmują między innymi: * refaktoryzację kodu zmienionego przez element pracy * refaktoryzację kodu sąsiadującego z kodem zmienionym przez element * re-architekturę większego obszaru kodu wokół biletu. Na przykład, jeśli element wymaga zmiany jednej funkcji, zdajesz sobie sprawę, że cała klasa może zostać teraz przerobiona, aby lepiej dostosować się do tej zmiany. * ulepszenie interfejsu użytkownika na formularzu, który właśnie zmodyfikowałeś. Gdy ta dodatkowa praca jest niewielka, nie mamy nic przeciwko. Problem polega na tym, że ta dodatkowa praca powoduje znaczne rozszerzenie przedmiotu poza pierwotną ocenę punktu cechy. Czasami przedmiot za 5 punktów zajmuje w rzeczywistości 13 punktów czasu. W jednym przypadku mieliśmy przedmiot za 13 punktów, który z perspektywy czasu mógł mieć 80 lub więcej punktów. W naszej dyskusji pojawiają się dwie opcje, jak sobie z tym poradzić. 1. Możemy zaakceptować dodatkową pracę w tym samym przedmiocie pracy i odpisać ją jako błędne oszacowanie. Argumenty za tym obejmują: * Planujemy „dopełnienie” na końcu sprintu, aby uwzględnić tego rodzaju rzeczy. * Zawsze zostawiaj kod w lepszym stanie, niż go znalazłeś. Nie melduj się w pracy na wpół. * Jeśli odłożymy refaktoryzację na później, trudno jest zaplanować i może nigdy nie zostać zrobione. * Jesteś teraz w najlepszym mentalnym „kontekście”, aby poradzić sobie z tą pracą, ponieważ jesteś już po pas w kodzie. Lepiej usunąć to z drogi teraz i być bardziej wydajnym, niż stracić ten kontekst, kiedy wrócisz później. 2. Rysujemy linię dla bieżącego elementu pracy i mówimy, że dodatkowa praca trafia do osobnego biletu. Argumenty obejmują: * Posiadanie oddzielnego biletu pozwala na nowe oszacowanie, więc nie oszukujemy się, ile punktów naprawdę jest, ani nie musimy przyznać, że wszystkie nasze szacunki są okropne. * „Wypełnienie” sprintu jest przeznaczone do nieoczekiwanych wyzwań technicznych, które są bezpośrednią przeszkodą w spełnieniu wymagań dotyczących biletu. Nie jest przeznaczony do przedmiotów pobocznych, które są po prostu „miło mieć”. * Jeśli chcesz zaplanować refaktoryzację, po prostu umieść to na górze backlogu. * Nie ma sposobu, abyśmy właściwie uwzględnili te rzeczy w szacunkach, ponieważ wydaje się to nieco arbitralne, gdy się pojawia. Recenzent kodu może powiedzieć „te kontrolki interfejsu użytkownika (które w rzeczywistości nie zostały zmodyfikowane w tym elemencie roboczym) są nieco mylące, czy możesz to również naprawić?” co jest jak godzina, ale mogą powiedzieć: „Cóż, jeśli ta kontrolka dziedziczy teraz z tej samej klasy bazowej co inne, dlaczego nie przeniesiesz całego tego (setek wierszy) kodu do bazy i przeprogramujesz wszystkie te rzeczy , zmiany kaskadowe itp.?" A to zajmuje tydzień. * „Zanieczyszcza miejsce zbrodni” poprzez dodanie do zgłoszenia niepowiązanych prac, co sprawia, że nasze pierwotne szacunki dotyczące punktów funkcji stają się bezsensowne. * W niektórych przypadkach dodatkowa praca opóźnia check-in, powodując blokowanie się między twórcami. Niektórzy z nas mówią teraz, że powinniśmy zdecydować się na pewne odcięcie, na przykład jeśli dodatkowe rzeczy są mniejsze niż 2 PR, trafiają do tego samego biletu, jeśli jest więcej, zrób nowy bilet. Ponieważ dopiero za kilka miesięcy korzystamy z Agile, jaka jest opinia wszystkich bardziej doświadczonych weteranów Agile na temat tego, jak sobie z tym poradzić?


title: Dlaczego (lub dlaczego nie) typy egzystencjalne są uważane za złą praktykę w programowaniu funkcjonalnym?

text: Jakich technik mogę użyć, aby konsekwentnie refaktoryzować kod, usuwając zależność od typów egzystencjalnych? Zazwyczaj są one używane do dyskwalifikacji niepożądanych konstrukcji twojego typu, a także do umożliwienia konsumpcji przy minimalnej wiedzy o danym typie (a przynajmniej takie jest moje rozumienie). Czy ktoś wymyślił prosty, spójny sposób na usunięcie polegania na nich w kodzie, który nadal zachowuje niektóre korzyści? A przynajmniej jakieś sposoby na poślizgnięcie się w abstrakcji, która pozwala na ich usunięcie bez konieczności znaczącej zmiany kodu, aby poradzić sobie ze zmianą? Możesz przeczytać więcej o typach egzystencjalnych tutaj („jeśli się odważysz…”).


title: Szukasz problemu z programowaniem równoległym

text: Staram się wymyślić problem, który można łatwo rozwiązać równolegle i który wymaga komunikacji między wątkami do testu. Staram się też unikać problemów wymagających losowego czekania, co wyklucza filozofów kulinarnych i producenta-konsument (bounded buffer), dwóch klasyków. Moim celem jest, aby uczeń potrafił napisać program w mniej niż 20-30 minut przed komputerem, nie znając wcześniej problemu. (Ma to bardziej zapobiegać przygotowaniom niż wymyślić coś nowego.) Staram się podkreślić komunikacyjny aspekt programu, choć ważna jest też wielowątkowość. Czy ktoś ma jakieś pomysły? **Edytuj** : używam Google Go do zrozumienia języka i zrozumienia kombinacji gorutyn/kanałów w porównaniu z biblioteką aktorów, której jestem autorem.


title: Gdzie przechowywać zmienne globalne w aplikacji Windows Forms

text: Mam tutaj aplikację do zarządzania pracownikami Vb.Net. Ma pracowników, menedżerów, zespoły, szkolenia i tak dalej. Sposób, w jaki aplikacja jest teraz skonfigurowana, dane są odczytywane z bazy danych w zdarzeniu ładowania formularza startowego (frmMain) i przechowywane w tym formularzu we właściwościach publicznych. Następnie wszystkie inne formularze (a jest ich wiele) odwołują się do tych list (lista (pracownika), lista (zespołu) za pomocą tych właściwości. Na przykład dim emp = frmMain.Employees.Find(Function(x) x.ID = 128) , lub dim team1 jako nowy Team frmMain.Teams.Add(team1) Czuję, że jest to bardzo zły sposób na rozwiązanie tego problemu, ale utknąłem przy decydowaniu, jak należy to zrobić. Jakaś pojedyncza klasa, która zachowałaby instancje wszystkich tych list (jest ich wiele) podczas uruchamiania aplikacji, czy jest lepszy sposób na zrobienie tego?


title: Przejście z PHP na ASP.NET

text: Od dawna pracuję z PHP i starałem się być na nim jak najlepiej (dobre praktyki kodowania, znajomość obsługi każdego żądania od początku do końca itp.), ale teraz, z powodów zawodowych, trzeba zacząć uczyć się ASP.NET i C#. Przeczytałem i próbowałem zrozumieć jego podstawy, ponieważ ASP.NET zawsze pracuje z danym frameworkiem o nazwie .NET, ale jest tak wiele wersji i różnych podejść, takich jak MVC lub WebForms itp. Zrobiłem kilka testów, i widzę, że części kodu są kompilowane, inne nie — nie wiem dlaczego — i że w końcowym kodzie HTML generowanych jest dużo gówna. Czuję, że **tracę kontrolę** nad moją aplikacją internetową, więc moje pytanie brzmi: **Gdzie mogę zacząć rozumieć, jak to działa?** Każdy samouczek, książka itp. są mile widziane (tak aktualne, jak możliwy). **Czy możliwe jest utrzymanie kontroli nad kodem za pomocą tego oprogramowania Microsoft, więc ostateczny wynik jest czystym, lekkim i wydajnym kodem JS i HTML?** W przypadku części C# myślę, że jest to najłatwiejsze, ja po prostu szukam dobrej książki do przeczytania... Chyba w wersji 5.0. **Czy mam rację?**


title: Jaka jest różnica między stanem a polem?

text: Czy podana jest inna nazwa pola, czy jest to coś innego? Na przykład: private int telNumber; czy mogę powiedzieć o telNumber, że jest to stan czy jest to pole?


title: Czy termin „krzywa uczenia się” obejmuje znajomość problemów?

text: Kiedy poznajesz nową technologię, poświęcasz czas na zrozumienie jej koncepcji i narzędzi. Ale kiedy technologia spotyka się z prawdziwym życiem, dzieją się dziwne i nieprzyjemne rzeczy. Wymagania często są dalekie od ideału i różnią się od „klasycznego” scenariusza. I wkrótce naginam technologię do moich rzeczywistych potrzeb. W tym momencie zaczynam poznawać błędy systemu lub, że nie jest tak elastyczny, jak się wydawało na samym początku. A ta „walka” z technologią pochłania dużą część czasu podczas rozwoju. Co bardziej przygnębiające jest to, że garść takich błędów i obejść nie jest skoncentrowana w jednym miejscu (książka, witryna itp.) I zanim naprawdę się z tym zmierzysz, nie możesz zadać właściwego pytania, ponieważ nawet nie podejrzewasz przyczyny występujący problem (nieznany-nieznany). Więc moje pytanie składa się z trzech: 1) Czy naprawdę udaje Ci się (i jak) przewidzieć możliwe przyszłe problemy? 2) Ile czasu poświęcasz na znalezienie obejścia/poprawki/rozwiązania, zanim je opuścisz i przejdziesz do innych problemów. 3) Jakie są kryteria, aby myśleć o sobie jako doświadczonym w technologii. Czy bierzesz to pod uwagę?


title: Jak mentorować młodszego programistę, który może nie nadawać się do programowania?

text: Jestem w niepewnej sytuacji. Pracuję zdalnie dla klienta, który niedawno wprowadził do projektu młodszego programistę prosto ze studiów. Pracuje fizycznie w ich biurze. Wydaje mi się, że studiował informatykę (choć w tej chwili nie pamiętam 100%). Pracuje w firmie od kilku miesięcy i został zapoczątkowany przez kierownika projektu testowaniem i zapoznawaniem się z aplikacją, a przez około ostatni miesiąc przypisywano mu drobne błędy i funkcje. Chodzi o to, że w tamtym czasie tylko raz popełnił kod i był to kod, który w zasadzie go przeprowadziłem i napisałem dla niego. (Myślałem, że byłoby dla niego korzystne, gdyby zobaczył działające rozwiązanie po tym, jak spędził kilka dni, próbując go uruchomić). Miałem z nim kilka telefonów i kilka sesji programowania w parach, ale spędza dni na frustracji w prostym kodzie JavaScript, który naprawdę nie powinien być trudny nawet dla młodszego programisty. Zaczynam myśleć, że może programowanie nie jest dla niego dobrą ścieżką, ale chcę włożyć jak najwięcej wysiłku, aby pomóc mu samodzielnie znaleźć rozwiązania i pomóc mu się doskonalić. Po raz pierwszy mam okazję zapewnić szkolenia i mentoring. Bycie zdalnym prawdopodobnie również to znacznie utrudnia. Co mogę zrobić, aby pomóc mu się poprawić i pobudzić go do działania?


title: Czego oczekuje się od praktykanta iOS SDK z areny samouków?

text: **edit** : Proszę o próbki, które stażysta chciałby pokazać, proszę nie odpowiadać na umiejętności miękkie, które oznaczyłyby to jako duplikat, NIE JEST. Mówiąc dokładniej, jakie przykładowe aplikacje i tło są minimalnymi oczekiwaniami wobec stażysty? Tak, zdaję z tym testy FAQ i jest to powiązane, ale pozwólcie, że trochę to zawęź. Tak więc, kiedy zostałem profesjonalistą z hobbystów, musiałem znać C++ jak angielski (język), czytać podręczniki iOS i przynajmniej być na tyle sprytnym, aby uczyć się bibliotek, nawet jeśli wcześniej ich nie używałem. Poza algebrą poprzeczka była niewiele wyższa. Jako stażysta nie oczekiwano ode mnie architekta, tylko naprawianie aplikacji. W tej chwili udzielam korepetycji. Jestem jego jedyną rubryką, więc potrzebuję pomocy od innych, aby wiedział, kiedy można go "zatrudnić" w dziedzinie programowania. Zdaję sobie sprawę, że to/to jest niemożliwe, ale tylko przybliżone oszacowanie tego, czego Twoja firma oczekuje od stażystów lub uczących się ludzi, to wszystko, czego potrzebuję. Na przykład spodziewałbym się przykładowych aplikacji, które 1) zużywają usługę sieciową. 2) Przejście między kontrolerami widoku. 3) Pokaż prostą grę, karty lub planszę, które pokazują podstawowe przejścia stanów i przepływy pracy iOS. Nie musimy dyskutować o filozofii postaw uczenia się i innych umiejętnościach miękkich, tylko jakich przykładowych aplikacji szukamy. Pytania dotyczące umiejętności miękkich zostają zamknięte, to jest specyficzne dla programowania. Resztę możemy wywnioskować na podstawie poszukiwanych próbek. W szczególności aplikacje na iOS. Jeśli masz dodatek wzorca projektowego do aplikacji, nie krępuj się. Dziękuje za odpowiadanie. To pytanie jest trudne do sformułowania, widziałem, jak wiele istotnych zostało zamkniętych, ale o ile wiem, dopasowuję tematy


title: Klasy podstawowe jako fabryki?

text: W weekend pisałem trochę kodu i chciałem napisać fabrykę jako metodę statyczną w klasie bazowej. Moje pytanie jest po prostu wiedzieć, czy jest to podejście idomatyczne c#? Moje poczucie, że może nie być, wynika z faktu, że klasa bazowa ma wiedzę o klasie pochodnej. To powiedziawszy, nie jestem pewien prostszego sposobu na uzyskanie tego samego wyniku. Cała inna klasa fabryki wydaje się (przynajmniej mnie) niepotrzebną złożonością (?) Coś w stylu: class Animal { public static Animal CreateAnimal(string name) { switch(name) { case "Shark": return new SeaAnimal(); przerwanie; case "Pies": zwróć nowe LandAnimal(); przerwanie; default: wrzuć nowy Exception("nieznane zwierzę"); } } } class Zwierze Ziemskie : Zwierze { } class Zwierze Morskie : Zwierze { }


title: Czy powinienem używać typu Date w JAX-RS @PathParam?

text: To właśnie zamierzam zrobić na serwerze JEE Glassfish przy użyciu Jersey. @GET @Path("/{name}/{date}") public String getMessages(@PathParam("name") String name, @PathParam("date") Date date) Podoba mi się pomysł, aby móc powiedzieć ludziom zużywanie tej usługi sieciowej RESTful, która „Data tutaj jest wszystkim, co działa z klasą Date w Javie”. To całkiem proste z punktu widzenia, że mogą po prostu spojrzeć na specyfikację Date i będą już mieli działający model, z którym mogą przetestować. Problem, o który się martwię, polega na tym, że kiedy to robię, JAX-RS nie jest zbyt miły, gdy Date() nie podoba się to, co dostaje w konstruktorze. Ponieważ Date() zgłasza błąd, jeśli nie może przeanalizować tego, co zostało podane (np. jeśli przekażesz ciąg „dzisiaj” zamiast prawdziwej daty), serwer JEE zwraca błąd 404. Czy to dobra praktyka? Czy jest lepszy sposób na zrobienie tego, o którym nie myślę?


title: Podświetl zmienną globalną w vimie (lub dowolnym innym darmowym edytorze)

text: W Source Insight zmienna globalna jest wyświetlana w innym kolorze. Czy jest sposób na osiągnięcie tego w vi (lub dowolnym innym darmowym edytorze)?


title: Techniki uwierzytelniania Web API

text: Mamy platformę usług internetowych asp.net MVC do obsługi xml/json dla ludzi Otrzymuj żądania, ale staramy się znaleźć najlepszy sposób (szybki, łatwy, trywialny dla użytkowników kodujących w językach javascript lub OO) do uwierzytelniania użytkowników. Nie chodzi o to, że nasze dane są wrażliwe czy coś w tym rodzaju, po prostu chcemy, aby użytkownicy się rejestrowali, abyśmy mogli mieć ich adres e-mail, aby powiadamiać ich o zmianach i śledzić wykorzystanie. W naszej poprzedniej próbie mieliśmy nazwę użytkownika w URI i po prostu upewniliśmy się, że nazwa użytkownika istnieje i zwiększyliśmy tabele db o użycie. To było bardzo proste, ale zauważyliśmy, że ludzie używają wersji demo jako nazwy użytkownika itp., Więc potrzebujemy trochę bardziej wyrafinowanego. Jakie techniki uwierzytelniania są dostępne? Czego używają/robią główni gracze.


title: Jak poprawić komunikację e-mailową

text: Parafraza e-maila wysłanego do kolegi > Zauważyłem problem z Systemem A. Ustaliłem, że nie jest on spowodowany > przez X. Podejrzewam, że jest to spowodowane przez Y. (ponieważ Ty zarządzasz Y) > Czy możesz na to spojrzeć? (Część w nawiasie nie znalazła się w moim e-mailu, ponieważ ten kolega doskonale wie, że jest odpowiedzialny za Y... należy rozumieć, dlatego wysłałem mu e-maila) Wpadłem na kolegę pół dnia później i powiedz: „Czy przyjrzałeś się już problemowi z Systemem A?” a on odpowiada: „Och, tak, dostałem twój e-mail o zepsuciu Systemu A, ale założyłem, że to prawdopodobnie spowodowane przez X, więc czekałem, aż to sprawdzisz”. Oczywiście moja wiadomość nie została przekazana. Jest to zbyt częsty wynik e-maili, które wysyłam i jest bardzo zniechęcający… jednak nie wiem, jak mógłbym uczynić moje e-maile bardziej przejrzystymi. Zawsze są tak krótkie, jasne i rzeczowe, jak tylko potrafię. Jakieś sugestie? Może jest coś nieodłącznego w medium e-mail, które po prostu nie jest skuteczne w tego typu komunikacji?


title: Laptop, taki jak klawiatura, gładzik i monitor, który mogę podłączyć do komputera, aby móc programować, leżąc na kanapie?

text: Mój pulpit jest w porządku, poza tym, że lubię programować leżąc na kanapie. Nogi mnie bolą po zbyt długim siedzeniu na krześle biurowym. Czy jest coś takiego jak kombinacja klawiatury, gładzika i monitora, którą mógłbym podłączyć do mojego biurka (8 stóp od kanapy), aby móc pracować na kanapie? Myślałem o zakupie laptopa w tym celu, ale chcę zaoszczędzić pieniądze.


title: Czy papier jest niezbędny w codziennej pracy programisty?

text: Czy jako programista pracujący w firmie, której wizją jest umożliwienie **biura bez papieru**, mogę efektywnie pracować przy mniejszym zużyciu papieru? Mogę wymienić przynajmniej kilka rodzajów papierów, których używam dość często: * Zeszyt papierowy, na którym wykonuję większość prac projektowych i pomysłów przed kodowaniem * Książki * Tymczasowe wydruki kodu źródłowego, choć nie tak często ( _w kolorze, z czcionka 6 pkt w rozdzielczości 600 DPI_ ) * Karteczka samoprzylepna, aby przypomnieć sobie o rzeczach, którymi należy się zająć w ciągu kilku dni. Z drugiej strony korzystam też z wiki i edytora tekstów biurowych. Od czasu do czasu używałem oprogramowania do tworzenia diagramów, aby stworzyć kilka schematów blokowych. **Pytania głębsze:** * Czy istnieje związek między zużyciem papieru a wydajnością? * Jak programiści mogą pomóc ratować drzewa? * Czy tworzenie oprogramowania bez papieru zasadniczo różni się od biura bez papieru? Powiązane pytania: * Czy piszesz kiedyś kod długopisem i papierem i czy powinniśmy robić to częściej? * Jakie fizyczne narzędzia uważasz za przydatne do pracy jako programista? * Jakie rzeczy są niezbędne na biurku programisty? * Rzeczy, których potrzebuje każdy programista podczas pracy Dodatkowe informacje, jeśli to pomoże: * Każdy ma dwa monitory. * Mamy przyzwoite oprogramowanie do zarządzania projektami i śledzenia problemów (oba oparte na sieci). **Proszę być konstruktywnym.** W szczególności proszę udzielić odpowiedzi swoim programistom, którzy chcą być elastyczni i chcą zmienić styl pracy, aby stać się bardziej produktywnym, a także spełniać pewne osobiste wartości. * * * _**Zmieniono:_** Usunąłem widok firmy, ponieważ wydaje się być zbyt ognistą przynętą. Jeśli chcesz zobaczyć moje oryginalne słowa, przejdź do historii edycji. _**Usunięto: Doxygen i tablica._** Powód: lekceważąc moje osobiste doświadczenia z tymi wspaniałymi narzędziami, nigdy nie musieliśmy drukować niczego z powodu ich używania/nieużywania. Aby zobaczyć moje oryginalne słowa, przejdź do historii edycji.


title: Czy zwinne podejście jest zbyt wygodną wymówką dla kowbojów?

text: Uważam, że podejście zwinne jest najlepsze w przypadku projektów, w których wymagania są rozmyte i potrzeba dużo interakcji, aby pomóc w kształtowaniu pomysłów użytkownika końcowego. _Jednak..._ W mojej pracy zawodowej ciągle kończę w firmach, w których podejście „zwinne” jest stosowane **jako wymówka, dlaczego nie włożono wysiłku w projekt z góry;** gdy wymagania są dobrze zrozumiane . Nie mogę się powstrzymać od myślenia, że gdyby nie było podejścia zwinnego, siedziałbym tutaj z niezłą specyfikacją na wysokim poziomie i nie musiałbym wracać do tego samego ekranu i funkcji co drugi dzień, gdy coś innego się pojawi. więc nie pomyślałem o tym. > Czy korzyści płynące ze zwinnych metodologii naprawdę są wystarczające, aby przeważyć nad wymówką > bycia kulawym, jakie daje kowbojom kierowników technicznych? Aktualizacja: Jak na ironię jestem teraz certyfikowanym Scrum Masterem. W jednym z referatów przedstawionych na kursie Scrum stwierdzono, że najlepszy proces rozwoju to taki, w którym decyzje projektowe podejmuje jeden ekspert lub guru, jednak ma to oczywiste słabości. Scrum przenosi odpowiedzialność za produkcję oprogramowania wysokiej jakości na „Zespół”, co oznacza, że zespół o niskim standardzie może ujść na sucho z masą spaghetti, które, jak sądzę, nie różni się od innych procesów rozwoju Agile i niezwinnych.


title: Kiedy należy przenieść instrukcję post pętli „for” wewnątrz rzeczywistej pętli?

text: Za pomocą pętli `for` możesz przenieść instrukcję post empty i przenieść ją na koniec kodu w pętli: for (int i = 0; i < 10; /* empty */ ) { //... ++i; } Ale w tym przypadku nic ci to nie zyskuje; co ważniejsze, sprawia to, że kod jest trudniejszy do odczytania, ponieważ można oczekiwać, że `++i` będzie znajdować się na górze instrukcji jako oświadczenie końcowe. Kiedy więc można przenieść oświadczenie końcowe z jego zwykłego miejsca do miejsca wewnątrz pętli? **EDYTUJ:** Kod, który skłonił mnie do zastanowienia się nad tym pytaniem, dostałem od _C++ Primer_ : for (T* p = first_free; p != elements; /* empty */) alloc.destroy(--p); Tutaj `first_free` jest wskaźnikiem do pierwszego wolnego elementu w tablicy obiektów, które mają zostać zniszczone w odwrotnej kolejności, a `elements` jest wskaźnikiem do pierwszego obiektu w tablicy. Tutaj wydaje mi się, że prawidłowe przeniesienie `--p` z instrukcji post-instrukcji do pętli, ponieważ w przeciwnym razie trzeba by przepisać kod jako taki: for (T* p = first_free - 1; p != elementy ; --p) alloc.destroy(p); W tym przypadku kod napotkałby problemy, gdyby tablica faktycznie nie zawierała żadnych obiektów, ponieważ można było pominąć `elementy` i w ten sposób spowodować awarię (lub przynajmniej niezdefiniowane zachowanie). Oznacza to, że będziesz potrzebował dodatkowego sprawdzenia przed pętlą, czy tablica faktycznie zawiera jakieś elementy, czy nie.


title: Jak automatycznie generować numery kompilacji dla projektu Python GitHub?

text: Jaki jest najlepszy sposób automatycznego generowania lub zwiększania numerów wersji dla projektu (python) znajdującego się w serwisie GitHub? W przeszłości zawsze ręcznie zwiększałem numer wersji za pomocą bibliotek `argparse` lub `optparse`.


title: Czy mogę używać oprogramowania na licencji GPL w aplikacji komercyjnej?

text: Mam tutaj 3 pytania dotyczące GPL: 1. Jeśli używam oprogramowania na licencji GPL w mojej aplikacji, ale nie modyfikuję go ani nie rozpowszechniam, czy muszę wydać moją aplikację na licencji GPL? 2. Co się stanie, jeśli zmodyfikuję oprogramowanie używane przez moją aplikację. W takim razie muszę wydać moją aplikację na GPL, czy mogę po prostu dostarczyć zmodyfikowane oprogramowanie na warunkach GPL. 3. A jeśli używam oprogramowania na licencji GPL, ale go nie modyfikuję, czy mogę rozpowszechniać je z moją aplikacją? Moim przykładem jest to, że mam framework PHP, którego używam biblioteki GeSHi, aby wyróżnić niektóre dane wyjściowe. 1. Ponieważ GeSHi jest na licencji GPL, czy mój framework musi być na GPL? 2. Czy mogę zmodyfikować GeSHi dla konkretnych przypadków użycia mojej aplikacji, jeśli przekażę modyfikacje opiekunom GeSHi? 3. Czy mogę redystrybuować swój framework z GeSHi?


title: Masz problem z eksponowaniem właściwości klasy w różnych projektach

text: W moim rozwiązaniu mam kilka projektów: * **Logan.Web.DBContext** definiuje DbContext dla bazy danych i buduje model danych * **Logan.Web.Objects** definiuje klasy, które będą reprezentować tabele w bazie danych * **Logan.Web.Data** określa warstwę danych, z której będzie korzystać aplikacja * **LoganMVC** to rzeczywista witryna MVC Oczywiście nie chcę, aby witryna MVC wiedziała za dużo o bazie danych, więc nie mam powiązania między nim a projektami Objects/DBContext. Zamiast tego projekt Data działa jako „pośrednik” między nimi i zawiera wszystkie funkcje CRUD. Problem, jaki mam z tą strukturą, polega na tym, że aby pokazać cokolwiek w widokach, modele muszą znać właściwości danych zgodnie z definicją w klasach obiektów. Nie jestem pewien, jak je ujawnić bez odwoływania się do projektu Objects w projekcie MVC, ale rozumiem, że nie byłaby to dobra praktyka. Zamiast tego wolałbym, jeśli to w ogóle możliwe, udostępnić je przez warstwę danych, ale nie mogę też wymyślić, jak to zrobić w żaden sensowny sposób. Umieściłem cały kod dla większości z tych projektów, ponieważ taki obecnie istnieje na pastebin: http://pastebin.com/eFahpGzE * Przestrzeń nazw DBContext zaczyna się w linii 1 * Przestrzeń nazw DBObjects zaczyna się w linii 141 * Przestrzeń nazw danych zaczyna się w linii 185 Co to jest najlepszy sposób na ujawnienie właściwości klas w Logan.Web.Objects, aby można było ich używać w LoganMVC, biorąc pod uwagę zdefiniowaną tutaj strukturę?


title: Kiedy i gdzie powinniśmy używać podnoszenia w JavaScript

text: Jestem nowy w JavaScript. Uczę się pojęcia podnoszenia w JavaScript. Bazując na tutorialach Javacsript na stronie Mozilli, natknąłem się na słowo `podnoszenie`. Zgodnie z tymi samouczkami, **zmienne w JavaScript polegają na tym, że możesz odwoływać się do zmiennej zadeklarowanej później, bez uzyskania wyjątku**. Ale moje pytanie dotyczy tego, w jakich okolicznościach można używać podnoszenia w JavaScript po stronie klienta lub dlaczego powinniśmy używać podnoszenia w JavaScript. Jakie są jego zalety.


title: W jaki sposób regularnie korzystasz z obsługi wielu monitorów w VS2010?

text: Chociaż podoba mi się obsługa wielu monitorów w VS2010, wydaje mi się, że mam zbyt wiele przypadkowych przeciągnięć okna, w których odblokowuję okno bez zamiaru. To zachowanie sprawiło, że nadal żyję w mentalnym modelu nieprzyciągalnych okien vs200X. 1) Czy masz konkretny układ, który sprawdza się w pracy ogólnego przeznaczenia? 2) W jaki sposób zoptymalizowałeś pod kątem określonych scenariuszy (SQL, Debugging, Workflow, WPF) 3) Czy znasz jakiś skrót lub narzędzie, które przeskoczy do określonego układu okna? 4) Czy wiesz, w jaki sposób mogę skrócić czas przypadkowego oddokowania okna?


title: Dlaczego firma Microsoft nadal dostarcza VBA w produktach pakietu Office, zamiast bezpośrednio integrować platformę .NET?

text: Wiem, że można wywołać kod .NET z kodu VBA, ale dlaczego VBA nadal istnieje? Jedyny powód, o którym mogę myśleć, to dziedzictwo. Musiałem po prostu posortować `Scripting.Dictionary` i ilość potrzebnego kodu była przerażająca. IDE wygląda jak Visual Studio 2003. I jest wiele drobnych szczegółów, które doprowadzają Cię do szaleństwa (jak zmiana linii i otrzymanie ostrzeżenia z powodu jakiegoś błędu kompilacji). Lub, jeśli otworzysz więcej niż jeden arkusz kalkulacyjny, miesza się on z tobą „VBAProject” i jest to naprawdę mylące. Podział na cały moduł/moduł klasy/formularz nie jest taki zły, ale za każdym razem kończę z bezpośrednim pisaniem logiki w formularzach lub posiadaniem jednego ogromnego modułu, który obsługuje wszystko. Dlaczego nie mogę nacisnąć Alt + F11 i włamać się w C#?


title: Czy istnieją dowody na to, że podświetlanie składni w środowiskach IDE i edytorach pomaga nowym uczniom?

text: Przyjmujemy za pewnik podświetlanie składni w środowiskach IDE i edytorach tekstu i jest to jedyna rzecz, o którą proszę w każdym edytorze. Czy są jakieś dowody na to, że podświetlanie składni jest rzeczywiście przydatne — np. czy ludzie programują lepiej (z mniejszą liczbą literówek) podczas używania go niż bez? W szczególności staram się znaleźć pewne badania, które pokazują, że nowi studenci programowania popełniają mniej błędów podczas korzystania z edytora z podświetlaniem w porównaniu z nowymi uczniami, którzy używają edytora zwykłego tekstu bez podświetlania.


title: Czy należy unikać dodawania niepotrzebnych ramek stosu?

text: Ostatnio pracowałem z laravel (PHP) i istnieje opcja, gdy używam ich płynnego ORM, aby określić, gdzie klauzule za pomocą zamknięć. Daje nam to dwa, funkcjonalnie równoważne, sposoby określenia klauzuli where, która powinna być dodana tylko w określonych przypadkach: Przykład 1 $query = App::make('Vendor_Orders')-> where(function($query) use ($admin ) { if (!$admin) { $query->where('vendor_id', '=', $this->id); } })-> get(); Przykład 2 $query = App::make('Vendor_Orders'); if (!$admin) { $query->where('vendor_id', '=', $this->id); } $zapytanie = $zapytanie->get(); Jak widać, jednym z nich jest stosowanie domknięcia (i zachowanie „płynności”), a drugim jego unikanie. Moim instynktem jest preferowanie drugiej, ponieważ użycie takiej anonimowej funkcji dodaje dodatkową ramkę stosu, co, jak spodziewałbym się, sprawi, że program będzie mniej wydajny (być może to pozostałość po moim czasie pracy z C). Z drugiej strony, mój kolega (którego pierwszym językiem był PHP) preferuje pierwszy przykład, ponieważ unika użycia drugiego operatora przypisania i nie widzi nic złego w tworzeniu dodatkowych wywołań funkcji. To sprawiło, że zacząłem się zastanawiać - jaki efekt naprawdę ma ta dodatkowa rama stosu w nowoczesnym systemie? Czy to ma jakąś praktyczną różnicę, jeśli użyje się wywołania funkcji zamiast instrukcji if? Nie szukam subiektywnych odpowiedzi, które wolisz, proszę o jakieś fakty dotyczące wpływu niepotrzebnych skoków - szczególnie na funkcje anonimowe - w nowoczesnych, interpretowanych językach (np. PHP, Java itp. ). Być może także kilka uwag na temat tego, czym różni się to od skompilowanych języków starej szkoły.


title: Jak najlepiej zaprojektować warstwę kontroli dostępu w aplikacji o architekturze n-warstwowej?

text: Jest to typowy scenariusz architektury dla projektu trójwarstwowego: **Warstwa interfejsu użytkownika** Zawiera komponenty graficznego interfejsu użytkownika **Warstwa środkowa** Zawiera logikę biznesową obejmującą następujące warstwy: 1. Warstwa dostępu do danych (DAL) 2. Kontrola dostępu **Warstwa danych** Zwykle baza danych lub fizyczne przechowywanie danych Jaki jest najlepszy sposób wdrożenia **Kontroli dostępu**, gdy wydajność jest na szczycie listy priorytetów? * Czy DAL powinien zwracać WSZYSTKIE dane, a warstwa interfejsu użytkownika powinna martwić się o kontrolę dostępu? * Czy DAL powinien wykonywać kontrolę dostępu, tj. decydować o zwrocie danych, aby interfejs użytkownika nie martwił się o kontrolę dostępu? Jakie są Twoje przemyślenia na ten temat i czym kierujesz się przy podejmowaniu takich decyzji projektowych?


title: Dlaczego wersja iteracyjna trwa dłużej?

text: Przeglądałem stronę http://programming.lispdream.com/blog/2011/06/recursion- vs-iteration/ i zauważyłem, że przy jego implementacji rekurencyjnych i iteracyjnych implementacji funkcji silni, iteracja trwa dłużej biorąc pod uwagę n = 1000. Nie wiem dlaczego (nie wyjaśnia, ale mówi, że to ćwiczenie dla czytelnika). Przepraszam za moją nowość w tym wszystkim.


title: Wykorzystanie c89 w oprogramowaniu GNU

text: W standardzie kodowania GNU mówi się, że twórcy wolnego oprogramowania powinni używać C89, ponieważ C99 nie jest jeszcze rozpowszechniony. > 1999 Standard C nie jest jeszcze rozpowszechniony, więc proszę nie wymagać jego funkcji > w programach. Odniesienie tutaj. Czy mówią o znajomości C99 przez programistów, czy o wspierających go kompilatorach? Czy to stwierdzenie jest również wiarygodne na dzień dzisiejszy, czy też jest nieco „przestarzałe” lub przynajmniej przestarzałe.


title: Lepszy styl dla zmiennych składowych?

text: class awesomeClass { std::list<A> mojaLista; //... void fillList(); }; awesomeClass::awesomeClass() { fillList(); } void awesomeClass::fillList(){ //... foreach(A a, otherList) myList.push_back(a); //dodaj do listy } W porównaniu z: awesomeClass::awesomeClass() { myList = fillList(); } std::list<A>& awesomeClass::fillList() { //... std::list<A> ret; foreach(A a, otherList) ret.push_back(a); //dodaj do listy return ret; } To jest po prostu klasa ze zmienną `std::list` jako zmienną składową i funkcją, która wypełnia tę listę. Pierwszy wypełnia ją wewnątrz funkcji, a drugi zwraca listę i przypisuje ją do listy członków. Który z nich jest lepszym stylem? Ten, który wypełnia listę wewnątrz funkcji, czy ten, który zwraca listę? A może jest jeszcze lepsze rozwiązanie?


title: Rozwijanie Androida na Androida

text: Czy istnieje obecnie sposób na tworzenie aplikacji na Androida na telefonie z Androidem? Innymi słowy, pisać, kompilować, instalować i uruchamiać zwykłą javę na Androida na telefonie bez użycia komputera? Jeśli nie, to co by to umożliwiło, jeśli w ogóle? (czy rootowanie byłoby konieczne? A może emulator Androida skompilowany dla Androida?)


title: Jak gorutyny, włókna rubinowe itp. wyglądają na OS/kernel?

text: W przypadku współbieżności procesów i współbieżności wątków jest dość oczywiste, jak jądro je widzi, ponieważ mapują one bezpośrednio na rzeczywiste rzeczy, którymi zarządza jądro. Jeśli chodzi o gorutyny Golang i włókna rubinowe (to są podobne rzeczy, prawda?) Nie mam pojęcia, jak się nimi zarządza. Czy są one zarządzane przez implementację odpowiednich języków/maszynę wirtualną (wiem, że Go nie ma maszyny wirtualnej) czy są mapowane na coś, z czym lepiej radzi sobie jądro?


title: Czy jest możliwe, aby technicznie otwarta aplikacja (w szczególności javascript) została wydana na licencji własnościowej?

text: Wydanie aplikacji javascript nie będzie technicznie zamkniętym kodem źródłowym - w najlepszym razie może być zaciemnione. Biorąc to pod uwagę, moje pytanie składa się z dwóch części: > * Czy jest w ogóle możliwe wydanie technicznie otwartej aplikacji > na licencji własnościowej? > * Czy są jakieś przykłady aplikacji, które są technicznie otwarte, > są utrzymywane na licencji własnościowej i są opłacalne > sprzedawane? >


title: Jak znaleźć wszystkie połączenia w sieci/grafie mesh?

text: Załóżmy, że mam sieć relacji, taką jak * Przyjaciele, którzy ufają niektórym znajomym, a innym nie * Router IPv6, który musi zlokalizować peerów w Internecie * Sieć zaufania PGP, która potrzebuje dwóch osób, aby zlokalizować poziom zaufania. zainteresowanych określeniem nie tylko najkrótszej ścieżki, ale także kosztu każdej z nich (dowolną wagę należy dodać), węzłów każdej ścieżki i innych informacji zwykle używanych w tej ogólnej potrzebie. Jakie są podejścia, aby zaspokoić tę potrzebę? Idealnie byłoby to coś, co mogę uruchomić lokalnie na telefonie lub komputerze i przeszukać duży wykres z prędkością O(N) lub lepszą.


title: Różnica między stertą a kolejką priorytetową

text: Zawsze myślałem, że sterty i kolejki priorytetowe są synonimami - abstrakcyjną strukturą danych, która obsługuje operacje `insert`, `findMin` i `deleteMin`. Wydaje się, że część literatury się ze mną zgadza – na przykład Czysto funkcjonalne struktury danych Chrisa Okasaki (rozdział 3). Z drugiej strony, strona sterty Wikipedii definiuje ją jako strukturę danych opartą na drzewie i stwierdza, że sterty są konkretną implementacją kolejek priorytetowych. Trudno mi się z tym pogodzić z faktem, że mogę wymyślić więcej niż jedną implementację sterty - sterty lewicowe, sterty dwumianowe, sterty rozłożone... Czy prosty fakt, że stertę można zaimplementować z różnymi strukturami danych, nie oznacza, z definicji, że jest to abstrakcyjna struktura danych? A jeśli tak, to czy jest rzeczywista różnica z kolejkami priorytetowymi?


title: Wydajność getterów/seterów z wydajnością bazy danych

text: Obecnie jestem w trakcie refaktoryzacji mojego bardzo starego osobistego projektu, który wykorzystywał proceduralny kod PHP-in-HTML. Modernizuję go jako projekt edukacyjny, używając OOP tam, gdzie jest to korzystne. Rozumiem podstawy programowania obiektowego, ale zastanawiam się, czy dobrze rozumiem, ponieważ wydawałoby się, że mój stary sposób na robienie tego był w tym przypadku szybszy. Na stronie profilu użytkownika wymienione są wszystkie jego statystyki. Jest to gra, więc istnieje wiele indywidualnych pól zawierających statystyki, takie jak wygrane, przegrane itp. Teraz stworzyłem klasę użytkownika i nadałem każdej statystyce własny pobierający/ustawiający. Typowa para wygląda tak: function getEmoticon() { if ($this->emoticon) { return $this->emoticon; } $stmt = $this->conn->prepare('SELECT emotikon FROM profile WHERE id=:userid'); $stmt->execute(array('userid' => $this->userid)); $wiersz = $stmt->pobierz(); return $this->emoticon = $row['emoticon']; } function setEmoticon($emoticon) { $stmt = $this->conn->prepare('AKTUALIZUJ profil SET emoticon=:emoticon WHERE id= :id'); $stmt->execute(array('id' => $this->userid, 'emoticon' => $emoticon)); return $this->emoticon = $emoticon; } Kiedyś istniało jedno zapytanie SQL "GET * FROM profile", aby uzyskać wszystkie statystyki użytkownika w jednym zapytaniu. Teraz jednak uciekam się do używania gettera dla każdej statystyki, co skutkuje zapytaniem do bazy danych dla każdej statystyki. Na stronie profilu oznacza to, że przeszło od 1 zapytania do bazy danych do kilkudziesięciu. Czy to właściwy sposób na robienie rzeczy? Wydaje się to bardziej nieefektywne, ale nie jestem pewien, jak inaczej to zrobić, chyba że mam metodę klasy User, taką jak getAllStats() lub coś takiego.


title: Kto powinien mieć pełną widoczność wszystkich informacji o wymaganiach (nie dotyczących danych)?

text: Pracuję w małej firmie średniej wielkości, gdzie wymagania są czasami niczym innym jak e-mailem lub krótkim spotkaniem z kierownikiem tematycznym wymagającym jakiejś nowej funkcji. Czy programista pracujący nad funkcją powinien rozsądnie oczekiwać, że będzie miał dostęp do takich „e-maili z żądaniami” i innych informacji o wymaganiach? Czy bardziej odpowiednie jest, aby "menedżer programu" (PGM) przepisał wszystkie wymagania przed udostępnieniem ich programistom? Firma nie jest zorientowana na technologię i zatrudnia od 50 do 250 pracowników. (mniej niż 10 programistów w sumie) Nasze "oprogramowanie" do zarządzania projektami składa się z "TODO.txt" wpisanego do kontroli źródeł w "/doc/". Uwaga: nie ma to nic wspólnego z „dostępem do danych wrażliwych”. Chyba że styl korespondencji e-mailowej kierownika tematu jest ściśle tajny. Biorąc pod uwagę sugerowany duplikat, być może może to być wojna o terytorium, ponieważ PGM chciałoby określić JAK. Podczas gdy DLACZEGO nie ma, a CO jest zagmatwane w czasie, gdy dociera do programistów... Zasadniczo. Czy specyfikacja powinna być przejrzysta dla programistów? Być może istnieje historia wymagań. Czy programista nie powinien być w stanie zobaczyć historii żądań, jeśli/kiedy może stwierdzić, że coś jest **dziwne** w specyfikacji? To nie jest kwestia organizacji wymagań. Jest to pytanie o KTO powinien mieć pełną WIDOCZNOŚĆ wymagań. Sugerowałbym, że powinni to być WSZYSCY INTERESARIUSZE. Proszę, wskaż, gdzie się mylę.


title: Dlaczego istnieje alternatywna strona pobierania Pythona dla Chin?

text: Na http://python.org znajdują się dwie strony pobierania: http://python.org/download/ dla użytkowników międzynarodowych i http://python.org/getit/ dla użytkowników chińskich. W przypadku dostępu z kraju innego niż Chiny, drugi link przekierowuje do normalnej strony pobierania. Dlaczego to jest takie?


title: Dekoratory Pythona i makra Lisp

text: Szukając dekoratorów Pythona, ktoś stwierdził, że są one równie potężne jak makra Lispa (szczególnie Clojure). Patrząc na przykłady podane w PEP 318, wydaje mi się, że są one po prostu wymyślnym sposobem użycia zwykłych starych funkcji wyższego rzędu w Lispie: def attrs(**kwds): def decor(f): for k w kwds: setattr(f, k, kwds[k]) return f return udekoruj @attrs(versionadded="2.2", autor="Guido van Rossum") def mymethod(f): ... nie widziałem żadnego transformującego kodu w dowolny z przykładów, jak opisano w Anatomy of a Clojure Macro. Dodatkowo brak homoikoniczności Pythona _może_ uniemożliwić przekształcenia kodu. Więc, jak te dwie rzeczy porównują się i czy możesz powiedzieć, że są prawie równe w tym, co możesz zrobić? Dowody wydają się temu przemawiać. **Edycja:** Na podstawie komentarza szukam dwóch rzeczy: porównania „tak potężny jak” i „tak łatwy do robienia niesamowitych rzeczy”.


title: Jakie są zalety i wady przechowywania liczby komentarzy w kolumnie liczb całkowitych w porównaniu z obliczaniem jej w locie?

text: Weźmy jako przykład stronę CodeReview. Jeśli wejdziesz tutaj, zobaczysz listę pytań z ich numerami głosów i numerami komentarzy Teraz zastanawiam się, czy te liczby są obliczane w locie (np. Policz wszystkie komentarze w db dla tego pytania), czy jest jakiś rzeczywiste pole w tabeli `questions` o nazwie `voteCount` i jest zwiększane o jeden za każdym razem, gdy ktoś głosuje na to pytanie? Jeszcze jedno pytanie. Zarówno VoteCount, jak i CommentCount to tylko liczby całkowite. A co z informacjami o użytkowniku wyświetlanymi dla każdego pytania? Mam nadzieję, że to właściwe miejsce, aby zadać to pytanie.


title: Wstępne buforowanie zasobów graficznych HTML

text: Napisałem przeglądarkę internetową, w której źródło javascript w zasadzie pozyskuje obraz zgodnie z „aktywną” klasą na liście. Zastanawiałem się, jakie są dobre nowoczesne techniki, dzięki którym obrazy ładują się szybciej w tle, dzięki czemu użytkownik może uzyskać lepsze wrażenia podczas przeglądania obrazów. Oczywiście pobieranie wszystkich obrazów nie ma sensu, wyobrażam sobie, że musi być tak, jak podczas przewijania mapy Google w zasadzie obrazy są ładowane na żądanie.


title: Czy należy przedkładać spójność nad konwencję programowania?

text: Czy przy projektowaniu klasy należy przedkładać spójność w zachowaniu nad zwykłą praktykę programistyczną? Podam konkretny przykład: Powszechna konwencja jest taka: Jeśli klasa jest właścicielem obiektu (np. stworzyła go), jest odpowiedzialna za posprzątanie go po zakończeniu. Konkretnym przykładem może być w .NET, że jeśli twoja klasa jest właścicielem obiektu `IDisposable`, powinna go usunąć pod koniec jego życia. A jeśli go nie posiadasz, nie dotykaj go. Teraz, jeśli spojrzymy na klasę `StreamWriter` w .NET, możemy znaleźć w dokumentacji, że zamyka ona podstawowy strumień, gdy jest zamykany/usuwany. Jest to konieczne w przypadkach, gdy instancja `StreamWriter` jest tworzona przez przekazanie nazwy pliku, ponieważ writer tworzy podstawowy strumień plików i dlatego musi go zamknąć. Można jednak również przejść do zewnętrznego strumienia, który pisarz również zamyka. To mnie denerwowało wiele razy (tak, wiem, że możesz zrobić opakowanie bez zamykania, ale nie o to chodzi), ale najwyraźniej Microsoft podjął decyzję, że bardziej konsekwentnie jest zawsze zamykać strumień bez względu na to, skąd pochodzi. Kiedy natrafię na taki wzorzec w jednej z moich klas, zwykle tworzę flagę `ownsFooBar`, która jest ustawiana na false w przypadkach, gdy `FooBar` jest wstrzykiwany przez konstruktor, a na true w przeciwnym razie. W ten sposób odpowiedzialność za jego posprzątanie jest przekazywana do wywołującego, gdy jawnie przekazuje instancję. Teraz zastanawiam się, czy może konsekwencja powinna być lepsza od najlepszych praktyk (a może moja najlepsza praktyka nie jest tak dobra)? Jakieś argumenty za/przeciw? **Edytuj w celu wyjaśnienia** Przez „spójność” mam na myśli: Spójne zachowanie klasy zawsze przejmującej własność (i zamykającej strumień) w porównaniu z „najlepszymi praktykami”, aby przejąć własność obiektu tylko wtedy, gdy go utworzyłeś lub wyraźnie przeniosłeś własność . Jeśli chodzi o przykład, w którym jest to przyjemne: Załóżmy, że masz dwie podane klasy (z jakiejś biblioteki innej firmy), które akceptują strumień, aby coś z nim zrobić, na przykład tworzenie i przetwarzanie niektórych danych: public class DataProcessor { public Result ProcessData(Stream input) { using (var reader = new StreamReader(input)) { ... } } } public class DataSource { public void GetData(Stream output) { using (var writer = new StreamWriter(output)) { .... } } } Teraz chcę go użyć w następujący sposób: Wynik ProcessSomething(DataSource source) { var processor = new DataProcessor(); ... var ms = new MemoryStream(); źródło.GetData(ms); zwróć procesor.ProcessData(ms); } To się nie powiedzie z wyjątkiem `Nie można uzyskać dostępu do zamkniętego strumienia` w procesorze danych. To trochę skonstruowane, ale powinno to zilustrować. Są różne sposoby, aby to naprawić, ale mimo to czuję, że pracuję nad czymś, czego nie powinienem.


title: Pochodzenie terminu „boks” w języku programowania?

text: Jakie było pierwsze środowisko programistyczne (prawdopodobnie język), które używało słów „boxing” i „unboxing” do wskazania enkapsulacji typu prymitywnego w jakimś opakowaniu, aby umożliwić jego użycie w kontekstach bardziej obiektowych? (Lub coś w tym stylu.) (Niedawno zauważyłem, że "boks" jest bardzo krytyczną koncepcją w języku programowania J, więc podejrzewam, że może pochodzić z APL. Mój współpracownik myśli, że może pochodzić z LISP-a.)


title: Czy uzasadnione jest używanie unikalnych nazw funkcji i zmiennych w całym projekcie, aby pomóc w przyszłej refaktoryzacji?

text: Narzędzia do refaktoryzacji (takie jak ReSharper) często nie mają pewności, czy zmienić nazwę danego identyfikatora, na przykład podczas refaktoryzacji funkcji JavaScript. Myślę, że jest to konsekwencją dynamicznej natury JavaScriptu. ReSharper rozwiązuje ten problem, oferując również zmianę nazwy rozsądnych dopasowań leksykalnych. Deweloper może zrezygnować ze zmiany nazwy niektórych funkcji, jeśli uzna, że dopasowanie leksykalne jest czysto przypadkowe. Oznacza to, że deweloper musi zatwierdzić każdą instancję, której dotyczy zmiana nazwy. Na przykład rozważmy, że mamy dwie klasy Backbone, które są używane w naszej aplikacji całkowicie niezależnie od siebie: var Header = Backbone.View.extend({ close: function() {...} }) var Dialog = Backbone.View. extend({ close: function() {...} }) Jeśli spróbujesz zmienić nazwę metody `close` okna dialogowego na na przykład `closeAndNotify`, ReSharper zaproponuje zmianę nazwy wszystkich wystąpień `Header` Metoda `zamknij` tylko dlatego, że są one takie same leksykalnie przed zmianą nazwy. Aby uniknąć tego problemu, rozważ to: var Header = Backbone.View.extend({ closeHeader: function() {...} }) var Dialog = Backbone.View.extend({ closeDialog: function() {... } }) Teraz możesz jednoznacznie zmienić nazwę closeDialog - biorąc pod uwagę, że nie masz innych klas mających metodę o tej samej nazwie. Czy warto nazywać moje funkcje w ten sposób, aby pomóc w przyszłej refaktoryzacji?


title: Zawiodłem FizzBuzz, zatrudniłbyś mnie?

text: Jestem programistą z dyplomem CS i mam doświadczenie w pracy nad programowaniem w wielu językach od prawie 3 lat. Dzisiaj miałam wywiad, ogólnie poszło całkiem nieźle, przygotowałam się na większość pytań i czułam się gotowa na wszystko. Pod koniec wywiadu dali mi JEDNO pytanie dotyczące programowania… problem taki jak FizzBuzz (bez wypisywania części z numerem). Uważam, że popełniłem zbyt wiele błędów i przez to „zawiodłem”. Czy cała nadzieja jest dla mnie stracona? Oto mój kod: void FizzBuzz() { for(int i = 0; i <= 100; i++) { bool isThree = i % 3; bool to Pięć = i % 5; if (isThree) { print "Fizz\n"; } else if(isFive) { print "Buzz\n"; } else { print "FizzBuzz\n"; } } } Jak widać, popsułem wartości logiczne, które powinny mieć składnię i % 3 == 0; Jeśli dobrze pamiętam pytanie, wstawiam też else zamiast elseif z isThree && isFive. Byłem dość zestresowany, ale to nie usprawiedliwienie przeoczenia prostego problemu. Więc pytanie brzmi, jak ważna jest umiejętność tworzenia działającego kodu na miejscu w stosunku do innych czynników, takich jak doświadczenie i osobowość? Na przykład, czy powyższy kod byłby łamaczem umowy?


title: Znaczenie składni parametru wymiennego

text: Składnia parametru wymiennego dla obiektu konsoli w języku C#. Biorę O'Reilly C# Course 1 i prosi o wymienną składnię parametrów i nie jest jasne, co to oznacza. Obecnie użyłem tego: podwójny problem = 99999.0009; podwójna bańka = 11111.0001; Console.WriteLine(problem * bańka); Czy brakuje mi znaczenia składni parametrów wymiennych? Czy ktoś może podać przykład tego, czego szukam? Oryginalne pytanie do quizu: „Utwórz dwie zmienne, obie podwajające, przypisz im liczby większe niż 10 000 i dołącz składnik dziesiętny. Wyświetl wynik mnożenia liczb razem, ale użyj wymiennej składni parametrów obiektu Console i pomnóż liczby w wywołaniu metody Console.WriteLine()."


title: Jak działają systemy operacyjne… bez posiadania systemu operacyjnego do uruchomienia?

text: Jestem teraz naprawdę ciekawa. Jestem programistą Pythona i to pytanie po prostu mnie zaskoczyło: piszesz system operacyjny. Jak to prowadzisz? Musi być jakoś uruchomiony, a tak jest w innym systemie operacyjnym? Jak aplikacja może działać, nie będąc w systemie operacyjnym? Jak powiedzieć komputerowi, aby uruchomił, powiedzmy, C i wykonał te polecenia na ekranie, jeśli nie ma systemu operacyjnego do uruchomienia? Czy ma to związek z jądrem UNIX? Jeśli tak, to czym jest jądro Uniksa lub ogólnie jądro? Jestem pewien, że systemy operacyjne są bardziej skomplikowane, ale jak to działa?


title: Szukasz narzędzia do analizy sesji/zdarzeń

text: Mam dane, które zasadniczo składają się z zestawu sesji wypełnionych wydarzeniami. Na przykład: Sesja1 - [Zdarzenie1] [Zdarzenie2] [Zdarzenie3]...[Zdarzenie64] Sesja2 - [Zdarzenie1] [Zdarzenie3] [Zdarzenie4]...[Zdarzenie64] Same dane znajdują się obecnie w bazie danych MySQL w następujących 2 tabele: sesje: id, zdarzenia czasowe: sessionId, sekwencja, zdarzenie Muszę stworzyć ścieżki w procentach, które pokazują ruch od jednego zdarzenia do drugiego. Potrzebuję narzędzia do analizy sesji i wygenerowania połączonego „drzewa”, aby pokazać, dokąd poszła większość użytkowników. Przykład: START -> Zdarzenie1 -- 50% --> Zdarzenie 2 | | ----- 50 % --> Zdarzenie 3 -- 20% --> Zdarzenie 23 | ------- 30% --> Wydarzenie 24 | ------- 50% --> Zdarzenie 25 Dla uproszczenia mogę również założyć, że w analizie nie są potrzebne żadne cykle. Jeśli na przykład natkniemy się na te sesje: [Zdarzenie 1] [Zdarzenie 2] [Zdarzenie 3] [Zdarzenie 2] [Zdarzenie 1] [Zdarzenie 2] [Zdarzenie 2] Wtedy przetworzone drzewo będzie uporządkowane tak: [Zdarzenie 1 ] -- 100% --> Zdarzenie 2 -- 50% --> [Zdarzenie 3] -- 100% --> [Zdarzenie 2] | ------- 50% --> [Zdarzenie 2] Mogę też spokojnie założyć, że wszystkie sesje zaczynają się od [Zdarzenia 1]. Teraz zawsze mogę napisać kod, aby uporządkować dane w określony sposób, ale analiza i wizualizacja wydają się nieco skomplikowane. Również liczba sesji jest dość duża (kilka milionów). Czy jest jakieś istniejące narzędzie lub framework, który może mi pomóc to przeanalizować?


title: Usługa potwierdzania autorstwa z zaufanym znacznikiem czasu

text: To pytanie dotyczy praw autorskich. Prawa autorskie są domyślnie przyznane autorowi jakiegoś kodu, jednak wymaga to udowodnienia, że jakaś osoba jest „pierwszym” autorem jakiegoś fragmentu kodu. Rozważmy następujący przykład: * Andy pisze kod w 2010 roku i przechowuje go w niewystarczająco bezpiecznym miejscu. * Brian kopiuje ten kod w 2011 roku i rejestruje ten kod w jakimś serwisie, aby powiązać go z jakimś znacznikiem czasu, aby udowodnić, że miał go napisany w 2011 roku. * Andy decyduje, że powinien być w stanie udowodnić, że jest autorem jeszcze nieopublikowanego kodu i otrzymuje dochody jako Brian w 2012 roku. * Carol musi osądzić, kto jest pierwotnym autorem tego kodu w 2013 roku, a wszystkie dowody przemawiają na korzyść Briana. Myślę, że taka usługa jest ważna i jeśli się nie mylę, są takie usługi, które oferują to za cenę. Jednocześnie w dzisiejszych czasach istnieje wiele usług opartych na git, takich jak Github, Bitbucket, Assembla itp., które zapewniają system kontroli wersji i przechowują wszystkie różne wersje udostępnione dla pewnego kodu w czasie. Są bezpłatne i oferują naprawdę fajne funkcje. W niektórych z nich istnieje możliwość zdefiniowania repozytorium jako prywatnego, a następnie przełączenia go na publiczne, gdy kod będzie gotowy do wydania. Problem z usługami opartymi na git polega na tym, że ufają i wierzą klientowi w terminach zatwierdzeń. Oznacza to, że jeśli Brian zatwierdzi w 2011 roku jakiś kod i opublikuje go (wypchnie), to David będzie mógł manipulować datą na swoim komputerze, aby udawać, że popełnił ten kod w 2009 roku, pokonując Briana i Andy'ego (prawdziwego autora kodu). Więc zasadniczo chciałbym wiedzieć, czy istnieje jakaś usługa, która: * obsługuje znaczniki czasu w sposób godny zaufania * umożliwia publikację kodu * umożliwia publikowanie różnych wersji i różnic * pozwala na prywatne repozytoria, które można upublicznić, jeśli zdarzy się gówno * jest bezpłatny Jak dotąd najbardziej rozsądnym podejściem, jakie znalazłem, jest wysłanie czegoś pocztą. Nawet jeśli można manipulować nagłówkami MIME, serwery SMTP w trasie nie powinny być rozsądnie godne zaufania i ustawiają znacznik czasu, w którym poczta przez nie przechodzi. To cały bałagan w porównaniu na przykład z bitbucketem, nie możesz czytać moich e-maili (mam szczerą nadzieję). Bitbucket pozwala na prywatne repozytoria, repozytoria mogą być upubliczniane ze wszystkimi poprzednimi wersjami i różnicami itp. Jedyny problem: znaczniki czasu mogą być manipulowane, przez co nie są godne zaufania. Więc pytanie brzmi: czy wiesz o takiej usłudze? PD: E-maile powinny być tak samo ważne jak zwykła poczta lub depozyty, nawet jeśli mogą wzbudzić większe zdziwienie wśród prawników. Ale nawet jeśli tarball w e-mailu jest czymś prostym do stworzenia i zrobienia, dużo bardziej naturalne jest po prostu użyć jakiegoś CVS, które i tak powinno być używane. Mają już nawet znaczniki czasu i myślę, że powinno to działać w systemach scentralizowanych, takich jak subversion, gdzie znacznik czasu jest ustawiany przez serwer. Więc może usługi, które pozwalają na repozytoria subversion (SourceForge, Assembla, Google Code, itp.) mogą wystarczyć? Czy wystarczy? Czy znasz inne (prawdopodobnie lepsze) alternatywy? Assembla wydaje się być jedyną, która spełnia wszystkie wymagania. Dziękuję Ci.


title: Jak zapewnić jakość kodu?

text: Uczę się programowania w C# od około półtora roku. Jak mam się upewnić, że pisany przeze mnie kod i wyrabiane przeze mnie nawyki są dobre? tj. Nie chcę skończyć z napisanym kodem, który tylko ja mogę zrozumieć. Wiem, że musimy używać konwencji nazewnictwa zgodnie z językiem. Ale czy są jeszcze jakieś konkretne wytyczne, o których muszę pamiętać? Jakieś zasady, które różne firmy narzucają swoim programistom podczas pisania kodu? Wszelkie standardy dokumentacji ? Pomocne byłyby również wszelkie książki/strony internetowe.


title: Problem z powtarzaniem cyfr

text: Na liście znajdują się liczby od 1 do N oraz dodatkowy numer, który został dodany przez pomyłkę. Tak więc w sumie jest N+1 liczb. Załóżmy, że największą liczbą całkowitą, jaką język może obsłużyć, jest N. Jaki jest najszybszy algorytm do znalezienia cyfry powtórzenia? Uwaga: to nie jest problem z pracą domową.


title: Jak powinienem połączyć się z moim frameworkiem php, aby używać metod napisanych w frameworku, w środowisku agnostycznym frameworka?

text: Moja firma prowadzi 2 strony internetowe, ogólnodostępną stronę internetową dla klientów oraz intranet dla pracowników. Intranet jest używany jako zaplecze dla pracowników do edytowania i utrzymywania różnych części publicznej witryny internetowej. Oba są napisane w PHP. Intranet jest starszy o lata i został zaprojektowany przy użyciu wewnętrznego frameworka. Niedawno stworzyliśmy nową publiczną stronę internetową, a ze względu na możliwość „zacząć z nią od zera” zaprojektowaliśmy ją z wykorzystaniem frameworka PHP (Kohana). Od początku wiedzieliśmy, że będą problemy z wdrożeniem, jeśli intranet będzie działał z witryną publiczną i na odwrót. Jesteśmy teraz w tym punkcie. Istnieje kilka różnych sposobów, w jakie udało nam się sprawić, by wszystko działało: W przypadku bezpośredniej manipulacji danymi oba używają mysql, więc konstruktor zapytań w Kohana może manipulować tymi samymi danymi, co proste zapytania mysqli w intranecie. Ale poza tym, gdy strona publiczna musi korzystać z pewnych metod audytu napisanych w ramach intranetu lub gdy intranet musi wysłać automatyczną wiadomość e-mail napisaną w Kohana lub użyć dowolnej liczby innych metod i funkcji, mamy 1- Uwzględniono jeden w ramach drugiej, aby mieć dostęp do obu. Problemy z tym to: Oba polegają na buforowaniu obiektów w celu przygotowania danych wyjściowych i stale rozpoczynają i kończą bufory w nieparzystych momentach. b. b. Konfliktowe nazwy klas są ładowane automatycznie. re. autoloadery nadpisujące się nawzajem błędy zaprojektowane do obsługi w jeden sposób są niewłaściwie obsługiwane przez program obsługi błędów innego frameworka. mi. wiele innych problemów z niekompatybilnością Poradziliśmy sobie z nimi w poszczególnych przypadkach, ale to był koszmar. 2. Używanie zdalnego API. Na każdym serwerze napisaliśmy metody webservice, a drugi framework wysyła żądanie cURL do drugiego serwera. Problemy z tym to: Dodatkowa praca polegająca na ochronie interfejsu API i uwierzytelnianiu żądań b. konieczność pisania metod obsługi c. Narzut związany z koniecznością wykonywania żądań http zamiast lokalnego ładowania plików 3- Korzystanie z lokalnego interfejsu API. Podobnie jak powyżej, z wyjątkiem tego, że framework znajduje się na tym samym serwerze, a metody api są napisane w skryptach powłoki, które wyprowadzają dane do odczytania przez skrypt wywołujący poprzez `shell_exec`. To łagodzi potrzebę uwierzytelniania, ale wydaje się to brzydkim, zwariowanym sposobem robienia rzeczy. Nie chcemy przepisywać intranetu przy użyciu odpowiedniego frameworka. Zajęłoby to niewiarygodną ilość czasu, którego my nie mamy. Czy istnieje lepszy sposób na zrobienie tego, a przynajmniej bardziej „standardowy” lub „konwencjonalny” sposób radzenia sobie z tym problemem? A może utknęliśmy w hakowaniu, tak jak obecnie?


title: Napraw błędy, czy poczekaj, aż klient je znajdzie?

text: Czy inni ludzie naprawiają błędy, gdy je widzą, czy też czekają, aż nastąpi awaria/utrata danych/ludzie, zanim to naprawią? ## Przykład 1 Klient klient = null; ... klient.Zapisz(); Kod jest wyraźnie błędny i nie da się tego obejść — wywołuje metodę na odwołaniu o wartości null. Zdarza się, że nie ulega awarii, ponieważ „Zapisz” nie uzyskuje dostępu do żadnych danych instancji; więc to jest jak wywołanie funkcji statycznej. Ale każda drobna zmiana w dowolnym miejscu może nagle spowodować zepsuty kod, który nie ulegnie awarii: zacznie się awaria. **Ale** , nie jest też _nie do pomyślenia_, że poprawianie kodu: Customer customer = null; ... klient = nowy Klient(); spróbuj... klient.Zapisz(); ... wreszcie klient.Free(); koniec; może _wprowadzić_ awarię; taki, który nie został odkryty w testach jednostkowych z pełnym pokryciem i ręcznych testach użytkowników. ## Przykład 2 prędkość pływaka = 0.5 * ((G * masa1 * masa2) / R) * Pow(czas, 2); Osoby znające fizykę rozpoznają, że w mianowniku ma być R2. Kod jest zły, jest absolutnie zły. A przeszacowanie prędkości spowoduje, że retrorakiety wystrzelą zbyt wcześnie, zabijając wszystkich pasażerów statku kosmicznego. Ale możliwe jest również, że przeszacowanie prędkości maskuje inny problem: poduszki powietrzne nie mogą się uruchomić, gdy prom porusza się zbyt szybko. Jeśli nagle naprawimy kod: float speed = 0.5 * ((G * masa1 * masa2) / Pow(R, 2)) * Pow(czas, 2); Teraz prędkość jest dokładna i nagle poduszki powietrzne uruchamiają się, kiedy nie powinny. ## Przykład 3 Oto przykład, który ostatnio miałem, sprawdzając, czy ciąg zawiera nieprawidłowe znaki: if (StrPos(Address, "PO BOX") >= 0 { //Zrób coś } Co jeśli okaże się, że jest błąd w Gałąź `Zrób coś` Naprawienie wyraźnie niepoprawnego kodu: if (StrPos("PO BOX", Address) >= 0 { //Zrób coś } Naprawia kod, ale wprowadza błąd. * * * Sposób, w jaki to widzę są dwie możliwości: * naprawienie kodu i zostaniesz obwiniony za jego złamanie * poczekaj na awarię kodu i zostaniesz obwiniony za posiadanie błędu Co _ty_ robisz politycznie? * * * ## Przykład 4 - Dzisiejszy błąd w prawdziwym świecie konstruowanie obiektu, ale wywołanie niewłaściwego konstruktora: Customer customer = new Customer (); Okazuje się, że konstruktor „bezparametrowy” jest w rzeczywistości konstruktorem sparametryzowanym z dalszej części łańcucha dziedziczenia: public Customer(SomeObjectThatNobodyShouldBeUsingDirectly thingy = null) p Klient ublic (InjectedDependancy zależy) Wywołanie go jest błędem, ponieważ omija wszystkie kolejne konstruktory. Mógłbym zmienić rodowód obiektu, aby nie ujawniać tak niebezpiecznego konstruktora, ale teraz muszę zmienić kod na: Customer customer = new Customer(depends); Ale nie mogę zagwarantować, że ta zmiana niczego nie zepsuje. Jak mój **Przykład 1** powyżej, być może ktoś, gdzieś, w jakiś sposób, w pewnych ezoterycznych warunkach, zależy od tego, czy skonstruowany `Klient` jest nieprawidłowy i pełen śmieci. Być może obiekt `Customer`, teraz, kiedy jest **prawidłowo** skonstruowany, pozwoli uruchomić kod, którego wcześniej nigdy nie robił, a teraz mogę się zawiesić. nie mogę postawić na to życia twojej żony. I mogę to przetestować od teraz do wtorku, nie mogę przysiąc na życie twojej córki, że nie wprowadziłem regresji. Czy: * naprawiłem kod i zostałem obwiniony za jego złamanie? lub * zostaw błąd i obwiniaj się, gdy klient go znajdzie?


title: Oddzielić kod interfejsu użytkownika?

text: W mojej aplikacji mam kilka programów obsługi zdarzeń, które wykonują jakąś akcję w odpowiedzi na zdarzenia interfejsu użytkownika, takie jak kliknięcie przycisku lub wybór menu. Kod w tych procedurach obsługi zdarzeń wygląda tak na przykład: void MyDialog::OnCommandLoadFile() { char strFilter[] = { "Pliki tekstowe (*.txt)|*.txt|Wszystkie pliki (*.*)|*.* ||" }; CFileDialog fileDlg(PRAWDA, ".txt", NULL, 0, strFilter); if( fileDlg.DoModal() == IDOK ) { const std::string path = fileDlg.GetPathName(); std::vector<std::string> adresy URL; int maxNumberOfUrls = settings_->Pobierz<int>(Ustawienia::MaxNumberOfUrls); UrlProvider *urlProvider = new FileUrlProvider(ścieżka); urlProvider->GetUrls(urls, maxNumberOfUrls); webMonitoringService_->MonitorUrls(urls); DisplayMessage("Załadowano adresy URL."); } } Jest to typowe dla moich programów obsługi zdarzeń. Nie koduję monolitycznych programów obsługi zdarzeń, ale „sklejają” ze sobą różne elementy. Zwykle mam kilka klas logiki biznesowej/usług, do których interfejs użytkownika ma odniesienie, aw programach obsługi zdarzeń wywołuję jedną lub więcej z nich, aby wykonać żądane zadanie. Zastanawiam się, czy to nadal jest zbyt połączone? Gdybym chciał zmienić to w aplikację wiersza poleceń, musiałbym wyodrębnić fragmenty z kodu interfejsu użytkownika. W powyższym przykładzie trwa akcja złożona, więc myślę, że powinna wyglądać bardziej tak: void MyDialog::OnCommandLoadFile() { char strFilter[] = { "Pliki tekstowe (*.txt)|*.txt |Wszystkie pliki (*.*)|*.*||" }; CFileDialog fileDlg(PRAWDA, ".txt", NULL, 0, strFilter); if( fileDlg.DoModal() == IDOK ) { const std::string path = fileDlg.GetPathName(); aplikacja->MonitorUrlsFromFile(ścieżka); DisplayMessage("Załadowano adresy URL."); } } Czy to prawda? Czym w powyższym kodzie byłaby „aplikacja”? Kontroler? Czy to właściwa abstrakcja? Ilekroć potrzebuję wykonać jakieś zadanie w programie obsługi interfejsu użytkownika, powinien to zawsze być jednowierszowy (oprócz pobierania danych do lub z pól tekstowych itp.) Każdy ma wskaźnik do samouczka, który naprawdę to obejmuje (w dowolnym języku programowania )? Co więcej, jeśli w rzeczywistości powinieneś abstrahować akcje złożone, jak propagować komunikaty o błędach z poziomu abstrakcji złożonej z powrotem do interfejsu użytkownika? Hierarchia wyjątków? Pojedynczy wyjątek z kodem błędu? **AKTUALIZACJA** Patrzę na wzorzec poleceń, który wygląda obiecująco. **UPDATE 2** W końcu zdecydowałem się na refaktoryzację kodu zgodnie z opisem w artykule Humble Dialog Box w zaakceptowanej odpowiedzi. Rozumiem, że jest to wzorzec typu prezentera widoku modelu (MVP), a dokładniej widok pasywny. Refaktoryzacja przebiega sprawnie. W moim zrozumieniu pełnego zastosowania wzorca są pewne szorstkie krawędzie, jeśli chodzi o takie rzeczy, jak wyświetlanie okienek komunikatów i okien dialogowych otwierania plików lub radzenie sobie z licznikami zdarzeń, ale ogólnie jestem bardziej zadowolony z mojego kodu; ciasne połączenie niepokoiło mnie. Znalazłem również ten "pakiet": wzorce i praktyki Wskazówki programisty klienta internetowego: Pakiet prezentera modelu widoku (MVP), który zawiera przykładowy kod MVP. Jest to projekt internetowy, podczas gdy moja obecna implementacja to komputer stacjonarny, ale myślę, że piękno MVP polega na tym, że częściowo nie ma to znaczenia. Jedną z rzeczy, które z tego uzyskałem, było wstrzyknięcie zależności obiektów warstwy usług do prezentera, a nie tworzenie ich w mojej klasie prezentera.


title: Czy dopuszczalne są długie funkcje, jeśli mają strukturę wewnętrzną?

text: Kiedy mam do czynienia ze skomplikowanymi algorytmami w językach z obsługą zagnieżdżonych funkcji (takich jak Python i D), często piszę ogromne funkcje (ponieważ algorytm jest skomplikowany), ale łagodę to, używając zagnieżdżonych funkcji do strukturyzowania skomplikowanego kodu. Czy duże (100+ wierszy) funkcje nadal są uważane za złe, nawet jeśli są dobrze ustrukturyzowane wewnętrznie poprzez użycie funkcji zagnieżdżonych? Edycja: dla tych, którzy nie są zaznajomieni z Pythonem lub D, funkcje zagnieżdżone w tych językach umożliwiają również dostęp do zewnętrznego zakresu funkcji. W D dostęp ten umożliwia mutację zmiennych w zakresie zewnętrznym. W Pythonie pozwala tylko na czytanie. W D możesz jawnie wyłączyć dostęp do zewnętrznego zakresu funkcji zagnieżdżonej, deklarując ją jako `static`.


title: Kod licencyjny „nie do ponownego wykorzystania”

text: Mam framework JavaScript po stronie klienta, który jest publicznie dostępny i licencjonowany BSD. Każdy plik zawiera informację, że jest objęty prawami autorskimi, data, wszelkie prawa zastrzeżone i tekst licencji BSD. Tworzę projekt, który wykorzystuje - oraz dostosowuje i wprowadza zmiany w kodzie - mój licencjonowany framework BSD. Chociaż oczywiście przeglądarki będą pobierać i wykonywać ten kod, nie chcę licencjonować BSD mojego projektu pochodnego. Nie sprzeciwiam się, aby ludzie widzieli mój kod, ale nie chcę, aby wycinali i wklejali i tworzyli pochodne mojego projektu. Jaki typowy tekst umieścić na górze każdego pliku? Chciałbym również dołączyć link do mojego frameworka na licencji BSD. Jak mam to wyrazić?


title: Czy etapowanie kroków funkcji w zmiennych pośrednich (powiązania let) jest złą formą?

text: Uważam, że potrzebuję zmiennych pośrednich. W Clojure ma to postać wiązań let, jak `cmp-result-1` i `cmp-result-2` w poniższej funkcji. (defn str-cmp "Bierze dwa łańcuchy i porównuje je. Zwraca łańcuch jeśli pasuje; i zero jeśli nie." [str-1 str-2 start-pos substr-len] (let [cmp-result-1 (subs str-1 start-pos substr-len) cmp-result-2 (subs str-2 start-pos substr-len)] (porównaj cmp-result-1 cmp-result-2))) Mogę przepisać tę funkcję bez nich, ale dla mnie cel funkcji wygląda jaśniej. Zwykle robię to trochę w moim głównym, a to głównie do celów debugowania, więc mogę przekazać zmienną, aby wydrukować wyjście pośrednie. Czy to zła forma, a jeśli tak, to dlaczego? Dziękuję.


title: Jak dużym problemem jest wieloplatformowy interfejs graficzny Qt?

text: Czytałem coś na tej stronie, że GUI Qt jest dużym problemem, który powstrzymuje programistów przed używaniem Qt. Mówią, że problem polega na tym, że GUI nie wygląda na natywny i jest niespójny. Osobiście używam systemu Windows i z tego, co widzę (niektóre widoki drzewa i widok tabeli), wyglądają całkiem nieźle i wyglądają bardzo natywnie. Więc chcę wiedzieć, jakie są na Macu i jakie są różnice? i jakie powinny być różnice między zwykłymi aplikacjami na Maca a zwykłymi aplikacjami Windows pod względem doświadczenia użytkownika?


title: Platforma do nauki/eksperymentowania z programowaniem internetowym

text: Chcę nauczyć się programowania internetowego, ale nie jestem pewien, jak mogę eksperymentować z rzeczywistą stroną internetową. Czy istnieją witryny obsługujące platformy do tych celów?


title: Kto zdecydował się na terminologię downcasting i upcasting?

text: O ile mi wiadomo, terminologia pochodzi od tego, jak tradycyjnie wyświetlana jest **hierarchia dziedziczenia**, z typami rozszerzającymi na dole i typami nadrzędnymi na górze. Jest to trochę bez sensu, chyba że masz ochotę wywołać następujące _leftcasting_ i _rightcasting_. ![pozioma hierarchia dziedziczenia](http://i.stack.imgur.com/6YUSl.png) _Nie szukam opinii_, dlaczego terminologia jest taka, jaka jest, ale są one mile widziane jako komentarze. Szukam referencji na temat **kto jako pierwszy wprowadził up i downcasting i dlaczego zdecydowali się na tę nazwę**.


title: Gdzie mogę znaleźć zasoby „SVN dla użytkowników Git”?

text: Więc podjąłem pracę, w której firma używa SVN (ale w przyszłości przeniesie się na Git). Problem w tym, że nie znam SVN. Wypróbowałem wiele zapytań Google i jedyne, co udało mi się znaleźć, to samouczki SVN->Git, blogi „Dlaczego Git jest lepszy niż SVN” i konkretna „ściągawka”, która zawiera (niektóre) porównywalne polecenia… książka O'Reilly o SVN, jakie są krótkie (ale nie _zbyt_ krótkie) instrukcje dla użytkowników SVN dla SVN?


title: Od czego zacząć, projektując aplikację, która umożliwia korzystanie z wtyczek

text: Tworzę aplikację i myślę, że na dłuższą metę chciałbym móc zezwolić na obsługę wtyczek. Aplikacja, którą tworzę jest aplikacją opartą na Javie. Jak mogę zezwolić na wtyczki używające języka skryptowego, czy lepiej wymagać wtyczek do korzystania z języka Java? Czy muszę stworzyć jakiś interfejs wtyczek, aby umożliwić korzystanie z wtyczek? Jakieś pomysły referencji, od czego zacząć?


title: Klient i ja się nie znamy - jakieś wskazówki, jak upewnić się, że klient nie ucieknie bez płacenia?

text: Jestem na studiach. Zająłem się wyszukiwaniem źle zakodowanych stron internetowych, wysyłaniem e-maili do właścicieli i informowaniem ich, że mogę to naprawić w zamian za pieniądze Paypal. Właśnie ukończyłem jedną z tych drobnych poprawek dla strony i po wcześniejszym spaleniu trochę waham się, czy wysłać mu e-mailem jego poprawiony kod. W szczególności używam zapytań @media w CSS do ukrywania reklam na niektórych ekranach o rozmiarze mobilnym i ukrywania reklam mobilnych na ekranach o rozmiarze komputerów stacjonarnych. Jak mogę udowodnić mojemu klientowi, że mam jego ukończoną pracę, nie podając tylko mojego kodu? Oboje nic o sobie nie wiemy, prawdopodobnie wysłaliśmy do siebie w sumie 6 e-maili. Naprawdę potrzebuję tych 60$, lol


title: Do jakich zastosowań przeznaczony jest Silverlight?

text: Mam 3 lata doświadczenia w ASP.NET z C# i teraz uczę Silverlight z Beginning Silverlight 4 w książce C#. Po ukończeniu pierwszych 4 rozdziałów mam wrażenie, że w Silverlight chodzi tylko o tworzenie RIA, które można również wykonać we Flashu. Jaki jest zakres Silverlight dla programisty C#?


title: Czy frameworki są używane do „dużych” stron internetowych?

text: Jestem nowy w PHP. Potrafię tworzyć podstawowe strony z logowaniem/rejestracją itp., ale zawsze mam problem z tworzeniem złożonych witryn z wieloma funkcjami, ponieważ w końcu kod staje się bałaganiarski i po prostu napotykam coraz więcej drobnych błędów, a następnie ich naprawienie daje kolejny, i tak dalej. Zdaję sobie sprawę, że częściowo wynika to z tego, że po prostu nie piszę czystego kodu (pracuję nad tym!), ale prawdopodobnie skorzystałbym również na użyciu frameworka. Ale czy korzystanie z gotowych frameworków jest „nieprofesjonalne”? Czy duża strona, taka jak YouTube lub Facebook, używałaby frameworka takiego jak CakePHP lub CodeIgniter?