title: Wprowadzenie rozwoju Agile po tradycyjnym rozpoczęciu projektu

text: Około półtora roku temu wszedłem do miejsca pracy, które twierdziło, że zajmuje się rozwojem Agile. Dowiedziałem się, że to miejsce przyjęło kilka zwinnych praktyk (takich jak codzienne standupy, planowanie sprintów i przeglądy sprintów), ale żadnej z zasad (just in time / tylko wystarczająco dobra mentalność, wczesne ujawnianie porażki, bogata komunikacja). Dostałem teraz zadanie uczynienia zespołu bardziej zwinnym i zapewniono mnie, że mam pełne wpisowe od deweloperów i zespołu biznesowego. Jako program pilotażowy dali mi projekt, który właśnie zakończył 15 miesięcy zbierania wymagań, ma 110-stronicowy dokument Analiza i projekt (należy uznać za „zapisany w kamieniu”) i w którym nie mam dostępu do końca użytkowników (tylko do komitetu złożonego z menedżerów użytkowników, którzy w rzeczywistości nie będą używać produktu). Zacząłem skromnie, dając im listę oczekiwanych rezultatów dla pierwszych 5 sprintów (pozostawiając przyszłe sprinty niezdefiniowane), listę celów dla pierwszego sprintu i przeanalizowałem dokument A&D, aby uzyskać wystarczającą ilość historyjek użytkownika, aby spełnić cele pierwszego sprintu . Od tego czasu zapytali, dlaczego nie mamy wszystkich wymagań dla wszystkich sprintów, dlaczego nie zacząłem pracować nad materiałami do trzeciego sprintu (co uważają za ważniejsze, ale opiera się na rezultatach pierwszego sprintu 2 sprinty) i domagają się jeszcze większej ilości dokumentacji, którą cały mój zespół IT uważa za zajętą pracą lub niezwiązaną z nami (np. napisanie instrukcji obsługi z góry, udokumentowanie wszystkich pól danych ze wszystkich sprintów z góry i wiele więcej praca z góry). To było dość trudne dla mnie jako nowego kierownika projektu, ale są usprawnienia, które skutecznie wdrożyłem, takie jak scrumban do zarządzania historiami, programowanie w parach i zlecenie nam, aby firma z góry przeprowadzała testy akceptacyjne klientów (w ramach dokumentacji wymagań). . Więc moje pytania brzmią: 1. Co mogę zrobić, aby skuteczniej wprowadzić zmiany w odpornym biznesie? 2. Czy istnieją inne praktyki, które mogę wprowadzić po stronie IT, aby pokazać firmie korzyści płynące z agile? 3. Dusi nas brzemię dokumentacji – biznes nadal postrzega ją jako strategię zarządzania ryzykiem, a nie jako ryzyko. Co możemy zrobić, aby złagodzić ich obawy i wymagania dotyczące dokumentacji (w szczególności ilość dokumentacji i ich zapotrzebowanie na wszystko z góry)? 4. Jesteśmy w oddzielnym budynku od naszej firmy, około 3 przecznice dalej i nie chcą, aby ich ludzie mieszkali razem w projekcie, ponieważ ta osoba „nie będzie mogła pracować nad innymi projektami, gdy są w naszym budynku." Oczekują, że zawsze będziemy tam chodzić i łączyć nasze pytania, abyśmy mogli zadać je wszystkie naraz i nie marnować czasu tej osoby na „ciągłe przerywanie”. Co możemy zrobić, aby uzyskać od nich bogatszą komunikację? Wszelkie dodatkowe porady byłyby również mile widziane. Dziękuję!


title: Jak możemy inspirować kulturę „hakerską”?

text: Natknąłem się na te eseje pewnego dnia, gdy marzyłem o zostaniu hackerem Lisp: http://paulgraham.com/yahoo.html, http://paulgraham.com/gba.html i skrystalizowały się dla mnie, że powód nieubłaganego Porażka, którą widzę w tak wielu projektach programistycznych, nad którymi pracuję, polega na tym, że programowanie jest postrzegane jako zasób niskiej klasy, który jest refleksją w porównaniu z ciężkimi warstwami nietechnicznego zarządzania, które opierają się na strategii ponad kodem. Biorąc pod uwagę naszą towarową naturę, jakie praktyczne kroki możemy podjąć, aby zainspirować kulturę hakerską w naszych towarach?


title: Nauka o kanałach danych

text: Jak i gdzie mogę dowiedzieć się więcej o plikach danych finansowych? Jestem szczególnie zainteresowany tym, jak są zaimplementowane kanały, tj. czy kanały są implementowane jako SOAP/RESTful Web Services? Albo jeśli są realizowane inaczej, to jak i jako co?


title: Przenoszenie wielozadaniowej aplikacji na Androida do działania szuflady nawigacyjnej

text: Tworzę aplikację na Androida i zorganizuję ją jako prostą aplikację wielozadaniową. Chcę dodać do niego szufladę nawigacyjną i wygląda na to, że będę musiał całkowicie zmienić strukturę aplikacji i załadować wszystko jako fragmenty. (http://developer.android.com/training/implementing-navigation/nav-drader.html) Jak powinienem rozpocząć wykonywanie tego „ruchu” kodu? Czy powinienem całkowicie skopiować i wkleić zmienne i funkcje moich klas do gigantycznego pliku? To zdecydowanie wydaje się być podatne na błędy i błędy. Być może istnieje metoda rozdzielania plików klas, ale nadal ma jedną szufladę nawigacyjną?


title: chcą przejść z tworzenia oprogramowania dla przedsiębiorstw na programowanie w języku C

text: Jestem inżynierem oprogramowania z 5-letnim doświadczeniem w branży IT w renomowanej (indyjska firma MNC) zajmującej się oprogramowaniem usługowym w firmach peoplesoft i informatica. Ale niestety jestem zainteresowany przejściem na karierę programisty, zwł. C. Czy ktoś może mi powiedzieć, w jaki sposób mogę przejść na karierę programisty C? A jakie są plusy i minusy takiego przełącznika?


title: Bezpieczeństwo patentowe mono

text: Czy mógłbyś podzielić się swoimi przemyśleniami na temat bezpieczeństwa patentów Mono? Czy używanie Mono w produkcji do projektów komercyjnych jest ryzykowne? W przypadku aplikacji WEBowych, na przykład następującego stosu technologicznego: "Linux + PostgreSQL + C# Mono + EntityFramework(Mono) + ASP.NET MVC(Mono)", czy mogę być pewien, że jeśli będę korzystał z zaimplementowanych przez Mono Project frameworków ( ADO.NET, ASP.NET/MVC, EntityFramework, WCF) i uruchom je na Linuksie Nie dostanę prześladowania ze strony Microsoftu spowodowanego naruszeniem patentów? Dziękuję Ci!


title: Jaki limit czasu powinienem ustawić na usługę zewnętrzną?

text: Ta usługa to pula sesji zdalnej. Muszę poprosić o sesję do pracy z innymi usługami. W większości przypadków ta pula będzie miała dostęp do sesji, więc za 15 ms otrzymam odpowiedź. Czasami jednak będzie musiał utworzyć sesję na żądanie, a jej utworzenie zajmuje do 800 ms. Mam na myśli dwie opcje, aby poradzić sobie z tą sytuacją: 1. Ustawienie limitu czasu 15 ms i wdrożenie zasady ponawiania prób z wykładniczym wycofywaniem się do 800 ms. Ta usługa utworzy wymaganą sesję bez względu na to, czy jestem z nią połączony. 2. Aby ustawić limit czasu 800ms i utrzymywać połączenie z usługą, dopóki sesja nie będzie dla mnie dostępna. W obu przypadkach nie ma gwarancji, że będę miał sesję po 800ms. **Jakie są zalety/przeciw dla każdej opcji?**


title: Jakie są interesujące problemy do rozwiązania za pomocą GA?

text: W wolnym czasie chcę zacząć bawić się algorytmem genetycznym. Zastanawiałem się nad kilkoma sposobami włączenia ich do osobistych projektów lub projektów roboczych. Pracuję w oprogramowaniu finansowym - więc dużo analizuję ryzyko i tego typu rzeczy z wykorzystaniem rynków instrumentów pochodnych. Nie jestem pewien, jak pasują do tego GA. Byłem ciekaw, czy ktoś ma jakieś fajne pomysły na to, jak mogę użyć GA do wyleczenia nudy i zrobienia naprawdę fajnych rzeczy!


title: Jaki jest dobry przypadek użycia dla natywnych baz danych XML?

text: Jaki byłby dobry przypadek użycia natywnej bazy danych XML, takiej jak Apache Xindice i eXist-db? W przeszłości korzystałem z funkcji XML SQL Servera i były one bardzo wartościowe, ale tam możliwe jest użycie XML dla 5% i tradycyjnego przechowywania dla 95% aplikacji. Jakie typy aplikacji skorzystałyby na przechowywaniu w 100% XML?


title: Dobra platforma do nauki programowania 101?

text: Wiele lat temu sugerowałem, że Visual Basic 6 uszereguje początkujących jako sposób na nauczenie się, czym jest programowanie. Kluczowy punkt: Nie było to szkolenie zawodowe, ale tylko wprowadzenie do podstawowych pojęć programowania. Podpisuję się pod zasadą KISS (wielu programistów tego nie robi) Nienawidzę Microsoftu, jak możemy, natychmiastowa graficzna natura VB6 naprawdę pomogła początkującym graczom (metody sterowania/zdarzenia GUI vs. programowanie cmdline) VB mógł być „zabawką ", ale pozwoliło to na zastosowanie prawdziwych koncepcji programistycznych. Można nauczyć się tych UNIWERSALNYCH tematów w dowolnym języku, w tym w VB6: * Typy danych, zmienne i stałe * Warunki warunkowe (If....Then....Else Blocks, Select Case) * Generowanie / seedowanie liczb losowych * Wprowadzenie do wątków/timerów * Pętle (while, for loop) * Funkcje i procedury (oraz przekazywanie parametrów) * Używanie tablic * Kontrolki GUI (właściwości, metody i zdarzenia) * Animacja GUI (manipulacja górną, lewą, widocznymi właściwościami) * Tworzenie i dodawanie zewnętrznych modułów * Debugowanie (punkty przerwania, zegarki, okno debugowania) Jakiego środowiska lub platformy sugerowałbyś dzisiaj użyć? Czy Java/Eclipse sprawia, że rzeczy są zbyt skomplikowane? Do pewnego stopnia uważam, że Java jest przesadą dla tego typu celów (OOP itp.). Czy ścieżką najmniejszego oporu byłby Visual Basic Express Edition 2012? czy coś zupełnie innego, jak jakiś smartfon IDE? A może jest to zbyt rozpraszające, zbyt skomplikowane lub zbyt łatwe? A co tracisz w porównaniu do VB (Pomyśl, jak trywialne jest nauczenie się podstawowej animacji za pomocą Timera i .top i .left) KLUCZEM jest, aby była ŁATWA, jednocześnie nie rozwadniając. Znowu sugerowanie jakiegoś ezoterycznego języka tylko dlatego, że jest bardziej „elegancki”, mija się z celem. Co byś powiedział 15-letniemu dziecku sąsiada, aby chciał się dowiedzieć, co to jest programowanie? (Nie chce zostać profesjonalnym programistą i nie jest dobrym niezależnym uczniem) Dziękuję.


title: Dlaczego stos rośnie w dół?

text: Zakładam, że jest w tym historia, ale dlaczego stos rośnie w dół? Wydaje mi się, że przepełnienie bufora byłoby _dużo_ trudniejsze do wykorzystania, gdyby stos rósł w górę...


title: Pomoc PDF w instrukcji oprogramowania

text: Potrzebuję tu tylko porady, jeśli osadzamy Adobe Reader jako kontrolkę activex, a także mamy rezerwową przeglądarkę plików PDF (w przypadku, gdy użytkownik nie ma zainstalowanego Adobe Readera), czy rozsądniej byłoby umieścić zrzuty ekranu w instrukcji za pomocą bez względu na najnowszą wersję programu Adobe Reader lub korzystanie z czytnika awaryjnego? Widzę wady i zalety obu. Po pierwsze, wygląd i działanie czytnika awaryjnego są stałe, podczas gdy Adobe Reader się zmienia, więc nie musimy tak często przerabiać instrukcji. Ale spodziewamy się, że 90% użytkowników będzie miało Adobe Reader, więc to, co zobaczą w instrukcji, nie będzie nawet tym, co jest w programie, jeśli użyjemy czytnika awaryjnego do zrzutów ekranu. Więc jakie jest rozwiązanie. Adobe, czytnik awaryjny czy oba? (Dla przypomnienia, instrukcja jest CHM, a nie PDF)


title: Strategia dzielenia/indeksowania dla wyszukiwania wieloaspektowego

text: Obecnie zastanawiam się nad strukturą naszej bazy danych i sposobem jej modyfikacji pod kątem skali. W szczególności myślimy o użyciu ElasticSearch, aby zapewnić naszą funkcjonalność wyszukiwania. Jednym z powszechnych wzorców ElasticSearch wydaje się być wzorzec „routingu użytkownika”; oznacza to użycie routingu w celu zapewnienia, że dane dowolnego użytkownika znajdują się w tym samym fragmencie. Jest to idealne rozwiązanie do wyszukiwania specyficznego dla klienta, np. Gmaila. Nasza aplikacja ma takie ograniczenie, że każdy użytkownik będzie miał maksymalnie kilka tysięcy dokumentów, więc ten wzorzec wydaje się dobrym kandydatem. Jednak nasze wyszukiwanie musi działać wśród _wszystkich_ użytkowników, a także kierować na konkretnego użytkownika (więc mogę przeszukać moją treść, treść Alicji lub całą treść). Podobnie musimy zapewnić wyszukiwanie pełnotekstowe w dowolnym przedziale czasowym; ostatnich miesięcy do kilku lat temu. Zastanawiam się nad połączeniem wzorców „rutingu użytkownika” i „indeksu na przedział czasu”: * Tworzę indeks dla każdego miesiąca * Domyślnie wyszukiwania są aliasowane względem ostatnich X miesięcy * Jeśli nie ma wyników znalezionych, możemy przeszukać poprzednie X miesięcy * W miarę rozwoju możemy skrócić interwał X * Każdy dokument jest kierowany przez ID użytkownika Tak więc _powinno_ wykonać następujące czynności: * wyszukiwanie według użytkownika. Spowoduje to przeszukanie **wszystkie indeksy** w **1 fragmencie** * wyszukiwanie według czasu. Spowoduje to przeszukanie **~2 indeksów** (domyślnie) we **wszystkich fragmentach**. Czy to rozsądne podejście, biorąc pod uwagę, że możemy skalować do wielu milionów dokumentów? A może powinienem w jakiś sposób denormalizować dane, tak aby wyszukiwania użytkowników były przeprowadzane w całkowicie oddzielnym indeksie od wyszukiwania dat? Dzięki za wszelkie plusy powyższego scenariusza.


title: Jaka jest potrzeba Odata, gdy mam JSON?

text: Staram się zrozumieć, o co chodzi w Odacie i kiedy miałoby to sens. Teraz jak pracuję, używam kontrolera ASP.NET i MVC/WebApi do serializacji/deserializacji obiektów do JSON i każe javascript coś z tym zrobić. Z tego, co mogę powiedzieć, zaletą OData jest możliwość wysyłania zapytań bezpośrednio z adresu URL ... Ale ponieważ piszę kod klienta i serwera, nie ma takiej potrzeby. Czy ktoś kiedykolwiek przeanalizowałby wyniki zapytania ODaya w javascript? Może OData jest bardziej o udostępnianiu ogólnego punktu końcowego dla WSZYSTKICH klientów, aby uzyskać szczegółowe informacje z zapytania, którego nie zapewnia JSON? Więc jeśli byłem dostawcą danych, to przypuszczam, że po to jest odata? Pomóż mi zrozumieć cel i wykorzystanie REST/JSON/ODATA.


title: Przynoszenie własnego komputera do pracy

text: Niedawno dołączyłem do startupu i przez ostatni rok szybko się rozwijaliśmy. Zauważyłem jednak, że spośród wszystkich nowo zatrudnionych pracowników (głównie sprzedaż i wsparcie) przynoszą do pracy własne laptopy. Czy to normalne? Większość programistów ma zapewnione dla nich podstawowe boksy linuksowe. Tymczasem firma co miesiąc powtarza nam, że ustanowiła nowy rekord przychodów.


title: Jak śledzić znaczenie pól SQL?

text: Im więcej pól SQL dodam do moich tabel i im więcej kluczy podstawowych/obcych dodam, tym bardziej stracę przegląd określonych pól dla niektórych scenariuszy, takich jak Pobierz/Dodaj/Usuń/Aktualizuj dane. Używam programu SQL Management Studio (SQL Server) do projektowania mojej bazy danych w projektancie diagramu bazy danych. Może istnieje lepsze narzędzie lub dobre podejście do śledzenia znaczenia wszystkich tych pól?


title: Interfejs bez efektów ubocznych na bazie biblioteki stanowej

text: W wywiadzie z Johnem Hughesem, w którym opowiada o Erlangu i Haskellu, ma następujące słowa do powiedzenia na temat używania bibliotek stanowych w Erlangu: > Jeśli chcę korzystać z biblioteki stanowej, zwykle buduję interfejs bez efektów ubocznych > tak, abym mógł go bezpiecznie używać w pozostałej części mojego > kodu. Co on przez to rozumie? Próbuję wymyślić przykład, jak by to wyglądało, ale moja wyobraźnia i/lub wiedza mnie zawodzi.


title: Najlepsze praktyki dotyczące serializacji/utrwalania encji słownika obiektów ciągów

text: Zauważam trend w kierunku używania słownika ciąg do obiektu (lub czasami ciąg do ciągu), zamiast silnie typowanych obiektów. Na przykład nowy projekt Katana intensywnie wykorzystuje `IDictionary<string,object>`. Takie podejście pozwala uniknąć konieczności ciągłego aktualizowania klas jednostek/DTO i tabel bazy danych, które utrwalają je z nowymi właściwościami. Pozwala to również uniknąć konieczności tworzenia nowych typów encji pochodnych w celu obsługi nowych typów encji, ponieważ słownik jest wystarczająco elastyczny, aby przechowywać dowolne właściwości. Oto wymyślony przykład: class StorageDevice { public int Id { get; ustawić; } ciąg publiczny Nazwa { get; ustawić; } } class NetworkShare : StorageDevice { public string Path { get; ustawić; } public string LoginName { get; ustawić; } ciąg publiczny Hasło { get; ustawić; } } class CloudStorage : StorageDevice { public string ServerUri { get; set } ciąg public ContainerName { get; ustawić; } public int NumerPortu { get; ustawić; } publiczny Guid ApiKey { get; ustawić; } } versus: class StorageDevice { public IDictionary<ciąg, obiekt> Właściwości { get; ustawić; } } Zasadniczo poszukuję wszelkich wykładów, książek lub artykułów na temat tego podejścia, więc mogę zapoznać się z najlepszymi praktykami/trudnościami, których należy unikać. Oto moje główne pytania: * Czy to podejście ma nazwę? (jedyne, co do tej pory słyszałem, to „obiekty samoopisujące”) * Jakie są najlepsze praktyki utrwalania tych słowników w relacyjnej bazie danych? Zwłaszcza wyzwania związane z ich pomyślną deserializacją za pomocą silnie typowanych języków, takich jak C#. * Czy to coś zmienia, jeśli niektóre obiekty w słowniku same są listami silnie typizowanych jednostek? * Czy należy użyć drugiego słownika, jeśli chcesz tymczasowo przechowywać obiekty, które nie mają być utrwalane/serializowane w sieci, czy też należy użyć jakiegoś rodzaju przestrzeni nazw na kluczach, aby to wskazać?


title: Dobre powody do niszczenia muteksów za pomocą oczekujących wątków

text: Chciałbym zobaczyć kilka prawidłowych przykładów konieczności zezwolenia wątkowi na wejście do zablokowanego, niewprowadzanego muteksu, a następnie zniszczenie muteksu (który rzekomo kończy wątek). Nie mogę wymyślić żadnego dobrego powodu, żeby to zrobić. Nie pamiętam dokładnie, o co się dzisiaj kłóciliśmy, ale mój kolega twierdzi, że takie techniki są potrzebne w przypadku problemów „bez powrotu” (znowu wybacz mi, ale zapomniałem przykładu, który mi podał).


title: Czy wszystkie brudne poprawki są sobie równe?

text: W swoim czasie widziałem jakiś brudny kod. Słyszałem też różne opinie na temat „brudnych poprawek”: a) brudna „poprawka” nie jest poprawką b) niektóre poprawki są bardziej brudne niż inne, ale brudne poprawki są nie do przyjęcia c) niektóre poprawki są bardziej brudne niż inne, a niektóre brudne poprawki są bardziej akceptowalne niż inne d) brudne poprawki pokazują pragmatyczne wykorzystanie własnego czasu, ale należy ich zniechęcać e) brudne poprawki pokazują pragmatyczne wykorzystanie własnego czasu i nie należy ich zniechęcać f) inne Z którym z powyższych się zgadzasz i dlaczego? Jak powstrzymać postawy takie jak (e) przed staniem się standardową praktyką?


title: Jakie techniki należy zastosować, aby zapewnić czytelną komunikację od klienta?

text: Niektórzy klienci używają terminów z języka domeny zamiennie i niepoprawnie. Niejednokrotnie prowadziło to do implementacji funkcji w sposób, który nie był pożądany przez klienta. Czy są jakieś techniki, które można wykorzystać do wymuszenia prawidłowego używania terminów? Czy są jakieś techniki, które można wykorzystać, aby uniemożliwić komuś przekazanie deweloperowi wymagań dotyczących „zwrotu paczki papierosów”?


title: czy używasz wbudowanego stosu/kolejki/listy lub wektorów w swoim programie?

text: Wczoraj widziałem w poście, że facet powiedział, że wbudowane stosy/kolejki są 5x wolniejsze niż normalnie zakodowane stosy/kolejki! Czy to prawda ? Jeśli prawda, to dlaczego Microsoft (C#.NET,VB.NET) lub Oracle (JAVA) podaje takie ADT? Który wolisz ? Piszesz własne lub korzystasz z wbudowanego ? [Myślę, że większość ludzi woli wbudowany kod, który był wielokrotnie testowany i bardzo zoptymalizowany]


title: Czy istnieje idiom dla pętli, która wykonuje jakiś blok instrukcji między iteracjami? (W szczególności w Ruby)

text: Często muszę wykonać kilka operacji w pętli i kilka innych operacji między iteracjami. Prostym przykładem może być zbieranie słów z tablicy w łańcuch, pisane od tyłu i oddzielone przecinkami. Czy istnieje wsparcie dla idiomu lub języka w dowolnym języku? (Na razie najbardziej interesuje mnie Ruby.) Zwykle robię coś w stylu a = ['foo', 'bar', 'baz'] s = '' n = a.size - 1 i = 0 loop do s << a[i].reverse break if i == n s << ', ' i += 1 end Ale nie wiem, jak zapisać tę połowę iteracji, jeśli używam iteratora ruby: s = '' ['foo', 'bar' , 'baz'].każdy do |w| s << w.reverse # ??? koniec


title: Czy jest jakaś różnica między interfejsami a klasami abstrakcyjnymi, które mają tylko metody abstrakcyjne?

text: Powiedzmy, że mamy klasę abstrakcyjną i niech ta klasa ma tylko metody abstrakcyjne. Czy ta klasa abstrakcyjna różni się od interfejsu, który ma tylko te same metody? Chcę wiedzieć, czy istnieją jakieś różnice zarówno filozoficznie, obiektywnie, jak i w podstawowej implementacji języka programowania między klasą abstrakcyjną z tylko abstrakcyjnymi członkami i równoważnym interfejsem?


title: Czy jest to właściwa strategia konwersji drzewa binarnego kolejności na poziomie na podwójnie powiązaną listę?

text: Więc ostatnio natknąłem się na to pytanie - Utwórz funkcję, która konwertuje drzewo binarne uporządkowane na poziomie w podwójnie połączoną listę. Najwyraźniej to częste pytanie podczas rozmowy kwalifikacyjnej. Oto strategia, którą miałem - po prostu wykonaj przechodzenie drzewa w przedsprzedaży i zamiast zwracać węzeł, zwróć listę węzłów w kolejności, w jakiej je przemierzasz. tj. zwróć listę i dołącz bieżący węzeł do listy w każdym punkcie. W przypadku podstawowym zwróć sam węzeł, gdy jesteś przy liściu. więc możesz powiedzieć left = recursive_function(node.left) right = recursive_function(node.right) return(left.append(node.data)).append(right);` Czy to jest właściwe podejście?


title: Czy warto mikrooptymalizacja w urządzeniach mobilnych?

text: Zwykle uważa się, że mikrooptymalizacja nie jest tego warta z następującym wyjaśnieniem: może przyspieszyć działanie programu o mniej niż jeden procent, ale nikt nie przejmuje się tym niewielkim przyspieszeniem - to po prostu zbyt mała zmiana, aby można było zauważyć. Co więcej, może istnieć jakiś program obsługi zdarzeń, który uruchamia się tysiąc razy na sekundę i kończy bardzo szybko - zanim zostanie ponownie uruchomiony. Nikogo nie obchodzi, jak szybko jest - przyspieszenia nie da się zauważyć, bo już "tak szybko, jak da się zaobserwować". Jednak w urządzeniach mobilnych zużycie energii jest ważnym czynnikiem. Ten sam program obsługi zdarzeń, zoptymalizowany pod kątem działania o dziesięć procent szybciej, spowoduje mniejsze zużycie energii, a to wydłuży żywotność baterii i wydłuży działanie urządzenia. Jak trafna jest ta ostatnia ocena dotycząca urządzeń mobilnych? Czy są jakieś przykłady z życia, które to potwierdzają lub obalają?


title: Różnica między programowaniem sieciowym a programowaniem gniazdowym

text: Czy są jakieś istotne różnice, gdy mówimy o „programowaniu gniazdowym” w porównaniu z „programowaniem sieciowym”? Czy są jakieś tematy, które obejmują „programowanie sieciowe”, ale nie „programowanie gniazd”?


title: Czy to rozwiązanie jest RESTful i bezpieczne?

text: Nasz produkt rejestruje nowych graczy w naszej usłudze, a my zdecydowaliśmy się hostować go na platformie Azure (używamy platformy .NET) i chcieliśmy, aby był bezstanowy (dla skalowalności) i względnie bezpieczny. Ponieważ jest to pierwszy REST WS, który piszę, chciałem uzyskać informację zwrotną, czy jest to solidne rozwiązanie. Pewne założenia, aby wiedzieć o naszej aplikacji: 1. Użytkownicy są logowani do usługi anonimowo, bez konieczności podawania hasła od użytkownika 2. WS musi być całkowicie bezstanowy, aby umożliwić skalowanie poziome 3. Łączymy się za pomocą protokołu HTTPS (SSL), aby zapobiec 3rd party snooping **EDYTUJ:** 1. Celujemy w natywne urządzenia z systemem iOS/Android 2. Naszym głównym celem jest upewnienie się, że tylko nienaruszeni klienci mogą wysyłać żądania A abstrakcyjny proces uwierzytelniania: 1. Klient tworzy prosty hash (UDID:Timestamp) i szyfruje go za pomocą znacznika czasu z pewnym podstawowym algorytmem (na przykład tajny klucz to co drugi znak z hasza) 2. Klient wysyła swój UDID, Timestamp i hash do serwera 3. Serwer przebudowuje haszuje i odszyfrowuje zaszyfrowany hash wysłany przez użytkownika 4. Jeśli oba są równe - wiemy, że został wysłany od naszego klienta (i miejmy nadzieję, że nie od złośliwego nadawcy) Wszelkie dane wejściowe/sugestie byłyby świetne - oczywiście ponieważ jest to pierwszy czas, kiedy się tym zajmę s problem Mogłem go zaprojektować niepoprawnie. Dziękuję! **Druga aktualizacja:** Czytając specyfikacje bezpieczeństwa protokołu OAuth, wydaje się, że nie ma prawdziwej odpowiedzi na moje pytanie — ponieważ klient i serwer muszą znać tajne klucze, a klient jest przechowywany lokalnie na urządzeniach mobilnych naszych użytkowników (jak w przeciwieństwie do aplikacji internetowej). Z przewodnika po zabezpieczeniach OAuth (http://hueniverse.com/oauth/guide/security/): > Podczas wdrażania OAuth ważne jest, aby zrozumieć ograniczenia > współdzielonych kluczy tajnych, symetrycznych lub asymetrycznych. Sekret klienta (lub klucz prywatny) > służy do weryfikacji tożsamości klienta przez serwer. W przypadku > klienta internetowego, takiego jak serwer WWW, stosunkowo łatwo jest zachować poufny > tajny > klucz prywatny klienta. > > Jeśli jednak klientem jest aplikacja komputerowa, aplikacja mobilna lub > jakiekolwiek inne oprogramowanie po stronie klienta, takie jak aplety przeglądarki (Flash, Java, > Silverlight) i skrypty (JavaScript), poświadczenia klienta muszą być > uwzględnione w każdy egzemplarz wniosku. Oznacza to, że klucz tajny klienta (lub > klucz prywatny) musi być dystrybuowany z aplikacją, co w sposób dziedziczny > je kompromituje. > > Nie uniemożliwia to korzystania z OAuth w takiej aplikacji, ale ogranicza poziom zaufania serwera do takich tajemnic publicznych. Ponieważ sekrety > nie mogą być zaufane, serwer musi traktować taką aplikację jako nieznaną > encje i używać tożsamości klienta tylko do działań, które nie wymagają > żadnego poziomu zaufania, takich jak zbieranie statystyk dotyczących aplikacji. Niektóre > serwery mogą zdecydować się na zablokowanie takiej aplikacji lub oferowanie różnych protokołów lub > rozszerzeń. Jednak w tym momencie nie jest znane rozwiązanie tego > ograniczenia.


title: Permutowanie listy liczb poprzez wciskanie i wskakiwanie na stos

text: Załóżmy, że mamy długi stos liczb. Istnieje inny stos pośredni i stos docelowy, który ma zostać zwrócony na końcu. Jedyne dwie dozwolone operacje to przeniesienie wierzchu starego stosu na górny element stosu pośredniego i przeniesienie górnego elementu stosu pośredniego na wierzch nowego stosu. Wymień wszystkie możliwe nowe stosy, które można wyprodukować, zakładając, że oryginalny stos został zużyty. Używam Racket/Scheme. Bardziej preferowane są rozwiązania czysto funkcjonalne ;) Jakieś pomysły jak to zrobić? Przez pewne machanie ręką wydaje się, że następująca funkcja poprawnie przewiduje, czy określona sekwencja wyjściowa jest możliwa, biorąc pod uwagę, że sekwencja wejściowa jest posortowana od małej do dużej: (define (możliwe? lst) (dopasuj lst [(cons a b) (i (jeśli (andmap (λ(x) (< x a)) b) (posortowane? b) #t) (możliwe? b))] [x #t])) więc mogę po prostu wygenerować wszystkie permuacje listy wejściowej i odfiltrować niemożliwe. Wydaje się jednak, że powinno istnieć bardziej eleganckie rozwiązanie, które najlepiej wykorzystuje rekurencję i programowanie funkcjonalne zamiast zagnieżdżonych pętli i mutacji.


title: Ogromna transakcja IPC linux

text: Buduję aplikacje, które wymagają ogromnych transakcji na sekundę danych i muszę używać IPC do wielowątkowej komunikacji wieloprocesowej. Wiem, że jest wiele metod do wykorzystania, ale nie jestem pewien, którą wybrać dla tej aplikacji. Oto, co będzie miała aplikacja, 4 procesy, każdy proces ma 4 wątki, porcja danych, która musi zostać przesłana między dwoma lub większą liczbą wątków, to około 400 KB. Zauważyłem, że fifo to dobry wybór, z wyjątkiem tego, że ma 64 KB, które nie jest tak duże, więc będę musiał zmodyfikować i ponownie skompilować jądro, ale nie jestem pewien, czy to jest właściwe? Zresztą jestem otwarta na wszelkie sugestie i chciałabym wycisnąć w tym Wasze doświadczenie :) iz góry to doceniam.


title: Chciałbym napisać algorytm „ostatecznego odtwarzania losowego”, aby posortować moją kolekcję mp3

text: Szukam sugestii pseudokodu do **sortowania moich plików mp3 w sposób, który pozwala uniknąć powtórzeń tytułu i wykonawcy**. Słucham śpiewaków - Franka Sinatry, Tony'ego Bennetta, Elli Fitzgerald itp. śpiewających stare standardy. Każdy artysta nagrywa wiele takich samych utworów – Fly Me To The Moon, The Way You Look Tonight, Stardust itp. Moim celem jest uporządkowanie utworów (lub uporządkowanie listy odtwarzania) z maksymalną przestrzenią między wykonawcami i tytułami utworów. Więc jeśli mam 2000 piosenek, a 20 jest Elli, chciałbym usłyszeć ją tylko raz na 100 piosenek. Jeśli 10 artystów zaśpiewa Fly Me To The Moon, chciałbym usłyszeć to raz na 200 piosenek. Oczywiście chcę połączyć te dwa wymagania, aby stworzyć moje „ostateczne przetasowanie”. Wiem, że to dość szeroko otwarte pytanie. Nie zacząłem go jeszcze programować, więc szukam tylko propozycji dobrego podejścia. Właściwie mam kilka innych wymagań dotyczących równomiernego rozmieszczania innych atrybutów utworów, ale nie będę się tutaj zagłębiał. * * * Jako punkt wyjścia modyfikuję kod, który znalazłem tutaj, aby manipulować plikami mp3 i czytać tagi ID3. Napisałem małą aplikację, która zaspokaja moje potrzeby, korzystając z poniższej odpowiedzi parsifala. Napisałem tutaj również dodatkowe pytanie. Dzięki za wszystkie świetne odpowiedzi!


title: W jaki sposób git/GitHub obsługuje zmienione lokalne i zmienione repozytoria wypchnięte?

text: Pracuję z kilkoma innymi osobami nad projektami i dzisiaj wpadłem w sytuację, którą na pewno będę często spotykał. Jeden z moich współpracowników i ja podzieliliśmy się kilkoma zadaniami do wykonania w ramach tego samego projektu i rozpoczęliśmy pracę. Skończył swoje zadania i przesłał swoje zmiany do naszego udostępnionego repozytorium. Nadal pracowałem nad swoimi zmianami, ale bałem się je wypchnąć i nadpisać kod, nad którym pracował w moim projekcie, zawierający tylko połowę potrzebnych zmian. W tej sytuacji (dla pewności miałem prezentację na temat kodu w kilka minut i nie chciałem żadnych większych komplikacji) zrobiłem kopię mojego lokalnego kodu, ściągnąłem jego nowy kod, skopiowałem pliki, które edytowałem do projektu, który właśnie ściągnąłem (pracowaliśmy w dwóch oddzielnych sekcjach, ale jestem ciekawy, jak git/GitHub radzi sobie z tym problemem podczas pracy w tych samych plikach), a następnie wypchnąłem nasz połączony kod. Jak więc git (lub jak powinniśmy) obsłużyć jeden projekt z dwoma różnymi zmianami w tym samym pliku?


title: Pokonywanie okrężnych odniesień

text: Pracuję nad aplikacją sieci web asp.net MVC, która zawiera kilka projektów. Jednym z nich jest BusinessObjects, który zawiera logikę/procesy biznesowe. Kolejnym jest EmailGeneration, który służy do wysyłania kampanii marketingowych / e-maili klientów. Projekt EmailGeneration odwołuje się do projektu BusinessObjects, ponieważ musi generować wiadomości e-mail z szablonami na podstawie obiektów biznesowych. Muszę mieć możliwość wyzwalania wiadomości e-mail z obiektów biznesowych, aby móc, powiedzmy, automatycznie wysłać fakturę po zrealizowaniu zamówienia. Nie mogę jednak dodać odwołania, ponieważ utworzyłoby to odwołanie cykliczne. Sugeruje to, że mój projekt jest wadliwy. Jak mogę zmienić projekt, aby zmniejszyć sprzężenie między komponentami?


title: Jaka jest dominująca konwencja nazewnictwa zmiennych w PHP: wielbłądy czy podkreślenia?

text: Wydaje się, że konsensus jest taki, że należy trzymać się konwencji platformy, na którą się rozwija. Zobacz: Podkreślenie czy wielbłąd? Konwencje nazewnictwa: camelCase kontra underscore_case? Jednak PHP nie wydaje się ściśle przestrzegać wewnętrznie żadnej konwencji (bez niespodzianek), nawet w przypadku metod i funkcji (np. `mysqli::set_local_infile_default`, `PDOStatement::debugDumpParams`); jednak podkreślenia wydają się dominować w nazwach funkcji. Jednak nie mogłem znaleźć tego: **Jaka jest dominująca konwencja nazewnictwa zmiennych w PHP?**


title: Gdzie dziś używać C++?

text: > **Possible Duplicate:** > Czy jest jakiś powód, aby używać C++ zamiast C, Perl, Python itp.? > Kiedy używać C nad C++ i C++ nad C? Jesienią mam zamiar rozpocząć studia na kierunku informatyka, ale programuję już od kilku lat. Obecnie zajmuję się tworzeniem aplikacji internetowych. Używam głównie Pythona i Javy. Znam również C++, ale nigdy tak naprawdę nie spacyfikowałem go, ponieważ za każdym razem, gdy myślę o projekcie, wydaje się, że istnieje język, który lepiej nadaje się do pracy niż C++. Na przykład Java wydaje się dawać ten sam wynik co C++, ale w bardziej produktywny sposób (nawet pod względem wydajności Java nie jest daleko w tyle za C++). Nie wspominając o tym, że biblioteka Java jest znacznie większa niż ta z C++. To sprawia, że zastanawiam się, gdzie w świecie tworzenia stron internetowych mógłbym użyć C++ i uzyskać przewagę, której nie dadzą mi inne języki? Obecnie uważam, że byłby to dodatek do języka takiego jak Java lub Python.


title: Jak testować problemy w lokalnym środowisku programistycznym, które można wprowadzić tylko poprzez klastrowanie w środowisku produkcyjnym?

text: Niedawno stworzyliśmy klaster aplikacji i wyszło na jaw, że ze względu na sposób, w jaki wykonujemy odciążanie SSL za pomocą modułu równoważenia obciążenia w środowisku produkcyjnym, nie działało ono prawidłowo. Musiałem naśladować tę funkcjonalność na moim lokalnym komputerze przez SSL odciążający Apache za pomocą proxy, ale nadal nie jest to porównanie 1 do 1. Podobne problemy mogą pojawić się w przypadku aplikacji stanowych i sesji lepkich. Jaki byłby branżowy standard testowania tego rodzaju produkcyjnego scenariusza „czarnej skrzynki” w środowisku lokalnym, zwłaszcza w odniesieniu do klastrowania?


title: Dlaczego większość języków zapewnia implementację min-sterty zamiast implementacji max-heap?

text: Właśnie coś zauważyłem i zastanawiam się, czy jest ku temu jakiś powód. Z wyjątkiem C++ (std::priority_queue to maksymalna sterta), nie znam żadnego innego języka, który oferuje maksymalną stertę. > Moduł heapq Pythona implementuje binarną min-stertę na szczycie listy. >> Biblioteka Javy zawiera klasę PriorityQueue, która implementuje min->priorytet-kolejkę. > > Biblioteka Go zawiera moduł kontenera/sterty, który implementuje min-stertę > na wierzchu dowolnej kompatybilnej struktury danych. > > Framework Core Foundation firmy Apple zawiera strukturę CFBinaryHeap, która > implementuje min-stertę. Uważam, że sterta maksymalna jest bardziej intuicyjna niż sterta minimalna i uważam, że technicznie różnica w implementacji jest tylko kwestią zmiany operatora porównania. Czy jest jakiś prawdziwy powód? Większość aplikacji potrzebuje min zamiast max sterty? Z góry dziękuję


title: Jak daleko powinieneś być od najbliższej kopii zapasowej danych?

text: Udawaj przez chwilę, że wydarzyło się coś katastrofalnego; jesteś zhakowany, a twoja produkcyjna baza danych staje się bałaganem. Jak daleko (czasu) powinien być czas od wdrożenia najnowszej kopii zapasowej i wznowienia operacji w normalny sposób? Oczywiście „natychmiast” jest „idealne”, ale chciałbym zobaczyć kilka prawdziwych odpowiedzi. Być może niektóre istniejące, rzeczywiste sytuacje, w których obecnie się znajdujesz, w odniesieniu do kopii zapasowych.


title: Ukończenie projektu z sukcesem pomimo wrogiego kierownictwa?

text: Pracuję dla filii dużej firmy o zasięgu światowym. Nie była to spółka zależna od początku, była to firma kupiona przez większą firmę. Wydaje się, że zmierzamy w kierunku marszu śmierci i zastanawiam się, czy jest coś, co ja (lub mój zespół) mogę zrobić, aby rozwiązać problemy z zarządzaniem lub ukończyć projekt pomimo ich wystąpienia. Jest to typowa sytuacja w Daily WTF: * Nierealne terminy (szacunki zarządzania 6 miesięcy, zespół programistów potrzebuje _minimum_ 18 miesięcy); * Długie (do 3h) codzienne spotkania, dodatkowo obniżające naszą produktywność; * Kierownictwo odmawia zmiany harmonogramu, ponieważ chce dobrze wyglądać dla nowych właścicieli; * Zastraszanie programistów, oskarżanie ich o niekompetencję, stawianie „ściany wstydu” itp. * Lider zespołu właśnie zrezygnował, a morale jest na najniższym poziomie. Chciałbym odejść – większość zespołu programistów rozważa to – ale niechętnie rezygnuję. Naprawdę potrzebuję pieniędzy, a także jestem tu tylko przez krótki czas (5 miesięcy) po okresie bezrobocia, więc odejście teraz może wywołać czerwone flagi dla potencjalnych pracodawców. Czy istnieją jakieś strategie, które mogą być skuteczne we wspieraniu większej współpracy ze strony kierownictwa lub przynajmniej minimalizowaniu bieżących zakłóceń? **EDYTUJ:** _Otrzymałem świetną radę z odpowiedzi na to pytanie. Naprawdę nie mogę zaakceptować odpowiedzi, ponieważ nie mogę przyjąć więcej niż jednej i byłoby to niesprawiedliwe dla pozostałych._ _Postanowiliśmy dać z siebie wszystko w pracy, biorąc pod uwagę okoliczności. Odpychamy kierownictwo, aby sprawdzić, czy rzeczywiście możemy uzyskać od nich pomoc (jako nowi ludzie, nowy termin itp.). Jednocześnie szukam nowej pracy (tak jak moi koledzy już to robili)._ _Zobaczymy co się stanie i odpowiednio zaplanujemy. Ale jedno jest pewne: poświęcenie się w korporacyjnej świątyni nie wchodzi w rachubę. _Dziękuję wszystkim!_


title: Java, ale brak doświadczenia z JEE

text: Mam dość duże doświadczenie w Javie (wiele lat Swinga, aplikacje desktopowe, gigantyczne aplety), ale zrobiłem bardzo mało JEE - tylko jeden koncert przez 9 miesięcy, ale to była bardzo wąska praca, w której w zasadzie tylko implementowałem logikę biznesową (w wysoce abstrakcyjne wewnętrzne IDE firmy) i co najwyżej podkręcanie niektórych stron JSP. Nigdy tak naprawdę nie poznałem dogłębnie przepływu makr we frameworku JEE. W międzyczasie wykonałem bardzo ograniczoną konserwację aplikacji ASP.NET MVC w mojej poprzedniej pracy (_bardzo_ ograniczona) i obecnie bawię się Ruby on Rails w domu. Czuję, że mam podstawowe sedno tworzenia stron internetowych, ale nic, co mógłbym nazwać solidnym „doświadczeniem siły przemysłowej” z którymkolwiek z tych frameworków. Nadal jestem trochę na etapie „programowania kultowego cargo” z tworzeniem stron internetowych, nie mogę naprawdę powiedzieć, że mógłbym zatkać przecieki w abstrakcjach, gdyby się zepsuły, że tak powiem. Zastanawiam się więc: na tym tle (rozbudowana Java i przyzwoite zrozumienie, jak działają frameworki internetowe), czy JEE będzie stosunkowo logiczne i łatwe do opanowania, czy też będzie to ogromna i stroma krzywa uczenia się? Zasadniczo planuję się tego nauczyć i chcę mieć wstępny pomysł na to, jak duży będzie to wysiłek.


title: Jak długo trzeba czekać, aby naprawdę dobrze opanować język programowania, a kodowanie zaczyna sprawiać przyjemność?

text: Dopiero zaczynam naukę programowania i zbliżam się do końca wprowadzenia. Poznałem algorytmy i funkcje, typy kodu i Pythona oraz pokrótce podstawowe idee programowania. I muszę powiedzieć, że to całkowicie pasuje do opisu języka, to jak nauka ponownego mówienia. Więc chciałbym wiedzieć, czy po tych trywialnych i próbujących etapach uczenia się, jak dostać się do tej bramy zrozumienia, czy programowanie staje się łatwiejsze i przyjemniejsze? Chciałabym też zorientować się, jak długo trwa proces uczenia się, zanim zaczniesz mówić tym językiem i robić takie rzeczy, jak pisanie aplikacji lub projektowanie w sieci, a wszystkie te elektryzujące rzeczy są zrozumiałe i wykonalne?


title: Czy muszę rozumieć wskaźniki, aby używać C++?

text: Cóż, uwielbiam C++, używam go od jakiegoś czasu: lubię wszystkie biblioteki (Allegro, SDL, QT, Ogre itp.), ale mam problem: nie rozumiem wskaźników. Czy naprawdę ich potrzebuję? Po prostu programuję dla zabawy: ale chcę się tego kiedyś nauczyć. Dziękuję.


title: Czy podpisujesz każdy ze swoich plików źródłowych swoim imieniem i nazwiskiem?

text: > **Możliwy duplikat:** > Jak śledzić autorów kodu? Jeden z moich kolegów ma zwyczaj umieszczania swojego imienia i adresu e-mail w nagłówku każdego pliku źródłowego, nad którym pracuje, jako metadanych autora. Nie jestem; Wolę polegać na kontroli źródła, aby powiedzieć mi, z kim powinienem rozmawiać o danym zestawie funkcji. Czy powinienem również podpisywać pliki, nad którymi pracuję z innych powodów? Czy ty? Jeśli tak, dlaczego? Aby było jasne, jest to dodatek do wszelkich metadanych dotyczących informacji o prawach autorskich i licencjach i dotyczy zarówno kodu otwartego, jak i zastrzeżonego.


title: Czy to dobra praktyka komentowanie nazwą właściciela?

text: > **Możliwy duplikat:** > Jak śledzić autorów kodu? Oto kilka scenariuszy, które mogą być komentowane nazwą właściciela: 1. naprawa błędów, tj. `// naprawiony błąd 123 przez xxx, rozwiązanie to ... ...` 2. znaczniki fixme/todo, tj. `// TODO: ... .przez xxx.` 3. hacki, czyli `// HACK! ... by xxx` W przypadku nr 2, proszę zapoznać się z tagami komentarzy Oczywistą zaletą jest to, że możemy ułatwić śledzenie według nazw. Minusem jest ryzyko nadużyć. Właściwie moja poprzednia firma dopuszczała taki sposób komentowania, ale obecny pracodawca całkowicie zabrania pojawiania się nazw w kodzie. Moim zdaniem głosowałbym za dyskretnym komentowaniem nazwiskami autorów. Jestem otwarty, aby usłyszeć od ciebie, czy ten styl komentowania jest dobry czy zły. Dziękuję.


title: dbdeploy (phing) i zespoły programistyczne

text: Czy ktoś tutaj używa dbdeploy (phing) w poleceniach? Jeśli tak – jak zarządzasz migracjami? Załóżmy, że mamy 2 różne funkcje opracowane w różnych gałęziach repozytorium mercurial (pliki phing build i migracje dbdeploy są przechowywane w mercurial). Jakie identyfikatory nadać każdej zmianie funkcji?


title: Jak mogę debugować wyjątki, które nie są łatwe do odtworzenia i występują tylko w środowisku produkcyjnym?

text: Pracuję nad problemem, w którym wyjątek występuje tylko w naszym środowisku produkcyjnym. Nie mam dostępu do tych środowisk ani nie wiem, co oznacza ten wyjątek. Patrząc na opis błędu, nie jestem w stanie zrozumieć przyczyny. javax.net.ssl.SSLHandshakeException: Otrzymano alert krytyczny: handshake_failure Czy ktoś mógłby mi doradzić, jak podejść do tego rodzaju problemu?


title: W takich przypadkach artefakty kompilacji będą się różnić w różnych środowiskach

text: Pracujemy nad automatyzacją wdrożenia z wykorzystaniem Jenkins. Mamy różne środowiska - DEV, UAT, PROD. W SVN tagujemy każde wydanie i umieszczamy te same binaria w DEV, UAT, PROD. Artefakty zawierają już pliki konfiguracyjne w każdym środowisku, ale nie rozumiem, dlaczego ponownie przechowujemy pliki binarne w folderze środowiska. Czy istnieją scenariusze, w których wdrożenie może być różne w różnych środowiskach.


title: Projekt części DB

text: Opracowuję narzędzie, które obsługuje części (elektryczne). Części mogą być tworzone, przeglądane, modyfikowane, usuwane, grupowane i tak dalej... Aby to pytanie było przydatne dla przyszłych odwiedzających, chciałbym, aby to pytanie było uniwersalne, ponieważ zarządzanie częściami w bazie danych jest bardzo powszechne bez względu na to, jakie są części w DB (płyty CD, samochody, jedzenie, studenci, ...). Myślę o 3 różnych projektach DB: 1. Używanie tabeli części i tabel pochodnych dla wyspecjalizowanych atrybutów części. Części (id, part_type_id, name) PartTypes (id, name) Przewody (id, part_id, length, średnica, materiał) Kontakty (id, part_id, description, picture) 2. Używanie tylko wyspecjalizowanych tabel części. Przewody (id, nazwa, długość, średnica, materiał) Kontakty (id, nazwa, opis, zdjęcie) 3. Korzystanie z tabeli Parts-, PartTypes-, ValueTypes- i PartValues, które zawierają wszystkie wartości. PartTypes (id, nazwa) ValueTypes (id, part_type_id, name) Parts (id, part_type_id, name) PartValues (part_id, value_type_id, value) Którą preferować i dlaczego? A może jest lepszy? Martwię się o zapytania DB. Nie chcę, aby zapytania stały się zbyt powolne lub skomplikowane. ## Aktualizacja Liczba typów w DB jest w dużej mierze podana i statyczna, ponieważ opierają się na międzynarodowym standardzie i będą rzadko rozszerzane.


title: czy można monitorować więcej niż jeden strumień jednocześnie?

text: Np. \- $stream1 to STDOUT procesu potomnego, a $stream2 to STDERR tego samego procesu potomnego \- $stream1 to jeden proces potomny, a $stream2 to inny proces potomny Czy w perlu istnieje możliwość monitorowania dwóch lub więcej strumieni o tym samym czasie? Zapętlamy więc tak długo, jak długo pojawia się coś w którymkolwiek ze strumieni i bierzemy to, co jest pierwsze w $stream1 lub $stream2. Coś w stylu while (my $line = <$stream1 or $stream2> ) { #zrób coś z $line } ??


title: Jak mogę wykonać automatyzację testów za pomocą skryptu Pythona do przetestowania programu w języku c?

text: Zastanawiałem się, czy mogę użyć skryptu Pythona do automatycznego testowania programu w C. Załóżmy, że mam bardzo prosty program w C, który odczytuje dane (liczby jako przypadki testowe) z konsoli, oblicza je, a następnie wyświetla je na konsoli. Teraz chcę odczytać dane z pliku, a następnie wyprowadzić to, co program wyprowadza do pliku. Załóżmy, że w oryginalnym programie w C używam pętli `while` i `scanf` do kilkukrotnego wczytania dwóch liczb do dwóch zmiennych `a` i `b` i wykonania różnych obliczeń zgodnie z wartościami `a` i `b`, tak: if(a>4 && a<10){...} else if(a>=10){...} Czy teraz mogę użyć skryptu Pythona do automatycznego przetestowania programu? Czy muszę modyfikować mój program w C? Jak? EDYCJA: Jeśli dozwolona jest jakakolwiek metoda, to jaki jest najlepszy sposób na automatyczne testowanie programu C bez korzystania z frameworków?


title: Zapobiegaj przypadkowemu piractwu w celu uzyskania prostej użyteczności

text: Napisałem małe narzędzie, które chciałbym sprzedać za mniej niż 10 dolarów. Moją główną troską jest „piractwo okazjonalne”. Scenariusz, który rozgrywa się w moim umyśle jest taki: > Użytkownik kupuje program, cieszy się z niego i opowiada o tym swoim znajomym. Znajomi > kopiują aplikację na swoje dyski USB i zabierają ją do domu - korzystając z aplikacji > za darmo (może nigdy nie zdają sobie sprawy, że powinni ją kupić. Ponieważ nie mam żadnej wbudowanej ochrony, byłaby to po prostu prosta kopia' n wklej, aby pirać aplikację. Użytkownicy, którzy będą korzystać z aplikacji, znajdują się blisko siebie (pracują w tym samym środowisku), więc zwykłe piractwo prawdopodobnie będzie występować często. **Masz pomysły?** Pamiętasz o aplikacji jest tania (częściowo w celu zmniejszenia przypadkowego piractwa), a nakład pracy związany z napisaniem aplikacji nie był zbyt wymagający Aktualizacja: aplikacja będzie działać na każdym systemie obsługującym .NET 3.5.


title: zasugeruj strukturę klas, które mapują do json z danymi dynamicznymi bez używania odwołań dynamicznych lub obiektów

text: jest to rodzaj danych, które muszę zdeserializować { "id": "M:11427", "title": "DAX30", "nextStartId": "S:727831", "sections": [ { "type" : "HIGHLIGHTS", "baseResults": [ wartości wyróżnień typu ], "hasMore": true }, { "type": "CHART", "hasMore": false, "chartTypes": [ wartości ciągów ] }, { " type": "TWEETS", "baseResults": [ wartości typu tweety ], "hasMore": true }] } Muszę je wszystkie serializować i deserializować. Chcę utworzyć coś, co może przechowywać wartości odpowiadające baseResults. istnieje główna klasa, która reprezentuje całą klasę json Data { ... ObservableCollection<Section> section{get;set;} ... } następnie jest klasa, która reprezentuje dane w tablicy **sections** głównego json class Sekcja { string type{get;set;}// te elementy decydują o tym, jaki rodzaj danych znajdzie się w baseResults dynamic baseResults{get;set;} //powinien zawierać ObservableCollection albo Highlights lub Tweets itp. } klasa bazowa dla typu danych przychodzących w tablicy **baseResults** jest abstrakcyjną klasą `class CategoryData` a jej dziećmi są `class Highlights` i `class Tweets` Używam `dynamic`, ponieważ nie mogę przypisać `ObservableCollection<CategoryData>` do `Obserwowalna kolekcja<Najważniejsze>`. Ale nie chcę używać tego typu dynamicznego lub obiektowego, zamiast tego chcę coś istotnego. proszę zasugerować mi, co mogłoby być lepszym podejściem do tego problemu.


title: Format arkusza kalkulacyjnego przyjazny dla Git?

text: Próbujemy przenieść nasz proces dokumentacji projektu z Dokumentów Google do zestawu samodzielnie hostowanych repozytoriów Git. Dokumenty tekstowe są wystarczająco przyjazne dla Git, ponieważ zwykle nie potrzebujemy żadnego wymyślnego formatowania, po prostu skonwertujemy wszystko do, powiedzmy, multimarkdown z opcją osadzenia LaTeX dla złożonych przypadków. Ale arkusze kalkulacyjne to zupełnie inna historia… Czy istnieje format arkusza kalkulacyjnego (podobny do formatu), który jest przyjazny dla systemów kontroli wersji (i najlepiej jest tak samo czytelny dla człowieka jak Markdown)? _"Przyjazny format": Git dobrze współpracuje z formatem (nie obsługuje XML) i generuje różnice czytelne dla człowieka (dodatkowa konfiguracja z użyciem zewnętrznych narzędzi jest OK)._ Oczywiście, smaki Markdowna pozwalają na budowanie statycznych tabel, ale ja Chciałbym móc używać takich rzeczy jak `SUM()` itp... (Zauważ, że CSV ma ten sam problem.) Żaden WYSIWYG nie jest OK, ale przyzwoita obsługa edytora/narzędzi byłaby przyjemna. _Aktualizacja: Proszę tylko o odpowiedzi przyjazne dla Linuksa. Żadnego pakietu MS Office._


title: Analiza przyczyn źródłowych w korelacji zdarzeń

text: Mam napisać moduł korelatora zdarzeń dla produkowanego przez nas urządzenia. Gdy wystąpi usterka, wynikowa lawina logów o warunkach pochodnych z różnych modułów jest czytelna tylko dla wprawnego w zadaniu - laik będzie kompletnie zagubiony. Korelator zdarzeń ma rozwiązać ten problem - znaleźć źródłową przyczynę i przedstawić przyjazny komunikat naprowadzający użytkownika do źródła problemu. Mogę zebrać tokenizowane zdarzenia ze wszystkich modułów i obserwować stan wewnętrzny modułu głównego. Mogę nawet napisać historię kilka sekund wstecz. Teraz trudna część i moje właściwe pytanie: napisanie algorytmu analizy. Wypróbowałem stronę Wikipedii, ale jest ona strasznie pobieżna w konkretnej części dotyczącej analizy przyczyn źródłowych, a powiązany artykuł RCA dotyczy bardziej praktyki biznesowej niż czegoś, co można sformułować jako algorytm komputerowy. Sieć jest pełna korelatorów zdarzeń jako oprogramowania do kupienia lub użycia, ale mam problem ze znalezieniem czegokolwiek na temat tworzenia jednego. Podsumowując: * historia zdarzeń i stanów zrzucona w momencie wystąpienia błędu ("czarna skrzynka") * zbiór reguł (najlepiej w formie edytowalnej przez człowieka w jakimś zewnętrznym pliku) * zbiór przyczyn źródłowych, wywodzących się z wydarzenia zgodnie z zasadami. * program interpretujący te reguły, a następnie przetwarzający przez nie czarną skrzynkę i tworzący zestaw dopasowań głównych przyczyn. Jak w ogóle podchodzę do pisania czegoś takiego? * Jaki byłby format pliku zestawu reguł i parsera reguł — samo analizowanie leksykalne jest dość łatwe, ale co by to dało? * Jak reprezentować _zasadę_ wewnętrznie? Zapewne jako jakiś przedmiot, ale jak by to wyglądało? Jak powiązać reguły w drzewie decyzyjnym? * przetwarzanie danych z czarnej skrzynki zgodnie z tymi zasadami. Brzmi to strasznie jak uruchamianie danych w skrypcie, ale dane zawierają dużo szumu. Jak zapewnić uzyskanie _niektórych_ wyników? Teraz pewne zastrzeżenia: * Wolałbym unikać bayesowskiego lub innego podejścia statystycznego - wolałbym w pełni deterministyczne rozwiązanie, tak aby dany zestaw warunków dawał ten sam wynik w analizie laboratoryjnej, a precyzyjny zestaw reguł był w pełni ludzki -czytelny i edytowalny przez człowieka. * Nie wszystkie komponenty są bezpośrednio monitorowane, a niektóre usterki można wyprowadzić tylko pośrednio. Podstawową przyczyną nie zawsze będzie jedna konkretna wiadomość w czarnej skrzynce. Czasami będzie to coś, co doprowadziło do pewnego zestawu logów. * Nie zawsze zachowywana jest sekwencja zdarzeń, ponieważ komunikaty są czasami opóźniane na szynie komunikatów. * Jeśli główne zasilanie zgaśnie, nie mamy gwarancji, że przechwycimy wszystkie dane. Przykłady: 1. * Zatrzymanie raportów modułu 1; linia blokady jest aktywna. * Zatrzymanie raportów modułu 2; linia blokady jest aktywna. * Zatrzymanie raportów modułu 4; linia blokady jest aktywna. * Moduł zasilacza zgłasza, że zasilanie zewnętrzne jest w porządku, zasilanie wewnętrzne zostało wyłączone (na linię blokującą). Przyczyna główna: Moduł 3 uległ awarii, poważny stan sprzętu aktywował linię blokującą poprawnie, ale nie mógł wysłać swojej wiadomości. 2. * Zatrzymanie raportów modułu 1; linia blokady jest aktywna. * Zatrzymanie raportów modułu 2; linia blokady jest aktywna. * Zatrzymanie raportów modułu 4; linia blokady jest aktywna. * Moduł zasilacza zgłasza, że zasilanie zewnętrzne jest w porządku, zasilanie wewnętrzne zostało wyłączone (na linię blokady). * Moduł 3 zgłasza zatrzymanie; Brak zasilania w linii wyjściowej. Aktywacja linii blokady. Pierwotna przyczyna: Przepalony bezpiecznik linii wyjściowej Modułu 3 Teraz Moduł 3 miał na celu wysłanie swojego komunikatu jako ostatni, a najpierw zaciągnięcie linii blokady. 3. * Zatrzymanie raportów modułu 3; Brak zasilania w linii wyjściowej. Aktywacja linii blokady. * Zatrzymanie raportów modułu 1; linia blokady jest aktywna. * Moduł zasilacza zgłasza, że zasilanie zewnętrzne jest w porządku, zasilanie wewnętrzne zostało wyłączone (na linię blokady). * Moduł 2 zgłasza zatrzymanie; Brak zasilania w linii wyjściowej. Aktywacja linii blokady. * Zatrzymanie raportów modułu 4; Brak zasilania w linii wyjściowej. Aktywacja linii blokady. Pierwotna przyczyna: Odłączony główny bezpiecznik wewnętrznego zasilania. Prawdopodobna przyczyna: zwarcie w zasilaczu lub ręczne wyłączenie bezpiecznika. Zwróć uwagę, jak moduł 1 spóźnił się z wykryciem braku zasilania, powiedzmy, że jego wyjście było nieaktywne, a kondensatory utrzymywały go na tyle długo, że najpierw wykrył linię blokady (załączoną przez inne moduły), zanim wykrył awarię zasilania. Poza tym normalnie zasilacz zgłosi awarię wewnętrznego zaniku zasilania, ale jest to po prostu wolniejsze - mniej czułe niż moduły wyjściowe i pociągną linię blokującą zanim wykryją brak zasilania i wtedy uzna, że jest to prawidłowe zachowanie. Różnica między przypadkiem 2. i 3. to tylko liczba jednoczesnych awarii „braku zasilania”: jest bardzo mało prawdopodobne, że kilka bezpieczników przepali się w tym samym czasie, podczas gdy użycie bezpiecznika głównego do wyłączenia zasilania do prac serwisowych jest podejściem „tradycyjnym” i można się spodziewać, że co najmniej kilka modułów wykryje „brak zasilania”, jeśli główny bezpiecznik jest wyłączony.


title: Czy podjęcie pracy w tworzeniu stron internetowych uniemożliwi karierę programisty na niskim poziomie?

text: Jestem studentem informatyki na ostatnim roku i chcę znaleźć pracę, ale mam trudności ze znalezieniem takiej w moim mieście, w której mógłbym wykorzystać to, co już dobrze znam. Jest firma, która robi PHP/web, która nalega, aby dla nich pracować i jest to kuszące, ponieważ wynagrodzenie byłoby dobre (dla kogoś, kto jest jeszcze studentem), a warunki pracy są świetne; problem w tym, że w żaden sposób nie chcę kariery w webdeveloperze, bo uwielbiam programowanie niskopoziomowe (C++, C, trochę C# i Pythona - do mojej pracy magisterskiej pracuję nad kompletnym kompilatorem C z optymalizacjami - ja uczyni to open source jeszcze w tym roku). Ta praca byłaby tylko dopóki nie skończę studiów i nie znajdę czegoś, co mi się podoba. Teraz pytanie: czy podjęcie tej pracy może zmniejszyć moje szanse na przyjęcie do pracy, w której wykonywane są rzeczy niskiego poziomu? Myślę, że tak, ponieważ osoba przeprowadzająca rozmowę kwalifikacyjną może powiedzieć coś w stylu: „Cóż, jeśli udajesz, że wiesz tyle rzeczy na niskim poziomie, dlaczego wybrałeś pracę, w której robisz coś zupełnie odwrotnego?” Tutaj PHP jest uważane przez wielu za język używany przez początkujących programistów (wiem, że to nie do końca prawda) i obawiam się, że twierdzenie, że mam głęboką wiedzę na temat niskopoziomowych rzeczy podczas wykonywania pracy w PHP nie robi dobrego wrażenia (i tylko jeden) wymieniony w moim CV.


title: Kiedy lub dlaczego należy używać metod pobierania/ustawiania dla właściwości klasy zamiast po prostu czynić je publicznymi?

text: Programuję głównie w ColdFusion, ale to jest ogólne pytanie OOP. Czy jest jakaś korzyść z używania: getProp() { return prop; } setProp(val) { prop = val; } W przeciwieństwie do prostego obj = new Obj(); obj.prop = "1";


title: Prawidłowa umowa z użytkownikiem

text: Mam zamiar udostępnić małą usługę, dzięki której będziesz mógł sterować swoim komputerem z dowolnego miejsca. Istnieje z serwera (który będę dostarczał) i dwóch klientów (kontrolowanego i kontrolującego). Teraz chcę świadczyć tę usługę za niewielką opłatą. Jednak serwer to tak naprawdę mały stary laptop Della z uszkodzonym ekranem w moim domu z systemem Ubuntu jako systemem operacyjnym. Nie jest zbyt niezawodny, ale chcę go używać, ponieważ jest tani. Teraz, jak już powiedziałem, laptop może nie jest najbardziej niezawodną maszyną, podobnie jak moje połączenie internetowe, które również może się zepsuć, jeśli wystąpią jakieś nieoczekiwane problemy. Ale nie chcę ryzykować i dać znać użytkownikowi, zanim zapłaci, że to może się zdarzyć. Ale chcę też, żebym był bezpieczny, żebym nie musiał oddawać żadnych pieniędzy. To moja pierwsza aplikacja, którą rozdam za niewielką opłatą i nie wiem, jaką odpowiedzialność prawną muszę wziąć na siebie. Zasadniczo nie chcę oddawać żadnych pieniędzy, nawet przy 100% przestoju (co będzie bardzo mało prawdopodobne), ale nie chcę też, aby to była moja wina, jeśli ktoś utraci dane, używając mojego oprogramowania, nawet jeśli jest to błąd lub ktoś przechwycił jego dane. Więc umieściłem to w umowie i tylko to. Czy to wystarczy i czy jest prawnie wiążące? Co też powinienem wiedzieć? > * iControl faktycznie implementuje protokół klient-serwer-klient, gdzie jeden > klient pozwala drugiemu klientowi wykonać polecenie powłoki. Następnie kontrolowany > klient zwróci status zakończenia, standardowe wyjście i > standardowy błąd tego polecenia. > * iControl nie używa szyfrowania do przesyłania danych przez sieć. Korzystanie z tej usługi jest > potencjalnym zagrożeniem bezpieczeństwa, ponieważ wszystkie dane są przesyłane > surowo przez sieć. Możesz to porównać z protokołem FTP, protokołem HTTP >, którego teraz używasz, i protokołem telnet. > * Producent iControl w żaden sposób nie odpowiada za szkody, które może > wyrządzić ta usługa. Nie przez niewłaściwe użycie przez użytkownika, nie przez błąd w oprogramowaniu. Nie > nielegalne działania mogą być wykonywane przy użyciu tej usługi. Dostawca tej usługi > może zawiesić Cię w swojej usłudze w dowolnym momencie bez wyjaśnienia, > bez gwarancji zwrotu pieniędzy. Poborca czynszu nie musi > w żadnym wypadku zwracać wpłaconych pieniędzy. > * Usługa iControl jest obsługiwana przez jednego i tylko jednego człowieka. Może wystąpić dowolny > przestój używanego serwera. W przypadku dłuższego przestoju usługodawca nie musi zwracać pieniędzy, jednak zrobi wszystko, co w jego mocy, aby cię uszczęśliwić, starając się, aby usługa działała przez cały czas. > Planuję pozwolić użytkownikowi zaznaczyć pole, że przeczytał to i wyraził zgodę podczas rejestracji. Czy to wystarczy?


title: Opłaty niezależne na podstawie wykonanych zadań

text: Właśnie zacząłem pracować jako freelancer i mam dwa projekty, w których dzielę tydzień z obiema firmami, jeden pobieram co godzinę i wszystko jest w porządku, drugi jednak powiedzieli, że zapłacą mi na podstawie punktów za pomocą Pivotal Tracker . Na przykład jest stała stawka za punkt i pracują na podstawie oszacowania, że zdobędę dwa punkty dziennie. Zastanawiałem się, czy jest to coś, co jest używane regularnie, czy powinienem spróbować przełączyć ich na godzinę? Obawiam się, że punkty są używane tylko do funkcji, a jeśli funkcja ma błąd, nie jest to brane pod uwagę, więc za czas poświęcony na naprawienie tego błędu nie zostanie naliczona opłata. Prawidłowy?


title: Jakie jest najbardziej wydajne środowisko kodowania?

text: Rozmawiałem kiedyś z byłym kolegą o najbardziej produktywnym sposobie pisania kodu i powiedział, że uważa go za najlepszy „do CIMP, czyli Code In My Pants”. Kiedy zapytałem go dokładnie, co miał na myśli, wyjaśnił, że najlepiej jest pracować w domu, kodować we własnym tempie, ubierać się wygodnie (w spodnie) i komunikować się ze swoim zespołem przez e-maile, komunikatory lub telefon. Analizując jego podejście (które opisuje klientom jako Kompletną Zintegrowaną Metodę Programowania), zdałem sobie sprawę, że moje kodowanie jest również bardziej produktywne podczas pracy w odizolowanym środowisku, co sprawiło, że zacząłem się zastanawiać, czy branża oprogramowania pomyliła się i czy powinna być naprawdę są wykonywane przez rozproszone zespoły osób, czy też istnieją zalety geograficznego stada, które rekompensują dodatkowe przerwy, jakie przynosi? Czy biznes się pomylił? Czy rozwój powinien odbywać się głównie wśród osób odizolowanych geograficznie w celu zwiększenia produktywności, czy też istnieją prawdziwe powody, dla których wspólne hodowanie programistów ma sens?


title: Jak ograniczę liczbę zalogowanych użytkowników na podstawie sesji?

text: Mam oprogramowanie (w chmurze) z tyloma zarejestrowanymi użytkownikami. Chcę ograniczyć liczbę użytkowników zalogowanych jednocześnie do określonej liczby (na podstawie konfiguracji, powiedzmy 100). Jeśli 101 użytkownik próbuje się zalogować, powinien zostać umieszczony w kolejce z priorytetem 1, a następnie 102 użytkowników powinno być w kolejce 2. Wiem, że za każdym razem, gdy żądanie zalogowanego użytkownika trafia do serwera, czas dostępu do pliku `sess_file` zostanie zaktualizowany. Jaka powinna być logika stąd? Czy powinienem sprawdzić czas ostatniego dostępu do wszystkich plików `sess_file` i wylogować się z zastosowań, które są bezczynne? i jak poradzę sobie z kolejką oczekujących? Oprogramowanie odbywa się za pomocą PHP-MySQL. Gdy użytkownik jest zalogowany zaznaczam kolumnę jako zalogowany w tabeli użytkowników, a po załadowaniu strony logowania, jeśli łączna liczba zalogowanych użytkowników wynosi 100, użytkownik 101, który próbuje się zalogować, jest kierowany do strona pośrednia, która sprawdzi poprzez wywołanie ajax uruchomione w odstępie 5 minut, czy jakikolwiek użytkownik zostanie wylogowany. Jeśli slot jest dostępny, przekierowuje na stronę logowania, automatycznie loguje się i przekierowuje do pulpitu użytkownika. Ale chcę wiedzieć, że istnieje jakaś lepsza praktyka. Przeważnie chcę wiedzieć, czy unieważnienie zalogowanego użytkownika przez sprawdzenie czasu dostępu do pliku `sess_file` jest właściwą metodą?


title: Biblioteki wewnętrzne (Subversion Externals, gałąź „biblioteka” lub po prostu inny folder)

text: Obecnie pracuje nad wieloma projektami, które wymagają współdzielenia bibliotek wewnętrznych. Biblioteki wewnętrzne są na bieżąco aktualizowane. Obecnie tylko 1 projekt musi być stabilny, ale wkrótce będziemy musieli mieć stabilne oba projekty w dowolnym momencie. Jaki jest najlepszy sposób na wewnętrzne biblioteki SVN? Obecnie używamy 'po prostu innego folderu' w ten sposób... > trunk\project1 > trunk\project2 > trunk\libs Powoduje to poważny ból głowy, gdy biblioteka współdzielona jest aktualizowana dla projektu 1 i projektu 2 jest teraz martwa, dopóki części, które używają biblioteki są aktualizowane. Więc po przeprowadzeniu pewnych badań na temat zewnętrznych SVN pomyślałem o tym ... > trunk\project1\libs (zewnętrzny do trunk\libs @ jakaś wersja) > trunk\project2\libs (zewnętrzny do trunk\libs @ inna wersja) > trunk\ libs\ Jestem trochę zaniepokojony tym, jak zewnętrzne działają z zatwierdzeniami i nie robię zatwierdzeń bibliotek tak skomplikowanych, że jestem jedyną osobą, która jest w stanie to zrobić (głównie martwię się o gałęzie z zewnętrznymi, ponieważ intensywnie ich używamy). Co więcej, w każdym projekcie mamy wiele języków programowania, z których niektóre nie obsługują katalogów bibliotek na projekt (przynajmniej niełatwo), więc musielibyśmy pobierać na podstawie projektu, zamiast sprawdzać magistralę. Istnieje również rozgałęzienie bibliotek w stylu „dostawcy”, ale ma ten sam problem, co powyżej, gdzie biblioteka musiałaby być podkatalogiem każdego projektu i może być trochę zbyt skomplikowana ze względu na to, jak mało mamy projektów. Jakikolwiek wgląd byłby miły. Spędziłem sporo czasu czytając książkę o Subversion i czując, że nigdzie nie zmierzam.


title: W przypadku utworzenia zarówno wpisu DR, jak i CR lub rachunkowość pojedynczego wpisu jest w porządku?

text: Nowy projekt ma kwotę. Zawsze dotyczy klienta. Jeden klient może mieć wiele projektów. I może płacić krokami za konkretny projekt. Aby śledzić płatności klientów, stworzyłem tabelę `client_ledger`, która zawiera informacje o dacie, godzinie, kwocie, trybie płatności i powiązanym projekcie. Ale potem na jednym z ekranów oprogramowania mam do czynienia z raportami dotyczącymi debetu i kredytu klienta. Więc są 2 rzeczy, które można zrobić: 1. Mogę uzyskać łączną kwotę wszystkich projektów tego klienta i jego całkowite płatności, a następnie mogę pokazać, ile salda pozostało do spłacenia. 2. Lub jeśli utworzyłem wpis w tabeli `client_ledger` dla `DR`, to zaraz po utworzeniu projektu wpis jest w tabeli dla `DR`, a kolejne otrzymane płatności będą miały wartość `CR` ed do bazy danych. W takim przypadku, jeśli kwota projektu zostanie później zmodyfikowana/edytowana, wówczas albo oryginalny wpis `DR` musi zostać zmodyfikowany, albo nowy wpis `CR`, po którym następuje wpis `DR` kwoty nowego projektu`. Którego z tych procesów należy przestrzegać?


title: Deweloperzy dziedziczący kod. O co poprosić starego programistę, aby lepiej pomóc nowemu programiście?

text: Nic nie wiem o kodzie. Nasz stary programista iOS zrezygnował i szukamy nowego programisty lub zespołu do wznowienia tego, co przerwał. Zdaję sobie sprawę, że mogą wystąpić problemy z dziedziczeniem kodu przez programistów itp. Jakie pytania mogę zadać mojemu staremu programiście, aby lepiej pomóc nowemu programiście zrozumieć, na jakim etapie jest kod, nad czym należy popracować itp. ? Tak więc, kiedy spotykam się z potencjalnymi nowymi programistami, mogę im wręczyć „arkusz faktów” pokazujący, gdzie znajduje się kod starego programisty.


title: Czy potrzebna jest klasa fabryki do tworzenia modeli widoków?

text: Mój kolega zasugerował użycie klasy factory do tworzenia obiektów viewmodel w naszych rozwiązaniach ASP.NET MVC. Chodzi o to, że może pomóc w projektowaniu i utrzymaniu sposobu budowania modeli widoków w naszych aplikacjach. Chciałem się dowiedzieć, czy ktoś jeszcze ma tego do czynienia. Zrobiłem trochę badań i niewiele znalazłem na temat tej praktyki. Obecnie tworzymy obiekty viewmodel na poziomie kontrolera np. public ActionResult Index() { return this.View(this.BuildIndexViewModel()); } A więc this.BuildIndexViewModel() jest odpowiedzialne za stworzenie klasy viewmodelu (oczywiście :). Ale szukamy możliwości: public ActionResult Index() { return this.View(ViewModelFactory.CreateIndexViewModel()); } To ciekawy pomysł, ale nie jestem w 100% przekonany. Byłem zainteresowany opiniami innych ludzi na ten temat.


title: Przełączanie na Windows Identity Foundation — czy powinniśmy używać dostawcy roli i członkostwa SQL Server?

text: Mamy aplikację, która wykorzystuje SQL Server jako zaplecze. Był oparty na serwerze klienta, teraz będzie oparty na sieci WWW. Naszą implementacją do logowania był identyfikator użytkownika i hash/sól hasła przechowywane w bazie danych. Ponadto wszystkie zasady i role były przechowywane w naszym schemacie tabeli i przypisane do użytkowników lub grup zdefiniowanych przez użytkowników. Tak więc logowaliby się, uwierzytelniali, a następnie ściągaliśmy role i zasady dla tego użytkownika, aby mogli korzystać z części aplikacji, na które zezwalała ich rola (role) i zasady. Badamy WIF teraz, gdy jest on oparty na Internecie. W idealnej sytuacji chcielibyśmy ponownie użyć naszego obecnego modelu, to znaczy móc logować się przy użyciu naszych istniejących tabel, a następnie pobierać role i zasady. Istnieje jednak dostawca roli i członkostwa SQL Server. Czy łatwiej byłoby zmienić login, role i członkostwo przy użyciu wbudowanego dostawcy SQL Server i odrzucić nasz schemat tabeli? A może powinniśmy zbudować dostawcę od podstaw?


title: Jak mogę zapewnić bezpieczeństwo produkcyjnego środowiska Pythona?

text: Większość mojej pracy to tworzenie stron internetowych w Django (framework w Pythonie) i wdrażanie ich na serwerach własnych lub klientów. Pracuję z `virtualenv`, aby oddzielić witrynę od pakietów systemowych i mieć tam zainstalowanych około 60-80 pakietów, a ta część jest dzielona między dwa tuziny witryn. To oczywiste ograniczenie tego podejścia polega na konieczności przetestowania każdej witryny, jeśli uaktualnię pakiet, którego używa. Uważam, że to uczciwy kompromis, ponieważ nie trzeba trzymać się na szczycie mnóstwa oddzielnych wirtualnych środowisk. I to jest w zasadzie cały mój problem. **Jak, u licha, masz być na szczycie wdrożeń `virtualenv`?** Wydaje się, że ludzie po prostu traktują je jak wysypisko śmieci, ale jeśli wszechświat programowania nauczył się czegoś w zeszłym tygodniu z eksplozji Ruby on Rails, używając starego wersje oprogramowania są niedopuszczalne. Mam prosty skrypt, który próbuje sprawdzić aktualne wersje pakietów z najnowszym odpowiednikiem `pip`, ale jest to dość niepoprawne. Nie rozróżnia również aktualizacji zabezpieczeń i aktualizacji funkcji (które wymagają dni testowania i naprawiania). Szukam czegoś lepszego. Szukam czegoś, co może dać mi znać, czy Django ma nowe wydanie bezpieczeństwa lub czy coś jest wycofane z eksploatacji. Chcę, żeby coś pomogło mi (i innym entuzjastom Pythona) nie stać się kolejną grupą ludzi płaczących po fali dzieciaków ze skanerami i skryptami, które zamieniają nasze serwery w botnet. Czy coś takiego istnieje?


title: Jaka jest różnica między błędem a nową funkcją pod względem podziału obowiązków?

text: Planujemy wprowadzić do naszego projektu Help Desk i Support Desk. Nasz obecny zespół programistów zostałby podzielony na dwa mniejsze zespoły: Support Desk i Development Team. Support Desk byłby odpowiedzialny tylko za naprawianie błędów. Zespół programistów byłby odpowiedzialny za wprowadzanie ulepszeń i opracowywanie nowych funkcji. Jaką wartość dostrzegasz w takim podziale obowiązków i zespołów? Czy możemy znaleźć różnice między błędem a nowymi funkcjami w zakresie działań programistycznych? Czy robienie takich rzeczy ma jakąkolwiek wartość?


title: Czy hierarchiczne dziedziczenie należy do przeszłości?

text: Ostatnio zwróciłem uwagę, że dziedziczenie hierarchiczne może być pozostałością po myśleniu o klasach jako o „strukturach z funkcjami”, a nie o mentalności związanej z kontraktem produktu. Rozważmy jako prosty przykład implementację "Niemodyfikowalnego Iteratora" z Guavy. http://guava- library.googlecode.com/svn/trunk/javadoc/com/google/common/collect/UnmodifiableIterator.html Jest to iterator, który zgłasza „UnsupportedOperationException” przy wywołaniu metody remove(). Teraz jestem pewien, że większość ludzi zgodziłaby się, że implementacja kontraktu, a następnie posiadanie jednej z jego metod, które zawsze rzuca wyjątek, jest złą formą -- kiedy implementujesz kontrakt, domyślnie gwarantujesz, że wszystkie metody będą działać. Ale jakie mamy tutaj opcje? Moglibyśmy zadeklarować interfejs, który nie zawiera metody remove, ale spowodowałby, że nasz zwracany typ byłby niekompatybilny ze wszystkimi metodami, które działają na iteratorach. Możemy winić projektantów Java API za zmuszanie metody remove() do bycia częścią każdego iteratora, zamiast przenoszenia jej na interfejs wyższego poziomu, taki jak „RemovableIterator”. Gdyby to zrobili, rzeczywiście uniknęłoby to pewnych problemów, ale powiedzmy, że potrzebujemy iteratora, który może również ustawiać wartości o nazwie „SettableIterator” (implementuje setValue(T) ), a także iterator resetowalny. Jeśli wymagamy kombinacji tych funkcjonalności, jesteśmy zmuszeni zadeklarować interfejs dla każdej kombinacji. RessetableSettableIterator, RessetableRemovableIterator, RemovableSettableIterator itd. Kombinacje rosną wykładniczo do dodatkowych funkcji, które dodajemy do interfejsu. To, co zwykle próbujemy wyrazić, to coś w stylu „ta funkcja wymaga parametru, który jest iterowalny, ustawialny i resetowalny” lub „ta funkcja zwraca wartość, która jest iterowalna i resetowalna”. Jednak języki takie jak C#, Java i C++ nie pozwalają nam na to bez bardzo niewygodnego użycia generyków. Czy istnieją nowe metody, które sprawiają, że ten rodzaj projektowania jest przestarzały?


title: Które kolory UML powinny być reprezentowane w tym przykładzie?

text: Zobacz kolory UML tutaj. Oto przykład, mam następujące klasy encji: User(name) MailBox(owner: User, label) Mail(from: User, to: User, subject, body, composeTime) MailCopy(type, from: User, to: User , subject, body) MailDelivery(mailCopy, mailBox) Przypadek użycia: Każdy użytkownik ma domyślnie trzy skrzynki pocztowe: `MailBox(*, draft)`, `MailBox(*, Received)` i `MailBox(*, send)`. Użytkownik (alicja) utworzył nową pocztę (alicja, bob, witaj, świat) i kliknął przycisk „wyślij”. Nowa „MailCopy(SOURCE, alice, bob, hello, world)” jest tworzona i dostarczana do „MailBox(alice, send)” oraz tworzona jest kolejna kopia „MailCopy(DEST, alice, bob, hello, world)” i dostarczone do `MailBox (bob, odebrane)`. Chcę wiedzieć, jak klasyfikować te podmioty zgodnie z archetypem kolorów UML?


title: Czy istnieje kanoniczna książka o matematyce dla programistów?

text: Jestem programistą samoukiem. Szczerze, nie jestem dobry z matematyki. Jaką radę możesz udzielić, aby poprawić moje umiejętności matematyczne, aby nie czułem się tak niepewny w stosunku do moich kolegów programistów? Jakie kroki lub wskazówki możesz polecić, aby poprawić moje umiejętności matematyczne? Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje na temat matematyki dla programistów? Co w tej książce czyni ją wyjątkową?


title: Jak byś sam podszedł do edukacji matematycznej w sposób, który jest odpowiedni dla programowania?

text: > **Possible Duplicate:** > Czy istnieje kanoniczna książka o matematyce dla programistów? Moje studia z matematyki na studiach licencjackich były w większości obszerne, z niewielką dogłębną wiedzą. Tak, zdałem testy; mam asa, ale nie czuję się kompetentny w matematyce. Gdybyś miał to zmienić? Jak byś to zrobił? Jakie książki? Jaka kolejność? Co byś podkreślił? Co byś całkowicie pominął?


title: Czy istnieje coś takiego jak za dużo kodu asynchronicznego?

text: W tej chwili zajmuję się klientami i serwerami w WinForm C# i staram się to wszystko zaimplementować asynchronicznie. Jednak zaczynam się zastanawiać, czy do wszystkiego używać kodu asynchronicznego? Oto lista tego, co aktualnie robię asynchronicznie: 1. TcpClient.BeginConnect z TcpClient.EndConnect 2. NetworkStream.BeginRead z NetworkStream.EndRead 3. TcpListener.BeginAcceptTcpClient z TcpListener.EndAcceptTcpClient 4. Nasłuchujący wątek na serwerze dla połączeń klientów 5. Wątek nasłuchiwania na kliencie dla danych przychodzących z serwera 6. Zadanie nasłuchiwania na serwerze dla danych przychodzących od każdego klienta 7. Nowe zadanie tworzone za każdym razem, gdy zostanie zgłoszone zdarzenie takie jak ConnectionLost (aby odpowiedni formularz mógł zostać zaktualizowany). Pomyśl Delegate.BeginInvoke. Wszystko jest ustawione asynchronicznie i działa dobrze, ale zaczynam się zastanawiać, czy wszystkie te _powinny_ być asynchroniczne. To znaczy, to wszystko brzmi ładnie i ludzie twierdzą, że jest wydajny, ponieważ porty zakończenia IO nie blokują się, czy coś, ale czy tak jest naprawdę? Rozumiem, że posiadanie jednego wątku do nasłuchiwania zarówno na kliencie, jak i na serwerze, a także do czytania ma sens. Ale za każdym razem, gdy wywoływane jest zdarzenie (co może być dość częste!), czy jego wywołanie naprawdę powinno być asynchroniczne? Wygląda na to, że używam zadań do wszystkiego, co _mogą_ być asynchroniczne i nie jestem pewien, czy jest to najlepsza praktyka.


title: Schematy uprawnień rodziców i dzieci

text: Które podejście jest najbardziej sensowne, destrukcyjne czy nieniszczące? Czy ktoś ma doświadczenie w świecie rzeczywistym z jednym, obydwoma lub nawet innym podejściem? **Model** Schemat pozwoleń zawiera zestaw pozwoleń połączony z nim. Może też mieć rodzica, od którego dziedziczy uprawnienia. **Destrukcyjny** Odebranie uprawnień systemowi nadrzędnemu odbiera również te uprawnienia w każdym systemie podrzędnym. Powód, dla którego należy tego użyć: gdy później ponownie włączysz te uprawnienia dla schematu nadrzędnego, nie zostaną one automatycznie ponownie włączone dla schematów podrzędnych. Powód, aby tego nie używać: przypadkowe odebranie uprawnień schematowi nadrzędnemu oznacza, że uprawnienia schematów podrzędnych muszą zostać przywrócone osobno. **Niedestrukcyjny** Odbieranie uprawnień schematowi nadrzędnemu nie ma wpływu na schematy podrzędne. Schematy nadrzędny i podrzędny są łączone w celu określenia odpowiednich uprawnień. Powód, dla którego należy tego użyć: przypadkowe odebranie uprawnień schematowi nadrzędnemu nie wymaga oddzielnego przywrócenia schematów podrzędnych. Powód, aby tego nie używać: gdy później ponownie włączysz te uprawnienia dla schematu nadrzędnego, zostaną one automatycznie ponownie włączone dla schematów podrzędnych.


title: co to jest „pełna wdzięku degradacja”?

text: Dużo słyszę o tym określeniu „Wdzięczna degradacja”. Na przykład , „Serwer aplikacji powinien wdzięcznie ulegać degradacji, gdy jest pod dużym obciążeniem” „Prawdziwa degradacja interfejsów użytkownika...”. Termin ten wydaje mi się czymś abstrakcyjnym. Jakiś konkretny przykład tego, co to znaczy?


title: Jak wdrożyć obsługę błędów

text: Mimo, że przez kilka lat programowałem na profesjonalnym poziomie, nadal nie rozumiem w pełni obsługi błędów. Chociaż moje aplikacje działają dobrze, obsługa błędów nie jest zaimplementowana na poziomie profesjonalnym i jest mieszanką wielu technik. Za moją obsługą błędów nie ma żadnej struktury. Chciałbym nauczyć się i zrozumieć, jak to jest realizowane na poziomie zawodowym. To jest jeden obszar, w którym brakuje mi wiedzy. Kiedy należy używać wyjątków, a kiedy należy zwrócić status powodzenia do sprawdzenia w przepływie logicznym? Czy można mieszać wyjątek i zwracać status? Programuję głównie w C#.


title: Budowanie automatycznych testów jednostkowych dla narzędzi, które nie mają implementacji xUnit

text: # Preambuła Ugryzł mnie błąd automatycznego testowania jednostkowego. Czuję korzyści i zaufanie do bazy kodu, jaką może dostarczyć. Czuję też, że mam rozsądną intuicję, które części kodu _zasługują_ na testowanie jednostkowe. Kod, który ma logikę, kod, który może być niechlujny (ponieważ ma do czynienia z pewnymi niechlujnymi wymaganiami), który z przyjemnością zamieściłeś, który może mieć kilka dziwnych warunków brzegowych. # Niezwykły kontekst W moim miejscu pracy korzystamy z wielu narzędzi, które są dość niszowe. Ze względu na argumentację, z pewnością widzę, że te narzędzia zapewniają funkcje i wydajność, dzięki czemu są niezbędne do wykonania określonej pracy. Wyzwanie, jakie mam, polega na tym, że z pewnością zaimplementowałem logikę w tych narzędziach, o czym moje przeczucie mówi „powinno to zostać pokryte testem jednostkowym”. Przetestowałem te fragmenty kodu... * W sposób jednorazowy - wypróbuj kilka danych wejściowych, aby wykonać kod, dopóki nie będziesz zadowolony, że działa - ma to tę wadę, że tracisz wysiłek, jeśli chodzi o osoby utrzymujące kod w przyszłości * W pewnym sensie mniej wyrzucania, ale ręczna moda - pisanie przypadków testowych i kroków, aby wbić kod w celu uzyskania danych wyjściowych; z danymi testowymi; tak, że powyższe testy jednorazowe nie są wyrzucane - to zachowuje inwestycję w czas, ale jest powolne i uzależnione od wiedzy ludzi o testach i przeprowadzaniu ich * W nieco bardziej zautomatyzowany sposób - ze skryptami do nabijania kodu; być może nawet sprawdzić dane wyjściowe do pewnego stopnia - jest to przyjemniejsze do ponownego uruchomienia, ale dalekie jest od wykorzystywania dojrzałej struktury w spójny sposób, jak podczas pisania testów stylu xUnit Chociaż postęp jest przyjemny, czuję, że brakuje mi xUnit doświadczenie, którego stałem się fanem. # Z jakimi dokładnie językami/platformami mam tutaj do czynienia? * Narzędzie ETL, podobne do SSIS, zwane RedPoint Data Management: nie open source, więc opiszę, ma projekty, które mają narzędzia, te narzędzia są połączone przepływami danych, a niektóre mają pewną logikę, którą chcę przetestować jednostkowo * A narzędzie do kompozycji, to dla niewtajemniczonych jest produktem, który pobiera plik danych i wyprowadza plik do wydruku. Wyobraź sobie wejście XML, wyjście PDF. * Funkcje skryptów DOS: obiecuję, że jest to prawdziwa cecha dobrych'ol'fashioned skryptów DOS, tutorial tutaj * (dodam to do listy, nie dokładnie to, w czym potrzebuję pomocy, ale może być bardziej jasne niż powyższe jeśli mój zestaw narzędzi jest trudny do zrozumienia) transformacje danych w języku COBOL, używając CopyBooks do określenia formatów wejść i wyjść plików płaskich. Po skompilowaniu daje jeden plik binarny, nawet jeśli funkcjonalnie rozłożony wewnątrz # Rzeczywiste pytanie Czy testy stylu xUnit są zasadniczo skierowane na języki zorientowane obiektowo?


title: Optymalna struktura danych dla naszego własnego API

text: Jestem na wczesnym etapie pisania głównego trybu Emacsa dla sieci Stack Exchange; jeśli regularnie używasz Emacsa, w końcu przyniesie ci to korzyści. Aby zminimalizować liczbę wywołań do API Stack Exchange (ograniczone do 10000 na IP dziennie) i być po prostu ogólnie odpowiedzialnym obywatelem, chcę buforować informacje, które otrzymuję z sieci i przechowywać je w pamięci, czekając na być ponownie dostępny. Naprawdę utknąłem w tym, w jakiej strukturze danych przechowywać te informacje. Oczywiście będzie to lista. Jednak, podobnie jak w przypadku każdej struktury danych, wybór musi być uzależniony od tego, jakie dane są przechowywane i w jaki sposób będą dostępne. Co, chciałbym móc przechowywać wszystkie te informacje w jednym symbolu, takim jak `stack-api/cache`. Tak więc, bez dalszych ceregieli, `stack-api/cache` jest listą błędów, których kluczem była ostatnia aktualizacja: `(<csite> <csite> <csite>) gdzie `<csite>` byłoby (1362501715 . <site>) W tym momencie wszystko, co zrobiliśmy, to zdefiniowanie prostej listy asocjacji. Oczywiście musimy wejść głębiej. Każdy `<site>` jest listą parametrów API (unikatowych), po których następuje lista pytań: `("codereview" <cquestion> <cquestion> <cquestion>) Każde `<cquestion>` jest, zgadłeś, minusy pytań z czasem ich ostatniej aktualizacji: `(1362501715 <pytanie>) (1362501720 . <pytanie>) `<pytanie>` to minusy struktury `pytania` i listy odpowiedzi (ponownie, w odniesieniu do _ich_ ostatniej aktualizacji czas): `(<struktura-pytania> <canswer> <canswer> <canswer> i ` `(1362501715 . <struktura-odpowiedzi>) Ta struktura danych jest prawdopodobnie najdokładniej opisana jako drzewo, ale nie wiem, czy jest lepszy sposób na zrobienie tego, biorąc pod uwagę język Emacs Lisp (który nie różni się aż tak bardzo od Lispu, który znasz i kochasz _w ogóle_).Wyraźne wady są prawdopodobnie niepotrzebne, ale pomaga to mojemu mózgowi lepiej się nim zajmować. jestem prawie pewien, że na przykład `<csite>` po prostu zamieni się w (<epoch-time> <api-param> <pytanie> < cquestion> ...) **Obawy:** * Czy przechowywanie danych w potencjalnie ogromnej strukturze, jak ta, ma jakieś kompromisy w wydajności systemu? Chciałbym uniknąć przechowywania zbędnych danych, ale zrobiłem, co mogłem i nie sądzę, że zestaw danych jest przede wszystkim tak duży (do normalnego użytku), ponieważ jest to tylko tekst czytelny dla człowieka w rozsądnych proporcjach. _(Planuję usuwanie starych danych przy użyciu czasów z początku listy; każdy dziedziczy czas ostatniej aktualizacji po swoich dzieciach i tak dalej w dół drzewa. W jakim stopniu to usuwanie powinno mieć miejsce: jestem nie jestem pewien.) _ * Czy przechowywanie danych w ten sposób wiąże się z kompromisami w stosunku do wydajności tych, którzy muszą z nich korzystać? To znaczy, czy operacje ustawiania i pobierania ucierpią z powodu rozmiaru listy? Czy masz jakieś inne sugestie, jak mogłaby wyglądać lepsza struktura?


title: Poza jądrem Linuksa, które jądra systemu operacyjnego powinieneś przestudiować?

text: Jądro Linuksa jest często wymieniane jako baza kodu, którą zaleca się przeczytać i nawet jeśli jest słabo skomentowane (lub wszystkie pliki, które przeglądałem), zawiera naprawdę dobry kod. A teraz, odkładając na bok jądro Linuksa, jakie inne jądra systemu operacyjnego polecasz osobom zainteresowanym programowaniem systemów i/lub systemami operacyjnymi? **Dlaczego?** Co jest takiego wspaniałego w bazie kodu? Czy pokazałoby to zupełnie inne podejście od tego, z czym poszło jądro Linuksa? Czy korzystają z ciekawych technologii? Coś innego...? To, że jądra są objęte licencją open source, jest mniej lub bardziej konieczne.


title: Jakie są dobre pakiety open source c++ do przestudiowania, aby nauczyć się zaawansowanej konstrukcji oprogramowania?

text: Słyszałem, że powinieneś czytać 10 razy więcej niż pisać. Dotyczy to zarówno literatury, jak i kodu źródłowego. Dlatego chciałbym zapoznać się z najlepszymi opracowanymi przez nas pakietami c++. Interesuje mnie odkrywanie wyjątkowo wysokiej jakości pakietów oprogramowania, które używają c++, c i assemblera. Nasuwa się pytanie „Co decyduje o wysokiej jakości?”. Cóż, to zależy od ciebie. Czy możesz podać wypunktowaną listę **_powodów wyboru pakietów_**, a także **_listę pakietów open source c++_**. Na przykład moja lista cech, które moim zdaniem tworzą dobre oprogramowanie, to: * Dobrze skomentowane (z pełnymi komentarzami javadoc dla każdej funkcji, metody i podpisu klasy) * Dobrze zorganizowane (pliki podzielone na logiczne, łatwe do zarządzania części) * Dobrze udokumentowane (rozsądne ilość aktualnej, wolnej od błędów dokumentacji. Mam nadzieję, że z pewną dokumentacją dotyczącą struktury wysokiego poziomu) * Dobrze nazwane klasy i zmienne (zwięzłe, pełne nazwy zmiennych; powinno to zmniejszyć potrzebę umieszczania komentarzy w tekście, jednak komentarze w tekście są zawsze mile widziane; nie zmienne jednoliterowe) * Powinny mieć testy jednostkowe. * Spójny styl i formatowanie. * Mam nadzieję, że demonstruje czyste i zalecane użycie dobrej biblioteki, takiej jak Boost, Qt, STL, itp. Moja lista pakietów to: * TrueCrypt (chociaż nie ma pełnych podpisów javadoc) * Chrome * OpenSceneGraph Wiem o tym poście . Ma dwa lata i nie ma listy powodów. Z góry bardzo dziękuję za wkład. :-) AKTUALIZACJA: Utworzyłem repozytorium github, które będzie zawierało wszystkie pakiety wymienione poniżej. Będę go aktualizować w miarę dodawania kolejnych. https://github.com/homer6/c_reading


title: Różnica między pseudokodem a algorytmem?

text: Technicznie rzecz biorąc, czy jest różnica między tymi dwoma słowami, czy możemy używać ich zamiennie? Oba z nich mniej więcej opisują logiczną kolejność kroków, które następują w celu rozwiązania problemu. prawda? Dlaczego więc używamy dwóch takich słów, jeśli mają mówić o tym samym? Lub, jeśli nie są to słowa synonimiczne, co je odróżnia? W jakich kontekstach mamy używać słowa pseudokod vs algorytmu słowa?


title: Jaki jest najtańszy sposób na organizację projektów hobbystycznych?

text: Jakie jest najlepsze miejsce na umieszczenie Twoich hobbystycznych projektów internetowych (samej aplikacji internetowej, a nie kodu)? Zazwyczaj projekty są takie, że: a) Chcę tylko przetestować ciekawy pomysł bez zgłębiania jego biznesowego punktu widzenia, tylko po to, aby zobaczyć, jak ludzie go odbierają. b) Nie oczekuję dużego ruchu c) Nie chcę od razu skalować d) Nie chcę być przywiązany do jednej technologii (chcę robić różne projekty, aby zapoznać się z różnymi stosami WWW, langs i libs) Silnik aplikacji Google wydaje się bardzo restrykcyjny dla takich eksploracyjnych rzeczy ... Ograniczenia, takie jak brak żądania wychodzącego, może przekroczyć 10 sekund, a każde żądanie musi powrócić z 30 sekundami itp. wkurza mnie, wiem, że są potrzebne do skalowania , ale chciałbym, żeby były opcjonalne. Mikrowęzły Amazon EC2 są bezpłatne przez rok. Ale proszą o informacje o karcie kredytowej, których nie jestem pewien, czy chcę zdradzić, gdy początkowo nie płacę. Jakie mam inne darmowe/tanie alternatywy?


title: Uczyń mój projekt Open Source, ale chroń moją firmę

text: Moja firma opracowuje aplikację internetową, podobną do Gmaila lub Remember the Milk. Jesteśmy bliscy wydania kodu źródłowego pod AGPL. Po prostu boimy się, że ktoś weźmie kod i ustawi się jako konkurent. Co możemy zrobić, aby temu zapobiec? Zależało nam na zamknięciu kodu, który obsługuje nasze API, ponieważ jest to najważniejszy atut firmy. Nie bardzo nam się to podoba, dlatego chcielibyśmy znaleźć alternatywne trasy.


title: Jakie jest twoje podejście do przejmowania czyjegoś projektu?

text: Myślę, że jest to dość powszechny i trudny temat dla każdego, kto kiedykolwiek odziedziczył kod od innego programisty lub zespołu. Przychodzą mi do głowy dwa typowe scenariusze w mojej karierze zawodowej, z którymi się spotkałem; zanurzenie się w projekcie open source i ścisłe dziedziczenie kodu indywidualnego projektu. Zastanawiam się nad tym drugim i będę dziedziczył projekt stworzony przez jednostkę, a zastanawiając się, jak najlepiej do tego podejść, pomyślałem, że poproszę o inteligencję p.se, abym mógł uczyć się z twoich doświadczeń. Kiedy pojawiło się Magento (wielkoskalowa aplikacja eCommerce), byłem naprawdę zagubiony we frameworku Zend. W fazie alfy było mało dokumentacji, więc trudno było korzystać z zasobów społeczności. Skończyło się na tym, że często używałem "grepa" i metod śledzenia wstecznego, aby dobrze zrozumieć, co robi. Dzięki temu w końcu dowiedziałem się więcej o projektowaniu aplikacji, chociaż zajęło to trochę czasu. Jakie jest Twoje podejście, gdy walczysz z projektem, który ma mało dokumentacji? Czuję, że prawie kończy malowanie kogoś innego, co zawsze jest ciekawym zadaniem.


title: JRE dla 64-bitowej i 64-bitowej Javy?

text: FWIK Java może działać w systemie 64-bitowym, bez problemu. Chciałbym wiedzieć, jak Java obsługuje funkcje 64-bitowe, np. `System.identityHashCode()` zwraca 32-bitowy int, często można zobaczyć, że zwracany jest wskaźnik obiektu (adres pamięci). Czy 64-bitowa Java powinna zwracać długi czas? Jeśli nie, w jaki sposób skala Java do systemów 64-bitowych?


title: Kolizje zamówień w e-commerce

text: Załóżmy, że mam aplikację internetową, w której sprzedawcy dodają swoje produkty i ustawiają je jako dostępne do sprzedaży. Następnie pokazuję listę produktów w mojej aplikacji mobilnej, gdzie otrzymuję produkty za pośrednictwem mojego REST API. Mój problem: załóżmy, że dwóch klientów ogląda ten sam produkt (a jest tylko 1 pozycja u sprzedawcy) i jednocześnie składa zamówienie. Jak rozwiązać taką kolizję? Mój stos technologiczny: RoR, PostgreSQL, heroku.


title: Wprowadzanie przez użytkownika i automatyczna separacja danych wejściowych

text: Mam bazę danych MySQL i skrypt automatyzacji, który raz dziennie modyfikuje dane w środku. A te kolumny mogły zostać zmienione przez użytkownika ręcznie. Jakie jest najlepsze podejście, aby system aktualizował tylko zautomatyzowane dane, a nie te edytowane ręcznie? To znaczy tak, oflagowanie komórki, która jest edytowana ręcznie, jest jednym ze sposobów na zrobienie tego, ale chcę wiedzieć, czy istnieje inny sposób na osiągnięcie tego? Z ciekawości. BTW, pytanie dotyczy wartości komórek, a nie wierszy.


title: Ciągła integracja (z projektami iOS i Android)

text: Staram się wprowadzić pozytywne zmiany w mojej firmie, a jedną ze zmian jest wdrożenie ciągłej integracji. Zajmujemy się rozwojem mobilnym (iOS/Android), więc potrzebuję CI, który obsługuje oba typy projektów. Jak można powiedzieć, nie wiem zbyt wiele o CI, ale trochę googlowałem i myślę, że Jenkins i Hudson to dwaj najbardziej popularne. Mam pytania dwuczęściowe. 1. Twoja myśl o Jenkinsie? 2. Czy istnieje sposób na sprawdzenie przez CI, czy projekt jest zgodny ze standardami kodowania (np. luźne połączenie itp.)?


title: Dlaczego istnieje wiele kodowań Unicode?

text: Myślałem, że Unicode został zaprojektowany, aby obejść cały problem posiadania wielu różnych kodowań z powodu małej przestrzeni adresowej (8 bitów) w większości poprzednich prób (ASCII itp.). Dlaczego więc jest tak wiele kodowań Unicode? Nawet wiele wersji (zasadniczo) tego samego, takich jak UTF-8, UTF-16 itp.


title: Przechowywanie akceptacji Regulaminu w bazie danych - najlepsze praktyki

text: Zastanawiałem się, czy ktoś mógłby doradzić, w jaki sposób najlepiej przechowywać w bazie użytkowników akceptację regulaminu. Jestem w Wielkiej Brytanii, jeśli to coś zmieni. Zleciłem sporządzenie regulaminu przez prawnika z Wielkiej Brytanii, więc nie potrzebuję żadnej porady w tej części! W tej chwili myślę, że w momencie rejestracji mam pole wyboru z napisem „Zgadzam się z [powiązanymi] warunkami” i upewniam się, że jest to zaznaczone, aby je zarejestrować. W bazie danych będę miał wartość logiczną Prawda, a także znacznik czasu wraz z adresem e-mail, którego użyto do rejestracji. Czy to wystarczy, jeśli użytkownik kiedykolwiek zdecydował, że chce zakwestionować jego akceptację, czy jest to uznawane za dowód? W sieci udało mi się znaleźć bardzo niewiele, jeśli nie, informacji na ten temat.


title: Co to jest dobre, szybkie odświeżanie algorytmów?

text: Za kilka tygodni mam wywiady z programowaniem. Jakiś czas temu wziąłem udział w zajęciach z algorytmów, ale prawdopodobnie zapomniałem o kilku kluczowych pojęciach. Szukam czegoś w rodzaju bardzo krótkiej książki (**< 100 stron**) na temat algorytmów, aby wrócić do szybkości. Należy uwzględnić algorytmy sortowania, struktury danych i wszelkie inne niezbędne elementy. To nie musi być książka... po prostu szukam świetnego sposobu, aby dać się złapać w około tydzień. Jakie jest najlepsze narzędzie do **szybkiego** wprowadzenia lub odświeżenia algorytmów?


title: Pytania dotyczące TDD i testów jednostkowych

text: Jestem młodszym programistą i badam niektóre praktyki w branży, aby stać się lepszym. Przyglądałem się krótko testom jednostkowym i nie widzę, jak dodatkowy czas na pisanie mnóstwa testów jednostkowych poprawi mój kod. Aby spojrzeć na to z innej perspektywy: 1. Projekty, nad którymi pracuję są małe 2. Jestem jedynym programistą we wspomnianym projekcie (zazwyczaj) 3. Wszystkie projekty są aplikacjami na zamówienie Nie rozumiem najbardziej, jak mogę test jednostkowy mówi mi, czy moja funkcja obliczania ceny (która może zależeć od takich rzeczy, jak dzień tygodnia, święta itp., więc załóżmy, że dla tej funkcji jest 20-40 wierszy) jest poprawna? Czy nie byłoby szybciej napisać cały kod i przejść przez sesję debugowania, aby ostatecznie przetestować każdy kod? Wszelkie przykłady oparte na formularzach byłyby mile widziane (przykłady, które widziałem z filmów MSDN, to wszystkie MVC i strata czasu IMHO).


title: Wymieniasz technologie w CV na stanowisko w oprogramowaniu, gdy masz doświadczenie w programowaniu gier?

text: Więc myślę o ubieganiu się o stanowisko na poziomie podstawowym w branży oprogramowania, ale moje ograniczone doświadczenie w pracy i całe moje znaczące doświadczenie na studiach dotyczy technologii gier. Jasne, języki przenoszą się dobrze, ale większość technologii, z którymi mam doświadczenie, jest związana z programowaniem graficznym, silnikami różnych typów itp. i wcale się nie przenosi. Czuję, że byłoby niewłaściwe, aby po prostu wznowić programowanie gier i zasadniczo zastąpić grę słowną oprogramowaniem z wymienionych powodów, ale z drugiej strony, jeśli je usunę, będę miał tylko języki i niektóre technologie, które mam małe przejście doświadczenie z- co oczywiście nie odbije się na mnie dobrze. Czy powinienem je pominąć, czy włożyć, a jeśli tak, to jak mogę je obrócić, aby były odpowiednie?


title: Jak wyciągnąć coś z wydania?

text: Załóżmy, że Twój zespół pracuje nad 10 funkcjami/poprawkami do sprintu. Pod koniec sprintu jest jedna lub dwie rzeczy, których właściciel produktu nie akceptuje. Ale oni naprawdę chcieliby, aby pozostała 8 lub 9 została wydana. Jak sobie z tym radzisz? Używając subversion, jaka byłaby najlepsza metodologia zarządzania sprintem z możliwością, że tak się stanie?


title: Czytanie książki w języku Java — nie rozumiem tego wyjaśnienia różnicy między informacją a danymi?

text: Od "Demystifying Java".. > Dla wielu z nas terminy _informacje_ i _dane_ są synonimami. Jednak > informacje i dane wyraźnie różnią się w programowaniu. Dane to > najmniejsza ilość znaczących informacji. Czy ktoś może podać mi przykład, który mógłby mi pomóc, a może dotyczyć 14-latka? Trochę rozumiem, ale kiedy próbuję rozdzielić te dwie rzeczy w mojej głowie, z jakiegoś powodu mam problemy (prawdopodobnie jest to powodem tego, że myślę o nich jako o tym samym przez całe moje życie).


title: Gdzie powinienem zacząć czytać kod źródłowy AngularJS?

text: Po przeczytaniu tego artykułu zdałem sobie sprawę, że tak naprawdę nie czytałem żadnego „poważnego” kodu źródłowego podczas moich 3 lat pracy jako profesjonalny programista. Niedawno zacząłem nowy projekt internetowy, który intensywnie wykorzystuje AngularJS, więc postanowiłem rozpocząć czytanie – lub lepiej _dekodowanie_ [jak napisał bloger] – od czegoś, co jest zarówno trudne, jak i przydatne zawodowo. Teraz wystarczy mi wskazać właściwy kierunek. Czy powinienem zacząć od początku kodu źródłowego, czy jest lepszy punkt wyjścia?