title: Aplikacja intensywna obliczeniowo: ładowanie vs. odpytywanie bazy danych

text: Moja firma posiada pakiet dojrzałych (korzenie sięgają ponad 15 lat wstecz), intensywnie obliczeniowo aplikacji (symulacji), których używamy w pracach konsultingowych. Pracuję po stronie symulacji/konsultingu, a nie po stronie tworzenia oprogramowania. Niedawno dowiedziałem się o szczególnej funkcji architektury, która mnie dotyczy: nasz duży (200-500 MB, czasem więcej) zestaw danych wejściowych jest najpierw całkowicie ładowany do pamięci z bazy danych. Następnie silnik symulacji uzyskuje dostęp do danych wejściowych z pamięci na bieżąco. Uderzyło mnie to jako „przedwczesna optymalizacja” i/lub staromodny pomysł, ponieważ uważam, że istnieją serwery baz danych, które mogą być dość szybkie. Architektura powoduje kolejny problem, ponieważ nasza baza danych symulacji może być tylko tak duża (trochę ponad GB), zanim sim w ogóle nie będzie działać. Główny architekt jest naukowcem, a nie twórcą oprogramowania, i jest w tym nieco twardogłowy, więc szukam komentarzy na ten temat od społeczności. Czy nasza architektura nam szkodzi? Czy są jakieś dokumenty/prace/testy na ten temat — kompromisy między odczytywaniem bazy danych na bieżąco a kopią bazy danych w pamięci? Wszelkie uwagi lub spostrzeżenia będą mile widziane. Chciałbym się nauczyć, zanim zajmę się tą sprawą w mojej firmie.


title: W podsumowaniu, co wszystko składa się na język programowania

text: Co byś zaklasyfikował w swoim CV jako język programowania? Na przykład, w sekcji Języki programowania (lub w podobnie zatytułowanej sekcji twojego CV), czy wymieniasz C#, Java, C i zostawiasz to na tym, czy dodajesz XML (ponieważ jest to eXtensible Markup Language) i XSLT i jQuery i to wszystko? Jeśli nie zamierzasz dodawać jQuery pod językami, gdzie dokładnie byś to umieścił? Jednym z rozwiązań tego dylematu byłyby technologie, z których korzystałeś w ramach projektu, ale w ten sposób zmuszasz rekrutera do przejścia przez projekty, które wykonałeś, zamiast podkreślać technologie i języki, które znasz. . Jakie są Twoje myśli?


title: Jakie są wady pozostawiania tagów automatyzacji w kodzie produkcyjnym?

text: Konfigurowałem tagi debugowania do automatycznego testowania aplikacji internetowych opartych na GWT. Obejmuje to włączenie niestandardowych tagów/atrybutów identyfikatora debugowania dla elementów w źródle aplikacji. To nietrywialne zadanie, szczególnie w przypadku większych, bardziej złożonych aplikacji internetowych. Ostatnio toczy się dyskusja na temat tego, czy włączenie takich identyfikatorów debugowania jest dobrym pomysłem na całym świecie. Obecnie identyfikatory debugowania są włączane tylko na serwerach deweloperskich i testowych, a nie w środowisku produkcyjnym. Pojawiły się uwagi, że włączenie identyfikatorów debugowania powoduje zmniejszenie wydajności, a identyfikatory debugowania w środowisku produkcyjnym mogą prowadzić do problemów z bezpieczeństwem. Jakie są z tego korzyści? Czy istnieje jakieś poważne ryzyko włączenia tagów debugowania w kodzie produkcyjnym?


title: Co się dzieje z cyklem wsparcia Delphi?

text: ![Wsparcie Delphi](http://i.stack.imgur.com/OZ3iM.png) To jest wykres, który zebrałem razem, pokazujący długość _aktywnego_ (co oznacza bieżące poprawki błędów i dodatki Service Pack) oferowanego dla każdej wersji Delphi . Opiera się na opublikowanych danych wsparcia uzyskanych ze strony internetowej Embarcadero. Delphi 2010 i XE są wykluczone, ponieważ ich aktywne wsparcie wciąż trwa, więc nie można ich dokładnie porównać. Jak na ironię, Delphi 7, który był uważany przez wielu za najbardziej stabilny do czasu wydania Delphi 2009, miał cykl wsparcia trzykrotnie dłuższy niż Delphi 2009. Oczywiście, ten wykres obejmuje trzy różne firmy z trzema różnymi planami. Moje pytanie brzmi, dlaczego cykl wsparcia Delphi 2009 jest tak krótki? Rozumiem, że Embarcadero ma firmę do prowadzenia i nie zarabia na pakietach serwisowych, ale tak naprawdę, 12 miesięcy? Spodziewałbym się, że tytuł shareware za 10 dolarów z niskimi marżami zysku nie jest światowej klasy narzędziem programistycznym za 900-3500 dolarów.


title: Dlaczego C# nie zyskał popularności w społeczności opensource?

text: Nie oczekuję, że C# będzie na równi z, powiedzmy, Javą lub Pythonem w społeczności open source, ale wciąż zaskakuje mnie, jak daleko jest w tyle. „Wielojęzyczne” repozytoria open source, takie jak kod google lub github, nie mają prawie żadnych projektów C# w porównaniu do innych języków, o których wspomniałem. Chciałbym zobaczyć, jak C# i .Net otrząsną się z tego lekkiego korporacyjnego charakteru i przeniosą się bardziej na arenę open source, ale po prostu nie widzę, aby tak się działo. Chciałbym usłyszeć opinię ludzi na temat tego, dlaczego tak się dzieje?


title: Jaka jest strategia Microsoftu w zakresie rozwoju Windows CE?

text: Wiele wyspecjalizowanych urządzeń mobilnych korzysta z systemu Windows CE lub Windows Mobile. Nie mówię tutaj o smartfonach — wiem, że obecnie preferowaną technologią Microsoftu jest Windows Phone 7. Mówię o czytnikach kodów kreskowych, urządzeniach osadzonych, przemysłowych urządzeniach PDA ze specjalistycznym sprzętem, itp... rodzaju urządzeń (Przykład 1, Przykład 2), gdzie rozwój Windows Phone Silverlight nie jest opcją (brak P/Invoke w celu uzyskania dostępu do sprzętu itp.). Ponieważ bezpośrednia obsługa Compact Framework została porzucona w Visual Studio 2010, jedyną opcją rozwoju dla tych urządzeń jest obecnie użycie przestarzałych narzędzi programistycznych (VS 2008), które już zaczynają powodować problemy na nowoczesnych maszynach (np. nie ma obsługiwanego sposobu na tworzenie stos sieciowy emulatora urządzeń z systemem Windows Mobile działa w systemie Windows 7). Dlatego moje pytanie brzmi: jakie są plany Microsoftu dotyczące tych urządzeń mobilnych? Czy umożliwią natywne aplikacje na Windows Phone, takie jak na przykład sterowniki czytników kodów kreskowych, do których można uzyskać dostęp w aplikacjach Silverlight? Czy ponownie dodadzą „natywną” obsługę Compact Framework do programu Visual Studio i po prostu nie znaleźli jeszcze na to czasu? A może opuszczą ten niszowy rynek?


title: Pytanie do rozmowy kwalifikacyjnej z programistą — uczciwe lub nieuczciwe

text: Właśnie rozmawiałem telefonicznie z firmą na stanowisko programisty i zadano mi następujące pytania. Dodam, że dana firma nie jest sprzedawcą baz danych. 1. Jak działa optymalizator zapytań? 2. Jeśli baza danych działała źle, w jaki sposób można wykorzystać dzienniki wydajności, aby znaleźć problem. Zapytałem, czy zadają takie pytania wszystkim kandydatom na programistów (absolwentom lub doświadczonym) podczas pierwszej rozmowy telefonicznej. Odpowiedzieli, że lubią sprawdzać wiedzę kandydatów na temat tworzenia baz danych. Chcę napisać do firmy, że nie ma sensu zadawać tych pytań na rozmowie kwalifikacyjnej z programistą i poprosić o dokończenie mojej rozmowy kwalifikacyjnej. Chciałbym sprawdzić zasadność następujących założeń **a)** Te pytania nie mogą być sprawiedliwie zaklasyfikowane jako pytania dotyczące tworzenia baz danych. **b)** Myślę, że pytania są odpowiednie do rozmowy kwalifikacyjnej DBA, ale całkowicie nieuzasadnione w przypadku rozmowy kwalifikacyjnej z programistą (z doświadczeniem lub bez). **c)** Pierwsze pytanie dotyczy tylko dostawcy bazy danych. **d)** Drugie pytanie nie jest sprawiedliwe, ponieważ twórcy oprogramowania zazwyczaj nie zajmują się dziennikami wydajności bazy danych, ponieważ jest to zadanie administratora baz danych. Być może niektórzy z Was będą na tyle uprzejmi, aby skomentować moje założenia lub mieć inne sugestie, zanim napiszę do firmy.


title: Czy ktoś może pomóc rozwiązać ten złożony problem algorytmiczny?

text: Dostałem to pytanie w wywiadzie i nie byłem w stanie go rozwiązać. * Masz obwodnicę, z liczbą N stacji benzynowych. * Wiesz, ile gazu ma każda stacja. * Znasz ilość gazu, której potrzebujesz, aby PRZEJŚĆ z jednej stacji na drugą. * Twój samochód zaczyna się od 0. * Możesz jechać tylko zgodnie z ruchem wskazówek zegara. Pytanie brzmi: Stwórz algorytm, aby wiedzieć, z której stacji benzynowej musisz rozpocząć jazdę, aby zatoczyć pełne koło. Jako ćwiczenie przetłumaczyłbym algorytm na C#.


title: Jak mogę wziąć listę tokenów (o zmiennej liczbie) i wiedzieć, co oznacza każdy token?

text: Muszę przeczytać dokument tekstowy z danymi sformatowanymi w następujący sposób: (kilka przykładów) 07 M W F 1400 1450 C 2004 M W F 0900 1030 EN 2036 06 M T R 1300 1350 EN 1003 17 T R 0900 1015 EN 1052 Mam problem, po podzieleniu tych ciągów za pomocą `.split(" ", -1)" otrzymuję dla wielu z nich inną liczbę tokenów, a pozycja różnicy różni się w pierwszych dwóch "sekcjach". Pierwsza część ciągu ma reprezentować kod planowania. Jest opcjonalny, o czym świadczy brak go w drugiej linii. Drugi obszar pokazuje, których dni tygodnia dotyczy ten harmonogram. Może to być od jednego do pięciu dni, ale w tych przykładach są tylko 2 lub 3. Pozostałe są prawie statyczne: czas rozpoczęcia, czas zakończenia, kod budynku i numer pokoju. To, co muszę zrobić, to skonstruować wiele obiektów dla tego harmonogramu na podstawie tych informacji (jeden obiekt na każdy dzień) i nie jestem pewien, jak postępować. Jak mogę stwierdzić, kiedy iterując po tablicy tokenów, co reprezentuje każdy token? Myślałem o użyciu instrukcji `switch`, ale działałoby to tylko na te dni, ponieważ jest ich 5. Poniżej znajduje się kod, który (wstępnie) planuję użyć dla tego obiektu. public class TimeSlot { prywatny dzień dzień; prywatny int czas startu; // # minut po północy private int endTime; prywatny pokój pokój; prywatny slot String; /** * Domyślny konstruktor. Utwórz instancję TimeSlot. * @param dzień dzień tygodnia * @param godzina rozpoczęcia wykładu w minutach po północy * @param koniec godzina zakończenia wykładu w minutach po północy * @param room room zajęcia odbywają się w */ public TimeSlot(String slot, Dzień dzień, int początek, int koniec, Pokój pokój) { this.slot = slot; ten.dzień = dzień; this.startTime = początek; this.endTime = koniec; to.pokój = pokój; } } enum Dzień { PONIEDZIAŁEK, WTOREK, ŚRODA, CZWARTEK, PIĄTEK, SOBOTA, NIEDZIELA; } public class Room { private String buildingCode; prywatny numer pokoju String; pokój publiczny (budynek String, pokój String) { this.buildingCode = budynek; this.roomNumber = pokój; } public String kod budynku() { return kod budynku; } public String numer_pokoju() { return numer_pokoju; } }


title: Jakie są praktyczne zastosowania modyfikatora „new” w C# w odniesieniu do ukrywania?

text: Wraz ze współpracownikiem przyglądaliśmy się zachowaniu słowa kluczowego `new` w C# w odniesieniu do koncepcji ukrywania. Z dokumentacji: > Użyj nowego modyfikatora, aby jawnie ukryć element członkowski odziedziczony z klasy > bazowej. Aby ukryć dziedziczony element członkowski, zadeklaruj go w klasie pochodnej przy użyciu > tej samej nazwy i zmodyfikuj go przy użyciu modyfikatora new. Przeczytaliśmy dokumentację i rozumiemy, co w zasadzie robi i jak to robi. To, czego tak naprawdę nie mogliśmy opanować, to dlaczego musisz to zrobić w pierwszej kolejności. Modyfikator istnieje od 2003 roku i oboje pracujemy z .Net dłużej i nigdy się nie pojawił. Kiedy takie zachowanie byłoby konieczne w sensie praktycznym (np. w zastosowaniu do przypadku biznesowego)? Czy jest to funkcja, która przeżyła swoją przydatność, czy jest po prostu dość rzadka w tym, co robimy (w szczególności robimy formularze internetowe i aplikacje MVC oraz niektóre WinForms i WPF)? Wypróbowując to słowo kluczowe i bawiąc się nim, odkryliśmy pewne zachowania, na które pozwala, a które wydają się nieco niebezpieczne, jeśli zostaną niewłaściwie użyte. Brzmi to trochę swobodnie, ale szukamy konkretnego przypadku użycia, który można zastosować w aplikacji biznesowej, która uzna to konkretne narzędzie za przydatne.


title: iOS i serwer: strategia OAuth

text: Próbuję pracować nad obsługą uwierzytelniania, gdy mam klientów iOS uzyskujących dostęp do serwera Node.js i chcę korzystać z usług takich jak Google, Facebook itp., aby zapewnić podstawowe uwierzytelnianie dla mojej aplikacji. Mój obecny pomysł na typowy przepływ jest następujący: 1. Użytkownik klika przycisk Facebook/Google, który uruchamia okna dialogowe OAuth(2) i uwierzytelnia użytkownika na urządzeniu. W tym momencie urządzenie posiada token dostępu użytkownika. Ten token jest zapisywany, aby można go było pobrać następnym razem, gdy użytkownik użyje aplikacji. 2. Token dostępu jest przesyłany do mojego serwera Node.js, który go przechowuje i oznacza go jako niezweryfikowany. 3. Serwer weryfikuje token, dzwoniąc do Facebooka/google w celu uzyskania adresu e-mail użytkownika. Jeśli to zadziała, token jest oznaczony jako zweryfikowany, a serwer wie, że ma zweryfikowanego użytkownika. Jeśli Facebook/google nie zdoła uwierzytelnić tokena, serwer poinformuje klienta iOS o ponownym uwierzytelnieniu i przedstawieniu nowego tokena. 4. Klient iOS może teraz uzyskać dostęp do wywołań API na moim serwerze Node.js, przekazując za każdym razem token. Dopóki token jest zgodny z przechowywanym i zweryfikowanym tokenem, serwer akceptuje połączenie. Oczywiście żetony mają limity czasowe. Podejrzewam, że jest to możliwe, ale bardzo mało prawdopodobne, aby ktoś mógł powąchać token dostępu i spróbować go użyć w okresie jego życia, ale poza tym mam nadzieję, że jest to dość bezpieczna metoda weryfikacji użytkowników na klientach iOS bez konieczności przerzucania mojego własne bezpieczeństwo. Wszelkie opinie i porady mile widziane.


title: Narzędzie do zarządzania projektami dla programistów i administratorów: wspólne czy oddzielne?

text: Czy zespół administratorów systemu, którzy biorą udział w projekcie rozwoju oprogramowania, powinien udostępniać programistom narzędzie do zarządzania projektami, czy korzystać z własnego oddzielnego? Używamy Traca i widzę korzyści w dzieleniu się, ponieważ zadania między zespołami mogą być utrzymywane przez jeden system, w którym mogą występować błędy krzyżowe lub błędne (np. pozorny błąd, który okazuje się być problemem z konfiguracją serwera lub cyklem rozwojowym który wymaga skonfigurowania serwera przed uruchomieniem) Jednak udostępnianie może być trudne, ponieważ wiele zadań administracyjnych systemu nie pokrywa się z jednym kamieniem milowym rozwoju, jeśli w ogóle. Czy więc zespół administrujący systemem powinien korzystać z osobnego narzędzia PM czy udostępniać to samo programistom? Jeśli powinni się dzielić, to jak?


title: Projektowanie modelu: które warstwy powinny mieć dostęp do zasobów?

text: Wdrażam projekt modelu, w którym tabele DB są „zasobami”, a model może korzystać z wielu „zasobów”. Kiedy zwracam wiersz z tabeli, jest on reprezentowany przez „element”. (Pochodzi z książki Keitha Pope'a, ale widziałem ją też w kilku innych miejscach). Więc moje pytanie brzmi, kto powinien mieć dostęp do zasobów? W szczególności: * Od czasu do czasu mam pokusę, aby umożliwić kontrolerom bezpośredni dostęp do zasobu, a nie przez model, w przypadku bardzo prostych zadań, takich jak znajdowanie rekordu. Czy to jest ok? * Dostęp do wielu moich zasobów ma więcej niż jeden model. Na przykład dostęp do tabeli „country” uzyskuje się za pomocą modelu organizacji i modelu użytkownika. Przypuszczalnie to jest w porządku? Wszelkie wskazówki docenione, jak zawsze!


title: Czy istnieje kanoniczna książka o programowaniu ABAP?

text: Jestem programistą ABAP ze znajomością podstaw programowania ABAP i pojęć niezbędnych dla początkującego. Chcę mieć głębsze zrozumienie tematu, w tym małe wskazówki i triki, które będą pomocne w razie potrzeby; Chcę mieć usystematyzowaną strukturę pojęć, którą mogę łatwo wyszukiwać i uczyć się. Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje na temat programowania ABAP? Co w tej książce czyni ją wyjątkową?


title: Zdobycie umiejętności na stanowisko programisty na poziomie podstawowym zajmuje zbyt dużo czasu

text: **Nie mam umiejętności na stanowisko programisty .Net na poziomie podstawowym. Próbuję nauczyć się tego, czego potrzebuję, ale za dużo do nauczenia i za mało czasu. Co mogę zrobić?** Około dwa miesiące temu poszedłem na rozmowę kwalifikacyjną na stanowisko programisty/konsultanta C# .Net na poziomie podstawowym w Nowym Jorku. Kiedy otrzymałem od nich odpowiedź, powiedzieli mi, że luka w wiedzy między tym, co wiedziałem, a tym, czego potrzebowali, była zbyt duża i mogłabym lepiej pasować, gdybym miała 6 miesięcy doświadczenia. To był pierwszy wywiad, jaki odbyłem po ukończeniu college'u. przed rozmową przeczytałem książkę o wizualnym C#. Okazuje się, że nie była to bardzo dobra książka i brakowało mi wielu kluczowych obszarów wiedzy, takich jak * ADO.net * SQL (nauczyłem się trochę LINQ) * Trochę o tym, jak obsługiwana jest pamięć * Programowanie wielowątkowe, itd. Ponieważ książka nie była zbyt dobra, rzeczy, które znałem, nie znałem zbyt dobrze. Poczułem się zmiażdżony. Ubiegałem się o pracę, aby zdobyć doświadczenie, ale kiedy rekruterzy słyszą, że nie mam doświadczenia, tracą zainteresowanie. Pomyślałem, że mogę przynajmniej popracować nad swoją wiedzą. Od tego czasu przeczytałem „Podstawy SQL”, aby omówić ten bit SQL i znalazłem całkiem niesamowitą książkę, która jest wystarczająco dobra, aby wyjaśnić to, co jest niejasne w moim umyśle i obejmuje prawie wszystkie dodatkowe tematy. Książka to "C# 4.0: The Complete Reference" Herberta Schildta. Uczę się nawet dużo na tematy, które znałem. Od miesiąca pracuję nad tą bestią z książki. Jednak zdobycie potrzebnej mi wiedzy trwa zbyt długo. Nie mogę dłużej odmawiać pracy na pełen etat. Nie jestem głupi i ciągle się uczę, czytam książkę, zadaję pytania dotyczące przepełnienia stosu, odwoływanie się do specyfikacji C# itp. Osiągnąłem duże postępy, ale jest po prostu zbyt wiele do omówienia. Jestem w rozdziale 12, który jest około 3 w książce. Aby zorientować się, co wiem, a czego nie wiem, spis treści znajduje się na amazon: http://www.amazon.com/C-4-0-The-Complete-Reference/dp/007174116X **Jak czy ktoś może wiedzieć wystarczająco dużo, aby funkcjonować jako programista w prawdziwym świecie?** **Czy mogę spróbować pracy w środowisku akademickim? Czy będę miał czas na dokończenie nauki reszty języka C#, czy po prostu nie można mnie zatrudnić?**


title: Http handler dla klasycznej aplikacji ASP do wprowadzania warstwy między klientem a serwerem

text: Mam ogromną klasyczną aplikację ASP, w której tysiące użytkowników zarządza danymi swojej firmy/biznesu. Obecnie nie jest to tryb wielu użytkowników, dzięki czemu użytkownicy aplikacji mogą tworzyć użytkowników i upoważniać ich do dostępu do określonych obszarów w systemie. Zastanawiam się nad napisaniem handlera, który będzie pośrednikiem między klientem a serwerem i będzie przechodził przez każde żądanie i dowiadywał się, kim jest użytkownik i czy jest upoważniony do dostępu do danych, do których próbuje. Na razie zignoruj część dotyczącą tego, jak mam sprawdzić autoryzację i takie tam. Chcę tylko wiedzieć, czy mogę zaimplementować program obsługi ASP.net i używać go jako pośrednika dla żądań przychodzących na stronę asp? Chcę tylko przeczytać adres URL i zobaczyć, do jakiej strony użytkownik próbuje uzyskać dostęp i jakie są parametry, które przekazuje w adresie URL opublikowanych danych. czy to możliwe? Czytałem, że handler Asp.net nie może być używany z witryną asp i muszę do tego użyć filtra lub rozszerzeń isapi, które można rozwijać tylko w c/c++. Czy ktoś może przejrzeć to trochę i poprowadzić mnie, czy jestem we właściwym kierunku, czy nie?


title: Budowanie tabeli (DataGridView) przy jednoczesnym zachowaniu oddzielenia od modelu

text: Postaram się zachować prostotę. * Mała aplikacja C#, oparta na oknie dialogowym, jedna ma DataGridView. * Wcześniej uzyskałem funkcję UpdateTable w formularzu, który akceptuje DataSet i przekazuje go do DataGridView.DataSource. DataGridView ma już zdefiniowane kolumny. * Nigdy nie korzystałem z DataGridView iw ogóle, więc robiłem z nim trochę testów, przekazując mu DataSet, który sam skonstruowałem. Użycie tej metody daje mi prawidłową liczbę wierszy, jednak wszystkie wpisy były puste. * Gdy ustawię DataGridViewTextBoxColumn.DataPropertyName na takie same jak nazwy kolumn w DataSet, wpisy są wyświetlane. * Jeśli usunę gotowe kolumny z DataGridView, otrzymuję wszystko w DataSet, ale kolumny są (oczywiście) niesformatowane pod względem rozmiaru, a nazwy kolumn są nazwami kolumn w DataSet, a nie łatwiejsze do odczytania / sformatowane nazwy. Jaki jest dobry sposób radzenia sobie z tym w implementacji MVP, w której widok nie musi wiedzieć ani martwić się o to, jakie kolumny będą w obsługiwanym zestawie danych, ale nazwy kolumn nadal mogą być poprawnie sformatowane pod względem rozmiaru i nazwy ? Czy może prezenter powinien przekazać wektor ciągów DataPropertyNames, nazwy kolumn i rozmiary kolumn, aby widok nie był tego rozpoznawany?


title: Jak przekonać kierownictwo, że potrafię kierować zespołem?

text: Jestem programistą pracującym w małych organizacjach od dwóch lat. Zrealizowałem kilka udanych projektów, a organizacja wierzy w moje umiejętności techniczne. Teraz dostaję nominację na stanowisko lidera zespołu, więc jak mogę przekonać ich, że mogę prowadzić zespół? Jakie umiejętności muszę wykazać poza technicznymi? Każda pomoc będzie mile widziana.


title: Robię 90% konserwacji i 10% rozwoju, czy to normalne?

text: Niedawno rozpocząłem karierę jako web developer w średniej wielkości firmie. Jak tylko zacząłem, dostałem zadanie rozbudowy istniejącej aplikacji (źle zakodowana, rozwijana przez wielu programistów na przestrzeni lat, obsługuje te same zadania na różne sposoby, zerowa struktura). Po tym, jak pomyślnie rozszerzyłem tę aplikację o żądaną funkcjonalność, dali mi zadanie pełnego utrzymania aplikacji. To oczywiście nie był problem, a przynajmniej tak mi się wydawało. Ale potem usłyszałem, że nie wolno mi ulepszać istniejącego kodu i skupiać się tylko na poprawkach błędów, gdy błąd zostanie zgłoszony. Od tego czasu miałem jeszcze trzy projekty, takie jak powyżej, które teraz również muszę prowadzić. Dostałem cztery projekty, w których pozwolono mi stworzyć aplikację od zera i też muszę je utrzymywać. W tej chwili zaczynam trochę wariować od codziennych maili użytkowników (menedżerów odczytu) dla każdej aplikacji, którą muszę utrzymywać. Oczekują, że będę obsługiwał te maile bezpośrednio podczas pracy nad dwoma innymi nowymi projektami (a po nich jest już pięć kolejnych projektów). Smutne jest to, że nie otrzymałem jeszcze raportu o błędzie dotyczącym wszystkiego, co sam zakodowałem. W tym celu otrzymuję tylko sporadyczne prośby o zmianę o 180 stopni. W każdym razie, czy to normalne? Moim zdaniem wykonuję pracę ekwiwalentną całego zespołu programistów. Czy byłem idiotą, kiedy początkowo spodziewałem się, że będzie inaczej? Myślę, że ten post przerodził się w wielką tyradę, ale proszę mi powiedzieć, że to nie jest to samo dla każdego programisty. PS Moja pensja jest prawie równa, jeśli nie niższa niż kasjera w supermarkecie.


title: Czy gałęzie w testach jednostkowych są złą praktyką?

text: Powiedzmy, że chcę zapewnić, że określone menu opcji jest wyświetlane w interfejsie użytkownika projektu. Menu jest na ekranie X i muszę najpierw wybrać dane w Y, aby dostać się do X. Teraz nie ma znaczenia, jakie dane wybiorę w Y, zawsze będą prowadzić do X. Ale czasami, w zależności od danych , dostanę ekran Z, który mogę po prostu przeskoczyć. Teraz oczywiście, jeśli napiszę test w sposób deterministyczny, test może się nie powieść, jeśli wybrane przeze mnie dane prowadzą do ekranu Z. Dane, o których mówię, to dane testowe, ustawione przed każdym testem w tym samym stanie. Więc teoretycznie mógłbym wybrać tylko jeden wpis danych, o którym wiem, że nie przejdzie do ekranu Z. Ale mógłbym też po prostu dołączyć sprawdzenie, czy jestem na ekranie Z po wybraniu danych i pominąć Z. Teraz nawet się zmienia do danych testowych (choć rzadko się to zdarza) nie złamałoby mojego testu. Jakoś nie lubię tego podejścia, ale naprawdę nie potrafię wyjaśnić dlaczego. Dodanie metody sprawdzającej Z dodałoby (prawdopodobnie) „bezużyteczną” metodę do mojego frameworka testowego. Więc moje pytanie brzmi, czy gałęzie obsługujące zachowanie warunkowe, które nie jest testowane w tym konkretnym teście, są w porządku? Czy są jakieś problemy z tym podejściem? Czy dobrze jest to robić?


title: Powielanie danych a enkapsulacja. Jakiego projektu użyć?

text: Problem, z którym się borykam, polega na tym, jak połączyć hermetyzację i optymalne wykorzystanie pamięci. Nie mogę pokazać Ci mojego kodu i dlatego wytłumaczę go na obszernym (mam nadzieję) przykładzie. Powiedzmy, że potrzebujemy bazy danych mężczyzn. Chcemy wiedzieć tylko 2 rzeczy o tych ludziach: 1. Wiek mężczyzny (w godzinach od urodzenia). 2. Nazwa miejscowości, w której mieszka. Wygodnym i naturalnym sposobem zarządzania tymi danymi jest utworzenie obiektu odpowiadającego człowiekowi i zapisanie go w tablicy: class OMan1 { public: OMan( const int &age, const astring &t ): fAge(wiek), fTown(t) {} const int& wiek() const: { return fAge; } const astring& Town() const: { return fTown; } astring FullId() const: { return fTown+fAge; } prywatne: int fAge; sznurowanie miasta; } OMan mans[N]; Tutaj nasze OMany są samodzielnym obiektem i wszystko się ładnie wypełnia. Poza tym, że klonujemy nazwy miast tysiące razy i marnujemy w ten sposób pamięć i czas wykonania. Ulepszeniem, które możemy zrobić, jest utworzenie niezależnej tablicy nazw miast i dla każdego OMana przechowywanie tylko wieku, identyfikatora miasta i wskaźnika do tablicy miast: class OMan2 { // taka sama funkcjonalność jak dla OMan1 int fAge; int fId Miasta; zaciąganie* fTowns; } obiekt jest nadal samowystarczalny, `sizeof(int) + sizeof(void*)` jest znacznie mniejszy niż `sizeof(string)`, wygrywamy dużo. Ale nadal jest to współczynnik 2-3 większy niż `sizeof(fAge)` i powtarzamy `fTowns` miliardy razy. Optymalizacja pamięci jest dla mnie kluczowa, dlatego trzymam tylko `fAge` i `fTownId` i przenoszę takie funkcjonalności jak `Town()` i `FullId()` z klasy `OMan` do jakiejś klasy jak `OManDataBase `: class OMan3 { public: OMan( const int &wiek, const int &tid ): fAge(wiek), fTownId(tid) {} const int&wiek() const: { return fAge; } const int& TownId() const: { return fId; } // const astring& Town() const: { return fTown; } // astring FullId() const: { return fTown+fAge; } prywatne: int fAge; int fId Miasta; } class OManDataBase { // konstruktor, destruktor const int& wiek( const int& i) const: { return fMans[i].TownId()]; } const astring& Miasto( const int& i) const: { return fTown[fMans[i].TownId()]; } const asstring& FullId( const int& i) const: { return Miasto(i)+wiek(i); } prywatne: wektor<OMan3> fMans; wektor<string> fTowns; } A „OMan3” nie jest teraz samodzielnym obiektem. Na przykład nie zna swojego pełnego imienia i nazwiska. Oznacza to, że jeśli muszę przetworzyć dane z jedną osobą, muszę użyć całej instancji `OManDataBase`: OBillType47 NewBillType47( const OManDataBase &db, int i ) { ... } zamiast OBillType47 NewBillType47( const OMan &m ) { . .. } tutaj zepsuto enkapsulację i wyraźnie zmniejszono czytelność kodu. (Wstawiłem `Type47` aby podkreślić, że mogę mieć wiele funkcji, które działają z `Oman-S` i nie mogę ich wszystkich zawrzeć w klasie `OManDataBase`). Zastanawiam się, czy istnieje jakiś inny sposób rozwiązania problemu powielania danych, zachowując jak najbardziej samodzielne obiekty**?


title: Dlaczego tak wiele plików Pythona jest naprawdę dużych (5k+ linii)?

text: Czy jest jakiś konkretny powód, dla którego pliki Pythona są często tak duże? Pliki Pythona mogą zawierać kilka klas w jednym pliku, a niektóre pliki mają długość ponad 10 tysięcy wierszy. Wydaje się to być sprzeczne z ideą modułowości i enkapsulacji. Poza tym nie wydaje się to „Pythonic”, biorąc pod uwagę IMO, że może być trudniej je czytać i śledzić.


title: Pozostać przy niestandardowym lub przenieść na CMS?

text: Mam witrynę, która z czasem została zbudowana od podstaw przez kilku różnych programistów. Pierwszy programista, który zbudował początkowy system i bazę danych, nie był zbyt obeznany z technologią. Inni programiści, którzy pracowali później, również robili wszystko po swojemu, idąc na skróty, łatając rzeczy zamiast zajmować się problemami z głównymi przyczynami, w wyniku czego dostałem stronę internetową, która jest błędna i nie jest możliwa w utrzymaniu. Strona jest przeznaczona dla dystrybutorów hurtowych, którzy przychodzą kupować i sprzedawać produkty. Rejestrują konto i korzystają z funkcji premium. Pod maską dzieje się wiele różnych rzeczy, na przykład, aby powstrzymać oszustów przed ciągłym rejestrowaniem nowych kont, automatycznie blokujemy ich konto, jeśli którakolwiek z poprzednich informacji, na które się zarejestrowali, jest dopasowana do ich nowych danych rejestracyjnych. Mamy też robota dzwoniącego i weryfikującego jego numer telefonu. Opracowaliśmy również system, w którym każdy może wysłać wiadomość e-mail na nasz wyznaczony adres e-mail, a treść wiadomości e-mail i treść tematu są publikowane jako reklama kupna i sprzedaży. Chcę odbudować witrynę. Pomyślałem, że aby zapobiec przyszłym problemom związanym z robieniem rzeczy po swojemu przez programistów, dobrze jest przenieść całą witrynę do systemu CMS takiego jak Drupal czy Wordpress i przebudować inne funkcjonalności w postaci wtyczek. Podejrzewam, że w ten sposób rdzeń, framework witryny pozostanie nietknięty przez programistów, a za każdym razem, gdy pojawią się podstawowe aktualizacje CMS, moja witryna pozostanie aktualna. co myślisz? Czy to dobry pomysł? A może powinienem zachować niestandardową stronę, ale zatrudnić doświadczonego programistę, który mógłby spróbować naprawić wszystkie problemy, zoptymalizować PHP i bazę danych. Chciałbym również wiedzieć, czy migracja mojej witryny i bazy danych będzie kosztowna?


title: Najlepszy sposób na wskazanie większej liczby dostępnych wyników

text: Mamy usługę zwracania wiadomości. Chcemy ograniczyć zwracaną liczbę, umożliwiając dzwoniącemu określenie maksymalnej liczby zwracanej lub użyć wewnętrznego sztywnego limitu. Pomyśleliśmy również, że miło byłoby uwzględnić w odpowiedzi, czy dostępnych jest więcej wiadomości. „Najlepszy” sposób postępowania nie jest jasny. Oto kilka pomysłów do tej pory: 1. Ustaw wskaźnik „więcej wiadomości” tylko wtedy, gdy użytkownik nie określił maksymalnego limitu, a wewnętrzny maksymalny limit został osiągnięty. 2. To samo co nr 1, z wyjątkiem tego, że wskaźnik „więcej wiadomości” jest ustawiany niezależnie od tego, czy został osiągnięty wewnętrzny twardy limit, czy osiągnięty został limit określony przez użytkownika. 3. To samo co #1 (lub #2) z tą różnicą, że wewnętrznie czytamy rekordy limit + 1, ale zwracamy tylko rekordy limitu, więc wiemy, że "na pewno" jest co najmniej jedna dodatkowa wiadomość zamiast "być może" są dodatkowe wiadomości . 4. Pozbądź się flagi „więcej wiadomości”, ponieważ jest myląca i niepotrzebna. Zamiast tego zmuszaj użytkownika do wywoływania interfejsu API, dopóki nie zwróci żadnych komunikatów. 5. Zmień wskaźnik „więcej wiadomości” na coś bardziej zbliżonego do wskaźnika EOF, ustawiany tylko wtedy, gdy wiadomo, że ostatnia wiadomość została pobrana i zwrócona. Jak myślisz, co jest najlepszym rozwiązaniem? (Nie musi to być jedna z powyższych opcji.) Szukałem i nie mogłem znaleźć podobnego pytania, które zostało już zadane. Mam nadzieję, że nie jest to „zbyt subiektywne”.


title: Jak radzić sobie z interakcjami między wieloma obiektami

text: W wolnym czasie pracuję nad grą. Prawie skończyłem definiowanie prymitywów i do dzisiaj wszystko było całkiem dobrze podzielone i zahermetyzowane, ale teraz nadszedł czas na zaimplementowanie wyszukiwania ścieżek (i innych sposobów interakcji obiektów ze sobą). Tutaj odnajdywanie trasy wymaga co najmniej znajomości mapy, wiedzy o tym, gdzie znajdują się jednostki na mapie i jakie rodzaje terenu są możliwe do pokonania przez jednostkę, której ścieżka jest odnajdywana. Są trzy sposoby, o których myślałem, aby to zaimplementować * Zaimplementuj to w jakiejś klasie wysokiego poziomu, która już wie o wszystkich tych rzeczach (np. obiekt stanu gry) * Zaimplementuj to w określonej metodzie w jednej z "zaangażowanych" klas ( jak jednostka lub mapa) i przekazać we wszystkich odpowiednich stanach * Zaimplementuj to w jakiejś funkcji, która jest całkowicie odrębna (ponieważ żaden stan nie musi być zachowany) i ponownie przekaż wszystkie istotne dane Chcę uzyskać twoją opinię na temat tego, który z tych marek sens (lub jeśli są inne, o których nie pomyślałem). Najbardziej podoba mi się ten pierwszy, ponieważ łączy tylko obiekty na wysokim poziomie i nie wymaga wystawiania obiektów na stan, o których (inaczej) nie muszą wiedzieć. Nie lubię numeru 2, ponieważ nie robi tych rzeczy, a numer 3 w tym momencie jestem neutralny; niekoniecznie wydaje się lepszy lub gorszy niż numer 1. Jeśli numer 2 jest w rzeczywistości zwycięzcą, mam obawy co do tego, jak bardzo złożoność zostanie przeniesiona do tej klasy gry na wysokim poziomie.


title: Złożoność cykliczna przy wielokrotnym wywoływaniu tej samej metody

text: Dzięki pytaniu na Code Review wdałem się w mały spór (co w zasadzie jest okazją do nauczenia się czegoś) na temat tego, czym dokładnie jest Złożoność Cyklomatyczna dla poniższego kodu. public static void main(String[] args) { try { thro(); tro(); tro(); tro(); tro(); tro(); tro(); } catch (NullPointerException e) { } } prywatny statyczny Random random = new Random(); public static void thro() throws NullPointerException { if (random.nextBoolean()) throw new NullPointerException(); System.out.println("Tym razem bez awarii"); } Podczas pisania tego kodu w Eclipse i używania wtyczki Eclipse metrics, mówi mi, że McCabe Cyclomatic Complexity dla metody głównej to 2, a dla metody `thro` jest to 2. Jednak ktoś inny mówi mi, że złożoność wielokrotne wywołanie `thro` to `liczba wywołań * złożoność metody`, a zatem twierdzi, że złożoność metody głównej to 7 * 2 = 14. Czy mierzymy różne rzeczy? Czy oboje możemy mieć rację? Albo jaka jest rzeczywista złożoność cyklomatyczna tutaj?


title: System rezerwacji (obsługuj godziny pracy, uzyskaj dostępne przedziały czasowe)

text: Obecnie pracuję nad systemem rezerwacji czasu dla salonu fryzjerskiego znajomych. Plan jest taki, aby to było tak proste, jak to tylko możliwe. Widok użytkownika (w którym właściciel widzi zarezerwowane terminy) jest mniej więcej kompletny, więc teraz nadszedł czas, aby rozpocząć pracę nad widokiem, w którym klient rezerwuje terminy. Chodzi o to, że to trochę przytłaczające i naprawdę nie wiem od czego zacząć. # Problem 1 (harmonogram pracy): Z systemu mają korzystać dwie osoby, a ich godziny pracy mogą się nieco różnić. Jakie byłoby najlepsze rozwiązanie do przechowywania ich harmonogramu pracy? Planowałem umieścić je we własnym stole, ale nie mogłem wymyślić żadnego dobrego układu stołów. ## Przykład tabeli: tbl_workschedule int_id int_dayOfWeek int_user_id time_startTime time_endTime Jeśli użyję takiego układu, mógłbym otrzymać zawartość tabeli taką jak ta poniżej. Mam wrażenie, że to nie wygląda na dobre rozwiązanie? int_id int_dayOf Week int_userID time_startTime time_endTime 1 1 1 08:00 17:00 2 2 1 09:00 18:00 3 3 1 08:00 17:00 4 4 1 11:00 19:00 5 5 1 12:00 20: 00 6 6 1 08:00 17:00 7 7 1 00:00 00:00 8 6 2 07:00 16:00 9 6 2 12:00 20:00 10 6 2 08:00 17:00 11 6 2 08 :00 17:00 12 6 2 12:00 20:00 13 6 2 08:00 17:00 14 6 2 00:00 00:00 # Problem 2 (rezerwacja czasu): ## Moja podstawowa idea to: * Klient loguje się i wybiera, jakiej usługi chce. Mam tabelę, która zawiera różne usługi i ile czasu zajmuje każda usługa (patrz struktura db na końcu postu). * Klient wybiera jaki fryzjer chce. * Klient wybiera termin, w którym chce umówić się na wizytę. * Dobieram godziny pracy dla wybranego fryzjera. * Pobieram wszystkie zarezerwowane wizyty u wybranego fryzjera w tym konkretnym dniu. * W jakiś sposób muszę zebrać wszystkie wolne sloty i ułożyć je w tablicy. * Przechodzę przez tablicę wolnych miejsc i porównuję ją z czasem trwania konkretnego spotkania. Jeśli znajdę pasujący wolny slot, zbieram go w innej tablicy. * Wyświetlam klientowi różne propozycje czasowe. Po pierwsze, czy to dobry sposób na poradzenie sobie z tym? ## Mój podstawowy pomysł (bardziej szczegółowe informacje): * Pobierz godziny pracy dla określonej daty i umieść je w dwóch zmiennych $dayStart, $dayEnd. * Uruchom pętlę, która sprawdza różnicę czasu między $dayStart a godziną rozpoczęcia pierwszego spotkania w danym dniu. Jeśli czas slotu jest większy niż, powiedzmy, że skala czasowa usługi zajmuje najmniej czasu, którą umieszczam w tablicy wolnych slotów. Dla następnej sekwencji pętli biorę czas zakończenia pierwszego spotkania zamiast czasu $dayStart i robię to samo sprawdzenie, co opisano powyżej. * Po zakończeniu całego dnia mam wszystkie wolne sloty w tablicy w następujący sposób: array(array(ilość wolnego czasu, czas rozpoczęcia slotu, czas zakończenia slotu)) Np. array(array(04:00, 08:00, 12:00)) * Następnie, jak napisałem powyżej, muszę porównać tablicę wolnych slotów z harmonogramem konkretnego spotkania. Tutaj utknąłem. * * * Ktoś, kto mógłby mnie poprowadzić we właściwym kierunku? Z góry dziękuję # Baza danych ## Tabele: tbl_events - int_eventID (INT) - int_serviceID (INT) - date_eventDueDate (DATETIME) - date_eventCreationDate (DATETIME) - int_userID (INT) - int_customerID (INT) - int_eventtomerID_int_Booked (INT) INT) - int_userID (INT) - str_customerFirstName (VARCHAR) - str_customerLastName (VARCHAR) - str_customerEmail (VARCHAR) - str_customerPassword (VARCHAR) - str_customerCellPhone (VARCHAR) - str_customerHomePhone (VARCHARINT) - str_customerHomePhone (VARCHARINT) ) str_serviceDescription (VARCHAR) int_servicePrice (INT) int_serviceTimescale (TIME) tbl_users int_userID (INT) str_userFirstName (VARCHAR) str_userLastName (VARCHAR) str_userEmail (VARCHAR) str_userPassword (VARCHAR) str_userCellPhone (VARCHAR) str_userCellPhone


title: Czy jest to implementacja mechanizmu stanowego dla uwierzytelniania Rest API?

text: W wielu artykułach dotyczących najlepszych praktyk Rest API zaleca się, aby nie polegać na sesjach po stronie serwera, ponieważ prowadzi to do mechanizmu stanowego. Obecnie korzystam z frameworka Play 2.2, z mechanizmem przechowującym dane o zalogowanym użytkowniku w pamięci podręcznej Play (tzw. chwilowe trwałe). Gdy użytkownik chce się uwierzytelnić, wywołuje dedykowane API, które pobiera jego dane uwierzytelniające, a jeśli jest prawidłowy, serwer generuje plik cookie, który zostanie do niego wysłany. Ten plik cookie zawiera identyfikator referencyjny danych użytkownika w pamięci podręcznej Play. Następnie za każdym razem, gdy użytkownik wywołuje API wymagające uwierzytelnienia użytkownika, serwer pobiera plik cookie użytkownika (jeśli istnieje), pyta o pamięć podręczną i sprawdza tam, czy użytkownik jest już dobrze uwierzytelniony pod kątem czasu trwania walidacji. Oto mały przykład: def myApi = userAuthenticatorRequest.securedAction { //użytkownik musi być już zalogowany w niejawnym żądaniu => //zrób coś } Czy powinienem zrezygnować z tego rozwiązania, aby zachować zgodność z najlepszymi praktykami, czy powinienem to zachować ? Czy naprawdę jest uważany za mechanizm stanowy? Jeśli rozumiem, jest to stanowe, ponieważ wywołanie zabezpieczonego interfejsu API wymagało w rzeczywistości dwóch wywołań: * uwierzytelniania api * zabezpieczonego interfejsu API, podczas gdy bezstanowe uwierzytelniałoby użytkownika bezpośrednio w zabezpieczonym interfejsie API, a zatem byłoby całkowicie niezależne od jakiegokolwiek kontekstu. Oczywiście użytkownik musiałby za każdym razem przesyłać swoje dane uwierzytelniające (lub klucz API)


title: Czy zasługuję na awans/wyższą pensję?

text: Jestem programistą i pracuję u mojego obecnego pracodawcy od prawie 2 lat. Dołączyłem zaraz po studiach, więc to moja pierwsza prawdziwa praca na pełen etat. Zostałem zatrudniony jako młodszy programista bez żadnych obowiązków. W zeszłym roku powierzono mi większą odpowiedzialność. Jestem oficjalną osobą kontaktową w mojej firmie dla wielu klientów. Sam reprezentowałem firmę na spotkaniach wyjazdowych z klientami. Moja rola programisty wzrosła. Posiadam teraz specjalistyczną wiedzę w zakresie niektórych narzędzi/produktów/technologii, której nikt inny tutaj nie posiada. Mój problem polega na tym, że nadal oficjalnie jestem młodszym programistą i nadal zarabiam mniej, niż uważam, że jestem wart. * Czy jestem wykorzystywany? * Jak długo powinienem rozsądnie oczekiwać, że pozostanę młodszym programistą, zanim spodziewam się jakiejś promocji? * Co byś zrobił w mojej sytuacji?


title: Czy komuś udało się sprzedać kod źródłowy na stronach takich jak Code Canyon?

text: Niedawno natknąłem się na dwie strony, które pomagają programistom sprzedawać kod źródłowy - binpress i codecanyon. Czy ktoś ma doświadczenie/sukcesy z takimi witrynami? Czy użyłbyś ich ponownie? Co było w nich dobrego? Co było w nich złego?


title: Zamieszanie na poziomie przypadku użycia

text: Pracuję nad modelem przypadków użycia aplikacji do projektowania stron internetowych, czymś w rodzaju Dreamwaver, trochę nie rozumiem, do jakiego poziomu powinienem napisać model przypadku użycia. np.: gdy użytkownik wstawia tekst, czy powinienem podać przypadki użycia: 1. wybierz czcionkę 2. wybierz rozmiar 3. kolor 4. kursywę 5. pogrubienie ... ... .. czy wystarczy podać przypadek użycia o nazwie „zmień właściwości tekstu”?


title: Jak nauczyć się nazw metod lub klas frameworka lub API?

text: Od roku programuję w C++. Przeszedłem przez funkcje języka i napisałem z nim dobre programy, więc zdecydowałem się przejść do OpenGL. Na początku wydawało się to zagmatwane. Gdy przechodziłem przez samouczki, wydawało mi się to łatwiejsze, ale nie pamiętam nazw klas, metod, argumentów itp. W rzeczywistości nie dotyczy to tylko OpenGL; Często też utknąłem z innymi frameworkami. Mam w głowie program, wiem jak by działał, ale nie pamiętam nazw metod czy klas do użycia. Moje pytanie brzmi, w skrócie, jakich technik możesz użyć do zapamiętania tych imion? Czy pisanie tego w kółko pomaga ci to zrozumieć?


title: Osiąganie wielu zadań w ramach jednej pętli

text: W odniesieniu do tego, co uważa się za dobre zasady inżynierii OOP, SOLID, DRY, KISS itp. Zastanawiam się, czy wykonać wiele zadań w jednej pętli, gdy jest to łatwe. Problem w tym, że jest to sprzeczne z niektórymi zasadami (SRP), ale może też częściowo przechylać się na korzyść innych (DRY, KISS). Prosty przykład to Mamy tablicęścieżek do plików obrazów i chcemy wykonać 4 ogólne zadania na obraz pobierz rozmiar obrazu zmień rozmiar obrazu nałóż znak wodny na obraz nałóż ramkę na obraz Można to osiągnąćużywając jednego do każda pętla w tablicy i zastosowanie każdej funkcji jedna po drugiej, lub możemy to zrobić za pomocą czterech oddzielnych pętli foreach, jednej do pobierania rozmiaru, jednej do zmiany rozmiaru i tak dalej do innych zadań. Staram się trzymać tych zasad w jak największym stopniu, aby usunąć wszelkie złe nawyki i poprawić swoje umiejętności kodowania.


title: Czy jest jakaś licencja typu copyleft (podobna do GPL) z modyfikacjami Affero i Lesser?

text: Poszukuje licencji, która obejmuje usługi sieci publicznej, jak AGPLv3, ale jak LGPL nie jest zaraźliwa. Zasadniczo napisałem kilka przydatnych funkcji pomocniczych, które chcę zezwolić na użycie w dowolnej pracy, w tym w oprogramowaniu o zamkniętym kodzie, ale chcę wymagać, aby ulepszenia MOJEGO KODU zostały udostępnione mnie i ogółowi społeczeństwa. Czy możesz polecić odpowiednią licencję? Powinna również zawierać niektóre inne ograniczenia dozwolone przez AGPL (przypisanie autorstwa, odszkodowanie) w tekście licencji lub jako dozwolone odmiany. EDYCJA: Powinienem wyjaśnić, że to oprogramowanie składa się tylko z plików nagłówkowych (jest raczej ciężki od szablonów). Zatem obowiązkiem użytkowników w ramach LGPL byłoby przypisanie autorstwa i oferta dostarczenia kopii (ewentualnie zmodyfikowanych) użytych plików nagłówkowych, zgodnie z sekcją 3. Wymagania sekcji 4 LGPL, aby umożliwić użytkownikowi ponowne połączenie, nie wydają się mieć zastosowania do plików nagłówkowych.


title: Jakich innych wzorów mogę użyć do tego singletona?

text: Mam trochę kodu, który używa wtyczki i modelu podstawowego, obracając się wokół czterech głównych obiektów: `Core`, `Server`, `Logger` i `Parser`, w nieco szczególnej kolejności. `Core` działa jak centralna fabryka, z pewnym haczykiem: jest powiązany z pojedynczym kontekstem renderowania (wiele z nich jest związane z grafiką, ale inne szczegóły nie są ważne). Obiekty, które tworzy i którymi zarządza, są specyficzne dla tego rdzenia, a wiele rdzeni można utworzyć w różnych kontekstach. Rdzenie nigdy nie mogą współdzielić zasobów. `Core` jest inicjowany z pliku konfiguracyjnego; więcej na ten temat później. „Rdzeń” musi mieć od momentu utworzenia „Serwer”, „Parser” i „Logger”. Serwer `Server` obsługuje ładowanie i inicjowanie wszystkich wtyczek, a także tworzenie z nich obiektów. Działa jako pojedynczy, wewnątrzprocesowy serwer wtyczek i rejestr obiektów, podobny pod wieloma względami do wewnątrzprocesowego serwera COM STA. Ponieważ wtyczki są ładowane do procesu, a nie do konkretnego `Rdzenia`, jestem całkiem pewien, że jest to właściwe. „Serwer” musi mieć „Parser” i „Logger”. `Logger` obsługuje na dysku komunikaty rejestrujące, w szczególności błędy. Wykonuje bardzo proste zapisywanie wstępnie sformatowanych plików, z pewnym podstawowym filtrowaniem „na poziomie dziennika”. Logger wymaga parsera do rozpoznawania ścieżek plików. Parser obsługuje zamianę zmiennych, szczególnie w ścieżkach. Na przykład, wtyczka może zażądać pliku `$(root)/resources/a.txt`, a `Parser` zastąpi go katalogiem głównym aplikacji; lub `$(startup)/a.txt` dla katalogu startowego. Proste rzeczy. Zmienne są zawarte w samym parserze, a wiele z nich jest specyficznych dla wątku. Jednak kilka jest powiązanych z pojedynczym `Core`, a tym samym wchodzi do... pliku konfiguracyjnego. Każdy `Core` jest inicjowany z pliku konfiguracyjnego, który zawiera wiele ustawień: wtyczki dla `Server`, zmienne dla `Parsera` i plik dla `Logger`. Każdy `Core` może używać innego pliku konfiguracyjnego i najprawdopodobniej będzie. W moim obecnym modelu `Server`, `Logger` i `Parser` są singletonami. Wszystkie muszą zapewnić jedną globalną instancję, dostępną z jądra i wtyczek (i siebie nawzajem), potencjalnie przed utworzeniem `Core`. Wszystkie obsługują funkcje na poziomie procesu, ale `Logger` i `Parser` obsługują niektóre funkcje na poziomie `Core`. Problem z tym polega na tym, że aby dostosować `Logger` i/lub Parser` do `Core`, `Server` potrzebowałby wtedy własnych instancji, którym potencjalnie brakowałoby ważnych cech (takich jak plik do użyj dla „Rejestratora”). Serwer `Server` obsługuje również pracę, która jest _bardzo wyraźnie_ wspólna dla całego procesu: po prostu nie ma możliwości załadowania wtyczki do pojedynczego `Core`, tak nie działają biblioteki współdzielone. W poprzedniej wersji wszystkie cztery z nich zostały utworzone podczas tworzenia `Rdzenia` i należą do konkretnego `Rdzenia`. Spowodowało to jednak pewne problemy i dziwactwa: „Rdzeń” ładuje się jako „wtyczka” podczas uruchamiania, ale „Server” miał taki sam czas życia jak „Rdzeń”, co sprawia, że wydaje się to dziwne. Parser posiada szereg zmiennych, które należą do procesu: katalog początkowy, katalog główny i tak dalej. `Logger` _musi_ w jakiś sposób poprzedzać `Core`, szczególnie etap ładowania wtyczek, aby błędy mogły być dokładnie rejestrowane. Moje pytania są następujące: * Czy ta konfiguracja jest zbyt dopracowana? Podział odpowiedzialności między przedmiotami wydaje się dobry, ale może zbyt rozdwojony. * Jakie wzorce projektowe, pojedyncze lub inne, są w tym przypadku odpowiednie dla tych obiektów?


title: jak podzielić żądania funkcji na jednostki robocze

text: Nie jestem płatnym programistą, spędzam dwie lub trzy godziny dziennie pracując nad projektem deweloperskim jako hobby. W miarę upływu czasu wpadam na „dobre pomysły” na projekt, które są zazwyczaj funkcjami lub raportami o błędach. Chciałbym nimi zarządzać za pomocą bazy danych biletów. Moje pytanie dotyczy „zakresu” biletu. Patrząc na inne projekty z biletami db, widzę, że bilety są ogólnie funkcjami wysokiego poziomu, które mają zostać zaimplementowane, i że są one luźno powiązane z gałęzią funkcji w VCS. Jak zarządzać „Listą rzeczy do zrobienia” powiązaną z biletem? Czy lepiej "przepisać" oryginalny bilet na mniejsze zadania? Jak małe zadanie kosztuje bilet?


title: Strategia rozgałęziania w celu uniknięcia wielu gałęzi wydań dla różnych klientów

text: Obecnie myślę o następującej strategii rozgałęziania 1. Gałąź główna 2. Gałąź programistyczna 3. Gałąź funkcji 4. Gałąź wydania Zasadniczo cała idea polega na tym, aby mieć gałąź wydania, aby można było szybko zastosować poprawkę dla konkretnego wydania. Oto problem, jeśli mam pilną funkcję, którą muszę zrobić dla konkretnego klienta i nie chcę, aby ta funkcja została zastosowana u innego klienta korzystającego z tej samej wersji wydania, dopóki nie zostanie w pełni przetestowana. Jednocześnie nie chcę tworzyć wielu gałęzi wydań dla różnych klientów, ponieważ skomplikuje to sprawę. Jak najlepiej poradzić sobie z taką sytuacją?


title: Używanie wzorca dekoratora w głębokiej hierarchii klas

text: Jak wykorzystać wzorzec projektowy Dekoratora do czegoś innego niż trywialne problemy z zabawkami, w głębokiej hierarchii klas? Załóżmy na przykład, że masz klasę Decorated : public Foo, Bar, Baz { public: void operation(); }; Udekorowałbyś go tak jak ta klasa Dekorator : public Decorated { void operation() { d.operation(); } prywatny: Odznaczony d; }; Problem, który mam, polega na tym, że Decorated może mieć wiele dziedziczonych metod (z Foo, Bar i Baz), a Dekorator musi „przekierować” je wszystkie do swojego obiektu wewnętrznego lub stan obiektu zostanie podzielony między dekorator i obiekt dekorowany . Jak można się upewnić, że Dekorator prawidłowo ozdobi inny przedmiot i że żadne metody nie są wywoływane na dekoratorze zamiast na dekorowanym?


title: Jak mam powiedzieć rodzicom, że tak naprawdę liczy się zdobycie pracy?

text: Z jednej strony chcę tylko uzyskać stopień naukowy z 3.0 GPA. Z drugiej strony moi rodzice chcą czegoś więcej niż tylko 3. Teraz jest rzecz. Programuję z pasją. Spędzam dzień i noc programując. I radzę sobie ze wszystkimi moimi kursami programowania. Jednak radzę sobie fatalnie na wszystkich moich zajęciach do wyboru – takich jak pisanie, historia i inne rzeczy – co daje mi tylko 3,1 do 3,2 GPA. A moi rodzice chcą więcej. Uważają, że uniwersytet jest jak liceum, w którym potrzebujesz super-gwiazdowych ocen, aby przejść na wyższy poziom. Ale nie zdają sobie sprawy, że wystarczająco dobre stopnie dadzą mi pracę. I nie zdają sobie sprawy, że programista musi ćwiczyć, aby stać się dobrym w programowaniu, i że posiadanie dobrych umiejętności jest tym, co da pracę w dobrej firmie programistycznej. Na szczęście jednak nie grożą, że pobiją mnie kijem baseballowym ani czymś w tym rodzaju. Tylko od czasu do czasu dają mi małe "tsk-tsk". Ale nawet ten mały "tsk-tsk" sprawia, że czuję się winny za otwarcie IDE. A na dodatek zwlekam z powodu tego poczucia winy. Więc teraz chcę się z nimi przyznać. Chcę wiedzieć, jaki jest na to dobry sposób. **[Edytuj]** OK, zdałem sobie sprawę, że powinienem dążyć do wyższych ocen, jak niektórzy sugerowali poniżej.


title: Czy poprawne jest wykluczanie nazw argumentów z prototypów funkcji?

text: Ostatnio tworzyłem małą dokumentację techniczną do aplikacji. Dokument ma służyć nowo zatrudnionym programistom do zapoznania się z aplikacją. Jest o wiele bardziej przyjazny niż posiadane przez nas dokumenty Javadoc i zawiera informacje, które zwykle nie są dokumentowane. Opisując funkcję, najpierw przynoszę prototyp, a potem opis, zastosowanie itp. Muszę wybrać, czy w prototypach mają być uwzględnione nazwy argumentów, czy je pominąć. Z jednej strony nazwy argumentów są w większości trywialne (jak `MojaKlasa mojaKlasa`), z drugiej strony zawierają czasami informację o przeznaczeniu argumentu (co i tak wskażę opisując funkcję). Ten sam dylemat miałem w C++ podczas tworzenia klasy w dwóch plikach. Czy powinienem dołączyć nazwy argumentów? Czy to naprawdę działa na czytelność?


title: Określanie autora w kodzie źródłowym w produkcie komercyjnym

text: Zwykle w dokumentacji API (JavaDoc, PHPDoc itp.) znajduje się tag `@author`. Czy dopuszczalne jest używanie tego znacznika w każdej funkcji, którą wykonujesz w produkcie komercyjnym?


title: Czy standardy kodowania mogą być zbyt jednolite?

text: Czy istnieje coś takiego jak zbyt duża jednolitość? Tam, gdzie pracuję, mamy oczywiście standardy, w tym konwencje nazewnictwa, architektury, frameworki do wykorzystania itp. Jednak ostatnio pojawiło się wiele krytyki rzeczy, które uważam za bardziej stylowe. Na przykład pisanie instrukcji `if` w wielu liniach zamiast jednej linii, przy użyciu operatora łączenia wartości c# `??` zamiast mówić `== null`, ilości odstępów dla wcięć itp. Wydaje mi się, że zaczyna się to bardziej osobisty wybór stylu i nie musi być jednolity w całym zespole lub firmie. To, co jedna osoba myśli, czyta wyraźniej, inna może nie. Czy ta „dodatkowa” jednolitość ma jakąś wartość?


title: Co to znaczy, gdy mówimy, że jakaś funkcja jest wielomianowo większa/mniejsza niż jakaś inna funkcja?

text: Przeglądałem ten wykład wideo na temat twierdzenia głównego ze Wstępu do algorytmu i wyjaśniając przypadek A profesora twierdzenia głównego mówi, że jakaś funkcja `f(n)` jest wielomianowo mniejsza niż inna funkcja w punkcie 53:08 sekundy: ![ formuła](http://i.stack.imgur.com/CxEWP.png) Co to znaczy, że funkcja jest wielomianowo mniejsza niż ta funkcja? Jestem tutaj zdezorientowany, ponieważ wielomian nie jest równoważny z polilogarytmicznie. Czy profesor użył tu niewłaściwego określenia? Jest to jednak wysoce nieprawdopodobne, ponieważ wielokrotnie powtarza ten sam termin.


title: Jak zorganizować zespół programistów?

text: Jestem kierownikiem zespołu 11 programistów, którzy opiekują się witrynami/aplikacjami internetowymi mojej firmy, prowadząc do 4 równoczesnych projektów plus codzienne wsparcie w dowolnym momencie. Wśród 11 programistów jest mieszanka umiejętności technicznych, stanowisk i doświadczenia, chociaż struktura zespołu jest płaska, a wszystkich 11 programistów podlega bezpośrednio mnie. Cały zespół mający jednego menedżera zaczyna udowadniać, że nie skaluje się zbyt dobrze. Zaczynam się rozrastać zbyt słabo, więc chcę zmniejszyć liczbę moich bezpośrednich podwładnych. Wszystkie sposoby, jakie przychodzą mi do głowy, mają poważne wady: * Niech młodsi programiści zgłaszają się do starszych. Skraca to czas poświęcony na rozwój przez najlepszych techników. * Podziel zespół według oprogramowania, np. programiści 1-6 pracują w intranecie, a 7-11 pracują w zewnętrznych witrynach, przy czym każda sekcja ma nowego kierownika zespołu (prawdopodobnie nowy opis stanowiska z większą odpowiedzialnością w zakresie zarządzania / mentoringu / coachingu niż obecni starsi programiści). Dodaje to sztuczne silosy i może utrudnić „programistę intranetu” do pracy na zewnętrznej stronie internetowej, jeśli tego chcę. * Zachowaj płaską strukturę i dodaj wsparcie menedżerskie w postaci kierowników projektów / administratorów zespołów, aby odciążyć. To nie rozwiązuje problemu, ponieważ zespół nie może się tak rozwijać w nieskończoność. Czy istnieje standardowy sposób rozwiązania tego problemu, którego mi brakuje? Jeśli nie, to jak inni z Was rozwiązali ten problem?


title: Algorytm mierzący rozproszenie 5000 groszy w gospodarce?

text: Proszę pozwolić mi użyć tego przykładu/metafory do opisania algorytmu, którego potrzebuję. **Przedmioty** * Jest 5 tysięcy groszy. * Jest 50 filiżanek. * Istnieje historia śledzenia (pieczęć paszportowa itp.), która jest powiązana z każdym groszem podczas przemieszczania się między filiżankami. **Definicja** Zdefiniuję „wysoce rozproszony” grosz jako taki, który przechodzi przez wiele kubków. „Słabo rozproszony” grosz to taki, który albo przechodzi tam i z powrotem między 2 filiżankami **Pytanie** Jak mogę obiektywnie zmierzyć rozproszenie grosza jako: 1. Liczba ruchów, przez które przeszła grosz 2. Liczba kubki grosz był w 3. Jednostka czasu (dzień, tydzień, miesiąc) Dlaczego to robię? Chcę wykryć, czy kubek gromadzi grosze. **Opór ze strony złych aktorów** Ponieważ gromadzenie jest złe, „zły kubek” może po prostu zabiegać o partnera i po prostu przenosić grosze między sobą. Spowoduje to skrócenie czasu, przez jaki moneta nie jest przesyłana, i zakłóci wykrywanie gromadzenia. Rozwiązaniem może być wykrycie, czy filiżanka (lub zestaw filiżanek) są wspólnymi „partnerami” ze sobą, chociaż nie jestem pewien, jak myśleć o tym problemie. **Szerokie zastosowanie** Każda pomoc byłaby pomocna, ponieważ myślę, że ten algorytm jest wspólny dla * ekonomii * badania wzorców migracji zwierząt, obywateli kraju * innych naturalnych zjawisk ... i prawdopodobnie istnieje jako termin lub pojęcie, którego nie znam.


title: Czy freelancer wymaga doskonałych umiejętności programowania?

text: Potrafię pisać niezależny kod java, python, c, c++, ale nie znam ich wszystkich aspektów. Na przykład nie wiem, jak kodować z bazą danych w python/c/c++. Mam niewielkie doświadczenie z programowaniem GUI. Zdawałem sobie sprawę, że większość zadań to nie tylko napisanie prostego kodu. Mogą potrzebować trochę GUI i musisz przesłać wynik programowania na serwer FTP za pomocą jakiegoś kodu ftp z wtyczką/biblioteką Nie znam nazwy. Widziałem pracę polegającą na złomowaniu sieci przez pythona, a klient chce, aby program wstawiał dane do bazy danych natychmiast po złomowaniu sieci i usuwał stare dane starsze niż 6 miesięcy. Klient nie zaakceptuje wykonawcy, który powie: „Będę musiał rozpracować tę technologię xyz przez jakiś czas, zanim będę mógł powiedzieć, czy mogę to zrobić”. Co gorsza, okazuje się, że nie jesteś w stanie wykonywać swojej pracy z jakiegokolwiek powodu, masz przerąbane. Zastanawiam się, czy ubiegasz się o pracę jako freelancer, jeśli nie czujesz się ekspertem we wszystkich dziedzinach/technologii wymienionych w wymaganiach dotyczących pracy?


title: Jak mogę uszeregować drużyny na podstawie bezpośrednich wygranych/przegranych?

text: Próbuję napisać algorytm (konkretnie w Ruby), który uszereguje drużyny na podstawie ich wyników względem siebie. Jeśli drużyna A i drużyna B wygrały ze sobą taką samą liczbę meczów, to sprowadza się to do różnic punktowych. Oto przykład: A pokonuje B dwa razy B pokonuje C jeden raz A pokonuje D trzy razy C pokonuje D dwa razy D pokonuje C jeden raz B pokonuje A jeden raz Który sprowadza się do A[B] = 2 B[C] = 1 A[D] = 3 C[D] = 2 D[C] = 1 B[A] = 1 Który rodzaj redukuje się do A[B] = 1 B[C] = 1 A[D] = 3 C[ D] = 1 D[C] = -1 B[A] = -1 To mniej więcej jak daleko zaszedłem Myślę, że wyniki tego konkretnego algorytmu byłyby: A, B, C, D Ale utknąłem o tym, jak przejść z mojej zagnieżdżonej struktury podobnej do skrótu do wyników. Mój pseudokod wygląda następująco (jeśli ktoś chce, mogę też wysłać swój kod rubinowy): Dla każdej gry(g): hash[g.winner][g.loser] += 1 To pozostawia `hash` jako pierwszą redukcję powyżej hash2 = klon hash Dla każdego klucza(winner), value(losers przegranych) w hashu: Dla każdego klucza(loser), value(straty w stosunku do zwycięzcy): hash2[loser][winner] -= straty Co pozostawia `hash2` jako druga redukcja Zapraszam do pytania lub edycji, aby było bardziej jasne, nie jestem pewien, jak to ująć w bardzo wymowny sposób. Dziękuję!


title: Logika rejestracji nowego użytkownika

text: W ramach procesu uczenia się piszę aplikację do rejestracji użytkownika w PHP. Spisałem ogólne zasady, których powinien przestrzegać mój kod. Proszę dajcie mi znać, co o tym myślicie. 1. Posiadać formularz z adresem e-mail i hasłem. 2. Wygeneruj 2 losowe tokeny, które zostaną dołączone do adresu URL, aby potwierdzić e-mail i zakończyć rejestrację. Wyślij użytkownikowi pl e-mail z adresami URL. Użyj pierwszego tokena, aby kontynuować rejestrację, a drugiego tokena, aby anulować (w przypadku, gdy żądanie rejestracji było niezamówione). 3. W tym momencie w tabeli bazy danych utrzymuję tabelę z 6 kolumnami - email, hasło, register_token, cancel_register_token, counter, timer. 4. Gdy użytkownik kliknie łącze, aby kontynuować proces rejestracji, poproś użytkownika o podanie hasła. Jeśli użytkownik nieumyślnie wprowadził nieprawidłowy adres e-mail, oznacza to, że ktoś inny oczywiście nie zna hasła i nie może kontynuować rejestracji. 5. Jeśli użytkownik, który ma już aktywny e-mail w bazie oczekujący na rejestrację, chce ponownie wysłać e-mail aktywacyjny (być może ktoś inny zarejestrował e-mail w jego imieniu, nieproszony i nie ma hasła, aby kontynuować), to utwórz kolejne 2 losowe tokeny, usuwając pierwszy zestaw z tabeli i zachowując licznik, zwiększając licznik za każdym razem, gdy generowany jest nowy zestaw tokenów na e-mail. Gdy licznik osiągnie maksimum, nie akceptuj kolejnych żądań. Może max 5 takich próśb i nie więcej. 6. Utrzymuj link do rejestracji przez 1 dzień, jeśli nie ma żadnej aktywności. Użyj kolumny timera do tego samego.


title: Sugestia projektowania aplikacji zorientowanej na API przy użyciu Appengine

text: Planuję stworzyć nową aplikację. Projektowałem więc strukturę aplikacji. Wiem, że ta aplikacja będzie dostępna z wielu urządzeń, a funkcja aplikacji zostanie zwiększona. Tak więc zbieram następujące informacje 1. Aplikacja jest duża, więc trzeba się rozdzielić 2. Potrzebuję Centralnej Bazy Danych z API (aby wszyscy inni klienci, w tym webapp, korzystali z tej aplikacji) 3. Potrzebuję Centralnego Systemu Uwierzytelniania Używam Appengine jako PAAS i Datastore jako Baza danych Poniżej przedstawiam różne sposoby, w jakie mogę to zaimplementować: 1. **Zachowaj uwierzytelnianie i API w jednej aplikacji, która ma wspólny magazyn danych * Problem tutaj polega na tym, że aplikacja internetowa potrzebuje magazynu danych tak często, więc dostęp do niego z innej aplikacji będzie miał wpływ na wydajność, prawda? ** 2. Zachowaj Uwierzytelnianie, API, WebApp jako różne aplikacje W powyższych dwóch przypadkach mój problem dotyczy: 1. Datastore nie może być udostępniony, wiem o tym, że datastore w chmurze jest obecnie zbyt skomplikowany 2. Utrzymanie spójności danych w wielu aplikacjach jest trudne ( Nie mam na to jasnego pomysłu) Korzystanie z New Appengine Modules rozwiązałoby część problemów (np. utrzymanie datastore, uwierzytelnianie, webapp w jednej aplikacji z różnymi wersjami ), ale problem polega na tym, że aplikacja będzie pod dużym obciążeniem, ponieważ jest to powszechne. Wszelkie lepsze rozwiązania lub wady w obecnych projektach aplikacji są bardzo mile widziane.


title: Jakie języki są bardziej odpowiednie dla projektów długoterminowych?

text: Jakie języki są bardziej odpowiednie dla projektów długoterminowych ( _będzie trzeba przekompilować za 20 lat, z minimalną ilością zmian w kodzie źródłowym_ ), pod względem minimalnej ilości przepisywania tego, co już zostało napisane ze względu na zmianę wersji języka & zmiana kompilatorów i systemów operacyjnych (tj. kompatybilność wsteczna), o ile możemy sądzić z wcześniejszych odniesień? (nie możemy powiedzieć, co przyniesie przyszłość, więc nie ma tu _przewidywania_ - po prostu oprzyj swoją odpowiedź na dotychczas znanych) IMHO, tak, te zorientowane na *nix będą miały tutaj pewną przewagę. Na przykład, Perl (dobry, AFAIK), vs. Python (zły, ponieważ v2.5 -> v3.x dość duży podział wstecznej kompatybilności - powiedziano również, że wsteczna kompatybilność nie zostanie zachowana w przyszłych wersjach). Gdybyś mógł wyjaśnić swoje argumenty, dlaczego wybrałeś konkretny język, wraz z tym, jakie były w nim większe zmiany.


title: Programiści robią testy

text: Zastanawiam się, jak typowe jest, że programiści zmieniają czapki i testują nawzajem swoją pracę. Załóżmy, że zespół chce przyjąć podejście „wspólnej odpowiedzialności” do przenoszenia zadań od sformalizowania do ich wydania — **(1)** czy dobrym pomysłem jest, aby programiści pracowali jako testerzy oprogramowania, o ile nie napisali cecha? **(2)** Czy zdarza się to często? Zastanawiam się również **(3)** w jakim stopniu programista może "przetestować" własną pracę. Nawet przy TDD i testach jednostkowych, czy nie jest jeszcze potrzeba aparatury do testowania oprogramowania w procesie rozwoju?


title: Gdzie są dobre miejsca do ogłoszenia osobistego projektu programistycznego?

text: Gdzie mogę bezpłatnie reklamować swoje projekty osobiste? Inne niż usługi hostingowe. Wygląda na to, że obserwujący na githubie muszą już wiedzieć o tym, co robisz z innego źródła.


title: Dlaczego pogarda dla COBOL?

text: Kiedy ludzie wspominają COBOL, zwykle spotyka się to z prychnięciem lub jękiem. Niewiele wiem o COBOLU, ale widziałem kilka programów w nim napisanych. Widzę, że jest rozwlekły, a dla niewtajemniczonych oczu, takich jak moje, niezrozumiałe. Ale tak naprawdę, czy wszystkie języki programowania nie są kompletnym bełkotem dla laika? Rozumiem, że działa, działa dobrze i nadal jest szeroko stosowany w branżach, dla których został zaprojektowany. Czy to nie są cechy dobrego języka? Co jest takiego złego w COBOL?


title: Międzyplatformowa kompilacja C++ .exe

text: Zostałem poproszony o ponowne napisanie starego projektu C/C++ w C++11. Stary projekt jest wieloplatformowy, jednak w celu wdrożenia systemu na innych architekturach obecny proces polega na zalogowaniu się do usługi zdalnej, która ma wszystkie dostępne platformy docelowe (Red Hat Linux, Umbuntu, Sco Unix i in.) oraz skompiluj .exe na każdej platformie do dystrybucji. Czy istnieje sposób, aby wysłać użytkownikowi pakiet, który sam się skompiluje na jego architekturze i zbuduje poprawny .exe _bez podawania kodu źródłowego_? Jestem również otwarty na kompilację krzyżową, aby obejść konieczność logowania się na osobnych serwerach i kompilacji dla każdej platformy. Jak łatwo jest skompilować kod dla różnych architektur za pomocą kompilatora krzyżowego?


title: czy nieprogramujący fizzbuzz może działać?

text: Wszyscy wiemy, czym jest fizzbuzz i widziałem wiele wariantów programów do zaimplementowania. Jednak obserwowanie, jak ktoś pisze kod, zajmuje trochę czasu, wydaje się, że nie ma czasu siedzieć i oglądać kod, który jest pisany po tym, jak ktoś już to „rozgryzł”. Trudniej jest też zaprogramować fizzbuzz przez telefon. Zastanawiałem się, czy inne proste pytania można wykorzystać jako fizzbuzz? Pytania typu „kiedy najlepiej jest użyć następujących struktur: hashmap, połączonej listy lub posortowanego drzewa” lub „w Javie jaką inną metodę należy zawsze zmienić, jeśli zastąpisz metodę równości”? Czy takie pytania działają równie dobrze jak standardowe programowanie fizzbuzz? Gdybyś był osobiście, gdzie ktoś mógłby pisać na papierze, czy kiedykolwiek rozważyłbyś nieprogramujący fizzbuzz nad programowalny? Czy fizzbuzz nieprogramujący byłby mniej prawdopodobny, aby wydawał się obraźliwy niż ten, który się programuje?


title: Czy XCode może współpracować z TFS?

text: Do tej pory używaliśmy Team Foundation Server (TFS) do zarządzania kodem źródłowym naszego rozwiązania, które zawiera komponenty dla wielu platform - asp.net, windows i android. Teraz chcemy opracować aplikacje na iOS dla tego rozwiązania, ale czy możliwa jest jakakolwiek integracja między XCode i TFS? Jaki jest najlepszy sposób na używanie kontroli wersji TFS z Xcode teraz, gdy dowiedziałem się, że musimy napisać kilka aplikacji na iOS? Docelowo będziemy też chcieli mieć zautomatyzowane kompilacje dla procesu ciągłej integracji


Dlaczego dostęp modyfikatora do właściwości musi być publiczny w Unity? Bardzo interesuje mnie szczegółowe wyjaśnienie mojego pytania. Czytałem o wskazówkach, jak zrobić to w inny sposób, ale nie o szczegółowym wyjaśnieniu, dlaczego nie można tego wyraźnie zadeklarować w moim kodzie.


title: Utrzymywalność logiki Boole'a — czy zagnieżdżanie jest potrzebne?

text: Który z nich jest lepszy pod względem konserwacji? if (byteArrayVariable != null) if (byteArrayVariable .Length != 0) //Zrób coś z byteArrayVariable OR if ((byteArrayVariable != null) && (byteArrayVariable.Length != 0)) //Zrób coś z byteArrayVariable Wolę czytać i pisanie drugiego, ale pamiętam, że czytałem w kodzie, że robienie takich rzeczy jest złe dla utrzymania. Dzieje się tak, ponieważ polegasz na tym, że język nie ocenia drugiej części „if”, jeśli pierwsza część jest fałszywa i nie wszystkie języki to robią. (Druga część zgłosi wyjątek, jeśli zostanie oceniona z wartością null `byteArrayVariable`.) Nie wiem, czy naprawdę jest to coś, o co należy się martwić, czy nie, i chciałbym uzyskać ogólną opinię na temat tego pytania. Dziękuję.


title: Siatka 2D z wieloma typami obiektów

text: To jest mój pierwszy post tutaj w programers.stackexchange (jestem regularnym na SO). Mam nadzieję, że to nie jest zbyt ogólne. Próbuję prostego projektu, aby nauczyć się Java z czegoś, co widziałem w przeszłości. Zasadniczo jest to symulacja AI, w której występują zwierzęta roślinożerne i mięsożerne i oba muszą spróbować przetrwać. Część, którą próbuję wymyślić, dotyczy samej tablicy. Załóżmy bardzo proste zasady. Plansza musi mieć rozmiar X na Y, a w jednym miejscu może znajdować się tylko jeden element. Na przykład „stworek” nie może znajdować się na tym samym kafelku, co blok „jedzenie”. Mogą być przeszkody (skały, drzewa...), mogą być jedzenie, mogą być wszelkiego rodzaju stworzenia. Zakładając te zasady, jaki byłby dobry sposób na przedstawienie tej sytuacji? Oto, co wymyśliłem i jeśli to możliwe, oczekuję sugestii: Użyj wielu poziomów dziedziczenia do reprezentowania wszystkich różnych możliwych obiektów (AbstractObject -> (NonMovingObject -> (Food, Obstacle) , MovingObject -> Critter -> (Carnivorous, Herbivorous) )) i używać polimorfizmu w tablicy 2D do przechowywania instancji i nadal mieć dostęp do metod niższego poziomu. Wielkie dzięki. Edycja: Oto graficzna reprezentacja struktury, którą mam na myśli. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/4QK7N.png)


title: Alternatywy dla ściągania aktualizacji ze strony

text: Myślę więc, że wygląda to dość źle, kiedy wydajesz aktualizację i ściągasz ją z sieci. Jestem prawie pewien, że tak się stało w przypadku co najmniej dwóch z ostatnich trzech aktualizacji Delphi XE2. Nie narzekam, bo zrobiłbym (i zrobiłem) to samo. Jedynym problemem jest to, jak to zrobić z wdziękiem? I jak ostrzec 10-20 placówek (500-2000 użytkowników końcowych), którzy pobrali twoje okropne oprogramowanie, że to, co pobrali, nie jest dobre, ale to, co zamierzają pobrać, jest super niesamowite? Powodem, dla którego o to pytam, jest to, że pracuję dla małej firmy, Embarcadero jest dużą (młodszą) firmą i robimy dokładnie to samo głupie rzeczy, gdy nasze wydanie okazuje się niewystarczające. Problemy mogą być tak proste, jak brak pliku lub nawet problem prawny, kod może być doskonały i nadal mogą występować problemy z aplikacją.


title: Czy pomiary metryk projektów oprogramowania są popularne w dzisiejszym przemyśle?

text: Spotkałem programistę, który chciał uzyskać porady z zewnątrz dotyczące projektu swojego zespołu. Dowiedziałem się, że opracowują ogromny pakiet oprogramowania dla dyrektorów firm, kierowników projektów i programistów, który może automatycznie obliczać metryki i tworzyć wykresy dla każdej iteracji. Jako student informatyki bardzo niewiele wiem na temat metryk i ich znaczenia, ale mam następujące pytania: 1. Czy większość firm ma jakiś sposób, czy nie musi to być elegancki program, do mierzenia znaczących metryk? 2. Jakie metryki, pojedyncze czy połączone, pomagają zawęzić zakres projektów i oszacowania? 3. Jako osoba analizująca wskaźniki, jak często opierasz na nich decyzje? TJ. Liczba nieudanych testów tygodniowo drastycznie wzrasta? 4. Czy uważasz, że wprowadzenie metryk studiowania pomogło ci lepiej zrozumieć projekt? Nie wiem dlaczego, ale projekt deweloperski mnie zaintrygował i muszę wiedzieć więcej. Jeśli tak


title: Opublikowane aplikacje na Windows Phone 7: dobre dla CV/CV?

text: Od dawna jestem programistą Microsoft, który niedawno zaczął publikować aplikacje dla systemu Windows Phone 7, aby wzmocnić moje obecne umiejętności C#/.NET i uzyskać bardziej bezpośredni kontakt z WPF/Silverlight, i oczywiście dlatego, że jest nowy i fajny. Do tej pory z powodzeniem opublikowałem ponad 10 aplikacji. 1. Czy dobrze jest umieścić swoje CV? 2. Czy wydaje się, że pokazuje zrozumienie najnowszych technologii firmy Microsoft? 3. Jakieś wady dostrzegane przez potencjalnych pracodawców? 4. Czy umieściłbyś to w swoim CV, jeśli szukasz pełnoetatowego stanowiska w zawodzie Inżyniera Oprogramowania?


title: svn vs git dla jedynego programisty?

text: Jeśli jestem jedynym programistą (nie pracuję w zespole) pracującym na moim laptopie (Windows OS i Linux VM) i tworzącym kopię zapasową danych w chmurze (Dropbox itp.), to czy git nadal jest lepszy niż svn dla moich potrzeb w zakresie kontroli wersji? Nie myślałem o tym, ponieważ nie będę potrzebował żadnej z dystrybuowanych funkcji git. Ale czy git jest tak lepszym podejściem do kontroli wersji, że i tak powinienem rozważyć przeniesienie? Przy tak wielu artykułach mówiących o tym, jak ludzie przechodzą z svn do git? Zastanawiałem się, czy rozmawiają o dużych lub otwartych projektach z zespołami programistów czy z samym programistą. Co myślisz?


title: Jak reprezentować typy (enum) w publicznym API

text: Pracuję nad prostym API, które chcę wykorzystać dla własnego klienta, a w przyszłości udostępnić publicznie. Mam obiekty "Item", które mogą mieć różne "typy". Typ to C "typedef enum", na razie mam: typedef enum { ItemTypeBool, ItemTypeNumber, ItemTypeDate, } ItemType; (Mogę dodać trochę w przyszłości) Zastanawiam się, czy raczej przenosić je jako liczby całkowite, czy jako zdefiniowane "łańcuchy". JSON byłby : For integers : { "name": "The name", "type": 0, ... } For strings : { "name": "The name" "type": "boolean" ... } Zastanawiam się, czy jest na to najlepsza praktyka. Zachowanie liczby całkowitej nieco uprościłoby kod i zmniejszyło przepustowość, ale napisy byłyby łatwiejsze do zapamiętania dla programistów. Pamiętam, że pracowałem nad projektem i musiałem pamiętać 1=obraz, 2=audio, 3=html,... co nie ma żadnego sensu. Pytam więc, czy znasz jakiś inny aspekt, który powinienem rozważyć.


title: Dlaczego identyfikatory UUID / GUID są w takim formacie, w jakim są?

text: Globalnie Unikalne Identyfikatory (GUID) to zgrupowany ciąg znaków o określonym formacie, który, jak zakładam, ma względy bezpieczeństwa. > Identyfikator GUID jest najczęściej zapisywany w tekście jako sekwencja cyfr szesnastkowych > podzielony na pięć grup, takich jak: > > 3F2504E0-4F89-11D3-9A0C-0305E82C3301 Dlaczego ciągi GUID/UUID nie są tylko losowymi bajtami zakodowanymi w postaci szesnastkowej X długość? > Ten zapis tekstowy zawiera następujące pola oddzielone myślnikami: > > > | Cyfry szesnastkowe | Opis > |------------------------- > | 8 | Dane1 > | 4 | Dane2 > | 4 | Dane3 > | 4 | Początkowe dwa bajty z Data4 > | 12 | Pozostałe sześć bajtów z Data4 > Istnieje również kilka wersji standardów UUID. > Identyfikatory UUID wersji 4 są zazwyczaj przechowywane wewnętrznie jako surowa tablica 128 bitów > i zazwyczaj są wyświetlane w formacie podobnym do: > > uuid:xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx


title: Co mogę zrobić programowo ze zdjęciami, które mają licencję Creative Commons „nie modyfikuj”?

text: Pracuję nad projektem, który wykorzystuje niektóre ikony na licencji Creative Commons (ND), która zabrania modyfikacji obrazu. Co mogę zrobić z tymi ikonami jako programista? Czy mogę modyfikować wygląd obrazu w programie, o ile nie zmieniam niczego w pliku zawierającym ikonę? Czy zmodyfikowałem obraz, jeśli umieściłem na nim kolorową przezroczystą warstwę, aby zmienić kolor ikony?


title: W którym momencie powinieneś zacząć umieszczać funkcje w nowym pliku?

text: Obecnie piszę skrypt w Pythonie. Obecnie ma około 400 linii i wygląda na to, że robi się trochę długi, ponieważ gdy próbuję przewijać go z zaćmieniem, przejście z funkcji A do funkcji B zajmuje trochę czasu. Struktura jest taka, że odczytuje plik, a następnie wykonuje akcje na tym, co czyta, w zależności od flag przekazanych przez użytkownika w wierszu polecenia. Wszystko jest mniej lub bardziej powiązane (iw rzeczywistości wiele funkcji wywołuje inne funkcje), więc pod tym względem sensowne jest pozostawienie wszystkiego w tym samym pliku. Obecnie dodaję więcej funkcji lub więcej rzeczy, które można umieścić w flagach wiersza poleceń, i zastanawiam się, czy istnieją jakieś standardy dotyczące długości pliku, zanim zaczniesz umieszczać rzeczy w nowym pliku. PEP 8 wspomina o długości linii, ale nic o długości pliku. Podsumowując: czy istnieją jakieś standardy określające, jak długi powinien być plik, zanim zaczniesz wrzucać rzeczy do nowego pliku?


title: Dlaczego Aiken zdecydował się na oddzielenie danych i instrukcji w Harvard Mark I?

text: Kiedy Aiken opracował Mark I, dlaczego zdecydował się na oddzielenie danych i instrukcji? W Wikipedii (ani w innych wyszukiwanych przeze mnie wyszukiwaniach) nie wspomniano o tym, jak i dlaczego Aiken oddzielił dane i instrukcje.


title: Sprawdzanie wartości null podczas poruszania się po hierarchiach obiektów

text: Musiałem zaimplementować jakiś kod, który przemierzał małą hierarchię obiektów, aby pobrać wartość i wyświetlić ją w obiekcie TextView (jest to Android / Java). Musiałem to zrobić _6 razy_, aby wypełnić _6 TextViews_ dla różnych wartości w hierarchii obiektów. Moja implementacja to **Implementacja B**. Ale po przeglądzie mój kolega nie zgodził się i był pewien, że **Wdrożenie A** było właściwą drogą. Uważam, że moja wersja jest nie tylko czystsza, ale także mniej podatna na błędy, ponieważ jako programista mogę coś przeoczyć. Czy mógłbyś przekazać mi swoją opinię, z zaletami i wadami obu tych wdrożeń? ### Implementacja A: if (house != null && house.getLounge() != null && house.getLounge().getLetter() != null) { String mojaWartość = house.getLounge().getLetter(); textView.setText(mojaWartość); } else { // Nic nie rób, a może ukryj textView. } ### Implementacja B: spróbuj { String mojaWartość = house.getLounge().getLetter(); textView.setText(mojaWartość); } catch (NullPointerException e) { // Nic nie rób, a może ukryj textView. }


title: Jak chronić oprogramowanie na obrazie maszyny Amazon?

text: Istnieją inne podobne pytania dotyczące sposobów ochrony oprogramowania przed piractwem lub naruszeniami licencji: 1, 2, 3, 4 ze świetnymi odpowiedziami. Wiele z tych sugestii nie pasuje w pełni do mojej sytuacji, ponieważ mam nadzieję sprzedawać usługę, a nie oprogramowanie. Jednak niektórzy klienci mogą odmówić obsługi, więc chcą również opcjonalnie sprzedać oprogramowanie. Przygotowałem obraz maszyny Amazon (AMI) dla rozwiązania dystrybucyjnego „pod klucz”, co jest ważne, ponieważ muszę zapewnić bezpłatny okres próbny, który może udostępnić pewne opcje bezpieczeństwa poza normalną dystrybucją/instalatorem binarnym. Przyznaję, że zapobieganie inżynierii wstecznej jest trudne/niemożliwe, ale chciałbym wiedzieć, jakie są proste do wdrożenia środki, które mogę podjąć. Oto moje dotychczasowe pomysły: 1. Określ w umowie licencyjnej, w jaki sposób mogą korzystać z oprogramowania, a następnie poproś o usunięcie go po wygaśnięciu relacji biznesowej. To prawdopodobnie najlepsza opcja, ale moje pytanie dotyczy rozwiązań programistycznych, a nie rozwiązań biznesowych/prawnych. 2. Po skompilowaniu kodu na AMI mogę po prostu usunąć kod źródłowy. Oznacza to, że klienci, którzy chcą aktualizacji, będą musieli utrzymywać ze mną relacje biznesowe. 3. Mogę spojrzeć na czas systemowy i porównać go z datą ważności wkompilowaną w plik binarny, rodzaj opcji autodestrukcji. Brzmi trywialnie do wdrożenia i chociaż wiem, że można to pokonać, jak trudne jest to naprawdę dla kogoś, kto nigdy wcześniej tego nie robił? Co się stanie, jeśli wyłączę dostęp roota na moim AMI? 4. Mogę skorzystać z opcji Shared AMI firmy Amazon i po prostu usunąć AMI po wygaśnięciu relacji biznesowej. Rozumiem, że można to pokonać, jeśli użytkownik sklonuje moje AMI, ale czy jest coś, co mogę zrobić, aby chronić AMI lub zablokować oprogramowanie dla konkretnego AMI? 5. Mogę skorzystać z opcji Płatnych AMI firmy Amazon, która wykorzystuje ich system DevPay, aby upewnić się, że użytkownicy płacą za dalsze korzystanie z mojego oprogramowania. Jak bezpieczny jest ten system? 6. Mogę mieć AMI "telefon do domu". Nie sądzę, by moi klienci zaakceptowali. Dziękuję!


title: Projekt bazy danych dla systemu tagowania

text: Tworzę system, w którym przedmioty będą miały jeden lub więcej tagów. Teraz będzie tabela **item**, która będzie przechowywać każdy element, oraz tabela **tags**, która będzie przechowywać wszystkie tagi używane w systemie. Moje pytanie brzmi: jaki jest najlepszy projekt, jaki mogę mieć, który pozwoli mi łączyć elementy z odpowiednimi tagami i rejestrować, ile razy dany element otrzymał dany tag od użytkownika? Na przykład zastanawiam się, czy powinienem utworzyć trzecią tabelę, która kojarzy konkretny element z konkretnym tagiem i ile razy ten tag został wybrany. Pola będą wyglądały następująco: item_id, tag_id, tag_hits - gdzie tag_hits to liczba przypadków użycia tagu. To rozwiązanie skojarzy wszystkie elementy z ich tagami w jednej tabeli. **Lub** innym rozwiązaniem, o którym myślę, jest utworzenie tabeli dla każdego elementu i zapisanie każdego tagu oraz czasu, przez jaki tag był używany. Tak więc dla itemX utworzyłbym tabelę **itemX**, a pola to: tag_id, tag_hits. Dla innego itemY utworzyłbym tabelę o nazwie itemY z tymi samymi polami. Tak więc dla każdego elementu byłaby tabela kojarząca go z jego znacznikami. Teraz w tym systemie mogą znajdować się setki tysięcy przedmiotów. Przypuszczam, że twórcy tej witryny musieli wziąć pod uwagę podobne uwagi, ponieważ każde pytanie jest otagowane. Możesz przeglądać pytania według tagów. Mój system będzie miał podobną funkcjonalność. Czy ktoś może polecić rozwiązanie projektowe, biorąc pod uwagę wszystko, co powiedziałem i biorąc pod uwagę wydajność. Wskaż, gdzie Twoim zdaniem indeksowanie może również pomóc. Używam baz danych SQL w moim rozwoju, ale jeśli uważasz, że rozwiązanie bez SQL to wystarczy, zasugeruj projekt zgodny z tymi wytycznymi. proszę być bardzo konkretnym. Dzięki, Ron


title: Czy tworzenie graficznego interfejsu użytkownika powinno być uważane za „oszukiwanie”?

text: Mam znajomego, który ma nieco większe doświadczenie w programowaniu niż ja. Rozmawialiśmy o różnych technologiach programistycznych, których używamy, a w rozmowie pojawił się Interface Builder. Ponieważ nie mam doświadczenia w programowaniu, z wyjątkiem tego, czego sam się nauczyłem, osobiście wierzę, że IB i wszystkie jego funkcje (`IBOutlets`, `IBActions`) pomagają programistom na moim poziomie umiejętności (i wszystkich poziomach umiejętności, jeśli o to chodzi) w ukończeniu projektów ich w krótszym czasie. Jego pogląd na IB jest trochę entuzjastyczny. Uważa, że programiści korzystający z Interface Builder "oszukują" w tym, że nie muszą ręcznie układać interfejsów. * * * Pytanie: **Czy używanie konstruktora GUI do układania elementów interfejsu jest uważane za „oszukiwanie” (ponieważ większość programów pierwotnie wymagała ręcznego układania interfejsów w kodzie)?** Dlaczego?


title: VPS a hosting współdzielony

text: Czy istnieje jakiś przekonujący powód, dla którego programista hostowałby na wspólnej platformie, zamiast po prostu mieć gdzieś konto VPS?


title: Alternatywy dla wzoru singletona

text: Czytałem różne opinie na temat wzoru singletona. Niektórzy twierdzą, że należy tego unikać za wszelką cenę, a inni, że może być przydatny w określonych sytuacjach. Jedną z sytuacji, w której używam singletonów, jest sytuacja, w której potrzebuję fabryki (powiedzmy obiektu f typu F) do tworzenia obiektów określonej klasy A. Fabryka jest tworzona raz przy użyciu pewnych parametrów konfiguracyjnych, a następnie jest używana za każdym razem, gdy obiekt typ A jest tworzony. Tak więc każda część kodu, która chce utworzyć instancję A, pobiera singleton f i tworzy nową instancję, np. F& f = F::instancja(); boost::shared_ptr<A> a = f.createA(); Mój ogólny scenariusz jest taki, że 1. Potrzebuję tylko jednej instancji klasy albo ze względów optymalizacyjnych (nie potrzebuję wielu obiektów fabryki) albo do współdzielenia wspólnego stanu (np. fabryka wie, ile instancji klasy A może jeszcze utworzyć) 2. Potrzebuję sposobu na dostęp do tego wystąpienia f F w różnych miejscach kodu. **Nie interesuje mnie** dyskusja, czy ten wzorzec jest dobry czy zły, ale zakładając, że chcę uniknąć używania singletona, jakiego innego wzorca mogę użyć? Miałem takie pomysły, jak: (1) pobrać obiekt fabryki z rejestru lub (2) stworzyć fabrykę w pewnym momencie podczas uruchamiania programu, a następnie przekazać fabrykę jako parametr. W rozwiązaniu (1) sam rejestr jest singletonem, więc właśnie przeniosłem problem nieużywania singletona z fabryki do rejestru. W przypadku (2) potrzebuję jakiegoś początkowego źródła (obiektu), z którego pochodzi obiekt fabryki, więc obawiam się, że ponownie wrócę do innego singletona (obiektu, który dostarcza moją instancję fabryki). Idąc za tym łańcuchem singletonów, mogę zredukować problem do jednego singletona (cała aplikacja), przez który _wszystkie inne singletony_ są bezpośrednio lub pośrednio zarządzane. Czy ta ostatnia opcja (używanie jednego początkowego singletona, który tworzy wszystkie inne unikalne obiekty i wstrzykuje wszystkie inne singletony we właściwe miejsca) byłaby akceptowalnym rozwiązaniem? Czy jest to rozwiązanie, które domyślnie sugeruje się, gdy odradza się korzystanie z singletonów, czy jakie są inne rozwiązania, np. w powyższym przykładzie? **EDYTUJ** Ponieważ myślę, że punkt mojego pytania został przez niektórych źle zrozumiany, oto kilka dodatkowych informacji. Jak wyjaśniono m.in. tutaj słowo **singleton** może wskazywać (a) klasę z pojedynczym obiektem instancji oraz (b) wzorzec projektowy używany do tworzenia i uzyskiwania dostępu do takiego obiektu. Aby wszystko było jaśniejsze, użyjmy terminu **unikalny obiekt** dla (a) i **singleton pattern** dla (b). Tak więc wiem, czym jest wzorzec singletona i wstrzykiwanie zależności (BTW, ostatnio intensywnie używam DI do usuwania wystąpień wzorca singletona z jakiegoś kodu, nad którym pracuję). Chodzi mi o to, że dopóki graf całego obiektu nie zostanie utworzony z pojedynczego obiektu żyjącego na stosie metody głównej, zawsze będzie potrzeba dostępu do niektórych unikalnych obiektów za pomocą wzorca singleton. Moje pytanie brzmi, czy posiadanie kompletnego tworzenia wykresu obiektów i okablowania zależy od głównej metody (np. za pomocą jakiegoś potężnego frameworka DI, który nie używa samego wzorca) jest jedynym rozwiązaniem wolnym od **singleton-pattern**.


title: Jak zaimplementować bezpieczną kolejkę priorytetową w C?

text: Mam przypisanie do zaimplementowania kolejki priorytetowej w C, a także do tworzenia aplikacji, która z niej korzysta. Ja natomiast znam tylko C na poziomie podstawowym (znam Javę). Moja intuicja podpowiada, że muszę nauczyć się wskazówek. Jakich innych przeszkód powinienem się spodziewać lub na które powinienem się przygotować? Jak mam to zabezpieczyć?


title: Jaki jest właściwy sposób sprawdzania danych zatwierdzenia w Git?

text: Moim celem jest sprawdzenie danych zatwierdzenia, które nie spełniają określonych wymagań, a następnie odrzucenie tworzonego lub wypychanego zatwierdzenia do zdalnego repozytorium. Problem z wykonaniem przechwycenia przed zatwierdzeniem polega na tym, że trudno jest go wdrożyć u wielu osób, które muszą ręcznie aktualizować plik przechwycenia przed zatwierdzeniem. Ponadto Git nie pozwala na posiadanie podmodułów w folderze .git, co niestety byłoby bardzo łatwe do wdrożenia. Inną opcją, którą widzę, jest zaewidencjonowanie, uważam, że hak aktualizacji po stronie zdalnej, który sprawdzi każde zatwierdzenie wypychane przez dewelopera i odrzuci naciśnięcie, jeśli którekolwiek z zatwierdzeń nie przejdzie testów. Czy ktoś ma jakiś wgląd w ten problem? A jeśli tak, czy mógłbyś podać lub wskazać mi przykładowy skrypt przechwytujący aktualizację? Jestem trochę zdezorientowany, jak to działa.


title: Jakiś powód myślników w identyfikatorze GUID?

text: Gdy tylko wygenerowałem GUID, znalazłem kilka myślników pomiędzy znakami, a także w określonych odstępach 8b55fec7-c987-4e7b-abad-16e5aaea9b53 Czy jest za tym jakaś historia? **Uwaga:** Moim zamiarem jest usunięcie tych myślników, ponieważ dodaję ten identyfikator GUID do nazwy pliku, a nasza nazwa pliku powinna być tylko alfanumeryczna.


title: Czy to jest język asemblera?

text: W dzieciństwie programowałem na radzieckim kalkulatorze MK-61. Posiadał cztery rejestry operacyjne (X, Y, Z, T) oraz 15 rejestrów pamięci. Program może mieć 105 kroków. O ile pamiętam, posiadał polecenia typu: * Zamień rejestry X i Y * Przesuń rejestry (Z do T, Y do Z, X do Y) * Kopiuj z rejestru pamięci (1..15) do X * Kopiuj z X do rejestr pamięci (1..15) * Jeśli X < 0 to przejdź do kroku programu ## * Wykonaj operację (+, -, *, /) używając wartości X i Y i umieść wynik na X Czy to polecenie jest ustawione jako asembler? Czy miałem podstawowe pojęcie o językach asemblera używając tego urządzenia? ![Urządzenie](http://i.stack.imgur.com/yRDXh.jpg) Okazuje się, że jest to coś, co nazywa się "programowaniem klawiszy". Zabawny fakt: podobny kalkulator (jak ten, ale z pamięcią niezależną od energii) był używany jako sprzęt zapasowy do obliczeń trajektorii misji kosmicznych w 1988 roku. :-)


title: Dlaczego to ważne, że HTML i CSS nie są językami programowania?

text: Przykład tutaj: Jakie języki powinienem znać, jeśli jestem zainteresowany tworzeniem aplikacji internetowych ? Tak, rozumiem, że HTML i CSS nie są kompletne pod względem Turinga. Tak, rozumiem, że są to języki deklaratywne, a nie imperatywne. Ale dlaczego ludzie zawsze są wbijani w głowę tym pedantycznym (i prawdopodobnie oczywistym) faktem, gdy zadają pytanie o te języki?


title: Jak osoba nietechniczna może nauczyć się pisać specyfikację dla małych projektów?

text: Jak osoba nietechniczna może nauczyć się pisać specyfikacje dla małych projektów? Mój przyjaciel próbuje zlecić rozwój projektu statystycznego. W szczególności wykonuje dużo pracy w programie Excel i chce zlecić tworzenie skryptów, aby robić to, co teraz robi ręcznie. Jednak mój przyjaciel jest wyjątkowo nietechniczny. Jest słaby w pisaniu specyfikacji technicznych. Kiedy pisze specyfikację, jest ona pisana tak, jak opisałbyś robienie czegoś w programie Excel (przejdź do tej komórki, a następnie skopiuj wartość do tej komórki). Jest również zbyt gadatliwy i kilka razy podaje przykłady. Nie jestem pewien, czy właściwie opisuje przypadki narożnikowe. Pierwszy projekt, który zlecił na zewnątrz, okazał się porażką. Myślę, że przesadził z niektórymi szczegółami, ale za mało opisał narożne przypadki. Ten i/lub wynajęty przez niego koder nie przemyślał narożnych przypadków i nie zadawał odpowiednich pytań. Nie jestem pewny. Skontaktowałem się z nim przez komunikator i pół godziny zajęło mi znalezienie opisu, który powinien zająć pięć minut lub mniej. Na koniec napisałem dla niego skrypty, ale nie sprawdziłem, dlaczego jego proces z koderem się nie powiódł. Poprosił mnie o pomoc. Odmawiam jednak angażowania się, ponieważ wzięcie jego specyfikacji i przełożenie jej na jasne wymagania to 10x więcej pracy niż wykonanie na jasno napisanej specyfikacji. W jaki sposób powinien się uczyć? Czy są jakieś zasoby, z których mógłby skorzystać? Czy są sposoby, w jakie może uczyć się z małych, mało wymagających projektów praktycznych z programistami? Większość jego skryptów jest zorientowana na statystykę i przetwarzanie danych. np. weź tę kolumnę i przeprowadź przez nią średnią. Usuń te wiersze w tych warunkach. Więc wyzwanie jest inne niż specyfikacja aplikacji internetowej.


title: Terminologia dostawy i rząd wielkości

text: Jaki jest standardowy sposób opisywania, w jaki sposób produkty oprogramowania są wydawane i proporcjonalny rząd wielkości, do którego przenoszone są zmiany w stosunku do oprogramowania? Czy 1. Wydanie 2. Aktualizacja 3. Poprawka 4. Poprawka błędu jest zbędna? Czy 1. Aktualizacja 2. Łatka jest zbyt zwięzła? Jako użytkownik końcowy myślę, że wszystkie poprawki błędów są łatami (o ile nie są w 100% nowym kodem), a wszystkie łaty powinny być aktualizacjami (o ile nie degradują produktu), a wszystkie aktualizacje powinny być wydaniami (o ile jak są faktycznie wydawane), ale to naprawdę nie pomaga nikomu zrozumieć, dlaczego muszą je zdobyć. Następnie, jeśli osoba, która wprowadza zmiany w oprogramowaniu, dodaje w notatkach „krytyczne” lub „zero-day”, nierozsądnie byłoby pozostawić te zmiany bez zastosowania.


title: Implementacja zdefiniowanego zachowania zmieniającego const type w c

text: Standard C stwierdza, że jeśli zostanie podjęta próba zmiany typu const, rezultatem jest zdefiniowana implementacja. Daje to błąd w moim systemie, ale od czego to zależy (kompilator, os)? Jakie są możliwe wyniki (zdefiniowane wdrożenie) na różnych maszynach?


title: Organizacja Wiki zespołu programistów aplikacji?

text: Czy są dostępne zasoby, które sugerują strukturę najlepszych praktyk tworzenia wiki dla programistów? Będę zarządzał zespołem, który nie miał najlepszych osiągnięć w zakresie dokumentacji, komunikacji i dzielenia się wiedzą. Chciałbym mieć skonfigurowany framework, aby ułatwić zespołowi rozpoczęcie pracy w tym obszarze. Dziękuję!


title: Jakie są najlepsze rozwiązania dotyczące usuwania z kontroli źródła?

text: Kiedy można usunąć? ...zniszczyć? Kiedy nigdy nie należy usuwać/niszczyć bez względu na wiek (np. oprogramowanie do zarządzania zdrowiem?)


title: Uwierzytelnianie API a uwierzytelnianie użytkownika

text: Przeczytałem wiele postów i artykułów na ten temat, ale nadal nie mogę połączyć kropek. Chcę stworzyć aplikację Rails, która jest ściśle API JSON, może przy użyciu Sinatry lub klejnotu rails-api. Chcę również stworzyć zarówno aplikację klienta sieci Web, jak i aplikację na iPhone'a, która korzysta z interfejsu API. Nie ma planów dotyczących korzystania z niego przez zewnętrznych deweloperów. Mogłem więc utworzyć osobną kombinację nazwy użytkownika i hasła zarówno dla klienta internetowego, jak i mobilnego i używać HTTP Basic przez SSL. Każda aplikacja miałaby te wartości jako konfiguracje w źródle i używała ich do uwierzytelniania w interfejsie API, aby tylko te mogły wykonać wywołanie. Każdy inny, kto spróbuje, otrzyma zwrócony błąd 401. Można to uznać za obsługę uwierzytelniania API. Aplikacje klienckie internetowe i mobilne umożliwiają użytkownikom końcowym rejestrację i odczyt/zapis danych w interfejsie API. Kiedy każdy użytkownik jest tworzony, tworzę i zapisuję token w jego profilu. Jeśli użytkownik pomyślnie się zaloguje, odsyłam token. Przy każdym kolejnym odczycie/zapisie wyślij również ten token w nagłówku. Otrzymuję token i wyszukuję użytkownika w bazie danych i dokonuję odczytu/zapisu. Czy to brzmi jak odpowiedni sposób radzenia sobie z tym. W przypadku klienta internetowego, gdy początkowo odsyłam token, gdzie go przechowuję. W ciasteczku? Czy upuszczam również plik cookie do obsługi stanu sesji?


title: Programowe znalezienie notacji Landau (notacja Big O lub Theta) algorytmu?

text: Jestem przyzwyczajony do ręcznego wyszukiwania notacji Landau (Big O, Theta...) moich algorytmów, aby upewnić się, że są one tak zoptymalizowane, jak to tylko możliwe, ale kiedy funkcje stają się naprawdę duże i złożone, zaczyna to robić za dużo czasu, żeby zrobić to ręcznie. jest również podatny na błędy ludzkie. Poświęciłem trochę czasu na Codility (ćwiczenia z kodowania/algo) i zauważyłem, że podadzą ci notację Landau dla przesłanego rozwiązania (zarówno w przypadku użycia czasu, jak i pamięci). Zastanawiałem się, jak oni to robią... Jak byś to zrobił? Czy istnieje inny sposób niż analiza leksykalna lub parsowanie kodu? To pytanie dotyczy głównie PHP i/lub JavaScript, ale jestem otwarty na każdy język i teorię.


title: Jak przekonać szefa, że ANSI C jest nieadekwatny do naszego nowego projektu?

text: Kilka miesięcy temu zaczęliśmy opracowywać aplikację do sterowania własnym sprzętem testowym i rejestrowania zestawu pomiarów. Powinien mieć prosty interfejs użytkownika i prawdopodobnie wymagałby wątków ze względu na ciągłe nagrywanie, które musi mieć miejsce. Aplikacja ta będzie używana przez kilka lat iw tym okresie będzie obsługiwana przez wielu studentów informatyki. Nasz szef ukończył szkołę jakieś 30 lat temu (nie należy traktować tego jako wykroczenie; mam też ponad połowę tego czasu na plecach) i nakazał opracowanie tej aplikacji w ANSI C. Uzasadnienie jest takie, że jest jedynym, który będzie przez cały czas i dlatego musi być w stanie zrozumieć, co robimy. Orzekł również, że nie powinniśmy używać abstrakcyjnych typów danych; dał nam nawet listę z nazwami zmiennych globalnych (westchnienie), których chce, abyśmy używali. Właściwie przez jakiś czas próbowałem tego podejścia, ale naprawdę spowalniało mnie to, aby upewnić się, że wszystkie operacje wskaźnika są bezpieczne, a wszystkie struny mają prawidłowy rozmiar. Dodatkowo liczba wierszy kodu, które faktycznie odnosiły się do problemu, stanowiła tylko niewielki ułamek naszej bazy kodu. Po kilku dniach odrzuciłem całość i zacząłem od nowa, używając C#. Nasz szef widział już uruchomiony program i podoba mu się sposób jego działania, ale nie wie, że jest napisany w innym języku. W przyszłym tygodniu spotkamy się we dwójkę, aby omówić kod źródłowy, aby „wiedzieć, jak go obsługiwać”. Trochę się boję i chciałbym usłyszeć od Was, jakich argumentów mógłbym użyć na poparcie swojej decyzji. Tchórzliwie twoje,


title: Co myślisz o „Planning Poker”?

text: Planning Poker Podsumowanie, jeśli nie chcesz czytać artykułu wiki: 1. Zdobądź listę zadań, które chcesz wykonać w nadchodzącej iteracji 2. Dla każdego zadania: 2.1 Omów z grupą, co to oznacza 2.2 Wszyscy zapisują / wybiera szacunkową ilość wysiłku potrzebnego do wykonania zadania 2.3 Każdy ujawnia swoje oszacowanie 2.4 Najwyższe i najniższe wartości odstające wyjaśniają swoje rozumowanie 2.5 Powtarzaj aż do osiągnięcia konsensusu Zwykle coś podobnego do liczb z ciągu Fibonacciego, np. 0, ½, 1, 2, 3, 5, 8, 13, 20, 40, 100 są wartościami dozwolonymi, więc nie otrzymujesz długich argumentów przy zbliżonych wartościach, takich jak 23 vs 27. Co więcej, liczby reprezentują bezjednostkową wartość wysiłku, której wartość jest określana przez zadanie bazowe, które wszyscy zgadzają się równe około 1, a wszystko inne jest względem niego. Docelowo celem jest dobre wyczucie „szybkości” danej drużyny, czyli liczby tych punktów, które można zdobyć w danej iteracji. Dzięki temu możliwe jest dość dokładne oszacowanie czasu trwania danej funkcji. * * * Zrobiliśmy to na spotkaniach dotyczących planowania iteracji w jednej firmie, w której pracowałem, i pomyślałem, że to jedna z niewielu dobrych rzeczy w tej konkretnej firmie. Zastanawiam się więc, czy ktoś tego używał? Czy uważasz, że to przydatne narzędzie do szacowania? Czy sprawdza się we wszystkich sytuacjach, czy nadaje się do określonych zespołów, projektów itp.?