title: Dlaczego te próby rozwodnienia Scali za pomocą Xtend i Kotlin?

text: Tak więc teraz Eclipse zaoferowało Xtend, a JetBrains oferuje Kotlina - oba wydają się być rozwodnionymi wersjami Scali. Moje pytanie brzmi: dlaczego? Pobawiłem się trochę Scala i nie jest to takie trudne. Czy to tylko reakcja na nieodłączną trudność przeskoku z imperatywu do funkcjonalnego, czy też działa tu coś innego? * * * EDIT: Przepraszamy. Po ponownym przeczytaniu pytania, które pierwotnie opublikowałem, widzę, gdzie brzmi trochę jak trolling. Sposób, w jaki sformułowałem pytanie, wydawał się po prostu najlepszym sposobem na zadanie pytania. Widziałem posty na blogu, które mówiły: „Scala jest zbyt trudna/Scala jest zbyt złożona”, a także „Kotlin to próba zrobienia Scali, ale prostsza”. Zostawię frazę tak, jak była pierwotnie, ale szczerze mówiąc, nie próbowałem trollować.


title: Jak zatrudnić osoby wspierające?

text: Zarządzam zespołem wsparcia technicznego w średniej wielkości firmie programistycznej. Jesteśmy ostatnią linią wsparcia, więc problemy, których nie możemy naprawić, muszą być eskalowane do zespołu programistów. Kiedy dołączyłem do firmy, nasz zespół nie był w stanie zrobić wiele poza użyciem określonego zestawu kroków rozwiązywania problemów w celu rozwiązania znanych problemów i eskalowania czegokolwiek innego programistom. Zawsze moim celem było, aby nasz zespół wziął na siebie jak najwięcej wsparcia, nie przeszkadzając programiście. W ciągu ostatnich kilku lat ja, wraz z kilkoma nowo zatrudnionymi osobami, poczyniłem w tym kierunku całkiem spore postępy. Opracowaliśmy własne narzędzia do rozwiązywania problemów, które są teraz dostarczane z kilkoma naszymi produktami. Gdy użytkownicy mają nigdy wcześniej nie widziane problemy, analizujemy ślady stosu i rozwiązujemy problemy do poziomu kodu, a jeśli musimy przesłać błąd, w połowie przypadków zidentyfikowaliśmy już w kodzie, gdzie w kodzie znajduje się błąd i zaoferował łatkę, aby to naprawić. Oto problem, który zawsze miałem: znalezienie wsparcia osób zdolnych do pracy, którą opisałem powyżej, jest **naprawdę** trudne. Zatrudniłem 3 osoby w ciągu ostatnich 3 lat i prawdopodobnie przejrzałem kilka tysięcy życiorysów i przeprowadziłem w tym celu kilkaset ekranów telefonów. Wiem, że dość dobrze przyjmuje się, że zatrudnianie dobrych ludzi jest trudne w branży technologicznej, ale wydaje się, że wsparcie jest szczególnie trudne – wyraźnie są tysiące ludzi chodzących po okolicy nazywających siebie analitykami wsparcia, ale ponad 99% z nich najwyraźniej tak nie jest. zdolny do wszystkiego poza czytaniem scenariusza. Jestem ciekawa, czy ktoś ma doświadczenie w rekrutowaniu ludzi, o których mówię, i czy macie jakieś sugestie, którymi mógłby się podzielić. Próbowaliśmy różnych rzeczy – różnych tytułów/opisów stanowisk, korzystania z headhunterów itp. I chociaż udało nam się zatrudnić kilku dobrych ludzi, znalezienie odpowiedniego kandydata na każde otwarcie zajęło nam prawie rok. już miałem i nie mogę się powstrzymać od zastanawiania się, czy jest coś, co moglibyśmy zrobić inaczej.


title: Problemy z inicjalizacją struktury w czasie deklaracji za pomocą wskaźnika znaków

text: Próbuję zadeklarować i zainicjować strukturę przy użyciu wskaźnika char*. Kompilacja poniższego kodu nie powiedzie się, jeśli zrobię coś innego niż rzeczy[] = {{3,300},{4,*tekst}}; Linux daje mi zrzut pamięci, gdy próbuje wydrukować coś[1].detail.text; To działa, gdy robię oddzielne przypisanie things[1].detail.text = text; #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char *text = "ABC"; char *tekst2; typedef struct { int licznik; zjednoczenie { numer wewnętrzny; znak *tekst; } Szczegół; } rzecz; rzecz pierwsza; rzecz druga; jeden.licznik = 1; jeden.detal.liczba = 100; dwa.licznik = 2; dwa.detail.text = (char *)malloc(10 * sizeof(char)); strcpy(dwa.szczegóły.tekst, tekst); rzeczy rzeczy[] = {{3,300},{4,*tekst}}; //rzeczy[1].detail.text = tekst; printf("%d: %d\n%d: %s\n", jeden.licznik, jeden.detail.number, dwa.counter, dwa.detail.text); printf("%d: %d\n%d: %s\n", things[0].counter, things[0].detail.number, things[1].counter, things[1].detail.text ); zwróć 0; } Jakakolwiek pomoc byłaby bardzo mile widziana.


title: Jestem deweloperem kontraktowym i myślę, że zaraz się przerżnę

text: Na boku zajmuję się tworzeniem kontraktów. Można powiedzieć, że jestem deweloperem kontraktowym? Biorąc pod uwagę, że miałem tylko jednego klienta, powiedziałbym, że to nie do końca prawda - raczej wziąłem pracę poboczną i potrzebowałem dodatkowej gotówki. Zaczęło się od projektu typu „przebuduj naszą stronę internetową, a my zapłacimy ci 10 000 $”. Po zakończeniu (nieco przekroczony harmonogram, ale na pewno nie przekroczony budżet), firma zatrudniła mnie jako wykonawcę „długoterminowego wsparcia”. Kontrakt ma obowiązywać od marca br. do 31 grudnia br. - 10 miesięcy. Nad którą wpłatę należy wpłacić 30 dnia każdego miesiąca na ustaloną kwotę. Wypełniałem mój koniec kontraktu we wszystkich punktach - robiąc konserwację serwera, zmiany aplikacji i bazy danych, robiąc ogromne zmiany w pośpiechu i po prostu wykraczając poza to. Obecnie jestem w trakcie tworzenia aplikacji mobilnej na iPhone'a (opartej na PhoneGap), która jest na ukończeniu (prawdopodobnie 3-4 tygodnie od złożenia wniosku). Nie były to jednak wszystkie brzoskwinie i kwiaty. Każdego miesiąca, kiedy przychodzi termin mojej wypłaty, zawsze pojawia się jakiś problem. Problemy te nie pojawiły się podczas początkowego projektu, a jedynie podczas umowy wsparcia. Zgodnie z umową mój czek powinien zostać wysłany 30 dnia miesiąca. Otrzymałem czek na czas mniej więcej raz (termin około 2-3 dni w ciągu 30 dni). Otrzymałem wypłatę dopiero 15 dnia następnego miesiąca - ponad dwa tygodnie opóźnienia. Zniosłem to, bo potrzebuję wypłaty. Były obietnice i obietnice "wyślemy to na czas następnym razem! Obiecuję" - tylko po to, aby otrzymać je dopiero w przyszłym miesiącu. Kiedy pytam o płatność, dają mi wibracje typu „dlaczego martwisz się tylko o pieniądze?” - niestety nie mam luksusu nie martwić się o pieniądze. Ostatnia kropla była z moją sierpniową płatnością, która powinna była zostać wysłana 30 sierpnia. Otrzymałem go 12 września. Powód opóźnienia? "USPS opóźnia to człowieku! Wysłaliśmy to pierwszego!" to powód, dla którego mam. Kiedy w końcu dostałem czek pocztą, na kopercie była zaznaczona data 10 września - data przepuszczenia przez maszynę pocztową. W tym momencie zostałem okłamany. Pracuję dalej, bo znowu - potrzebuję wypłaty. Zorganizowałem przeniesienie naszej aplikacji na nowy serwer, opracowałem kilka nowych zmian i kontynuowałem prace nad aplikacją na iPhone'a. W sumie prawdopodobnie przekroczyłem swój przydział godzinowy (otrzymuję wynagrodzenie za 40 godzin miesięcznie, prawdopodobnie mam co najmniej 50). Pierwszego w sobotę dałem głównemu kontaktowi w firmie (swoją drogą firma 3 - to nie jest jakaś wielka korporacja) pierścionek i poinformowałem go o statusie mojej pracy za ostatnie dwa tygodnie. Niezwykle nie miałem od niego wiadomości od połowy września. Jego odpowiedź brzmiała: „No cóż, to jest miłe i cóż.. dobra robota. cóż, rozmawialiśmy w firmie o różnych rzeczach i na pewno mamy przed sobą pewne decyzje…” – nie dosłownie ale masz pomysł (mam nadzieję?). Wyszedłem z tej rozmowy, że strona nie radzi sobie zbyt dobrze (co nie jest) i rozważają wyciągnięcie wtyczki. Cholera, ten kontrakt szybko się skończy - idą Święta! W porządku, w porządku, nie ma problemu. Dostanę zapłatę za ostatnie miesiące pracy i zadzwonię do tego dnia. Niestety, wciąż nie dostałem czeku z ostatniego miesiąca, a teraz się kręcę. „Och… mieliśmy problemy z transferem środków, spróbujemy wysłać to jutro” oraz „Zostawiłem maszynę wirtualną facetowi od finansów, ale nie mogę się z nim skontaktować”. Więc odnoszę wrażenie, że nie dostaję zapłaty za całą pracę, którą wykonałem we wrześniu. To oczywiście naruszenie umowy i jestem wkurzony. Myśląc irracjonalnie, rozważałem zmianę wszystkich haseł i zatrzymanie ich rzeczy jako zakładników. Zanim to przemyślę (nawiasem mówiąc, NIE zrobię tego, zdałem sobie sprawę, że prawdopodobnie przysporzy mi to kłopotów), próbuję kilku haseł do naszych różnych kont. Aplikacje Google? Och, nie jestem już administratorem. Idź Tato? Ups, nieprawidłowe hasło. Disqu? Nie, tutaj też jest nieprawidłowe hasło. Google Adsense / Analytics? Nieprawidłowe hasło. Dedykowany menedżer konta serwera? Nieprawidłowe hasło. Teraz mam hasło roota serwera - właśnie zbudowałem pudełko w zeszłym tygodniu i nie miałem okazji wysłać facetowi hasła roota. Nie spieszyłem się, zarządzam serwerem i nigdy go nie dotykają. Teraz nagle wszystkie hasła oprócz tego zostały zmienione; napis jest na ścianie - nie ma mnie. Oto zagadka. Mam hasło roota, oni nie. Jeśli podam im to hasło, cała moja dźwignia zniknie, wyjdę poza moje ręce. Podczas tego sporu, dlaczego nie dostaję zapłaty, facet wysłał mi e-mail z pytaniem „och przy okazji, jaka jest nazwa użytkownika root i hasło do serwera?”. Biorąc pod uwagę, że nie wie absolutnie nic, dałem mu konto „administratora”, które tak naprawdę nie ma prawie żadnych praw. Nadal mam wyłączny dostęp do serwera, tylko nie wiem gdzie się udać. * Mogę przetrzymywać ich dane jako zakładników, ale jestem prawie pewien, że to zła rzecz. Uznałbym to za szantaż, niezależnie od tego, czy dostałem jeszcze zapłatę, czy nie. * Mogę "zepsuć" coś na serwerze i dać im całość "no cóż, jakbyś mi płacił to mógłbym to naprawić!" gadka. Działa to z punktu widzenia „no cóż, on nie trzyma swoich rzeczy jako zakładników”, ale co powstrzymuje ich przed zatrudnieniem kogoś innego, aby rozwiązać problem? Z tego co wiem, siostrzeniec chłopaków jest „l33t hax0r” i może to rozgryźć za darmo. * Mogę się poddać, udokumentować tyle, ile mogę i zaprowadzić go do sądu ds. drobnych roszczeń. To naruszenie umowy, nie dostaję zapłaty. Mam sprawę, prawda? * ???? Czy ktoś ma w tym jakieś doświadczenie? Co mogę zrobić? Jakie mam opcje? Jestem spłukany, nie stać mnie na prawnika i ledwo stać mnie na nieotrzymanie tej wypłaty. Moja żona nie pracuje (ja pracuję na dwie etaty, więc ona nie musi pracować - mamy rok) i już szuka pracy na pół etatu, żeby pokryć rachunki. Na dłuższą metę wszystko będzie dobrze, ale to mnie wkurzyło nie do uwierzenia! Pomóż mi, zaraz się przerżnę.


title: Jak śledzić złożone reguły biznesowe poza kodem?

text: Interesuje mnie, jak robią to inni ludzie. Zwłaszcza w sytuacjach, gdy wielu różnych klientów korzysta z tej samej bazy oprogramowania z nieco innymi regułami biznesowymi. Jakich praktyk używasz, aby udokumentować, jak wszystko ma działać lub zasady biznesowe. Zasadniczo, gdy nowy programista dołącza do zespołu, ma łatwy dostęp, aby zobaczyć, jak wszystko powinno działać, ponieważ jest oczywiście różnica między uwolnieniem czegoś od błędów a sprawieniem, aby coś działało poprawnie. Byłoby naprawdę miło mieć dostęp do zasobów, zamiast angażować architekta lub BSA do rozmowy za każdym razem, gdy pojawia się pytanie, jak coś powinno być przetwarzane.


title: Struktura Gita dla projektu java

text: Wiem, że jest wiele postów dotyczących podobnych problemów, więc proszę o uprzejmość. Proszę o sugestie, o których nie pomyślałem io dobrą radę. Mam "projekt" Java, który jest zorganizowany we wzorcu serwer-klient. Istnieje kilka klas, które są wspólne dla obu części, ale większość z nich to serwer (logika zaplecza i sterowania) lub klient (GUI). Aby nie pisać jednej monolitycznej aplikacji (gdzie klient jest zależny od słoików `JDBC`) zdecydowałem się podzielić projekt na wiele projektów eclipse: * `proj_server` (gdzie potrzebny jest `JDBC`) * `proj_client` * `proj_common` * ` proj_test` W `proj_test` znajduje się kod do testowania części klienta/serwera. Konfiguruję Eclipse tak, że zarówno serwer, jak i klient zależą od wspólnego modułu. Teraz używam git do zarządzania wszystkimi projektami Eclipse. Moją pierwszą myślą było zarządzanie wszystkimi częściami w osobnych repozytoriach, zgodnie z sugestią git. Ale mam problem polegający na tym, że tracę relację między różnymi zatwierdzeniami: Każda modyfikacja w `proj_common` będzie zazwyczaj odzwierciedlać pewną modyfikację typu danych. To sprawia, że nowa wersja jest niekompatybilna ze starym zatwierdzeniem w innych projektach. Następnie pomyślałem o kilku możliwościach: 1. Użycie `submodułów git` 2. Użycie `poddrzewa git` 3. Użycie jednego repozytorium git, które zawiera moduły razem 4. Użycie różnych repozytoriów i regularne dodawanie tagów do zatwierdzeń, aby zachować ścieżka relacji Rozwiązanie 1 ma ten problem, że jest dość trudne do utrzymania. Zwłaszcza jeśli chcesz zaewidencjonować wiele małych modyfikacji, musisz kilkakrotnie przejść "wokół folderów", aby dodać `/`commit`, a następnie spakować to wszystko w głównym repozytorium. Metoda `subtree` może działać dobrze, o ile czytałem, z kilkoma skryptami do zarządzania wywołaniami git. Główną wadą jest to, że `subtree` pasuje idealnie, jeśli większość pracy jest wykonywana w głównym repozytorium, a aktualizacje importowanych repozytoriów zdarzają się od czasu do czasu. Jeśli aktualizacje mają miejsce tylko w podprojektach, historia głównych projektów staje się dość pomięta. Po rozgałęzieniu może się to skomplikować. Rozwiązanie numer 3 jest moim ulubionym rozwiązaniem, ponieważ wszystko jest dopięte na ostatni guzik, a rozgałęzienia przebiegają bez problemu. Rozwiązanie 4 jest głównie tym, co zostało zrobione teraz, ale jeszcze nie utworzono tagów (pre-alfa, więc nie ma sensu tworzyć tagów). W miarę rozwoju projektu może to również stać się bardzo nieprzyjemne i podatne na błędy. Co byś zasugerował? Jedno z podanych rozwiązań czy brakowało mi jednego idealnego rozwiązania? _Edytuj:_ Znalazłem następujące powiązane posty: a, b, c i d. Niestety ogólny obraz nie jest jasny. W a (druga odpowiedź!) i d rada zmierza do wielu repozytoriów w różnych plikach. Ale nie określają wyraźnie, jak zarządzać relacjami różnych zatwierdzeń. Oznacza to, że nie można przejść do bieżącej konfiguracji na przykład 10 stycznia 2013 roku bez wyraźnego spojrzenia na historię wszystkich podprojektów. W b sugerowane jest rozwiązanie 3. W c dokonuje się porównania. Najpierw mieli coś w rodzaju wielu ręcznie zarządzanych projektów, ale potem przeszli do rozwiązania 3. We wszystkich tych pytaniach i odpowiedziach pierwsze dwa rozwiązania zostały co najwyżej wymienione, ale nie zostały zasugerowane przez osoby udzielające odpowiedzi. W sieci można znaleźć wiele informacji na temat `podmodułu git`, który mówi, że otrzymujesz przez niego dość duże obciążenie (np. tutaj lub tutaj). Problemem jest (o ile widzę), że w praktyce będę miał nie jeden projekt z odniesieniem do jednej lub kilku bibliotek. W tym przypadku (miejmy nadzieję) biblioteka nie zmieniałaby się regularnie, a kodowanie odbywa się w "głównym" repozytorium. W tym przypadku wszystkie zaawansowane rozwiązania (`poddrzewo`, `podmoduły`, ...) mogą być bardzo przydatne. W moim przypadku jest wręcz przeciwnie, mam tylko atrapę głównego repozytorium, które synchronizuje cztery podprojekty. Same podprojekty są na wysokim poziomie rozwoju. Dlatego bardzo ważne jest, aby wkład w różne (pod)projekty online był prosty. Niewiele dodatkowej magii z gitem. W innej witrynie proponują rozwiązanie 1, ale nie jestem pewien, jaki jest ich główny cel rozwoju: główne repozytorium czy importowana biblioteka. Chcę uniknąć kłopotów i późniejszej migracji do innego systemu. Dlatego proszę o radę kogoś, kto mógł zrobić podobne rzeczy.


title: Ciągła integracja - kompiluj Debug i Release za każdym razem?

text: Czy standardową praktyką podczas konfigurowania serwera Continuous Integration jest budowanie wersji debugowania i wydania każdego projektu? W większości przypadków programiści kodują z włączonym zestawem konfiguracji projektu trybu debugowania i mogą istnieć różne konfiguracje ścieżek biblioteki, definicje kompilatora lub inne elementy skonfigurowane inaczej między debugowaniem/wydaniem, które mogłyby spowodować, że będą działały inaczej. Skonfigurowałem mój serwer CI do kompilacji Debug & Release każdego projektu i zastanawiam się, czy po prostu nad tym zastanawiam. Zakładam, że zrobię to tak długo, jak będę mógł otrzymać szybką informację zwrotną, a kiedy to się stanie, odepchnę Release do nocnej kompilacji. Czy istnieje „standardowy” sposób podejścia do tego?


title: Wybór nazw do testów integracyjnych

text: Przy testach jednostkowych domena jest dość mała, więc jest to łatwe. Użyłem schematu `methodName_conditions_result()` firmy Osherove i stwierdziłem, że jest bardzo przejrzysty. Ale przy testach integracyjnych wydaje mi się, że nazwa byłaby bardzo długa, a co mam umieścić w miejscu `methodName`? Jak nazwać klasy testów integracyjnych? Bardzo mile widziane są rzeczywiste przykłady nazw testów integracyjnych. Mam nadzieję, że odpowiedzi pomogą mi również lepiej zrozumieć te testy.


title: Słowo na czerwone flagi / znaki ostrzegawcze?

text: Czytając o najlepszych praktykach i przeglądach kodu, natknąłem się na słowo/frazę, której ludzie na forach używali do opisania kodu, który powinien być znakiem ostrzegawczym, że programista mógł coś przeoczyć lub popełnić błąd. Przykładowe zdanie wyglądałoby mniej więcej tak: „Często jeśli widzisz pojedynczą instrukcję if z 10 i/lub, jest to **___ ____**, chociaż w niektórych przypadkach może być poprawna”. Co to za słowo? Chcę to uwzględnić w pisanym przeze mnie dokumencie przeglądu kodu.


title: Jak połączyć dwa stoły w codeigniter

text: Jak połączyć dwa stoły w codeigniter. Mam dwie tabele 1-klasa 2-członkostwo I chcę połączyć jedno pole z drugim Uprzejmie podaj kod, aby do niego dołączyć. Z góry dziękuję.


title: Benchmarking mocy obliczeniowej procesora

text: Zakładając, że dostępnych jest już wiele narzędzi do benchmarkingu komputerów, chciałbym napisać własne, zaczynając od pomiaru mocy obliczeniowej. Chciałbym napisać to w C pod Linuksem, ale inne alternatywy językowe są mile widziane. Myślałem, że zaczynając od operacji zmiennoprzecinkowych na sekundę, ale to tylko podpowiedź. Pomyślałem również, że dobrze byłoby śledzić liczbę rdzeni procesora, ilość pamięci RAM i tym podobne, aby bardziej konsekwentnie powiązać wyniki z architekturą procesora. Jak byś przeszedł do zadania pomiaru mocy obliczeniowej procesora? A na dodatek: martwię się o odpowiednie minimalne obciążenie pracą wywołane przez współbieżnie działające usługi; czy poprawne jest uruchamianie benchmarkingu jako samodzielnego (i prawdopodobnie wyrwanego ze środowiska systemu operacyjnego) procesu?


title: Dlaczego iteratory w Pythonie zgłaszają wyjątek?

text: Oto składnia iteratorów w Javie (nieco podobna składnia w C#): Iterator it = sequence.iterator(); while (it.hasNext()) { System.out.println(it.next()); } Co ma sens. Oto równoważna składnia w Pythonie: it = iter(sequence) while True: try: value = it.next() z wyjątkiem StopIteration: break print(value) Myślałem, że wyjątki powinny być używane tylko w, no cóż, wyjątkowych okolicznościach. Dlaczego Python używa wyjątków, aby zatrzymać iterację?


title: Upadłość klienta, rozwiązanie pozostawione odłogiem, co robisz?

text: Czy kiedykolwiek zbudowałeś rozwiązanie dla klienta iw ciągu najbliższych miesięcy klient bankrutuje i nie może zaakceptować wykonanej pracy? Co robisz? Zmienić cel kodu i „umieścić go tam”? Zostaw kod w spokoju i bądź wdzięczny za zdobytą wiedzę i doświadczenie? Rozejrzeć się gdzie indziej dla kupującego? EDYCJA: Jest to rozwiązanie asp .net do użytku w kontekście finansowym


title: Czy są jakieś prace w dziedzinie programowania, które nie wymagają siedzenia przez cały dzień przy biurku?

text: Jestem nowy w dziedzinie programowania. Naprawdę lubię to robić jako kariera, ale nie jestem pewien, czy poradzę sobie z siedzeniem przy biurku przez osiem godzin dziennie. Oczywiście nie przeszkadza mi to na krótkich odcinkach czasu, ale nie mogę tego robić codziennie. Czy istnieje dziedzina programowania, która prawdopodobnie ma zadania, które wymagają mniej czasu spędzonego przy biurku?


title: Jak najlepiej uniknąć pisania nadętego kodu GUI?

text: Uważam, że za każdym razem, gdy pracuję z kodem GUI, kod ma tendencję do powiększania się szybciej niż inne rodzaje kodu. Wydaje się również trudniejsze do refaktoryzacji. Podczas gdy w innych rodzajach kodu mogę dość łatwo refaktoryzować - stwierdzam, że mogę rozłożyć większą klasę na mniejsze elementy funkcjonalności - z większością frameworków GUI często jestem związany z frameworkiem, który wymaga mojego widżetu/kontroli/jakiejkolwiek klasy zaimplementuj dużo więcej rzeczy bezpośrednio w widżecie/kontroli/cokolwiek. Czasami jest to spowodowane potrzebą (a) dziedziczenia jakiegoś podstawowego widżetu/kontroli/rzeczy lub (b) dostępu do chronionych metod. Zazwyczaj muszę również odpowiadać na wiele różnych danych wejściowych za pośrednictwem sygnałów/zdarzeń/cokolwiek z frameworka, aby zaimplementować wszystkie tryby interakcji z użytkownikiem. Mogę potrzebować jednego widżetu/kontrolki GUI do obsługi wielu różnych operacji wejścia/wyjścia, które mogą obejmować: 1. menu prawego przycisku myszy/kontekstowe 2. reagowanie na wybory z menu kontekstowego -- których może być wiele 3. specjalny sposób malować GUI 4. Reaguj na dane z klawiatury 5. Przyciski, pola wyboru, 6. itd. itd. ... przez cały czas zarządzaj klasami pod GUI reprezentującym logikę biznesową. Prosty, prosty GUI może mieć swój kod dość szybko, nawet po oddzieleniu logiki biznesowej i użyciu MVC, uważam, że kod GUI jest dużym magnesem na zmiany. Czy istnieje sposób na zarządzanie kodem GUI w rozsądny sposób i uniknięcie sytuacji, w której stanie się zepsutym oknem? A może masa losowych procedur obsługi zdarzeń/nadpisanych metod to naprawdę najlepsze, co możemy zrobić dla kodu GUI?


title: Jak mogę uniemożliwić użytkownikom tworzenie wielu kont w witrynie internetowej?

text: Tworzę witrynę, która musi gwarantować dokładność wyników reputacji użytkowników, uniemożliwiając użytkownikom tworzenie więcej niż jednego konta kosztem mniejszej liczby rejestracji użytkowników. Jak dotąd, jedyne rozwiązania, o których pomyślałem, to umożliwienie użytkownikom: * Połącz się ze swoim (zweryfikowanym) kontem PayPal za pomocą uwierzytelniania konta PayPal * Podaj swój klucz publiczny PGP i sprawdź, czy MSD (miara wiarygodności) jest poniżej pewnego wartość Oczywiście nawet te metody nie są kuloodporne, ale prawdopodobnie bardzo utrudnią utworzenie konta z marionetkami. Czy są jeszcze jakieś inne, których nie brałem pod uwagę?


title: Jaki procent zawodowych programistów ma tytuł licencjata w dziedzinach związanych z programowaniem?

text: Spierałem się z przyjacielem o to, ilu programistów pracujących na pełny etat w tworzeniu oprogramowania faktycznie ma 4 lata studiów. Wygląda na to, że w tej dziedzinie jest mniej pełnych timerów z stopniami niż w innych. Czy są gdzieś statystyki?


title: Overworld a organizacja kafelków 2D na ekranie

text: Tworzę grę 2D, w której świat składa się z płytek. Mam nadświat i „aktualny świat”: * obecny świat reprezentuje bieżące kafelki na ekranie w dowolnym momencie, obecnie jest to tablica 2d (14x10 elementów). * overworld to cały świat, obecnie 28x20 elementów, czyli cztery ekrany kafelków. Znowu mają one być przechowywane w tablicy 2d. Początkowo myślałem, że wziąłem całą grupę kafelków i podzieliłem je na tablice 2d o rozmiarze "bieżącego świata", które są przekazywane do bieżącego obiektu świata. Oznaczałoby to jednak konieczność pracy z tablicą 4d na poziomie światowym, co wydaje się być dość brzydkie i bardziej mylące w późniejszej konfiguracji i zabawie. Wyglądałoby to mniej więcej tak: kafelki[overworldX][overworldY][currentWorldX][currentWorldY], gdzie „kafelki” to tablica 4d, a: kafelki[overworldX][overworldY] dałoby ci tablicę 2d z grupy kafelków, które pasują na ekranie/aktualnym świecie. Jedyny pomysł, na jaki mogę wpaść, aby to nieco ulepszyć, to stworzenie obiektu pomocniczego, który po prostu owija się wokół tablicy 2d, dzieląc tablicę 4d na dwie tablice 2d, ale w istocie nadal jest to tablica 4d. Jakieś sugestie dotyczące lepszego sposobu na zrobienie tego, a może innej struktury danych, której mogę użyć? A może zatrzymanie tylko dużej grupy dwuwymiarowych kafelków dla świata, a następnie wymyślenie jakiegoś fantazyjnego algorytmu indeksowania / krojenia, który może wyciągnąć części o rozmiarach „obecnego świata”?


title: W jaki sposób maklerzy giełdowi wdrażają logikę sprzedaży z limitem / kroczącym stop lossem?

text: Weźmy na przykład Fidelity, można ustawić sprzedaż akcji z trailing stop lossem na poziomie 2% ostatniej ceny, lub jeszcze prościej, można ustawić ograniczone zlecenie sprzedaży po dowolnej cenie. I musi mieć miliony takich zamówień zaległych w dowolnym momencie. Ogólnie rzecz biorąc, w jaki sposób wdrożyli logikę, aby mogli sprawdzać wszystkie oczekujące zamówienia i realizować je na czas? (A może to podstawowa funkcjonalność brokerów nie musi implementować, ale giełda musi zapewnić? - w takim przypadku moje pytanie będzie brzmiało, jak giełda implementuje taką logikę.) Zakładam, że możesz po prostu wielokrotnie sprawdzać wszystkie zlecenia ale to bardzo nieefektywne. Na przykład - while (true) { foreach (użytkownik) foreach (zaległa kolejność w użytkowniku) if (powinien sprzedać) sprzedać; wait(1) } Lub coś w stylu while (true) { foreach (zapas) foreach (zamówienie w magazynie z ceną = ostatni) // przechowywane w tabeli wyszukiwania zapasów na zamówienie if (powinno sprzedać); wait(1) } Jak posortowaliby lub przeskalowali takie zamówienie wśród dużego wolumenu?


Czy powinieneś być ekspertem OOP, jeśli programujesz w ASP.NET?


title: Jak znaleźć młodych programistów do mentoringu?

text: Szukam sposobu, aby wykorzystać moje doświadczenia (i doświadczenia innych) i zapewnić bardziej aktywne podejście do praktyk dla studentów CS lub młodych programistów. Wydaje mi się, że Programrs Stack Exchange robi to w pewnym stopniu w sposób pasywny, ale czy kiedykolwiek widziałeś program, który aktywnie wyszukuje te osoby i daje im możliwość wybrania twojego mózgu (oprócz stażu w młynie).


title: Algorytm śledzenia postępu metody kontrolera działającej w tle

text: Korzystam z frameworka Codeigniter dla PHP na platformie Windows. **Mój problem polega na tym, że próbuję śledzić postęp metody kontrolera działającej w tle.** Kontroler wyodrębnia dane z bazy danych (MySQL), następnie wykonuje pewne przetwarzanie, a następnie ponownie przechowuje wyniki w bazie danych. Cały powyższy proces można traktować jako jedno zadanie. Nowe zadanie można przypisać w trakcie wykonywania innego zadania. Nowo przydzielone zadanie zostanie dodane w kolejce. Więc jeśli mogę śledzić postępy kontrolera, mogę pokazać status dla każdego z tych zadań. Tak jak mogę wyświetlić status „Oczekujące” dla zadań w kolejce, „W toku” dla zadań uruchomionych i „Gotowe” dla zadań, które zostały zakończone. ## Główny problem: Teraz pierwszą rzeczą, którą muszę **znaleźć, jest algorytm do śledzenia postępu wykonania, jaki wykonała metoda kontrolera**, a to oznacza śledzenie, ile wykonania metody zakończyło. Na przykład ten skrypt PHP śledzi postęp liczenia tablicy. Tutaj znany jest aktualny stan i stan po całkowitym wykonaniu, dzięki czemu można śledzić jego postęp. Ale nie jestem w stanie wymyślić niczego analogicznego w moim przypadku. Może to, co staram się osiągnąć, jest programowo niemożliwe. Jeśli nie jest to możliwe, zasugeruj mi obejście lub zupełnie nowe podejście. Jeśli jakieś szczegóły są w toku, możesz je wymienić. Przepraszam za moją ignorancję, to jest mój pierwszy post tutaj. Zapraszam do wypunktowania moich błędów. **EDYTUJ:** ### Zarys bazy danych: Adresy URL i słowa kluczowe są najpierw wprowadzane przez użytkownika, które są przechowywane w tabeli bazy danych o nazwie odpowiednio **link_master** i **keyword_master**. Następnie słowa kluczowe są wyodrębniane ze wszystkich linków znajdujących się w tej tabeli i porównywane ze słowami kluczowymi wprowadzonymi przez użytkownika i obliczana jest ich częstotliwość, która jest ostatecznym wynikiem. Wyniki są przechowywane w innej tabeli o nazwie **link_result**. Teraz sub-linki są wyodrębniane z linków domeny i przechowywane w tabeli o nazwie **sub_link_master**. Teraz znowu słowa kluczowe są wyodrębniane z tych podlinków, a odpowiadające im wyniki są przechowywane w tabeli o nazwie **sub_link_result**. Liczby rekordów nie można zdefiniować z góry, ponieważ liczba linków na dowolnej stronie internetowej może być różna. Znana jest tylko liczność tabeli *link_result*, która będzie równa pomnożeniu liczby słów kluczowych i adresów URL . Wstawiam wiele rekordów jednocześnie, korzystając z tego zasobu. ### Zarys kontrolera: Kontroler wyodrębnia słowa kluczowe ze strony internetowej, a także wyodrębnia słowa kluczowe ze wszystkich linków znajdujących się na tej stronie. Istnieje metoda o nazwie **crawlLink**. Użyłem Rolling Curl do wyodrębnienia słów kluczowych i zawartości strony internetowej. Posiada funkcję zwrotną, której użyłem do wyodrębniania słów kluczowych wraz z generowaniem wyników i wyodrębnianiem poprawnych linków podrzędnych. Istnieje metoda **insertResult**, która przechowuje wyniki dla linków i podlinków w odpowiednich tabelach. Tak, przetwarzanie zależy od liczby rekordów. Im większa liczba rekordów, tym więcej czasu zajmuje wykonanie: Rozważmy następujący scenariusz: Liczba linków do domeny = 1 Liczba słów kluczowych = 3 Liczba linków do domeny Wygenerowany wynik = 3 (3 x 1 zgodnie z opisem w pytaniu) Liczba Wygenerowane linki podrzędne = 41 Liczba wyników linków podrzędnych = 117 (41 x 3 = 123, ale niektóre linki nie są prawidłowe lub nie można ich przeszukiwać) Przybliżony czas zakończenia powyższego procesu = 55 sekund. Powyższy wynik dotyczy pojedynczego łącza. Chcę śledzić postęp przechowywania powyższych wyników w bazie danych. Gdy wszystkie wyniki zostaną zapisane, zadanie jest zakończone. Jeśli wyniki są zapisywane, zadanie jest w toku. Nie wiem, jak mogę śledzić ten postęp.


title: Jakieś zalecenia dotyczące narzędzia wymagań?

text: BA w mojej firmie dość dobrze używają Worda, Excela i Visio do definiowania wymagań. Jakie są główne zalety i wady korzystania z narzędzia wymagań?


title: Jak najlepiej nauczyć się rozwijać kierowców?

text: Na pewnym etapie mojej kariery na pewno chciałbym zająć się programowaniem wbudowanym. Pomyślałem, że rozpoczęcie pracy z kilkoma kierowcami będzie dobrym miejscem do rozwijania moich umiejętności w tym zakresie. Jestem otwarty na robienie tego na platformie Windows lub Linux (w końcu prawdopodobnie będę chciał spróbować obu). Jakie narzędzia poleciłbyś, abym zajrzał do tego projektu? Jakieś inne zasoby, które okazały się pomocne (np. książki, strony internetowe, programy itp.)? Jakieś rady/zalecenia? Dziękuję!


title: Wymagania koncepcyjne i zakres

text: Doceniam Twoją pomoc w przypadku moich pytań * Jakie są wymagania koncepcyjne? Jak wypadają one w porównaniu z wymaganiami interesariuszy, biznesowymi i funkcjonalnymi? * jakie narzędzia CASE można wykorzystać do uchwycenia wymagań koncepcyjnych i zakresu?


title: Jakie tematy z matematyki dyskretnej powinien znać przeciętny student informatyki?

text: Wiem, że matematyka dyskretna jest dość obszernym tematem, który jest używany w wielu dziedzinach, ale zastanawiałem się tylko, jakie są niektóre z jej tematów, które powinien znać przeciętny student informatyki? Oto zakres tematów ze spisu treści książki zatytułowanej „Matematyka dyskretna i jej zastosowania 6th edition” Kennetha H Rosena: 1 Podstawy: logika i dowody 1.1 Logika zdań 1.2 Równoważności zdań 1.3 Predykaty i kwantyfikatory 1.4 Kwantyfikatory zagnieżdżone 1.5 Reguły wnioskowania 1.6 Wprowadzenie do dowodów 1.7 Metody i strategia dowodu 2 Podstawowe struktury: Zbiory, Funkcje, Sekwencje i Sumy 2.1 Zbiory 2.2 Operacje na zbiorach 2.3 Funkcje 2.4 Sekwencje i sumy 3 Podstawy: algorytmy, liczby całkowite i macierze 3.1 Algorytmy 3.2 Wzrost funkcji 3.3 Złożoność algorytmów 3.4 Liczby całkowite i dzielenie 3.5 Liczby pierwsze i największe wspólne dzielniki 3.6 Liczby całkowite i algorytmy 3.7 Zastosowania teorii liczb 3.8 Macierze 4 Indukcja i rekurencja 4.1 Indukcja matematyczna 4.2 Silna indukcja i dobre uporządkowanie 4.3 Definicje rekurencyjne i indukcja strukturalna 4.4 Algorytmy rekurencyjne 4.5 Poprawność programu 5 Liczenie 5.1 Podstawy liczenia 5.2 Zasada Pigeonhole 5.3 Permutacje i kombinacje 5.4 Współczynniki dwumianowe 5.5 Uogólnione permutacje i kombinacje 5.6 i generowanie permutacji Kombinacje 6 Prawdopodobieństwo dyskretne 6.1 Wprowadzenie do prawdopodobieństwa dyskretnego 6.2 Teoria prawdopodobieństwa 6.3 Twierdzenie Bayesa 6.4 Wartość oczekiwana i wariancja 7 Zaawansowane techniki liczenia 7.1 Relacje rekurencyjne 7.2 Rozwiązywanie liniowych relacji rekurencyjnych 7.3 Algorytmy dziel i zwyciężaj oraz relacje rekurencyjne 7.4 Generowanie funkcji wykluczeń 7.5 7.6 Zastosowania relacji inkluzja-wykluczenie 8 8.1 Relacje i ich właściwości 8.2 Relacje n-arne i ich zastosowania 8.3 Reprezentowanie relacji 8.4 Zamknięcia relacji 8.5 Relacje równoważności 8.6 Częściowe uporządkowania 9 Wykresy 9.1 Wykresy i modele wykresów 9.2 Terminologia wykresów i specjalne typy wykresów 9.3 Reprezentowanie wykresów i izomorfizm wykresów 9.4 Łączność 9.5 Ścieżki Eulera i Hamiltona 9.6 Problemy z najkrótszą ścieżką 9.7 Wykresy planarne 9.8 Kolorowanie wykresów 10 Drzew 10.1 Wprowadzenie do drzew 10.2 Zastosowania drzew 10.3 Przechodzenie przez drzewa 10.4 Drzewa opinające 10.5 Minimalne drzewa opinające 11 Algebra Boole'a 11.1 Funkcje boolowskie 11.2 Reprezentowanie funkcji boolowskich 11.3 Bramki logiczne 11.4 Minimalizacja obwodów 12 Modelowanie obliczeń 12.1 Języki i gramatyki 12.2 Maszyny skończone z O utput 12.3 Maszyny skończone bez wyjścia 12.4 Rozpoznawanie języka 12.5 Dodatki do maszyn Turinga A.1 Aksjomaty dla liczb rzeczywistych i dodatnich liczb całkowitych A.2 Funkcje wykładnicze i logarytmiczne A.3 Pseudokod


title: co to jest dylib?

text: Tworzę aplikację na iPhone'a i pracuję nad przykładowym kodem, który widziałem, który używa libz.dylib. Zrobiłem trochę badań i nie znalazłem nic pouczającego, poza tym, że libz.dylib może być używany do plików zip, ale preferowane są inne frameworki ... Mam do czynienia z próbką pdf, więc po co używać libz.dylib? Ogólnie, czym są dylib? A dlaczego wszystkie wersje?


title: Jak uporządkować odczytywanie poleceń podawanych w (n interaktywnym) znaku zachęty CLI?

text: Załóżmy, że mam program o nazwie „theprogram” (zespół marketingu strajkował, gdy produkt miał zostać nazwany). Uruchamiam ten program, wpisując, być może nic dziwnego, nazwę programu jako polecenie w wierszu polecenia. Następnie wpadam w pętlę (z punktu widzenia użytkownika interaktywny wiersz poleceń), w której jedno polecenie zostanie odczytane od użytkownika iw zależności od tego, jakie polecenie zostało wydane, program wykona kilka instrukcji. Robiłem coś takiego (w pseudokodzie podobnym do C): main_loop{ in=read_input(); if(in=="polecenie 1") zrób_coś(); else if(in=="polecenie 2") do_something_else(); ... } (W prawdziwym programie prawdopodobnie zamieściłbym więcej rzeczy w różnych procedurach, to tylko przykład.) To działa dobrze dla małej liczby poleceń, ale załóżmy, że masz 100, 1000 lub nawet 10 000 je (instrukcja byłaby **ogromna!** ). Jest to oczywiście zły pomysł, aby mieć 10 000 „jeśli” i „jeżeli” jeden po drugim, na przykład program byłby trudny do odczytania, trudny w utrzymaniu, zawierałby dużo standardowego kodu... Tak, nie chcesz tego robić, więc jakie podejście poleciłbyś mi użyć (prawdopodobnie nigdy nie użyję 10 000 poleceń w programie, ale rozwiązanie powinno, przynajmniej najlepiej, być w stanie skalować się do tego rodzaju masy ( ?) problemy.Rozwiązanie nie musi uwzględniać argumentów do poleceń)?


title: Jako konsultant, jak mogę zadziwić moich klientów?

text: Zamierzam utworzyć małą firmę konsultingową z kilkoma przyjaciółmi i jestem ciekaw, jak/co robisz, aby zadziwiać i tworzyć szczęśliwych, długotrwałych klientów? Jest to oczywiście poza standardowymi punktami, takimi jak dostarczanie na czas, pobieranie uczciwej kwoty, dostarczanie jakości i dostarczanie tego, czego naprawdę chcą. Jakich innych technik używasz do zadziwiania i tworzenia trwałych klientów? (i wyróżnić się na tle konkurencji) Na przykład: * Prezenty? * Wydarzenia i wydarzenia? * Noc w pubie?


title: Sposób na integrację różnych systemów kontroli wersji lub wybór jednego spośród innych, ze względu na fuzje i przejęcia?

text: Firmy przejmują inne firmy, które używają różnych systemów kontroli wersji. Czy istnieje powszechna mądrość, jak integrować takie systemy ze sobą, na przykład za pomocą mostu Subverson-GIT lub nawet decydować o używaniu tylko jednego narzędzia zamiast drugiego - i jak migrować między systemami? Czy ludzie stosują zestaw kryteriów do podejmowania takich decyzji, na przykład odpowiednik testu „Joela” dotyczącego tworzenia oprogramowania?


title: Które urządzenia mobilne pokrywają najszersze spektrum testów?

text: Moja firma zdecydowała się na zakup wielu urządzeń do testowania przeglądarek na naszych etapach m.in. iPhone'y, Android, Windows i różne tablety. Poprosili mnie o znalezienie konkretnych urządzeń, które pokrywają największy wspólny mianownik użytkowników i scenariuszy. Niedawno mieliśmy klienta, który kazał nam testować 10-20 różnych urządzeń; każdy ma swoje własne dziwactwa. Który telefon z Androidem i Windowsem dawałby nam największe spektrum na rynku pod względem kompatybilności?


title: W jaki sposób wspólne interfejsy powinny być udostępniane w repozytoriach kontroli źródła?

text: Mam kod, który reprezentuje interfejs dla biblioteki, która jest używana przez różnych klientów **wewnętrznych**. W jaki sposób ten kod interfejsu powinien być udostępniany tym klientom wewnętrznym, którzy znajdują się w różnych repozytoriach kontroli źródła? Interfejs powinien być stosunkowo stabilny, ale jest w fazie rozwoju (podobnie jak większość klientów wewnętrznych), dlatego ważne jest, aby informacje o zmianach były przekazywane, podobnie jak ograniczanie zmian do minimum. Normalnie odniosłbym się do nich bezpośrednio w innych modułach, ale odseparowana natura sprawia, że jest to kłopotliwe.


title: Dylemat rozwoju projektu: Wolontariusze open source VS open source opłacani / revshare deweloperzy?

text: Staram się rozwijać swój projekt i waham się między kilkoma przykładami. Niektóre opcje wydają się być: **1\. otwarte pozyskiwanie projektu, aby przyciągnąć programistów-wolontariuszy.** _Zalety_ Oznaczałoby to, że każdy może spróbować zarobić trochę pieniędzy na kodzie, który zmotywuje go do wniesienia wkładu i rozwoju projektu. _Wady_ Istniejące większe mogłyby z łatwością skopiować i wkleić moją dotychczasową pracę. Mogą również replikować się bez dostępu do kodu, ale zajęłoby to więcej czasu. Myślałem również o użyciu licencji AGPL, ale znowu kod można kopiować bez redystrybucji. W końcu wymuszenie licencji kosztuje dużo pieniędzy i nie mogę po prostu powiedzieć potencjalnemu naśladowcowi, że wygląda na to, że skopiowałeś mój kod, pokaż mi, co masz. **2\. Zachowaj projekt zamkniętego źródła, ale stwórz coś w rodzaju programu deweloperskiego, w którym dostaną revshare** _Zalet_ Zachowuję główne prawa do projektu, ale nadal wzbudzam zainteresowanie tworząc program deweloperski. Nikt nie może łatwo skopiować kodu, tylko przy dużym wysiłku, ale sprawia, że wkład jest łatwy. Widzę również, że wiele firm po prostu open source część swoich projektów, jak Acquia nie open source swojej konfiguracji wielostanowiskowej, lub github nie otwiera kodu źródłowego niektórych swoich podstawowych działalności. _Wady_ Mniej uwagi ze strony zaangażowanych programistów open source. **Wniosek** Tak więc opcja 2 wydaje się najbezpieczniejsza, ale przydałaby się informacja zwrotna.


title: Projekt wysokiego poziomu a projekt niskiego poziomu?

text: Ludzie nie jestem pewien, co faktycznie jest objęte HLD, a co pod LLD? . Wyszukiwałem w Google, ale większość odpowiedzi jest sprzeczna i teoretyczna. Powiedzmy, że muszę zaprojektować proces logowania w aplikacji internetowej. biorąc pod uwagę ten przykład, co będzie podlegać HLD i LLD, w tym sekwencja i diagram klas. Moje rozumienie diagramu sekwencji i klas będzie podlegać LLD. Nie wiesz, co jeszcze będzie objęte LLD? Naprawdę nie to, co będzie tutaj objęte HLD?


title: Programowanie funkcjonalne-niezmienność

text: Próbuję zrozumieć radzenie sobie z niezmiennymi danymi w FP (w szczególności w F #, ale inne FP też są w porządku) i złamać stary nawyk myślenia w stanie pełnego (styl OOP). Część wybranej odpowiedzi na to pytanie powtórzyło moje poszukiwania jakichkolwiek opisów problemów, które są rozwiązywane przez reprezentacje stanowe w OOP z niezmiennymi w FP (na przykład: kolejka z producentami i konsumentami). Jakieś myśli lub linki są mile widziane? Z góry dziękuję. **Edytuj** : Aby nieco bardziej wyjaśnić pytanie, w jaki sposób niezmienne struktury (np. kolejka) byłyby współużytkowane jednocześnie przez wiele wątków (np.: producent i konsument) w FP


title: Czy źle jest robić więcej niż jedną historię na raz w scrumie?

text: Definicja Scruma mówi, że należy to robić po jednej historii na raz. Ale jeśli zespół jest wystarczająco duży (powiedzmy 6+), zdarza się, że wzięcie tylko jednej historii jest wątpliwe, a jeszcze bardziej, jeśli jest kilka małych historii. Tak więc czasami w zespole, z którym obecnie pracuję, możemy częściej zajmować się dwiema historiami niż nie. Czy to zła rzecz?


title: Czy język źródłowy ma znaczenie dla twoich pierwszych (kilku) kompilatorów?

text: Byłem bardzo zainteresowany pisaniem kompilatorów, ale przestraszyła mnie złożoność tego. W końcu się zanurzyłem i zacząłem pisać mój pierwszy kompilator, a język, który wybrałem, to Brainf*ck, ponieważ myślę, że byłby stosunkowo łatwy do zaimplementowania i mógłbym zaimplementować pełny język. Nasuwa mi się pytanie: czy język źródłowy ma znaczenie? Czy powinienem używać języka „rzeczywistego” i używać tylko podzbioru języka (takiego jak podzbiór C/Java/itd.)? Czy jest jakaś korzyść z rozpoczynania od języka nierzeczywistego (tzw. „ezoterycznego”)?


title: Jak ustalić, czy wiadomość ma być komunikatem polecenia, czy komunikatem o zdarzeniu?

text: Dwa wzorce integracji przedsiębiorstwa to komunikat komendy i komunikat o zdarzeniu. Pracuję nad systemem, w którym komunikatory wykorzystujemy nie tylko do integracji z innymi systemami, ale do wewnętrznej komunikacji między usługami. Ma to być ostatecznie spójny system, a usługi mają się wzajemnie ignorować (z wyjątkiem kilku usług specjalnego przeznaczenia). W związku z tym staramy się unikać rzeczy, które przypominają zdalne wywołania procedur (RPC lub RPI). Mamy system oprogramowania pośredniczącego zorientowany na magistralę i komunikaty, a wszystkie komunikaty są nadawane. Mamy tendencję do nazywania naszych wiadomości zdarzeniami, czyli frazą w czasie przeszłym doskonałym, np. „Zamówienie zakupu wysłane”. Jednak zdarzenia są często dodawane tylko wtedy, gdy inne służby muszą o nich wiedzieć i na początku często zależy tylko jednej usłudze. Co więcej, czasami usługa ta w rezultacie emituje zdarzenie, które jest nasłuchiwane przez pierwszą usługę. Tak więc, gdybym miał zobrazować interakcję, wyglądałoby to bardziej jak diagram dla komunikatu polecenia w powyższym linku (lub nawet diagram RPC) niż ten dla komunikatu o zdarzeniu, chociaż po raz kolejny nie jest to faktycznie zaimplementowane z bezpośrednie wiadomości, ale nadawane w autobusie. Dodaj do tego fakt, że ostatnio widziałem dodawanie wiadomości, które są nazwane jako polecenia, czyli fraza w trybie rozkazującym, np. 'Rachunek Wysłany Zamówienie'. Dziwne jest to, że nazwy wiadomości i sposób ich przepływu nie zmieniają się w zależności od tego, czy jest nazywana jako zdarzenie, czy jako polecenie. Jak więc ustalić, czy coś powinno być komunikatem polecenia, czy zdarzeniem? Czy to tylko różnica semantyki i nazewnictwa, czy też istnieje rzeczywista różnica w implementacji między komunikatami poleceń i zdarzeń? Biorąc pod uwagę, że wszystkie nasze przesłania są nadawane, czy to oznacza, że żadne z nich nie jest naprawdę przesłaniami rozkazu?


title: projekt bazy danych dla firmy Media w SQL 2008

text: Muszę sporządzić raport dla jednego z klientów. Są trzy źródła, z których dostanę wszystkie surowe dane, więc w końcu będę musiał połączyć te wszystkie dane z różnych źródeł i zrobić jeden raport. Jest to pierwszy projekt, w którym tworzę bazę danych od podstaw, więc potrzebuję zarówno podstawowej, jak i zaawansowanej pomocy. Pytanie brzmi: Wszystkie 3 źródła zawierające surowe dane nie mają żadnej unikatowej kolumny, czy muszę umieścić na niej PRIMARY KEY, czy mogę wykonać raport bez PRIMARY KEY i Foreign KEY? Poza tym nie mam też tabel DIMTIME ani DIMDATE. Czy potrzebuję tych wszystkich rzeczy do stworzenia bazy danych? UWAGA:Połączyłem już te trzy źródła na podstawie daty i pola kraju i bez klucza podstawowego. Z góry dziękuję.


title: Jak produktywny jest doskonały programista w porównaniu do przeciętnego?

text: Wierzę, że przeczytałem gdzieś, że Google stosuje zasadę, że doskonały programista jest około 300 razy bardziej produktywny niż przeciętny. Czy ktoś ma jakieś praktyczne zasady stosowane przez duże firmy, a może są nawet jakieś badania empiryczne na ten temat?


title: Jak sprawić, by codzienna praca była przyjemniejsza?

text: Właśnie przeczytałem Flinging Fish for Fun and Profit, krótki esej o tym, jak rynek Pike Place w Seattle przekształcił się w słabnący biznes w sukces, czyniąc go zabawnym. Oczywiście dobra zabawa w pracy to w dużej mierze nastawienie, ale zastanawiam się, jakie praktyczne rzeczy można zrobić, aby mieć więcej radości z programowania i powiązanych zadań? W Pike Place mogli znaleźć więcej zabawy, rzucając rybę po rynku, zamiast ją nosić. Co robisz, aby programowanie było przyjemniejsze? Edycja: Żeby było jasne, nie zakładam, że programowanie z natury nie jest zabawne. Ale z pewnością są zadania lub chwile, kiedy jest to nużące lub trudne (dokonywanie długich rewizji, radzenie sobie z niezdarnymi narzędziami). Sprzedawcy ryb podjęli żmudne, ale konieczne zadanie przeniesienia ryb z punktu A do punktu B i sprawili, że było to zabawne. Jak robisz to samo?


title: Formuła oceny klientów e-commerce

text: Opracowuję nowe rozszerzenie dla platformy e-commerce, które w zasadzie buduje Customer Equity i Lifetime Value. Już to mam. Ale mam pewne problemy z wymyśleniem formuły oceny klienta e-commerce. Nie szukam kodu, ale formuły. Jestem prawie pewien, że mam już wszystkie potrzebne vars, takie jak sprzedaż klienta, średnia sprzedaż, zysk, pierwsze zamówienie, ostatnie zamówienie, marketing wydany na konkretnego klienta, rabaty wydane na konkretnych klientów, koszty wysyłki, koszty płatności, liczba zwrotów zrobił itp. Brakuje mi formuły rankingu każdego klienta. Podstawowym pomysłem jest to, że ktoś z działu obsługi klienta zobaczy na pulpicie klienta podsumowanie i ocenę klienta. Jak od 1-10 Więc może mieć lepszą wiedzę, jak sobie z tym poradzić. Jeśli jest to cenny klient lub ktoś, kto daje firmie bardzo niski zysk i zawsze zwraca rzeczy i takie tam. Moim zamiarem tutaj nie jest omawianie sposobu, w jaki powinniśmy traktować klientów. Moje pierwsze myśli to coś w stylu: Uzyskaj bieżący zysk, dodaj zysk z projektu, sprawdź punkt życia...


title: Co to znaczy „możesz wybrać K, aby być kimkolwiek chcesz” w notacji Nadmiar-N?

text: Wolę podać przykład, aby wyjaśnić następujący akapit: > Jednak ponieważ nadmiarowa reprezentacja K przy użyciu N bitów ma dwa parametry, K > i N, możesz wybrać K, aby był taki, jaki chcesz. Możesz mieć więcej liczb dodatnich > niż ujemnych, bez zera i tak dalej.


title: przejście z Windowsa na Linuksa

text: Muszę pogodzić te 2 fakty: 1. Nie czuję się komfortowo pracując na Linuksie; 2. Potrzebuję napisać oprogramowanie dla Linuksa. Trochę tła: mam ponad 10 lat doświadczenia w programowaniu w systemie Windows (prawie wyłącznie C/C++, ale także trochę .NET), byłem użytkownikiem FreeBSD w domu przez około 3 lata (później musiałem wrócić do Windows) i nigdy nie miałem szczęścia z Linuksem. A teraz muszę stworzyć oprogramowanie dla Linuksa. Potrzebuję planu. W systemie Windows możesz uciec od znajomości języka programowania, interfejsu API, na którym kodujesz, swojego IDE (VisualStudio) i kilku bardzo podstawowych narzędzi do rozwiązywania problemów (Depends, ProcessExplorer, DebugView, WinDbg). Wszystko inne przychodzi naturalnie. W Linuksie to zupełnie inna historia. Skąd, do diabła, mam wiedzieć, jaki plik DLL (przepraszam, udostępniony obiekt) załaduje się, jeśli połączę się z nim z wtyczki Firefox? Jaki jest odpowiednik w Linuksie wstawienia __asm int 3/DebugBreak() do źródła i uruchomienia programu, a następnie umożliwienia systemowi operacyjnemu wywołania debugera? Dlaczego piekielne kompilacje wydań używają czegoś, co nazywa się appLoader, podczas gdy kompilacje debugujące działają jakoś inaczej? Co najgorsze: jak udostępnić środowisko programistyczne Linux? Biorąc więc pod uwagę, że nienawiść zwykle kojarzy się z brakiem wiedzy, co byś polecił? Nie mam nic przeciwko Emacsowi i GCC. Muszę kształcić się jako administrator/użytkownik Linuksa i muszę nauczyć się odpowiednich narzędzi do rozwiązywania problemów (strace jest fajny, btw), odpowiedników tych, o których wspomniałem powyżej. Czy muszę robić Linuksa od podstaw? Czy muszę po prostu przeczytać kilka książek (przeczytałem "Środowisko programowania UNIX" Kernighana i "Programowanie zaawansowane..." Stevensa, ale muszę się nauczyć czegoś bardziej praktycznego)? A może muszę mieć jakąś dystrybucję Linuksa na moim domowym komputerze?


title: Czy istnieje biblioteka i aplikacja internetowa do sprawdzania wersji open source?

text: Jestem programistą dla wieloplatformowej (Win, MacOS, Linux) aplikacji open source C++. Chciałbym, aby program od czasu do czasu sprawdzał najnowszą wersję z naszej strony internetowej. Pomiędzy bezpieczeństwem, prywatnością i problemami z siecią międzyplatformową wolałbym nie wprowadzać własnego rozwiązania. Wygląda na to, że jest to na tyle powszechna rzecz, że „powinna” istnieć biblioteka/aplikacja, która to zrobi. Niestety, wyszukiwane przeze mnie wyszukiwania są puste. Idealnie byłoby, gdyby aplikacja internetowa śledziła żądania i przetwarzała logi w ładne raporty (liczba użytkowników, jaka wersja, jaka platforma, częstotliwość użytkowania, może nawet informacje geograficzne z adresu IP itp.). Przy odpowiednim poszanowaniu prywatności itp. Jakie istniejące narzędzia mogą pomóc rozwiązać ten problem? Edycje: szukam narzędzia do raportowania, a nie sprawdzania zależności. Nasz projekt ma wyzwanie nadążania za naszymi użytkownikami. Większość nie dołącza do listy mailingowej. Nasz projekt nie został odebrany przez główne dystrybucje - większość naszych użytkowników i tak to Windows/MacOS. Kiedy pojawia się nowa wersja, nie mamy możliwości poinformowania naszych użytkowników o jej istnieniu. Rozwój postępuje dość szybko, główne funkcje są dodawane co kilka miesięcy. Chcielibyśmy zapewnić użytkownikowi możliwość sprawdzenia, czy jest zaktualizowana wersja. Skoro już przy tym jesteśmy, chcielibyśmy wykorzystać te prośby do prostego i anonimowego śledzenia użytkowania (X użytkowników korzystających z wersji Y z częstotliwością Z itp.). Nie potrzebujemy/nie chcemy czegoś, co automatycznie aktualizuje lub śledzi zależności w systemie. Obecnie nie martwi nas rozmiar aktualizacji — gdy użytkownik zdecyduje się na aktualizację, oczekujemy, że pobierze pełną najnowszą wersję. Chcielibyśmy, aby to było jak najprostsze.


title: Przechowywanie plików dla komponentu bloga: baza danych czy system plików?

text: Zamierzam opracować dość podstawowy składnik bloga wielokrotnego użytku, z prostymi operacjami CRUD przy użyciu ASP.Net. Która metoda przechowywania wpisów na blogu byłaby najlepiej dopasowana do sytuacji pod względem wydajności/utrzymania? * Utwórz plik XML i przechowuj dane w systemie plików, rozmiar pliku prawdopodobnie nie będzie większy niż 50 kb * Przechowuj dane postów na blogu w DB, pobieraj je w razie potrzeby Czy mam rację zakładając, że środowisko wykonawcze asp.net będzie buforować pliki .xml i czyścić je / prosić o nową kopię tylko wtedy, gdy ich zawartość zostanie zmieniona? A może musisz jawnie dodać plik do pamięci podręcznej? Jeśli tak jest, czy zapewniłoby to najlepszą wydajność w porównaniu z przechowywaniem danych w bazie danych?


title: Synchronizacja modelu w rozproszonej, zawodnej sieci

text: Na swoim serwerze mam model składający się z kilku obiektów i atrybutów, które utrwalam w relacyjnej bazie danych. Obsługiwane są wszystkie operacje CRUD. Bardzo powszechne i zwyczajne. Muszę obsługiwać kilka scenariuszy synchronizacji: Potrzebuję Synchronizacja między klientami a serwerem: * Klienci mają dobrze zdefiniowany podzbiór modelu (na podstawie uprawnień) * Klienci powinni być w stanie wykonać dowolną operację CRUD na modelu i ostatecznie zsynchronizować z serwer. * Klienci nie zawsze mają połączenie z serwerem * Inni klienci mogą modyfikować model. Te zmiany powinny dotrzeć do klienta tak szybko, jak to możliwe (najlepiej - opóźnienie w czasie zbliżonym do rzeczywistego, gdy sieć jest włączona). * Mam strukturę do wysyłania wiadomości z serwera do klienta i odwrotnie (pełny dupleks), gdy sieć jest dostępna. Wydaje się to być bardzo podobne do naszego Microsoft Exchange, synchronizującego bazę danych poczty (poczta, foldery, kontakty itp.) z klientami Outlooka lub - do pewnego stopnia, w jaki sposób scentralizowana Kontrola Wersji Źródła przeprowadza synchronizację. Mam ogólny pomysł (zachowaj wersję dla każdego podmiotu, utrzymuj dziennik, zaimplementuj algorytm rozwiązywania konfliktów, używaj GUID dla identyfikatorów itp.) - nie jestem pewien, czy opisuję wszystkie szczegóły. Idealnie - szukam biblioteki/frameworka/platformy, która zrobi to wszystko za mnie (ja dostarczam środki do wysyłania wiadomości i jakoś definiuje model). Można by pomyśleć, że jest to dość powszechny problem, który został już zbadany i wdrożony. Jeśli biblioteka nie istnieje, szukam wskazówek/artykułów/stron internetowych/wskazówek.


title: Czy istnieje model procesu podobny do procesu kaskadowego, ale z większą liczbą cykli?

text: W inżynierii oprogramowania, jak nazywa się proces rozwoju, taki jak model kaskadowy, ale z większą liczbą cykli? Czy istnieje coś takiego? W moim przypadku osobno rozwijałem części mojej aplikacji i przechodziłem przez wszystkie etapy w modelu kaskadowym (wymagania, analiza, projektowanie, implementacja, testowanie). Na koniec wszystko poskładałem. Czy błędem jest nazywanie tego procesem kaskadowym z 4 cyklami?


title: Czy są jakieś przewagi SASS nad LESS?

text: Próbuję przeprowadzić badania nad tymi preprocesorami CSS. Czy są jakieś zalety używania sass nad mniej jako preprocesora css? Czynniki, których szukam, to wielkość społeczności, dojrzałość projektu oprogramowania, wielkość społeczności itp. Wiem, że było z tym inne pytanie; ale nie został konstruktywnie napisany i zamknięty.


title: Kroki konwersji gramatyki na gramatykę LL(1) Gramatyka

text: Mam następujące pytanie: Przekształć poniższą gramatykę na gramatykę LL(1), która rozpoznaje ten sam język (możesz założyć, że gramatyka jest jednoznaczna). A -> int A -> int + A A -> int - A A -> A - (A) Jakie kroki lub zasady muszę wykonać, aby przekonwertować tę gramatykę na ll(1)?


title: Kiedy „podstawowa” biblioteka jest złym pomysłem?

text: Podczas tworzenia oprogramowania często mam scentralizowaną „podstawową” bibliotekę zawierającą przydatny kod, który może być udostępniany i odwoływany przez różne projekty. Przykłady: * zestaw funkcji do manipulowania ciągami znaków * powszechnie używane wyrażenia regularne * wspólny kod wdrożeniowy Jednak niektórzy z moich kolegów wydają się odwracać od tego podejścia. Mają obawy, takie jak obciążenie związane z konserwacją ponownego testowania kodu używanego przez wiele projektów po naprawieniu błędu. Teraz zastanawiam się, kiedy powinienem to zrobić. Jakie są problemy, które sprawiają, że korzystanie z „podstawowej” biblioteki jest złym pomysłem?


title: Czy witryny takie jak goanimate, xtranormal i animoto korzystają z technologii Flash + ActionScript, OpenGL lub innej?

text: Z jakiej technologii korzystają witryny takie jak goanimate, xtranormal i animoto? Zwłaszcza silnik kompilacji wideo na zapleczu animoto? Czy HTML5 można wykorzystać do wszystkiego, co tam jest?


Jak to się nazywa, gdy ustawiasz właściwości podczas inicjowania obiektu? var klient = new Customer() {RequestID = request.ID, AddressID = 5}; Czy uważa się to za dobrą praktykę?


title: Rozpoczęcie doradztwa w okresie zatrudnienia – konflikt interesów

text: Przede wszystkim **Nie szukam porady prawnej**. Trochę to TL;DR, ale na dole mam podsumowanie, wszystko wyjaśniam, żeby ludzie mogli służyć wnikliwą radą. ### Sytuacja Muszę wyjaśnić moją obecną sytuację, aby wyjaśnić, dlaczego zdecydowałem się iść wyznaczoną trasą. Ostatnio poproszono mnie o znalezienie innej pracy z powodu problemów z lokalną gospodarką. Nie zostałem zwolniony, ale przyczyną jest to, że mojego obecnego pracodawcy nie stać już na zatrudnienie mnie na pełny etat. Szukałem pracy przez jakiś czas, ale jest ich bardzo mało, szczególnie na poziomie, na którym się znajduję, i nie chcę _po prostu innej pracy_, której nie będę miał wyzwań ani przyjemności. Na obecnym stanowisku pracuję jako architekt i menedżer oprogramowania. Zdecydowana większość prac jest wykonywana wewnętrznie, ale robię trochę zewnętrznych konsultacji dla mojego pracodawcy. ### Moja decyzja Postanowiłam wyjść na własną rękę jako konsultant/wykonawca. Mam już sporo pracy w kolejce. Ale kiedy zakładam firmę, muszę zarabiać na utrzymanie rodziny. Ostatecznym rezultatem jest zarabianie na niektórych produktach, ale rozwój produktu wymaga czasu. ### Problem Mój obecny pracodawca zaoferował mi u nich pracę w niepełnym wymiarze godzin. Są to przede wszystkim działalność detaliczna, chociaż od czasu mojego zatrudnienia w dużym stopniu przeniosłam się do pracy w sieci (głównie serwisy oparte na CMS) oraz w mniejszym stopniu do programowania, do którego wchodzę. Odbywa się to zarówno na zasadzie konsultingu, jak projekty wewnętrzne. Istnieje również bardzo duży biznes wsparcia IT. Tworzenie oprogramowania jest w dużej mierze pomocnicze, chociaż duży nacisk kładzie się na (podstawowe) tworzenie stron internetowych. **Rozwój oprogramowania w dużej mierze zatrzyma się, gdy odejdę, jeśli nie całkowicie** ## Konflikt interesów Jeśli podejmę pracę w niepełnym wymiarze godzin, muszę mieć napisaną umowę o konflikcie interesów. Spotkam się z prawnikiem w celu uzyskania porady prawnej, ale muszę wiedzieć, na co sobie pozwolić. ### TL;DR Pracując jako konsultant, a także dla firmy zajmującej się oprogramowaniem w niepełnym wymiarze godzin, myślę o następujących obszarach do zdefiniowania w umowie, aby umożliwić sobie działanie: * Kiedy pracuję dla nich, jestem zatrudniony przez ich i nie będą publikować ani ujawniać informacji o mojej własnej działalności * Nie będę poza pracą ścigać swoich klientów oferujących usługi * Nie będą posiadać żadnych praw do niczego, co produkuję, gdy nie jestem u nich zatrudniony * Jeśli zgłosi się do mnie obecny klient z ich własnych badań, to jest to uczciwa gra * Jeśli odchodzi klient, mam prawo pracować dla niego i albo zwrócić się do niego, albo poprosić go o zwrócenie się do mnie pominięty? Chcę, aby mój biznes się rozwijał i rozkwitał oraz aby się chronić. Przykład - jeden z ich klientów powiedział mi, że chce, abym wykonał swoją pracę, i nie było to prośba.


title: Co długoterminowy freelancer mówi o doświadczeniu programisty?

text: Ostatnio rozmawiałem z kandydatami na stanowisko programisty wymagające ponad 10 lat doświadczenia i natknąłem się na kilka CV, których nie jestem pewien, jak je zrozumieć: rozmawiałem z kilkoma z tych osób i do tej pory nie miałem szczęścia. Jakie są doświadczenia ludzi z programistami z około 10 letnim doświadczeniem, ale którzy od pierwszego dnia pracowali głównie jako freelancerzy projektowi? Czy istnieją potencjalne korzyści lub wady posiadania tego typu doświadczenia przez firmę tworzącą oprogramowanie?


title: C/C++ w aplikacjach, które nie dotyczą wydajności

text: C jest najlepszym językiem (lub może pojedynczym) odpowiednim dla systemów operacyjnych, sterowników, systemów wbudowanych itp. Dla bardziej złożonych dziedzin, takich jak grafika komputerowa, C++ jest lepszym wyborem. Ale te aplikacje mają dokładne wymagania dotyczące wydajności i można je zbudować tylko w C/C++. Teraz pytanie brzmi: jeśli wymagania dotyczące wydajności można osiągnąć w innym języku, czy istnieją jakieś techniczne powody, aby wybrać C/C++?


title: Serwer iOS: wady HTTP/Apache?

text: Chcę stworzyć aplikację klient/serwer na urządzenia z systemem iOS, gdzie klientem jest iPhone/iPad, a serwer jest hostowany w domu (Macbook z Apache) lub online. Widziałem wiele metod sugerowanych w moim googlowaniu, ale najbardziej powszechną metodą wydają się być żądania HTTP POST i GET. Chciałbym wiedzieć, czy istnieją jakieś ograniczenia w korzystaniu z HTTP dla aplikacji iOS opartej na kliencie/serwerze, zanim zabiorę się zbytnio do implementacji. Wydajność nie jest moim priorytetem, ponieważ wysyłam tylko niewielkie ilości danych na raz. Czy użycie serwera Apache HTTP Server jest dobrym rozwiązaniem, czy też powinienem użyć innego narzędzia po stronie serwera? Przepraszam za brak doświadczenia w tej dziedzinie. Z góry dziękuję. Słyszałem też o Parse i Amazon EC2, czy ktoś może za nie ręczyć? **EDYTUJ:** Aby wyjaśnić, serwer będzie jednym komputerem/hostem dla wszystkich klientów, a nie jednym serwerem na klienta. Chciałbym też, aby dostępne było najtańsze (jeśli nie darmowe) rozwiązanie.


title: Czy mogę korzystać ze struktury bazy danych projektu open source?

text: Znalazłem strukturę bazy danych dla systemu CMS i chcę ją skopiować z EF, w którym ta baza danych jest sporządzona, czy można skopiować strukturę bazy danych oprogramowania open source, które jest objęte licencją GNU v2? Reszta oprogramowania nie chcę tylko struktury bazy danych.


title: Problemy CodePlex i Google Code

text: Zastanawiałem się nad ryzykiem związanym z hostingiem na Microsoft CodePlex i Google Code. Powiedzmy, że prowadzę projekt na jednym z nich i kończy się to startem i pobieraniem wielu plików. Zastanawiałem się, czy jest możliwe (a może już się stało), aby Microsoft lub Google zmieniły markę projektu i przekształciły go w zamknięte źródło? Powodem, dla którego pytam, jest to, że Microsoft i Google to wielomiliardowe firmy, a przeciętny prawnik musiałby być szalony, aby spróbować z nimi walczyć.


title: Maks. Długość SMS-a, która dotrze do wszystkich użytkowników

text: Tworzę system zarządzania dotacjami, w którym próbujemy znaleźć listę utraconych użytkowników na wiele różnych sposobów. Pierwsza próba to e-mail, ale jeśli nie mamy adresu e-mail, spróbujemy SMS-a. Zastanawiam się tylko, zanim nasi ludzie z biznesu zaczną wymyślać wiadomości SMS, czy istnieje maksymalna długość lub coś, w czym powinienem pozostać, aby dotrzeć do każdego telefonu z funkcją SMS? Biorąc również pod uwagę, że chociaż nie będziemy wysyłać SMS-ów na numery międzynarodowe, wielu użytkowników będzie pochodzić z zagranicy i może mieć zagraniczne telefony komórkowe. Ponadto wiadomości będą zawsze dostępne tylko w języku angielskim.


title: Alternatywa dla wymagania czerwonego w TDD: cofnięcie zmiany kodu?

text: Zgodnie z tą odpowiedzią na to pytanie, dobrym powodem, aby zawsze zaczynać od nieudanego testu („czerwonego”) jest upewnienie się, że test działa i że kod, który zostanie napisany, sprawia, że test przechodzi pomyślnie. (moja parafraza) Skoro wydaje mi się, że umiejętność napisania testu, zanim jakikolwiek kod zostanie napisany, jest rodzajem przenikliwości umysłowej, której nie każdy potrafi (ja nie potrafię), czy wystarczyłoby, gdybym najpierw napisał kod , a następnie napisz test, a następnie cofnij moją zmianę kodu, aby zobaczyć, że test zakończy się niepowodzeniem bez zmiany kodu? Załóżmy, że można by to zautomatyzować przez jakiś rodzaj integracji IDE - czy byłaby to alternatywna forma TDD? W środowiskach programistycznych, w których TDD jest wymuszane przez IDE/Framework, czy ścisłe mechaniczne egzekwowanie reguł ogranicza możliwości programistów w zakresie optymalizacji? **Przykład**, w którym może to być przydatne: Załóżmy, że moduł i jego testy jednostkowe zostały już zakończone i oba działają poprawnie. Teraz chcę wprowadzić refaktoryzację, która poprawiłaby wydajność o _nieznaną_ wartość, zmniejszając liczbę wywołań funkcji _wewnętrznych_, bez żadnych fundamentalnych zmian w zachowaniu _zewnętrznym_ modułu. Ponieważ nie wiem, jakie korzyści odniosłbym z tej refaktoryzacji, nie mogę napisać testu na to. Ale bez nieudanego testu nie mogę modyfikować kodu. Wydaje się, że to problem z kurczakiem i jajkiem. Jeśli mogę napisać fikcyjny test, który po prostu przechwytuje liczbę wywołań funkcji wewnętrznych w starym/nowym kodzie, a następnie modyfikować kod (w imię „refaktoryzacji”), teraz mogę zaktualizować swój test (jeśli refaktoryzacja skutecznie zmniejsza liczbę wywołań wewnętrznych), aby stwierdzić, że liczba wywołań wewnętrznych powinna zostać zmniejszona. **(Po namyśle)** Chociaż ten typ testów wydajnościowych ma mniejsze znaczenie niż testy jednostkowe wymagań: * Chciałbym zachować korzyść z wydajniejszego kodu, jeśli nie ma zmian w wymaganiach funkcjonalnych, a nie chcę inni do „refaktoryzacji” tej korzyści w oparciu o założenie, że żadne wymagania funkcjonalne nie zostaną złamane. * Jeśli jednak nastąpi zmiana w wymaganiach funkcjonalnych i jeśli nie jest możliwe spełnienie obecnego poziomu wydajności, to wymaganie funkcjonalne powinno zostać spełnione w pierwszej kolejności. Następnie na podstawie eksperymentów zostanie ustalony nowy cel skuteczności. (Zastrzeżenie: nigdy nie robiłem strict-TDD (i jestem co do tego sceptyczny), chociaż od kilku miesięcy robię test-wkrótce-po-kodowaniu.) **Więcej przemyśleń** * Wydaje się, że zmiana kodu w tym pytaniu być „rozwojem po TDD”, ponieważ następuje to po spełnieniu wszystkich wymagań funkcjonalnych i przeprowadzeniu wszystkich testów. Dlatego tak długo, jak wszystkie oryginalne testy jednostkowe TDD przechodzą pomyślnie, ten rodzaj zmiany kodu jest uważany za „dostrajanie”.


title: Konstrukcje języka programowania do optymalizacji pamięci podręcznej?

text: Wyraźna optymalizacja użycia pamięci podręcznej z pewnością poprawi wydajność mojego programu. Co zaskakujące, nie widzę zbyt wielu języków programowania, które mają taką funkcję. Oto moje pytanie: 1. Jakie konstrukcje językowe, które widziałeś, pomagają poprawić wykorzystanie pamięci podręcznej? 2. Jak wprowadzić innowacje w wykorzystaniu pamięci podręcznej, ponieważ większość systemów nie będzie łatwo ujawniać takich rzeczy, jak rozmiar pamięci podręcznej L1? (Windows ma API lub może /proc/cpuinfo na Linuksie, ale szukam czegoś prostszego dla średniozaawansowanych programistów)


title: Losowo generuj punkty w ruchu spiralnym za pomocą JavaScript

text: Mam więc program JavaScript, który obecnie pobiera losowe punkty, generuje losową wartość x,y,z wokół punktu środkowego, w promieniu `r` var maxArms = 3; zmienna i = 0; var kolor = []; for(var arm = 0; arm <= maxArms; arm++) { var perArm = (numStars/maxArms); zmienna perPoint = Math.ceil((r/10)/5); var Rzeczywiste Punkty = ((r/10)/5); naPunkt = (naArm/(rzeczywistePunkty+(rzeczywistePunkty/4))); var kąt = 8; for (var ra = 0; ra < 412; ra += 2) { for (var p = 0; p < (580-ra); p++) { var an = Math.random() * Math.PI * 2; var pX = x(ra,angle) + ((Math.cos(an) * (Math.random()*512)) * (Math.random() > .5 ? 1 : -1)), pY = y (ra,angle) + ((Math.cos(an) * (Math.random()*512)) * (Math.random() > .5 ? 1 : -1)), pZ = Math.random() * ((r/2)-p) * (1 / ra) * (Math.random() > .5 ? 1 : -1), cząstka = nowy TRZY.Vertex( nowy TRZY.Vector3(pX, pZ, pY ) ); wewnętrzny.wierzchołki.push(cząstka); var h = Math.random() * (291 - 185) + 185, s = Math.random() * (66 - 34) + 34, v = Math.random() * (100 - 72) + 72; kolor[i] = nowy TRZY.Kolor(0xffffff); kolor[i].setHSV(h / 360, s / 100, v / 100); i++; } } } Teraz próbuję znaleźć sposób, a nie tylko losowo umieszczać rzeczy w dowolnym miejscu w promieniu, aby spiralnie wyprowadzić punkty w określoną liczbę "Spiral Arms", jestem pewien, że będzie to wymagało czegoś z Sine i Cosine, ale spędziłem godziny, próbując zrozumieć, jak korzystać z tych funkcji, aby robić to, czego potrzebuję, i nie jestem pewien, jak to zrobić. To, czego szukam, to chcę zmiennej dla liczby ramion „numArms” i chcę, aby powyższa funkcja pobierała liczbę ramion i tworzyła równą liczbę punktów w każdym ramieniu, a każde ramię wysuwało się z punkt centralny „0,0” w ruchu spiralnym. Czy to ma sens? Znalazłem inne pytania i różne odpowiedzi w google o tym, jak zrobić spiralę, a także o tym, jak znaleźć losowe punkty (jak pokazano powyżej), ale nic, co może mi pomóc znaleźć losowe punkty wokół ramion spiralnych, ale kiedy mam punkty w przypadku spirali nie jestem pewien, jak uzyskać losowe współrzędne x,y,z wokół spirali. Ponadto, jeśli to możliwe, aby na początku każdego ramienia było więcej punktów niż na końcu ramienia. Tak, wiem, że mój skrypt nie jest odpowiednio zoptymalizowany, ale w tej chwili szukam więcej funkcji. Załączam obraz tego, co aktualnie wygenerowałem poniższym kodem, a także próbkę galaktyki spiralnej, chociaż nie chcę, aby centrum było tak duże, jak na drugim zdjęciu. * * * **Edytuj** Wprowadziłem pewne zmiany w skrypcie generowania, chociaż dość niechlujny, zaczyna się od tego, że gwiazdy wychodzą ze środka jak spirala, ale nieuchronnie się powiększa i nie wygląda już jak spirala, mam próbowałem grać ze wszystkimi zmiennymi (`ra` i `angle`), ale nie poprawia to wyglądu spirali, co mogę zrobić? Obecna generacja: http://i.stack.imgur.com/sfkh3.jpg Przykładowa generacja: http://i.stack.imgur.com/RikVh.jpg


title: Jak nazywa się to drzewo?

text: Ma jeden korzeń, a każdy węzeł ma 0..N uporządkowanych pod-węzłów. Klucze reprezentują odrębny zestaw ścieżek. Dwa drzewa można połączyć tylko wtedy, gdy mają wspólny korzeń. Musi obsługiwać co najmniej: wstawianie, scalanie, wyliczanie ścieżek. Dla tego drzewa: +---------+----------------+ | | | kot krowa pies + +--------+ + | | | | pije skacze moos szczeka + | mleko ścieżki byłyby: * kot pije mleko * krowa skacze * krowa muczy * pies szczeka To trochę jak próba. Co to jest?


title: Kryteria uznania języka za „zorientowany obiektowo”

text: Rozmawiałem dzisiaj o programowaniu OO i przeglądając internet znalazłem wiele różnych specyfikacji języków obiektowych. * Jakie są wymagania, aby język był zorientowany obiektowo? Dla mnie język obiektowy musi mieć klasy, dziedziczenie i enkapsulację. * Czy C jest językiem zorientowanym obiektowo tylko dlatego, że możesz używać struktur i programu z projektem zorientowanym obiektowo? Dlaczego? Dlaczego nie? Czy są jakieś dobre strony/artykuły na ten temat? I proszę, żadnych linków do Wikipedii, bo już tam byłem.


title: Blokowanie obiektów przez Internet

text: Tworzę aplikację do nauczania, która może być używana do rysowania obiektów, a następnie można je przeciągać. Chciałbym wiedzieć, co najlepiej zrobić, gdy ktoś kliknie na obiekt i zacznie go przeciągać. Powiedziano mi, że powinienem go "zamknąć" - uniemożliwić jednoczesne złapanie go przez kogoś innego i przeciągnięcie go. Ale to wymagałoby wysłania żądania do serwera (a następnie do wszystkich innych użytkowników podłączonych do sesji korepetycji) w celu zablokowania go, co może zająć trochę czasu (co jeśli nauczyciel jest w USA, a uczeń jest w Afryce w trybie dialup)? Powiedziano mi również, że powinienem wykonać pętlę, dopóki nie zobaczę, że obiekt został przeze mnie zablokowany. W ten sposób użytkownik może nie być w stanie chwycić, przeciągnąć i obiektować przez kilka sekund (problem z projektowaniem UX). Zaproponowałem być może włączenie tylko jednego przeciągania narysowanego obiektu, ale to wydaje się być krótkie. Jakieś sugestie? Dziękuję Ci!


title: Jeśli otworzę port i dodaję wyjątek do zapory systemu Windows, czy powinienem najpierw zapytać użytkownika?

text: Mam uruchomioną aplikację z uprawnieniami administratora, która do działania musi dodać port i zarejestrować się na liście wyjątków Zapory systemu Windows. pytanie brzmi, czy uważa się to za złą praktykę bez informowania użytkownika końcowego? czy trzeba zadać pytanie końcowemu użytkownikowi o to? Z góry dziękuję.


title: Plusy i minusy JIT i AOT

text: Pod jakimi względami kompilacja "Just In Time" jest lepsza od kompilacji "Ahead Of Time"? I wzajemnie. Czy AOT to to samo, co bezpośrednia kompilacja natywna?


title: Scrum Newbie: wewnętrzne historie

text: Próbuję wdrożyć Scrum i mam kilka podstawowych pytań. Rozumiem tworzenie narracji w celu implementacji funkcjonalności użytkownika końcowego, ale skąd bierze się „metazadanie”, takie jak zbieranie wymagań dla narracji w pierwszej kolejności? Czy to jest jeszcze przed rozpoczęciem procesu fabularnego? Myślę, że borykam się z tym, że projekt zaczyna się w pewnym momencie, a potem potrzebne są zadania typu „zdobądź wymagania” i „utwórz historyjki użytkownika”, ale one również są częścią projektu i trzeba je gdzieś uchwycić. Czy pasują do historii Scrum? Czy są częścią sprintu? Wygląda na to, że powinny, ale tworzenie dla nich historii wydaje się rekurencyjne... Mam nadzieję, że to ma sens. Dziękuję!


title: Utwórz podklasę modelu do tworzenia modelu widoku opartego na klasach

text: Czy uzasadnione jest tworzenie podklasy modelu tylko w celu stworzenia odpowiedniego viewmodelu na podstawie tej klasy. Czy czegoś mi brakuje? Jak przekazać dane o modelu do viewmodelu?


title: Wszelkie parsery ASN.1 napisane w całości w kodzie zarządzanym i zabezpieczone przed przepełnieniem bufora

text: ASN.1 to format danych używany w certyfikatach HTTPS i różnych innych krytycznych elementach infrastruktury. Muszę przeanalizować niektóre potencjalnie wrogie dane ASN.1 i chcę się upewnić, że mój kod jest bezpieczny przed wszelkimi błędami programisty. Myślę, że najlepszym sposobem na to jest użycie zarządzanego języka, który nie używa niebezpiecznego kodu. Czy istnieją jakieś zarządzane implementacje (C#) parsera ASN.1, który jest dobrze przetestowany i bezpieczny przed przepełnieniem bufora. Jeszcze lepiej, gdyby na początek istniał sposób na wykrycie takiego przepełnienia.


title: Czy używanie void* i enums w celu włączenia sprawdzania typu jest antywzorcem?

text: Powiedzmy, że w silniku gry masz „obiekt”, który składa się z różnych komponentów. Jednym z nich jest „RenderComponent”, który może być „Mesh”, „Sprite” lub „Light”. Teraz wszystkie te klasy są bardzo różnymi klasami z niekompatybilnymi interfejsami, więc wyprowadzanie ich wszystkich z `RenderComponent` nie ma sensu. Ponadto `Object` może mieć tylko jeden `RenderComponent` na raz, więc oszczędzanie trzech wskaźników w `Object`, z których dwa muszą zawsze mieć wartość `nullptr`, wydaje się marnotrawstwem. Więc to, co wymyśliłem, to użycie `RenderComponent` do przechowywania wskaźnika `void*` i typu. class RenderComponent{ public: enum class RenderType{ Mesh, Sprite, Light }; RenderType getType(){ return type_; } Mesh* asMesh(){ if(type_ == RenderType::Mesh) return static_cast<Mesh*>(pointer_.get()) else return nullptr; } /* to samo dla Sprite i Light */ RenderComponent(unique_ptr<Mesh>&& pointer) : pointer_(std::move(pointer)), type_(RenderType::Mesh) {} /* to samo dla Sprite i Lekki */ private: unique_ptr<void> wskaźnik_; Typ renderowania_; } Powinno działać zgodnie z przeznaczeniem, ale wydaje mi się, że jest to antywzorzec. Zasadniczo odrzucam wszystkie aspekty C++ związane z typem bezpiecznym, a następnie sam je reimplementuję. To nie może być prawda. Czy to jest antywzór? Jakie są typowe obejścia tego problemu? Czy brakuje mi czegoś oczywistego? A może jest to znany, ale (nie bez powodu) rzadko używany wzorzec?


title: Korzystanie z udostępniania na Twitterze i udostępniania na Facebooku

text: Cześć, próbuję użyć **wtyczek społecznościowych** na mojej stronie W przypadku tweeta na Twitterze `<a id="twitter-link" href="https://twitter.com/share" class="twitter-share- button" data-lang="pl" data-size="large">Tweetuj</a>` Dołączyłem powyższą linię mój adres URL jest podobny do tego localhost:3000/#a=abc `aby dać mu szybszą odpowiedź użyłem location.hash zamiast zmieniać parametry, aby uniknąć ponownego ładowania strony internetowej, więc gdy dowolny użytkownik kliknie dowolny obraz, adres URL zmienia się na localhost: 3000/#a=def, ale przycisk udostępniania na Twitterze próbuje udostępnić adres URL `localhost: 3000/#a=abc` Jak mogę to rozwiązać? Z góry dziękuję!!


title: Asynchroniczne wywołania iterowane przez funkcję

text: Jestem nowy w używaniu wywołań asynchronicznych w ajax. Mój problem polega na tym, że mam dwa "zadania" serwera: jedno, które po prostu sprawdza, czy sesja jest ustawiona (szybko), a drugie, które ustawia sesję (wolniej). Chcę sprawdzić, czy sesja jest ustawiona, a jeśli nie, to ustawić. I chcę spróbować X razy (nie jestem pewien, czy naprawdę muszę, ale to jest inne pytanie). Jeśli po prostu zrobię to z „while” lub „for” i nie pomyślę, że jest to asynchroniczne, wygeneruję problemy, takie jak wiele połączeń i nie będzie to sprawdzanie sesji, a następnie ustawianie sesji. Mógłbym to zrobić na serwerze, ale nie chcę wysyłać danych żądania jeśli sesja jest ustawiona, tylko jeśli nie jest ustawiona. Poniżej znajduje się sposób, w jaki próbuję to zrobić teraz, ale nie jestem pewien, czy istnieje lepszy sposób na zrobienie tego? Poniższy kod tylko implementuje pomysł i nie jest testowany. Pomysł polega na tym, aby przesyłać licznik tam iz powrotem między sprawdzaniem a wysyłaniem sesji w funkcji sukcesu. To, czego nie podoba mi się w kodzie, to fakt, że ustawiona sesja jest po prostu zrozumiała w kontekście checkSession. Jeśli za jakiś czas wrócę do kodu i po prostu chcę ustawić sesję, będę miał magiczną liczbę X, aby upewnić się, że nie sprawdzi również sesji. Czy jest na to bardziej płynny sposób? Jeśli kod pachnie jeszcze gorzej, proszę powiedz mi. self.start = function() { self.checkSession(0); }; self.checkSession = function(count) { server.CheckSession(function(returnValue){ if(returnValue == false && count < 4){ count++; self.setSession(count); }},function(err){}); }; self.setSession = function(liczba) { var sessionData = someData; server.SetSession(sessionData, function(d){ self.checkSession(count); }, function(err){});};


title: Wypełnij datę do jList w netbeans (Java)

text: Stworzyłem jFrame za pomocą netbeans. Oto zrzut ekranu pokazujący, w jaki sposób chcę dodać dane do jList, od A do B. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/LyTxa .png) Czy możesz mi pokazać, jak mogę to zrobić?


title: Korzystanie z notacji składni abstrakcyjnej (ASN.1)

text: Problem elektronicznej wymiany danych w sieciach jest dobrze znany i rozumiany. Obecnie najpopularniejsze formaty wymiany danych to XML i JSON. Istnieje wiele zalet i wad używania jednego formatu w stosunku do drugiego, a niektóre formaty lepiej nadają się do określonych zestawów danych. Programuję już od dłuższego czasu i dopiero TERAZ natknąłem się na format **ASN.1 (Abstact Syntax Notation)**, który najwyraźniej jest używany w niektórych protokołach internetowych, takich jak LDAP, i jest w rzeczywistości dość stary (w latach internetowych). Poczytałem trochę o formacie. Podobnie jak JSON, udostępnia prymitywne typy danych (boolean, integer itp.), a także typy sekwencyjne i zestawy. Różni się nieco od JSON lub XML w tym sensie, że chociaż sama notacja jest czytelna dla człowieka, kodowanie zwykle nie jest czytelne dla człowieka (zwykle jest zakodowane w formacie binarnym). Czy jest jakiś powód, dla którego ten format jest tak rzadko używany ? (A może całkowicie się mylę i faktycznie jest często używany?) Dopiero teraz usłyszałem o tym po raz pierwszy i nigdy nie słyszałem, aby pojawiło się w żadnej z różnych dyskusji, które czytałem na temat zalety JSON, YAML, XML lub innego formatu wymiany. Czy jest jakaś poważna wada ASN.1, która uniemożliwiła jego szersze stosowanie?


title: Masz pytania dotyczące burzy mózgów, aby uzyskać funkcje w nowej wersji oprogramowania?

text: Ze względu na zmianę technologii przeprowadzamy poważną zmianę wersji naszego wewnętrznego oprogramowania dla przedsiębiorstw. Będę robił zwykłe wywiady, obserwacje i sesje burzy mózgów. Jakie ogólne (i zabawne!) pytania polecasz/użyjesz w pierwszej kolejności, aby wywołać odkrycie lub zapamiętanie nowej funkcjonalności lub zmian w istniejącej funkcjonalności? (Zbyt dużo literatury na temat zbierania wymagań mówi ci o prostej części: jak uzyskać szczegółowe informacje na temat funkcjonalności. Na początku nikt nie ma zbyt wiele na temat wywoływania funkcji!) Przykłady: 1. Masz magiczną różdżkę. Możesz pomachać i zmienić jedną rzecz w General Software v1.0. Co byś zmienił, jak i dlaczego? 2. Czy używałeś oprogramowania, w którym chciałeś, aby coś w nim było również w General Software v2.0? 3. Jaka funkcjonalność jest zbyt skomplikowana w General Software v1.0?


title: Model-View-Controller i odpowiedzialność za współbieżność po stronie klienta

text: W aplikacji internetowej, która ma znaczący komponent ajax, gdzie jest najlepsze miejsce na odpowiedzialność za współbieżność po stronie klienta? Próbujemy używać MVC zarówno w aplikacji serwerowej (stos LAMP), jak i aplikacji klienckiej (ajax, głównie jQuery i dyskretne js). Po stronie serwera nasz model zgłasza wyjątek, jeśli znajdzie konflikt współbieżności, którego nie może rozwiązać samodzielnie. Zasadniczo model śledzi numer wersji oraz datę/użytkownika utworzenia i aktualizacji. Jeśli zapisywany obiekt jest nieaktualny (wersja starsza niż w składnicy danych), próbuje scalić. Jeśli to się nie powiedzie, kontroler obsługuje wyjątek i inicjuje pewien rodzaj przepływu pracy rozwiązywania. Problem dotyczy aplikacji klienckiej; ponieważ ajax uruchamia żądania asynchronicznie, model niekoniecznie posiada najnowszą wersję danych, ale tylko kontroler będzie o tym wiedział -- jest odpowiedzialny za obsługę kolejki/odpytywania. Pierwotnym pomysłem było przekazywanie wszystkich aktualizacji pobranych z serwera bezpośrednio do modeli javascript w celu obsługi współbieżności — problem polegał na tym, że brak wyjątków w javascript ogranicza nas do podejmowania w ten sposób decyzji dotyczących kontroli przepływu w modelu. Czy to zły pomysł, aby przenieść scalanie/rozwiązywanie konfliktów modeli do kontrolera javascript? Czy istnieje lepszy sposób na radzenie sobie z tym bez zbytniego wchodzenia kontrolera w obszar modelu? Przebieg strony: 1. Użytkownik ładuje stronę (aplikację ajax) z początkowymi modelami -- modeli jest wiele i mają wiele atrybutów. 2. Strona odpytuje serwer o aktualizacje co 10-15 sekund — służy to do automatycznego zapisywania i pobierania aktualizacji od innych użytkowników. 3. Użytkownik edytuje modele. 4. Wszelkie konflikty powstałe po pierwszym wpisie są rozwiązywane, gdy użytkownik kliknie przycisk „zapisz” na dole strony.


title: Absolutne minimum w teście Joela

text: Z testu Joela z 12, które twoim zdaniem są absolutnie niezbędne, aby przynajmniej mieć przyzwoicie działający dział/firmę oprogramowania? Zdaję sobie sprawę, że nie ma absolutnie właściwej odpowiedzi. Po prostu próbuję uzyskać opinie innych. Moja własna organizacja zarządza tylko nędzną 5 z 12. Jeśli sprawdzisz wykazy w Karierach 2.0, większość firm również nie uzyska pełnych 12 punktów, ale jestem pewien, że radzą sobie dobrze. Czy SO publikuje statystyki dla tych w dowolnym miejscu? A może ktoś próbował złomować wyniki? Ciekawe byłoby wiedzieć, które są najczęściej praktykowane. I czy dlatego, że są łatwiejsze do wdrożenia, czy rzeczywiście mają największy wpływ. Dziękuję. EDIT: Są to te praktykowane przez moją firmę iz podanych powodów 1. Posiadanie kontroli źródła. - Muszę zgodzić się z jedną z odpowiedzi, o której nie będę negocjował. 2. Napraw błędy przed napisaniem nowego kodu. - Kwestia zasad, ale nie obowiązkowa. 3. Miej specyfikację. - W małym software house z małymi marżami specyfikacje ratują życie. Ale widziałem, jak zlikwidowano to w innych firmach bez wpływu. 4. Kandydaci piszą kod podczas rozmowy kwalifikacyjnej. - Uratowało nas wielokrotne zatrudnianie niewłaściwego kandydata. To kolejny niezbywalny must-have dla mnie. 5. Testy użyteczności przedpokoju. - Łatwy dla nas. Całe nasze biuro to korytarz. Naprawdę łatwo jest złapać ludzi w każdej chwili. Ale to również oznacza, że nie mamy spokojnego środowiska pracy dla programistów.


title: Czy powinienem utworzyć zmienną tylko do odczytu, gdy ją modyfikuję, ale w rzeczywistości nie ustawiam jej poza konstruktorem?

text: ## Tło: pisałem jakiś kod. Wyglądało to mniej więcej tak: class X { private List<int> _myList = new List<int>(); public void MojaMetoda(int x) { _mojaLista.Dodaj(x); } } R# zasugerował, abym `_myList` był tylko do odczytu. Nie byłem tego taki pewien, jakbym technicznie mógł zrobić to tylko do odczytu, myślę, że byłoby to nieco mylące, ponieważ wciąż modyfikuję listę, po prostu nie przypisując jej ponownie. Więc chociaż mógłbym zrobić to tylko do odczytu, nie jestem pewien, czy powinienem. ## Pytanie: Czy powinienem tworzyć zmienne takie jak ta tylko do odczytu? **Dlaczego?** Jeśli nie, dlaczego R# to sugeruje?


title: Projektowanie aplikacji schematu blokowego algorytmu

text: Muszę opracować aplikację GUI w C#, w której użytkownicy mogą swobodnie dodawać bloki warunkowe/instrukcji na schemacie blokowym algorytmu, jak pokazano poniżej. Przez swobodnie rozumiem, że użytkownicy mogą dodawać blokadę tam, gdzie znajdują się strzałki. Mam pewne problemy z burzą mózgów, jak podejść do tego problemu, zwłaszcza co wybrać dla mojej struktury danych do przechowywania bloków. Myślałem o LinkedList, ponieważ wszystko odbywa się w sposób liniowy, a każdy węzeł zawsze ma głowę i ogon, ale blok If / Else (b> a) ma dwie gałęzie (głowy) do przechowywania, więc to trochę komplikuje sprawę. Jak mądry podchodziłby do takich problemów? Przepraszam, jeśli to pytanie nie pasuje do Stackexchange dla programistów, ale jest to raczej problem koncepcyjny niż problem z implementacją, więc uznałem, że to miejsce jest odpowiednie dla tego pytania. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/FSS4W.png)


title: Shortest Common Superstring: znajdź najkrótszy ciąg, który zawiera wszystkie podane fragmenty ciągu

text: Biorąc pod uwagę kilka fragmentów ciągu, chciałbym znaleźć najkrótszy możliwy pojedynczy ciąg („ciąg wyjściowy”), który zawiera wszystkie fragmenty. Fragmenty mogą nakładać się na siebie w ciągu wyjściowym. Przykład: Dla fragmentów łańcucha: BCDA AGF ABC Poniższy łańcuch wyjściowy zawiera wszystkie fragmenty i został utworzony przez naiwne dołączenie: BCDAAGFABC Jednak ten łańcuch wyjściowy jest lepszy (krótszy), ponieważ wykorzystuje nakładanie się: ABCDAGF ^ ABC ^ BCDA ^ AGF I' m szukam algorytmów dla tego problemu. Znalezienie najkrótszego ciągu wyjściowego nie jest absolutnie ważne, ale im krótszy, tym lepiej. Szukam algorytmu lepszego niż oczywisty naiwny, który spróbowałby dołączyć wszystkie permutacje fragmentów wejściowych i usunąć nakładanie się (który wydaje się być NP-Complete). Rozpocząłem pracę nad rozwiązaniem i okazuje się to całkiem interesujące; Chciałbym zobaczyć, co wymyślą inni ludzie. Za chwilę dodam do tego pytania swoją pracę w toku.


title: ASP.NET MVC — Widoki dynamiczne z wieloma podobnymi kontrolkami

text: Mam widok główny, który ma kilka sekcji i główne menu rozwijane u góry, które określa, jak wygląda reszta widoku. Wszystkie te sekcje zawierają pewne dane, które są widoczne przez cały czas, a niektóre muszą być ukryte, gdy określone wartości zostaną wybrane w głównym menu rozwijanym. W tej chwili mam częściowe widoki dla każdej sekcji i mam wiele stwierdzeń if/else, aby pokazać/ukryć szczegóły, które z dnia na dzień stają się coraz bardziej niezręczne.


title: Dokumentowanie pojęć wyższego poziomu

text: Za kilka dni opuszczę mój obecny projekt i w ramach zabezpieczenia mojej wiedzy zostałem poproszony o dodawanie komentarzy do kodu wszędzie tam, gdzie uważam, że może to wnieść wartość dodaną. Problem, z którym teraz się spotykam, polega na tym, że komentarze, które chcę napisać, nie nadają się tak naprawdę jako komentarze, ponieważ nie dotyczą pojedynczej jednostki w kodzie (kilka linii, funkcja, klasa, a nawet plik), ale są one bardziej o tym, jak dwie lub więcej jednostek współdziałają ze sobą lub o funkcji, której implementacja jest rozłożona na wiele jednostek. Jak więc dokumentować rzeczy, które nie należą do jednej jednostki, ale są ważne, aby zrozumieć szerszy obraz? A także: Gdzie to dokumentujesz? W pliku źródłowym czy w dokumencie zewnętrznym? Jako przykład mamy architekturę klient-serwer w C (z klientem i serwerem działającymi na tym samym urządzeniu wbudowanym). Aby uniknąć zalania serwera, klient dysponuje mechanizmem ograniczania wysyłania podobnych żądań do serwera tak, że żądanie może zostać wysłane tylko wtedy, gdy odpowiedź na poprzednie zostanie udzielona. Wnętrzności tego mechanizmu są rozłożone na wiele funkcji. Gdzie umieściłbyś dokumentację takiej funkcjonalności, zwłaszcza jeśli plik z funkcjonalnością posiada również inne, niezwiązane ze sobą funkcje? **Edytuj** : nieco rozszerzyliśmy pytanie.


title: Wyjaśnienie dotyczące usług internetowych REST

text: Jestem nowy w programowaniu usług internetowych i nie jestem pewien kilku rzeczy. Wiem, że usługi sieciowe REST mogą być używane do interakcji z systemem w następujący sposób: * do pobrania użytkownika: GET /user?id=1 * do pobrania wszystkich użytkowników: GET /user * do wstawienia użytkownika: PUT /user? {wszystkie dane użytkownika} Kiedy muszę wykonać akcję aktualizacji dla niektórych tabel przy użyciu obiektu JSON, czy można to zrobić za pomocą interfejsu API REST, czy musi to być jakiś inny interfejs? Jeśli to REST, jaka jest właściwa metoda (GET, POST, DELETE itp.) do użycia? Czy poprawne jest posiadanie dwóch rodzajów wzorców w tej samej usłudze internetowej?


title: Trochę wglądu w pole reprezentacji wiedzy i rozumowania

text: Zacząłem studiować magisterium z informatyki po około dwóch latach pracy w firmie programistycznej. W poprzednim zawodzie pracowałem głównie w hurtowni danych i tworzeniu oprogramowania związanego z wywiadem biznesowym. Istnieje duża szansa na wybór badań z zakresu reprezentacji wiedzy, ontologii i rozumowania, ponieważ nie ma innych dostępnych badań w innych interesujących dziedzinach, takich jak rozpoznawanie wzorców i nawigacja. Zainteresowałem się reprezentacją wiedzy dzięki temu, czego nauczyłem się na kursach, na których obecnie chodzę. Ale nie rozumiem dogłębnie tego, na jakie obszary taka dziedzina miałaby wpływ w realnym scenariuszu i jak mi to pomoże, gdy szukam pracy w najbliższej przyszłości. Niektórzy myśleli o tym bardzo by to docenili.


title: Kiedy robić przegląd kodu

text: Niedawno przeszliśmy do procesu scrum i pracujemy nad zadaniami i historyjkami użytkowników w sprintach. Chcielibyśmy często przeprowadzać przeglądy kodu, aby były mniej zniechęcające. Myślimy, że robimy je na poziomie historyjek użytkownika, ale nie jesteśmy pewni, jak rozgałęziać nasz kod, aby to uwzględnić. Używamy VS i TFS 2010 i jesteśmy sześcioosobowym zespołem. Obecnie pracujemy nad rozgałęzieniem funkcji, ale pracujemy nad przejściem na rozgałęzienie dla scrum. Obecnie nie używamy półek i nie chcemy wdrażać, jeśli dostępne są inne techniki. Jak polecacie wdrożenie przeglądu kodu na historyjkę użytkownika?


title: Mam nadzieję, że założę supermarket internetowy i potrzebuję porady na temat oprogramowania i aplikacji open source koszyka zakupów

text: Poszukiwałem zarówno oprogramowania open source, jak i oprogramowania z półki dla projektu internetowego supermarketu w Afryce. Teraz zawęziłem wyszukiwanie do koszyków X-cart i opartych na PHP PrestaShop. Moim planem jest nabycie koszyka na zakupy typu open source poprzez zakup lub jako bezpłatny koszyk typu open source i zatrudnienie lokalnego programisty, aby dostosować go do naszych lokalnych potrzeb. Robię demo dla x-cart od trzech tygodni i myślałem, że może to być dla nas najlepsze, ale po przejrzeniu 600-stronicowego podręcznika i zastanawiam się, jak daleko można go zlokalizować. Wczoraj patrzyłem na możliwy darmowy koszyk open source Prestashop i wydaje mi się, że podoba mi się back-end. Nie podobał mi się back-end dla Magento, ale z recenzji przeprowadzonych przez strony trzecie wydają się go polecać. Zastanawiam się teraz, czy powinienem prosić programistę, aby zaczął cały projekt od zera, czy użyć oprogramowania open source, takiego jak PrestaShop, lub dostać x-cart, który można następnie dostosować? Pamiętaj, że mój sklep będzie miał tysiące produktów i usług, w tym artykuły spożywcze, więc chcę coś, co może obsłużyć do 500 000 produktów i więcej. * * * Dziękuję chłopakom za przemyślenia i rady. Rzeczywiście przyjrzałem się innym koszykom i z punktu widzenia kierowników sklepów podoba mi się backend PrestaShop i fakt, że można dodać więcej modułów. Podniosłeś dla mnie czerwoną flagę dotyczącą możliwości obsługi tak wielu produktów. Jaki jest więc sens marketingu oprogramowania jako „produktów bez ograniczeń”, kiedy naprawdę nie można. Może ktoś może skierować mnie na stronę internetową, która ma tyle produktów i jest PrestaShop? Zgadzam się, chociaż trzeba to dostosować. Martwię się po prostu o poproszenie kogoś, aby zaczął od zera, ponieważ wierzę, że oprogramowanie open source zostało opracowane przez wiele umysłów i zostało przetestowane na tyle, że może nie mieć projektu zdrapki.


title: Czy jest jakiś analizator kodu open source dla java, na którym mogę zaadaptować mój algorytm metryk oprogramowania?

text: Robię pracę magisterską i przeprowadziłem metrykę oprogramowania. Muszę zastosować moje metryki w narzędziu open source. Znalazłem PMD i sprawdziłem styl na sourceforge.net, ale nie ma odpowiedniego wyjaśnienia ich kodów. Jednak nie mogłem znaleźć ich kodu źródłowego, aby je dostosować. Będę wdzięczny, jeśli wprowadzisz jedno narzędzie open source dla javy, którego kod mogę dostosować.


title: Czy ten komunikat o błędzie kompilatora Java jest nieprawidłowy? (bajtowa utrata precyzji)

text: Poniższy poprawny program java IMHO nie kompiluje się, ponieważ kompilator javac Oracle 1.7 uważa, że w wierszach 5 i 6 może dojść do utraty precyzji. Jeśli odkomentujesz wiersz 3 i zakomentujesz wiersz 4, kompilacja będzie przebiegać prawidłowo. Czy ktoś wyjaśniłby, dlaczego kompilator uważa, że nastąpiła utrata precyzji przypisania do bajtu `b2` lub `b3`? public class BUG { public static void main( String[] args ) { //końcowy bajt b1 = 9; bajt b1 = 9; końcowy bajt b2 = -b1; // dobrze, jeśli linia 3 jest odkomentowana, a linia 4 jest zakomentowana final byte b3 = 0 - b1; // dobrze, jeśli wiersz 3 jest odkomentowany, a wiersz 4 jest zakomentowany } } Jeśli mój przykładowy kod jest poprawny, chciałbym zgłosić to jako błąd, ale nie mogę się dowiedzieć gdzie. Czy ktoś wyjaśniłby, co w tym przypadku mówi komunikat o błędzie kompilatora i dlaczego jest poprawny?


title: Odpowiedzialność za ramy oprogramowania

text: Jeśli zamiast oferować go za darmo, proszę o pieniądze na oprogramowanie (famework php), czy to powoduje, że jestem bardziej odpowiedzialny za problemy spowodowane przez mój produkt?


title: Polecaj zasoby dla liderów zespołów programistycznych

text: Ostatnio zostałem liderem zespołu bazodanowego (95% MS SQL Server, 5% misc- Oracle, Sybase, Access), który zarządza i rozwija dużą liczbę baz danych w środowisku korporacyjnym. Szukam zasobów (list kontrolnych, narzędzi, najlepszych praktyk, procedur, stron internetowych, książek itp.), które pomogą mi wdrożyć podstawy, których brakowało w tej grupie programistów w przeszłości, takich jak przeglądy kodu, szkolenia krzyżowe, dokumentacja , egzekwowanie standardów, dzielenie się wiedzą, mentoring i tak dalej. Większość tego, co znajduję, to zasoby dotyczące ogólnych umiejętności zarządzania, ale chciałbym znaleźć wszystko, co może być specyficzne dla kierowania zespołem programistów. Procesy korporacyjne są „standardowym” SDLC typu kaskadowego, więc zasoby nastawione na Agile nie są tak istotne.


title: Minimalizacja czy czytelność?

text: Jestem autorem wielu wtyczek do systemu zarządzania treścią, który piszę. Uważam, że bardzo ważne jest, aby pliki skryptów (zwłaszcza jeśli są to wtyczki) ładowały się szybko, co prowadzi do pytania, które dzisiaj zadałem? **Co jest ważniejsze dla wtyczek, minimalizacji czy czytelności?** Wyobraźmy sobie, że żyjemy w idealnym świecie, w którym kod jest zawsze doskonały. Czy wtyczka (która jest idealna, autor nie oczekuje od użytkownika końcowego) być zaprojektowana tak, aby zajmowała jak najmniej miejsca, lub aby była czytelna dla użytkownika końcowego. Na przykład piszę fragment kodu, który wypluwa kod HTML i dołącza go do treści. Zamieniłem każde wystąpienie znacznika „div” na „!” a następnie użył `String[replace](/\!/g, 'div')` do zapisania czterech znaków (a więc bajtów?) dla każdej deklaracji elementu div. _NB,`[replace]` jest również zadeklarowaną zmienną, więc po zminimalizowaniu odczyta coś w stylu `Ciąg[r](/\!/g,'div')`_ Czy za bardzo się przejmuję prędkość pobierania lub powinien bardziej dbać o czytelność. (IMO, większość technik minifikacji można łatwo odtworzyć, ale czy to zła praktyka?) * * * **Edytuj** Dzięki za wszystkie odpowiedzi, jesteście wspaniali!


title: Co dokładnie ja/moja firma muszę zrobić, aby „udostępnić/opublikować” zmiany w kodzie źródłowym i spełnić wymagania GPL/LGPL

text: To wydaje się być podstawowym pytaniem, ale nie znalazłem ostatecznego źródła. Muszę zmodyfikować źródło aplikacji LGPL, aby mój pracodawca zatkał lukę w zabezpieczeniach. W dłuższej perspektywie dokonamy aktualizacji do nowszej wersji tej aplikacji, ale na razie jest to najszybsze rozwiązanie. (w szczególności: zmienię fork w wersji z 2005 roku Apache Tomcat'--jboss-web 2.0.1--, aby dodać plik cookie "httpOnly" i "bezpieczny" JSESSIONID). **Pytanie** Co dokładnie muszę zrobić ja/moja firma, aby „udostępnić” lub „opublikować” kod źródłowy? Czy musi być dostępny z własnej strony internetowej firmy lub repozytorium github? A może mogę mieć go na swoim prywatnym koncie github i po prostu mieć do niego link do firmy? Dziękuję


title: Zakoduj optymalny kod Huffmana

text: Podałem wiadomość zakodowaną nieoptymalnym kodem Huffmana. Muszę rozszyfrować wiadomość i zakodować ją ponownie, ale tym razem z optymalnym kodem Huffmana, aby potem znaleźć `średnia_liczba_bitów_na_symbol = liczba_bitów_w_wiadomości / liczba_znaków_w_wiadomości` **Przykład:** **_dane wejściowe:_** 6 A 11 B 10 D 01 D 0001 E 001 F 0000 1011000000010000100010011000110000000100010100100000001000010001100011000110000000100000000000001001100010001000000000000000110111110101001001010110010100001110010110000100000010010000000111010000001100100100001010001000100000000001 **_output:_/** wystąpiła trzecia kolumna E 11 000 to co I 0000 19 BAFDFBEEBEBFEDCEFDFBEEBEBEBFEFFFCEBEDFFFDBAABBBCECCBCCFABCCCBDFEEFDACFEBCEFBBEDFFE liczba_znaków: 81 Teraz muszę znaleźć optymalne kody dla tych liter. Próbowałem takiego drzewa: 19 19 18 12 8 5 B F E C D A \ / \ / \ / 0\ /1 0\ /1 0\ /1 \ / \ / \ / \ \ / \ \ / \ 0\ / 1 \ \ / \ \ / \ \ / 0 \ \/ \ / \ / \ /1 \______/ A dzięki temu otrzymam: A 111 => 3 * 5 = 15 D 110 => 3 * 8 = 24 C 101 => 3 * 12 = 36 E 100 => 3 * 18 = 54 F 01 => 2 * 19 = 38 B 00 => 2 * 19 = 38 num_of_bits = 205 Więc 205 / 81 = 2.530 => co nie jest równe z przykładowym wyjściem... Więc co robię źle?