title: Szybka nauka: czy to źle?

text: Jak wielu z was musiało zauważyć, nauka programowania nie jest sprawą z dnia na dzień, wymaga lat ciężkiej pracy (naprawdę powinienem odnieść się tutaj do tego wspaniałego artykułu Petera Norviga). Ale jest wiele rzeczy, które możesz zrobić, aby zrobić imponujące szybkie postępy, możesz skorzystać z samouczków online, stron internetowych takich jak projecteuler lub CodingBat, pomocy Stackoverflow lub innych szybkich rzeczy, które mogą dać ci możliwość zrobienia czegoś... Ty może nie potrzebować wszystkich podstawowych rzeczy, które otrzymasz, jeśli pójdziesz do szkoły lub będziesz się uczyć w jakiś formalny sposób. Mogą zostać pominięte, a jeśli nic nie pójdzie nie tak, Twoja praca zostanie wykonana bez zajmowania się nimi (nie mówię o tworzeniu jądra lub jakiejś wielkiej rzeczy, ale o rzeczach takich jak tworzenie strony internetowej, program do sortowania plików, podstawowa baza danych skrypty zarządzania lub cokolwiek innego, co może sprawić, że zostaniesz zatrudniony lub w jakiś sposób przyniesie ci pieniądze). Pytanie brzmi: do jakiego stopnia możesz osiągnąć szybką naukę? Jakie są korzyści z tego wszystkiego, czego uczy się w szkołach na temat programowania? (i mam tu na myśli teorię, jak działają rzeczy wewnętrzne i filozofię technik programowania lub jakiekolwiek artykuły abstrakcyjne, a nie część praktyczną) i czy dana osoba może iść dalej i rozwijać się w ten sposób, czy też musi się przestawić na powolną, stabilną drogę, jeśli chce się rozwijać? Dziękuję... Każde osobiste doświadczenie lub powiązanie z osobistym doświadczeniem będzie bardzo mile widziane... EDIT: i ważne pytanie: jeśli uważasz, że szybkie uczenie się sprawia, że osoba jest na niskim lub średnim poziomie, ale nie zabierze jej do wysoki poziom lub poziom architekta, jak może nadrobić zaległości w zasadach lub aspektach teoretycznych w biegu, podczas gdy robi postępy? jak odgórne podejście do uczenia się praktycznie, a następnie zagłębić się w zasady, które pominął, jak można to osiągnąć?


title: Czy obsługa wyjątków jest problemem przekrojowym?

text: Nie widzę dużej różnicy między obawami dotyczącymi obsługi wyjątków i logowania, ponieważ oba są problemami przekrojowymi. Co myślisz? Czy nie powinno być obsługiwane osobno, a nie przeplatane z podstawową logiką implementowaną przez metodę? **EDYTUJ** : To, co próbuję powiedzieć, to to, że moim zdaniem implementacja metody powinna zawierać tylko logikę udanej ścieżki wykonania, a wyjątki powinny być obsługiwane gdzie indziej. Tu nie chodzi o zaznaczone/niesprawdzone wyjątki. Na przykład język może obsługiwać wyjątki w pełni sprawdzony sposób, używając konstrukcji takich jak ta: class FileReader { public String readFile(String path) { // zaimplementuj logikę odczytu, unikaj obsługi wyjątków } } handler FileReader { handle String readFile(String path) { when (IOException joe) { // w jakiś sposób uzyskaj dostęp do FileInputStram i zamknij go } } } W powyższym języku koncepcyjnym program nie skompiluje się przy braku `FileReader` _handler_ , ponieważ `FileReader` _class_ readFile nie zgłasza wyjątku. Tak więc deklarując `FileReader` _handler_ , kompilator może zapewnić, że jest on obsługiwany i program się kompiluje. W ten sposób mamy to, co najlepsze zarówno ze sprawdzonych, jak i niesprawdzonych problemów z wyjątkami: odporność i czytelność.


title: Co się dzieje, gdy firma mówi/udaje, że używa systemu kontroli wersji (lub innego narzędzia/metodologii), ale tego nie robi?

text: To pytanie może wyglądać jak połączenie: Czy mała firma (15 programistów) nie używa zarządzanej kontroli źródła/wersji? oraz Jak przekonać członka zespołu, który uważa się za seniora, do nauczenia się podstaw koncepcyjnych SVN?. Moje zainteresowania mają charakter czysto akademicki, bo wymieniona tutaj firma już nie istnieje, ale ciągle pojawia się w dyskusjach, więc bardzo chciałabym poznać przemyślenia społeczności, jak się zachować w takiej sytuacji. Zdarzyło mi się to dwukrotnie, przy czym ostatni przykład był bardziej interesujący: odwiedziłem firmę na rozmowę kwalifikacyjną i zostałem poproszony o doświadczenie w działalności wywrotowej. Potem wszedłem w obszerne koncepcje związane z QnA, takie jak rozgałęzianie/merging, prawa dostępu itp. W końcu dostałem pracę. Od pierwszego dnia zauważyłem, że wszyscy korzystają z dysku współdzielonego, na którym kodowali. Ponieważ subversion była używana jako kopia zapasowa, ludzie musieli wykonywać commity ze swoich lokalnych maszyn, na współdzielonym dysku Windows, co sprawiało, że każdy commit czasami trwał dłużej niż 30 minut (nie wiem dlaczego), a czasami napotykali blokady lub wszelkie inne problemy, w których wystąpiły. Był szablon projektu, z którego zrobiliśmy „oddział”. Nigdzie nie łączy się. Kiedy więc skonfrontowałem się z moim przełożonym, powiedziano mi, że mamy instalację svn i że używamy jej właściwie, oczywiście nie. Co zatem należy zrobić w takim przypadku (przypadkach) ze strony dewelopera/pracownika? * Nic, zaakceptuj to jako różnicę w perspektywie, * Odejdź * Spróbuj edukować zespół


title: Aplikacja Java do obsługi rekordów (CRUD)

text: Jestem nowy w JavaEE i mam tu do czynienia z napiętą sytuacją. Muszę opracować aplikację Java do obsługi rekordów (CRUD) oraz zapisywania i ładowania XML dotyczącego tego rekordu. Oczywiście nie będę cię o to prosił. Prosiłbym Cię o podanie kilku wskazówek/wskazówki. Początkowo myślałem, że JAXB wystarczy do tego, ale po poświęceniu dużej ilości czasu na naukę i wdrożenie programu zdałem sobie sprawę, że może po prostu utworzyć XML i odczytać go, ale do aktualizacji, usunięcia będę musiał zrobić coś innego. Nawet gdyby nie wymóg aktualizacji i usuwania funkcji dla mojego projektu, nadal uważałbym, że samo użycie JAXB nie jest dobrą implementacją. Zastanawiałem się, czy "REST with Java (JAX-RS) using Jersey" powinno załatwić sprawę. ?


title: Jaki jest sens tych szczegółowych pytań do wywiadu technicznego dla starszego dewelopera?

text: Odbyłem wewnętrzny wywiad promocyjny, aby zdobyć tytuł programisty wyższego poziomu, coś w rodzaju Senior plus. Udzieliło mi wywiadu około 7 osób używających różnych technologii, a ludzie używający tej samej technologii ze mną (.Net) mają tendencję do zadawania bardzo szczegółowych pytań technicznych, które można łatwo znaleźć przez Google, na przykład, co to jest JIT, jak działa GC , różnica między List i Array, abstrakcyjna klasa i interfejs, delegat i zdarzenie, a nawet jaka jest nazwa klasy podczas przetwarzania pliku Upload itp. Mam tylko jedno pytanie dotyczące jednego z moich pomysłów projektowych w moim projekcie i po prostu prosta dyskusja. Ale dla większości innych moich projektów wydaje się, że po prostu nie są zainteresowani. Nie osiągnąłem jeszcze wyniku i byłoby to pod koniec tego tygodnia, ale oto moja obawa: osobiście uważam, że kiedy gram jako starszy programista, głównie rozwiązuję problemy i po prostu muszę wiedzieć, że jest jakiś konkretny sposób może to spowodować, ale mogę nie pamiętać wszystkich szczegółowych rzeczy i właśnie dlatego mamy taką szczegółową dokumentację referencyjną, taką jak MSDN. Czuję się dobrze, jeśli okaże się, że nie mam zbyt wielu doświadczeń w tej dziedzinie, takich jak poziom od Junior do średniozaawansowanego, ale kiedy zwykle rozmawiasz z facetem na wyższym poziomie, czy nie powinieneś bardziej skupić się, aby zobaczyć, jak ten facet jest logiczny i jak dobry czy on/ona rozwiązuje problemy? Czy wszyscy po prostu myślą, że jeśli znasz każdą szczegółową wiedzę techniczną na temat małych punktów, to jesteś Senior+? Sprawdzając te książki z pytaniami do wywiadów, odkryłem, że takich pytań jest więcej. Jeśli spędzę 5 dni, przejrzę tę książkę z listą pytań do wywiadu, mogę z łatwością sprawić, że ci faceci poczują się wow, ale czy to naprawdę coś znaczy? Ten rodzaj rozmowy kwalifikacyjnej może z łatwością pozwolić tym, którzy są dobrzy w zapamiętaniu rzeczy, uzyskać wyższe pensje, nawet jeśli nie mają pojęcia, jak rozwiązać problem trudności. Więc dlaczego tak się dzieje na świecie, czy to tylko powoduje, że umiejętności rozwiązywania problemów są trudne do zmierzenia? Służę tej firmie od lat i miałem tylko kilka wywiadów z innymi firmami, więc zastanawiam się, czy każda firma robi to samo? A może to tylko mój własny problem, że powinienem bardziej starać się zapamiętać wszystko w MSDN w mojej głowie, aby móc pracować nawet bez niego i Internetu? **EDYTUJ** Aby lepiej wyjaśnić moją sytuację dotyczącą troski Franka o zadania związane z pracą. Przepraszam, że moja wina nie wyjaśniła tego tła. Właściwie nie będzie żadnych zmian w konkretnych zadaniach, osobiście uważam, że to, co już zrobiłem, grałem już jako senior, jak przegląd kodu, członkowie mentorzy, przeglądanie dokumentacji BA i wydawanie opinii o technikach, projektowanie architektury nowych projektów, to tylko mój tytuł nadal zostałem bez seniora i poprosiłem o wyrobienie jednego, aby odzwierciedlić odcinek wypłaty i doprowadzić do takiego wywiadu. Jest to firma Saas, więc ludzie pozostają w jednym projekcie tak długo, jak ten produkt jest nadal żywy, co prowadzi do tego, że potrzebują ludzi, którzy będą w stanie zaprojektować więcej nowych funkcji w oparciu o bieżący produkt, naprawiać problemy techniczne na serwerach na żywo, projektować/przeglądać kod/mentoring członkowie A tytuł wyższego poziomu oparty na technice byłby Architektem i nie mamy żadnej podobnej pracy z Ekspertem Technicznym. Zgadzam się, że jeśli chcesz grać rolę eksperta technicznego, powinieneś wiedzieć więcej o technologii, której używasz. Przepraszam, że moja wina nie wyjaśniła tego tła.


title: Czy to niezręczne odstępy to jakiś styl?

text: Czytając kod innego programisty używa formatu, którego nigdy nie widziałem. NP. namespace MyNs.HereWeAre {//tab tutaj z jakiegoś powodu public class SomeClass {//tutaj kolejna tab public string Method() {//jeszcze inny tabulator string _variable = "";//brak implementacji tabu return _variable; } }//eof - klasa (Tak, te komentarze eof są w każdym pliku) }//eof - przestrzeń nazw // eof - plik Przyznaję... ten kod mnie wkurza. Trudno osiągnąć ten styl. Trzeba walczyć z domyślnym formatowaniem zapewnianym przez IDE, visual studio. Mogłabym trochę łatwiej połknąć tę tabletkę, gdybym wiedziała, że istnieje dobry powód dla tego stylu. Czy ten styl wywodzi się z innego języka programowania/IDE?


title: Hermetyzacja klasy w innej klasie w celu ukrycia jej ujawnionych właściwości i szczegółów

text: Mam zasadniczo klasę modelu danych, która reprezentuje strukturę danych XML, której używamy do modelowania naszego systemu. Klasa modelu znajduje się we wspólnym projekcie, który jest używany przez wiele różnych rozwiązań w celu wygenerowania wspólnej struktury danych XML do użytku przez dowolną liczbę aplikacji. W jednej aplikacji, w której jestem zaangażowany, udostępniliśmy klasę opakowującą dla jednej z tych klas modelu XML, ponieważ chcemy wykonać szereg operacji na danych modelu. Jednak inne części mojego programu również muszą uzyskać dostęp do tych danych w celu wykonania obliczeń. W tej chwili mam tę konfigurację (zauważ, że jest to tylko przykład, ale reprezentuje strukturę mojego kodu) 1) public class ModelWrapper { private readonly ModelClass _model; public int PropertyX { get { return _model.PropertyX; } } public ModelWrapper(ModelClass model) { _model = model; } // i inne potrzebne nam metody, które wykorzystują ujawnione przez nas właściwości, np. public void PerformOperation() { if(this.PropertyX > 10) // zrób coś innego // zrób coś innego } } Wygląda na to, że napotkać problem, w którym ja lub inny programista nieumyślnie użył prywatnej zmiennej _model. Wydaje mi się, że moglibyśmy skończyć z ukrytymi problemami w tej metodzie w tym, że istnieją dwa sposoby na dotarcie do tych samych danych i jeśli umieścimy jakąś logikę w publicznej właściwości get to moglibyśmy tego przegapić, jeśli bezpośrednio się odwołujemy zmienna prywatna. Inną alternatywą, o której pomyślałem, była 2) public class ModelWrapper { public readonly int PropertyX; public ModelWrapper(ModelClass model) { PropertyX = model.PropertyX; // ustaw tutaj inne właściwości, które chcemy wyeksponować w ModelClass ... } // i inne potrzebne nam metody, które wykorzystują ujawnione przez nas właściwości, np. public void PerformOperation() { if(this.PropertyX > 10) // zrób coś else // zrób coś innego } } Lub inną opcją po przeczytaniu kilku postów na ten temat jest: 3) public class ModelWrapper { private readonly int _propertyX; public int PropertyX { get { return _propertyX; } } public ModelWrapper(ModelClass model) { _propertyX = model.PropertyX; } // i inne potrzebne nam metody, które wykorzystują ujawnione przez nas właściwości, np. public void PerformOperation() { if(this.PropertyX > 10) // zrób coś innego // zrób coś innego } } Dlaczego to robisz? Pomyślałem, że dobrym pomysłem byłoby ukrycie modelu przed naszym kodem, ponieważ i tak chcieliśmy, aby klasa opakowująca wykonywała metody, więc po co więc wystawiać również model? Myślałem, że to może być przesada, ale zapisuje w innych częściach kodu coś w rodzaju **ModelWrapper.Model.PropertyX** itd. A więc do pytania. Która metoda, jeśli w ogóle, byłaby lepszym rozwiązaniem. Czy to przesada, czy istnieją lepsze praktyki w tym zakresie? EDYCJA: Dodałem kolejną opcję (3), ponieważ nie ma potrzeby ustawiania właściwości, które ujawniam, więc niekoniecznie chciałem mieć prywatny zestaw, ponieważ jest on ustawiany tylko w konstruktorze. Stąd zmienna prywatna tylko do odczytu, która jest używana w części get ujawnionej właściwości? Znalazłem również pytanie o przepełnienie stosu na ten temat pod adresem http://stackoverflow.com/questions/2249980/c-immutability-and-public-readonly-fields, ale nie musi ono koniecznie oznaczać, które rozwiązanie było lepsze/preferowane z obecne ograniczenia języka c#. Jakieś pomysły na 3 wdrożenia co do najlepszych praktyk?


title: Rozwiązanie Rails do filtrowania treści dla urządzeń mobilnych?

text: Należy zauważyć, że nie interesuje mnie zwykłe „ukrywanie” treści na urządzenia mobilne, chcę całkowicie je odfiltrować. Nie próbuję też rozwiązać tego problemu, tworząc interfejs dostosowany do urządzeń mobilnych (mob.example.com). Pojawiło się kolejne pytanie dotyczące czegoś podobnego: Jak zapobiec ładowaniu bezużytecznych treści na stronie w projektowaniu responsywnym? Rozwiązaniem w tym poście było ustawienie sesji podczas początkowego żądania, a następnie wykorzystanie sesji do filtrowania treści w kolejnych żądaniach. Programuję głównie w Railsach i zastanawiam się, czy są jakieś perełki lub specyficzne dla rubinów rozwiązania tego problemu?


title: Obiekty biznesowe w warstwie dostępu do danych

text: Dlatego tworzyłem warstwę dostępu do danych za pośrednictwem TDD i podszedłem do tego z pewnym niepokojem. Wolałbym nie iść złą ścieżką, więc pomyślałem, że poproszę was, żebyście sprawdzili, czy moje myśli są zgodne z czystą architekturą. Metody w mojej warstwie dostępu do danych (w skrócie DAL) są dość proste. Są one zgodne z procedurami składowanymi w bazie danych (nie ma innego sposobu na wywołanie ich w celu utrzymania porządku) i zawierają te same parametry, co procedury. Następnie po prostu łączą się z bazą danych i zwracają wynik zapytania. Oto jeden przykład: public int DeleteRecord(int recordId) { recordId.RequireThat("recordId").NotZeroOrLess(); Parametry List<SqlParameter> = new List<SqlParameter>(); parameters.Add(new SqlParameter { ParameterName = "@RecordId", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Input, Value = recordId}); return this.ExecuteNonQuery("DeleteRecord", parameters.ToArray()); } Działa to doskonale dla tego typu metody, ponieważ nie robię nic znaczącego z zestawem wyników. Chcę tylko upewnić się, że polecenie zadziałało, więc zwrócę wynik niebędący zapytaniem, czyli tylko wiersze, których dotyczy problem, i mogę zweryfikować logikę za pomocą tego numeru. Jednak powiedzmy w innej metodzie DAL, chcę załadować rekord. Moja procedura ładowania będzie wykonywać `wybory` względem kilku tabel i zwracać `DataSet`, ale walczę z tym, czy mój DAL powinien tworzyć obiekty biznesowe w ramach metody przy użyciu `DataSet`, _lub_ jeśli moje obiekty biznesowe powinny miećpo prostu metodę `Load()` która pobiera `DataSet` z DAL, a następnie w zasadzie sama się wypełnia. Wykonanie tego za pośrednictwem DAL spowodowałoby mniej logiki w obiektach biznesowych (nawet jeśli jest to tylko logika wyboru , to nadal jest logiczne), ale trochę zatłoczy DAL i sprawi, że poczuje się, jakby naprawdę robił coś, czego nie powinien robić. Co myślicie?


title: Różnica między kontrolerem a dyspozytorem w MVC dla webowych frameworków?

text: W MVC zastosowanym do WSGI lub Java EE, czy Servlet jest kontrolerem, dyspozytorem, czy obydwoma? Chyba widziałem schematy systemu, gdzie kontroler i dyspozytor są inni. Czy kontroler może kontrolować instrukcje SQL, które nie powinny znajdować się w dyspozytorze? Dziękuję Ci


title: Porady, czy używać skryptów, kompilacji w czasie wykonywania lub czegoś innego

text: Pracuję w obszarze produkcyjnym w moich zakładach oraz projektuję i tworzę oprogramowanie do uruchamiania naszych automatycznych urządzeń testowych do testowania naszych produktów. Za każdym razem, gdy angażuję się w nową maszynę, kończę z innym i (miejmy nadzieję) lepszym projektem. W każdym razie doszedłem do punktu, w którym czuję, że muszę zacząć standaryzować wszystkie maszyny za pomocą tego samego programu. Widzę problem, jeśli chodzi o stosowanie aktualizacji, ponieważ w tej chwili procedury testowe są na stałe zakodowane w programie na każdej stacji. Muszę mieć możliwość aktualizacji podstawowego programu bez wpływu na sekcję testowania. Widzę to tak, że będzie to oznaczać podzielenie programu na 2 sekcje. 1. Główny interfejs użytkownika — jest to rdzeń, który komunikuje się ze wszystkim na komputerze, takim jak kamery, czujniki, drukarka itp. i jest samodzielną aplikacją. 2. Procedura testowa — to kroki, które są wykonywane za każdym razem, gdy maszyna przechodzi test. Główny interfejs użytkownika załaduje procedurę testową i wykona, gdy tylko będzie wymagany test. Moje pytanie brzmi, jakie jest najlepsze podejście do tego, jeśli aplikacja ładuje plik i wykonuje kod za pomocą in? Weź pod uwagę, że kod w procedurze testowej będzie wymagał dostępu do publicznych metod w interfejsie użytkownika/systemie rdzenia, aby komunikować się z czujnikami itp. Słyszałem o MS Roslyn i rzuciłem okiem, czy to rozwiąże mój problem?


title: Jak mogę udokumentować czyjąś przeszłą pracę?

text: Jesteśmy w złej sytuacji, ponieważ mamy bardzo mało dokumentacji dotyczącej dostosowywania naszych byłych pracowników do systemu o znaczeniu krytycznym dla firmy. Wprowadzono wiele zmian w Crystal Reports, jednostkach baz danych i zastrzeżonych plikach konfiguracyjnych/programowych dla naszego oprogramowania ERP. Aktualna dokumentacja ogólnie brzmi mniej więcej tak: > Ten program jest uruchamiany przed fakturowaniem. Znane błędy: brak. > > Uruchom ten program po zainstalowaniu oprogramowania X. > > Zmieniono następujące pola w tym raporcie: (bez wyjaśnienia jak i > dlaczego) Nasz sklep IT jest mały, a w przypadku oprogramowania ERP większość pracy została wrzucona do jednego worka jedna osoba (to ja teraz), więc nikt inny tutaj nie wie, co zrobiliśmy. Dział IT i księgowy zna drobiazgi (czasem bardzo pomocne), ale to za mało. Innym problemem jest to, że nasz dział księgowości wydaje się _uważać_, że jesteśmy dobrze udokumentowani. To prawda, że prowadziliśmy wiele rejestrów tego, co poszło _nie tak_ , ale niewiele wyjaśnia, co (jeśli w ogóle) zostało zrobione, aby naprawić te problemy. Mamy setki artykułów wyjaśniających błędy, ale dokumenty wyjaśniające zmiany (jak pokazano powyżej) są prawie bezużyteczne. **Jak mogę zająć się dokumentowaniem przeszłych zmian, kiedy nie wiem, co wszystko zostało zrobione?** Mogę zacząć od udokumentowania _co_ zmieniliśmy: Pliki, tabele bazy danych itp., które są nam potrzebne, aby system działał. Mogę również udokumentować to, co _robimy_; kiedy raporty są uruchamiane, dlaczego ludziom powiedziano, aby używali raportu/programu X. Ale kiedy jedna z tych dostosowanych rzeczy ma problem, zawsze wracam do punktu wyjścia. Jak mogę proaktywnie dokumentować te rzeczy dla siebie i innych?


title: Zużycie DAO/serwisu internetowego w aplikacji internetowej

text: Obecnie pracuję nad konwersją "starej" aplikacji internetowej (Coldfusion) z pojedynczego źródła danych (bazy danych MSSQL) do wielowarstwowego OOP. W moim obecnym systemie istnieje baza danych do odczytu/zapisu ze wszystkimi zwykłymi rzeczami i dodatkowymi bazami danych „tylko do odczytu”, które są eksportowane codziennie/co godzinę z systemu planowania zasobów przedsiębiorstwa (ERP) przez zadania SSIS z produktem/produktem biznesowym i produkcją/ Dane planowania SCM. Powodem, dla którego mam możliwość i potrzebę przejścia na wielowarstwowy OOP, jest to, że w całej firmie wdrażany jest nowszy, bardziej nowoczesny system ERP, który będzie kompletnym zamiennikiem. Ten nowszy system ERP oferuje kilka interfejsów dla aplikacji innych firm, takich jak moja, od bezpośredniego dostępu SQL do usługi sieciowej dotNet lub usługi sieciowej typu SOAP. Znalazłem kilka odpowiednich frameworków, z których chętnie skorzystam (Coldspring, FW/1), ale nie jestem pewien, jakie wzorce projektowe mają zastosowanie do mojego obiektu/komponentu dostępu do danych i jak zarządzać tokenami połączenia/sesji, na tym tle moje pytanie składa się z trzech części: 1. Po pierwsze mam obawy związane z przejściem od względnego bezpieczeństwa pracy SSIS, która chroni mnie przed przestojami i szybkością systemu ERP, do bezpośredniego łączenia się z jedną z usług sieciowych, które, jak zauważam, wydają się znacznie wolniejsze niż Spodziewałem się (proste/małe prośby często zajmują nawet całą sekundę). Czy są jakieś wzorce projektowe, które mogę zbadać/użyć do buforowania/ochrony mojej warstwy danych? 2. Rozumiem, że obiekty dostępu do danych (komponent, który łączy się bezpośrednio z usługami sieciowymi i konwertuje je na typy danych, z którymi mogę następnie pracować w moich obiektach domeny) powinien być singletonami (i będzie działał jako adapter/fasada), mam rację? 3. W ramach obiektu dostępu do danych muszę ustawić połączenie za pomocą nazwy użytkownika/hasła (mógłbym ustawić wielu użytkowników i/lub połączyć się z tym wiele razy), które odpowiada tokenem sesji, który należy podać przy każdym kolejnym żądaniu . Czy zrobię to raz i udostępnię to w całej aplikacji, czy ustawię nowe "połączenie" dla każdego użytkownika mojej aplikacji i zatrzymam token w jego zasięgu sesji (może szybko osiągnąć limity licencyjne), czy ustawię "połączenie" na żądanie strony, czy też brakuje mi jakiegoś wzorca projektowego, który może zarządzać wieloma „połączeniami”, w których żądanie/dostęp używa pierwszego wolnego „połączenia”? Warto zauważyć, że jeśli system ERP umrze, będę musiał zresetować/unieważnić wszystkie połączenia i zacząć od zera, a w zależności od tego, z której usługi internetowej korzystam, może być konieczne ręczne zamknięcie "połączenia/sesji"


title: Czy powinienem dołączyć nagłówek licencji wielokrotnej do oprogramowania z podwójną licencją?

text: Czy jest to konieczne, jeśli oprogramowanie wydane na warunkach obu licencji LGPL3 i GPL3 musi zawierać zarówno nagłówek licencji na górze każdego pliku? A może po prostu umieść nagłówek GPL? lub po prostu umieść tekst licencji LGPL3 w jakimś pliku, takim jak COPYING.LESSER ? EDYTOWANE: Jestem właścicielem praw autorskich do projektu!


title: Dlaczego nie jest zaimplementowany sprzęt do potęgowania?

text: Dlaczego w sprzęcie nie ma operacji potęgowania, mimo że wiele języków ma do tego wbudowane operatory? Czy to dlatego, że nawet implementacje sprzętowe musiałyby używać tego samego algorytmu co oprogramowanie (tj. Żadna implementacja sprzętowa nie może być znacznie bardziej wydajna), czy dlatego, że jest rzadko używana, lub z innego powodu?


title: Listy i kolekcje w MVVM — jakie podejście zastosować?

text: Obecnie pracuję nad aplikacją Silverlight przy użyciu Caliburn.Micro. Obecnie mamy widoki (np.: `PeopleView`) i modele widoków (np.: `PeopleViewModel`), które odpowiadają 'stronom' aplikacji. `PeopleView` może zawierać `ListBox` („`People`”), który jest powiązany z `ObservableCollection` obiektów `Person` i ma przypisany `ItemTemplate`, aby określić sposób wyświetlania każdego obiektu `Person`. Jednak jeden z moich kolegów zaczął implementować listę w inny sposób, gdzie każda „Osoba” jest modelem widoku (tj. „PersonViewModel”) i ma skojarzony „PersonView” w celu określenia, w jaki sposób ten „PersonViewModel” powinien być wyświetlany w „ListBox”. Ten ostatni wydaje się bardziej MVVM (a przynajmniej ma więcej wzmianek o V i VM!), ale nie jestem pewien, czy istnieje szczególnie duża przewaga robienia jednego nad drugim. Czy oba te sposoby są prawidłowe? Czy jest lepszy od drugiego?


title: Jakie zagadnienia niosą ze sobą największe ryzyko w projekcie oprogramowania?

text: Oczywiście projekty oprogramowania różnią się od innych branż pod wieloma względami, takimi jak na przykład zapewnienie jakości, pomiar postępu projektu i wiele innych rzeczy. Unikalne cechy projektów oprogramowania sprawiają również, że proces zarządzania ryzykiem jest wyjątkowy. Wiele problemów w projekcie może prowadzić do niedopuszczalnych opóźnień lub braku dostarczenia wartości biznesowej. Mogą nawet doprowadzić do kompletnej katastrofy w projekcie. Jakie są najbardziej śmiertelne czynniki ryzyka w projekcie oprogramowania? Jak je analizować, zapobiegać i sobie z nimi radzić? W szczególności interesują mnie problemy, które można wykryć od samego początku i na które należy zwracać uwagę (na przykład możesz zostać poinformowany o interfejsie API innej firmy, z którego korzysta bieżąca aplikacja, a którego brakuje dokumentacji). Podziel się swoimi doświadczeniami, jeśli są istotne.


title: Użycie malloc w C

text: Czy konieczne jest wywoływanie funkcji free za każdym razem, gdy używamy malloc w C. Pytam o to, ponieważ wielokrotnie widziałem, że nie jest wywoływana. Dziękuję Ci


title: Czy lepiej mieć konstruktorów z parametrami czy bez?

text: Czy lepiej mieć konstruktorów z parametrami czy bez i dlaczego? public NewClass( String a, String b, int c) wyrzuca IOException { //coś } _LUB_ public NewClass() { //coś }


title: Testowanie bazy kodu ze spójnością sekwencyjną

text: Mam ten naprawdę prosty program napisany w C za pomocą ncurses, który jest w zasadzie nakładką na sqlite3. Chciałbym zaimplementować TDD, aby kontynuować rozwój i znalazłem do tego fajny framework C unit. Jednak całkowicie utknąłem na tym, jak to zaimplementować. Weźmy na przykład ten przypadek: użytkownik wpisuje literę 'l', która jest przechwytywana przez ncurses getch(), a następnie uruchamiane jest zapytanie sqlite3, które dla każdego wiersza wywołuje funkcję zwrotną. Ta funkcja zwrotna wypisuje rzeczy na ekran za pomocą ncurses. Oczywistym sposobem pełnego przetestowania tego jest symulacja klawiatury i terminala oraz upewnienie się, że dane wyjściowe są zgodne z oczekiwaniami. Brzmi to jednak zbyt skomplikowanie. Myślałem o dodaniu warstwy abstrakcji między bazą danych a interfejsem użytkownika, aby funkcja wywołania zwrotnego wypełniła listę wpisów, a ta lista zostanie później wydrukowana. W takim przypadku byłbym w stanie sprawdzić, czy ta lista zawiera oczekiwane wartości. Dlaczego jednak miałbym zmagać się ze strukturą danych i listami w moim programie, skoro sqlite3 już to robi? Na przykład, jeśli użytkownik chce zobaczyć listę posortowaną w inny sposób, wyrzucenie listy i ponowne jej wypełnienie byłoby kosztowne. Musiałbym posortować listę, ale po co mam zaimplementować sortowanie, skoro sqlite3 już to ma? Korzystając z mojego oryginalnego projektu, mogłem po prostu wykonać inne zapytanie posortowane inaczej. Wcześniej robiłem TDD tylko z aplikacjami wiersza poleceń i tam naprawdę łatwo jest po prostu porównać wyniki z tym, czego się spodziewałem. Innym sposobem byłoby dodanie interfejsu CLI do programu i owinięcie programu testowego wokół CLI, aby przetestować wszystko. (Sposób, w jaki git.git robi z jego test-framework). Tak więc pytanie brzmi, jak dodać testowanie do ściśle zintegrowanej bazy danych/UI.


title: Usługi danych WCF (OData) a interfejs API sieci Web ASP.NET? Hipermedia?

text: Projektuję aplikację rozproszoną, która będzie składać się z usług REST i różnych klientów (Silverlight, iOS, Windows Phone 7, itp.). Byłem gotowy do podjęcia decyzji, że zaimplementuję moje usługi REST przy użyciu usług danych WCF (OData), ale teraz interfejs API sieci Web MVC 4 sprawił, że zakwestionowałem tę decyzję. To, co podobało mi się w OData, to funkcje zapytań URI i hipermediów, które otrzymujesz za darmo. To, co mi się nie podobało, to szczegółowość ładunku OData; mnóstwo niepotrzebnych znaków przelatujących przez drut. To, co podoba mi się w internetowym interfejsie API, to to, że ładunki są znacznie bardziej zwięzłe i mają możliwość odpytywania URI OData, jednak wydaje się, że brakuje hipermediów (przynajmniej po wyjęciu z pudełka). Mój szef również naciska na Web API, ponieważ „moce Microsoftu wspierają go, a OData nie cieszy się popularnością”. Mam więc dwa pytania: 1) Czy ktokolwiek może komentować tworzenie kopii zapasowych/oddziaływania internetowego interfejsu API i OData? 2) Czy oczekuje się, że internetowy interfejs API będzie natywnie obsługiwać hipermedia do czasu wydania, czy są jakieś gotowe implementacje lub przykłady, którym powinienem się przyjrzeć? Dziękuję!


title: Algorytm planowania dla planowania życia

text: Próbuję napisać kod, aby zaplanować zestaw rzeczywistych zadań, które są wprowadzane przez użytkownika. Te zadania są przechowywane w bazie danych sqlite. W tej chwili jedynymi parametrami, które biorę pod uwagę, są `Projekt, do którego należy zadanie --> p` `Nazwa samego zadania --> t` `I termin wykonania tego zadania --> d` Parametry `project` i `due date` są opcjonalne. Ale zakładając, że użytkownik zawsze wprowadzi przynajmniej „nazwę zadania” i „datę ukończenia” dla każdego zadania. Zastanawiałem się, czy możliwe jest zaplanowanie zestawu zadań za pomocą harmonogramu, takiego jak „Completely Fair Scheduler (CFS) ` na przykład!. Zdaję sobie sprawę, że CFS został napisany do planowania zadań o znacznie większej szczegółowości (nanosekundy) niż zestaw zadań proponowanych w tym celu ... Ale zdałem sobie sprawę, że może to być możliwe i może bardziej wydajne, jeśli mogę go zmodyfikować do pracy z zadania, które są w tej samej skali czasowej, co nasza percepcja czasu. Typowy wpis w bazie danych miałby format (p, t, d). „p” jest opcjonalne. Oto kilka przykładów. `(_, 'Zadzwoń do domu', 29.02.2012)` `(Praca, 'Poznaj szefa', 14.03.2012)` `(Praca, 'Poproś o podwyżkę', 18 /3/2012)` `(_, 'Zarezerwuj bilety', 03.10.2012)` `(Praca, 'Zamknij', 14.04.2012)` `(Osobiste, 'Zastrzyk z botoksu', 03.10. /2012)` `(Osobiste, 'Zdobądź implanty piersi', 10.10.2012)` ` `(_, 'Urodziny taty', 10.07.2012)` Oto sytuacja do rozważenia. Chciałbym się rano obudzić. Uruchom ten algorytm "jeszcze do zakodowania" na zestawie zadań... jak te podane powyżej... a chciałbym otrzymać harmonogram na resztę dnia, który zmaksymalizuje przepustowość. Na późniejszym etapie chciałbym przekazać tym algorytmom argumenty, które pozwoliłyby mi kontrolować harmonogram, aby zwracał zestaw zadań w zależności od mojej aktualnej sytuacji. Tak jak w pracy, chcę móc przekazywać algorytmowi argumenty, aby zwracał tylko zadania, które można wykonać w pracy. Mam nadzieję, że jestem w stanie przekazać sedno tego. Rozumiem, że sama „data ukończenia” nie jest wystarczająca do zaplanowania zadań na przykład za pomocą CFS... ale jeśli są inne parametry, które powinienem wziąć pod uwagę, daj mi znać. Pomocne byłyby wszelkie sugestie dotyczące rodzaju algorytmu planowania. Dziękuję.


title: Czy właściwe jest utworzenie oddzielnej puli dla każdego obrazu png w tej samej klasie?

text: Nadal prawdopodobnie jestem trochę zielony w kwestii łączenia obiektów i chcę się upewnić, że coś takiego jest wzorcem projektowania dźwięku, zanim naprawdę się tym zajmę. Weźmy następujący kod (który wykorzystuje framework Starling w ActionScript 3): [Embed(source = "/../assets/images/game/misc/red_door.png")] private const RED_DOOR:Class; private const RED_DOOR_TEXTURE:Texture = Texture.fromBitmap(nowy RED_DOOR()); private const m_vRedDoorPool:Vector.<Obraz> = nowy wektor.<Obraz>(50, prawda); . . . public function produceRedDoor():Image { // pobierz obraz Red Door } public function retireRedDoor(pImage:Image):void { // usuń obraz Red Door } Z wyjątkiem czterech kolorów: czerwonego, zielonego, niebieskiego i żółtego . Więc teraz mamy osobną pulę dla każdego koloru, osobną funkcję produkcji dla każdego koloru i osobną funkcję wycofania dla każdego koloru. Dodatkowo w grze jest kilka przedmiotów, które są zgodne z tym czterokolorowym wzorem, więc dla każdego z nich mamy cztery pule, cztery funkcje produkcji i cztery funkcje wycofywania. W samych obrazach jest więcej kolorów niż tylko ich dominujący, więc próba wrzucenia wszystkich drzwi, na przykład, do jednej puli, a następnie zmiana ich właściwości kolorów nie zadziała. Również brak słowa kluczowego static wynika z jego powolności w AS3. Czy to właściwy sposób na robienie rzeczy? * * * **EDYTUJ:** Pojedynczym elementem układanki jest to, czy powinienem spróbować wrzucić wszystkie te baseny do tej samej klasy, z zupełnie nowymi funkcjami i wszystkim dla każdej puli. Jest to poniekąd związane z innym pytaniem, które ostatnio zadałem. Mimo że przyjęta odpowiedź na to pytanie niekoniecznie odnosiła się do tego konkretnego scenariusza, uzyskanie większej liczby klas, zmiennych, abstrakcji itp. spowoduje większe obciążenie, a kiedy próbujesz zrobić coś takiego jak łączenie obiektów, jestem nie jestem pewien, czy takie uporządkowanie projektu klasy nie wprowadzi „zbyt dużych” kosztów. Jest to jednak tylko jedna indywidualna część tego, o co pytam, ponieważ pytanie jest ostatecznie znacznie bardziej ogólne.


title: Porady dotyczące projektowania solidnego programu do obsługi dużej biblioteki metainformacji i programów

text: Może to być zbyt niejasne, ale i tak nie szukam konkretnej odpowiedzi, ale raczej ogólnych zasad projektowania lub kierunku w kierunku zasobów, które radzą sobie z takimi problemami. To jedna z moich pierwszych aplikacji na dużą skalę i chciałbym zrobić to dobrze. **Krótkie wyjaśnienie** Moim podstawowym problemem jest to, że muszę napisać aplikację, która obsługuje dużą bibliotekę metadanych, może łatwo modyfikować metadane w locie, jest odporna na awarie i bardzo wydajny. (Coś w rodzaju parametrów projektowych iTunes, chociaż czasami iTunes działa gorzej, niż bym chciał). Jeśli nie chcesz czytać szczegółów, możesz pominąć resztę **Długie wyjaśnienie** W szczególności piszę program, który tworzy bibliotekę plików graficznych i metadanych o tych plikach. Istnieje lista tagów, które mogą, ale nie muszą, odnosić się do każdego obrazu. Program musi mieć możliwość dodawania nowych obrazów, nowych znaczników, przypisywania znaczników do obrazów i wykrywania duplikatów obrazów podczas pracy. Program zawiera przeglądarkę obrazów, która posiada operacje tagowania. Chodzi o to, że jeśli dany obraz A jest oglądany, gdy biblioteka ma znaczniki T1, T2 i T3, to ten obraz będzie miał flagi logiczne dla każdego z tych znaczników (w zależności od tego, czy użytkownik otagował ten obraz, gdy był otwarty w Widz). Jednak przed wyświetleniem w przeglądarce obraz A nie miałby żadnej wartości dla znaczników T1, T2 i T3. Zamiast tego miałby flagę „brudną” wskazującą, że nie wiadomo, czy A ma te znaczniki, czy nie. Program może w dowolnym momencie wprowadzić nowe tagi (co automatycznie ustawi wszystkie obrazy jako "brudne" w odniesieniu do tego nowego tagu). Ten program musi być szybki. Musi być w stanie łatwo wyświetlić listę obrazów z określonym tagiem lub bez niego, a także obrazów, które są „brudne” w odniesieniu do tagu. Musi być bezpieczny w przypadku awarii, ponieważ jeśli nagle się zawiesi, wszystkie informacje o tagowaniu wykonane w tej sesji nie zostaną utracone (choć być może można stracić część z nich). Wreszcie, musi działać z wieloma obrazami ( >10 000) Jestem dość doświadczonym programistą, ale nigdy nie próbowałem pisać programu o tak wymagających potrzebach i nigdy nie pracowałem z bazami danych. Jeśli chodzi o przechowywanie metadanych, wydaje się, że istnieje kilka opcji projektowych: **Wybór 1** : Poszczególne metadane kontra scentralizowane metadane **Indywidualne metadane**: miej osobny plik metadanych dla każdego obrazu. W ten sposób, gdy tylko zmienisz metadane obrazu, można go zapisać na dysku twardym bez konieczności przepisywania informacji dla wszystkich innych obrazów. **Scentralizowane metadane** : jeden plik do przechowywania metadanych dla każdego pliku. Prawdopodobnie wymagałoby to zapisu metadanych w odstępach czasu, a nie po każdej zmianie. Zaletą jest to, że możesz zachować scentralizowaną listę wszystkich obrazów z danym tagiem, ect, dzięki czemu zadanie pobierania wszystkich obrazów z danym tagiem jest bardzo wydajne


title: Offshoring projektu oprogramowania — rozwiązywanie konfliktów

text: Miałem za zadanie zarządzać projektem, który został zlecony niektórym ukraińskim programistom. Firma wynajęła ich za pośrednictwem Elance po **stałej cenie**. W tym momencie mój szef zostawił mnie _sam_, żebym sobie z nimi poradził i wykonał pracę. Stworzyłem szczegółową specyfikację całej rzeczy, którą należało zrobić. Projekt obejmował zajęcie się takimi rzeczami jak XMPP, RabbitMQ i Database. Na moim pierwszym spotkaniu z nimi (zawsze IM) wyjaśniłem **dokładnie**, co muszą zrobić. Wydawali się to rozumieć – i byli bardzo pewni, że będzie to łatwe. Na razie w porządku. Ale po tygodniu, kiedy spotkaliśmy się ponownie, byli pełni nieporozumień co do tego, co należy zrobić. Kiedy zapytałem jednego z programistów, czy zna XMPP, powiedział, że pracuje z nim po raz pierwszy. Na naszym pierwszym spotkaniu bardzo konkretnie wspomniałem o złożoności projektu i związanych z nim technologiach. Poza tym wielokrotnie prosiłem ich o napisanie funkcjonalnej specyfikacji, dokładnie JAK by to zrobili. Ale powiedzieli NIE i nalegali, że woleliby napisać kod. Powiedziałem ok. Projekt zakończył się po 3 tygodniach i dostarczyli to, co było potrzebne. W tym momencie zacząłem przeglądać kod. W większości było to w porządku, ale wystąpiły pewne ważne problemy: * na stałe zakodowali niektóre rzeczy, które musiały zostać oddzielone do pliku konfiguracyjnego * było wiele plików konfiguracyjnych, które musiałem skonsolidować w jednym * oni nie napisałem absolutnie ŻADNEJ dokumentacji * kilka innych drobnych zmian Poprosiłem ich o wprowadzenie tych zmian (z wyjątkiem dokumentacji) -- I pokłóciliśmy się. Powiedzieli, że ponieważ cena została ustalona, postąpiłem niesprawiedliwie, prosząc ich o wprowadzenie jakichkolwiek zmian po ukończeniu działającego kodu. Że pracowali nad projektem przez nierozsądny czas, a teraz proszenie o cokolwiek było całkowicie błędne. Wreszcie dokonali zmian i projekt się skończył. Ale to pozostawia mi w głowie kilka pytań... * Zrobili to, co było potrzebne, ale ja potrzebowałem **poprawnie zrobione** i stąd zmiany. czy naprawdę byłem niesprawiedliwy? * Dlaczego zgodziłem się na kodowanie bez specyfikacji funkcjonalnej? * Dlaczego za pierwszym razem nie upewniłem się, że wszystko zrozumieli? Czy ktoś znajduje się w tej samej sytuacji? Czy uważasz, że istnieje lepszy sposób na zarządzanie projektami zleconymi na zewnątrz? _**\-- AKTUALIZACJA --_** Dzięki za wszystkie opinie - po zastanowieniu się nad całym doświadczeniem mogę stwierdzić... * Chociaż nie byłem niejasny w specyfikacji z mojej strony, na pewno nie uczyń je _okularami_ zgodnie z sugestią. Więc na wynos: zawsze bądź jak najbardziej konkretny – przeczytaj swoje specyfikacje również z ich perspektywy i zobacz, czy czegoś nie przegapiłeś. Powtórz to co najmniej trzy razy. * Samo określenie, jaki kod powinien to zrobić, nie wystarczy. Musisz określić, jak ma wyglądać kod. Jaka będzie struktura katalogów; nawet nazwy plików, jeśli to możliwe. Pozwoli ci to uniknąć późniejszych irytacji. Ściśle określ wytyczne kodowania, konwencje nazewnictwa zmiennych, wewnętrzny format dokumentacji itp. Dopilnuj, aby przestrzegali tych wytycznych, a jeśli nie, krzycz. * Żądaj specyfikacji funkcjonalnej z ich strony - nalegaj, aby została napisana przed jakimkolwiek kodem. To usunie wiele nieporozumień i nieporozumień. * Przejrzyj kod w miarę jego opracowywania, aby wcześniej zidentyfikować anomalie i je poprawić. Rozmawiaj z nimi przynajmniej raz na drugi dzień. * Na koniec postaraj się nawiązać z nimi dobry kontakt. Spraw, by poczuli, że doceniasz ich pracę. Nie naciskaj ich przesadnie, aby pasowały do twoich wytycznych — zamiast tego poproś ich, aby to zrobili i powiedz im, że ułatwiłoby ci to utrzymanie kodu po zakończeniu projektu.


title: Długie wiersze tekstu w kodzie źródłowym

text: > **Możliwe powielenie:** > Czy limit 80 znaków nadal obowiązuje w czasach monitorów panoramicznych? Kiedyś ustawiałem pionową linię na 80 znaków w moim edytorze tekstu, a następnie dodawałem powrót karetki, jeśli linie były zbyt długie. Później zwiększyłem wartość do 135 znaków. Zacząłem używać zawijania słów i nie narzucać sobie limitu, ale starałem się, aby linie były krótkie, jeśli mogłem, ponieważ skracanie linii zajęło dużo czasu. Ludzie w pracy używają zawijania słów i nie stawiają sobie granic.. czy to właściwy sposób? Co masz zrobić? Wielkie dzięki.


title: Analiza systemu na początku projektu

text: Kiedy chcę stworzyć nową aplikację, najpierw zaprojektuję UML, określę szczegóły i definicję projektu. Ale kiedy zaczynam proces rozwoju, stwierdzam, że powinienem zmienić niektóre części mojego pomysłu, aby stać się bardziej popularnym oprogramowaniem lub łatwiejszymi logicznymi krokami dla moich użytkowników lub prostszym procesem lub czymkolwiek innym. Następnie zmieniam swój kod, przeprojektowuję niektóre części mojego UML i jeszcze raz rozpoczynam/kontynuuję proces rozwoju i jestem pewien, że tym razem mam idealną definicję projektu i UML, ale po chwili (ten czas trwa dłużej) ponownie stwierdzam powinien coś zmienić ponownie! Więc wracam i zmieniam mój UML (czasami nie! po prostu kontynuuj projekt bez zmiany UML) i tak dalej. Ten proces będzie powtarzał się w kółko, aż się zmęczę lub znajdę (prawie) najlepszy stan projektu lub będę miał problem z ograniczeniem czasu! Więc moje pytanie brzmi: * _'Czy mogę zaprojektować idealny UML na początku mojego projektu, aby opisywać najlepszy stan w historii !?'_ lub _\- 'Czy powinienem przysięgać na Boga, że nigdy przenigdy nie zmieniam mojego UML-a (i definicji projektu ) nawet jeśli jest lepszy i dopisz aktualny stan do końca!'_ Kolejne pytanie „Czy zmiana niektórych części nowego pomysłu, nawet analizowanego rękami najlepszego analizatora na świecie, jest nieunikniona? znajdź najlepszy stan )". Chodzi mi o to, że nie możemy w pełni symulować doświadczenia użytkownika, prawda? Powinniśmy zobaczyć to w akcji.


title: Wybór sposobu podejścia do żądań geokodowania

text: Zaraz zacznę pisać program w c#, który będzie odczytywał adresy z pliku źródłowego, utworzył żądanie Geokodowania, wysłał go do Google Maps API, otrzymał odpowiedź, wybrał współrzędne z xml, a następnie zapisał je w bazie danych. Moje pytanie brzmi, jaki jest właściwy typ pliku źródłowego, biorąc pod uwagę wydajność i łatwą implementację. Mam możliwość podania adresów źródłowych jako plik txt lub plik xml. Liczba adresów potrzebnych do geolokalizacji wynosi około 100 000, co jest dużą liczbą, więc jakie jest właściwe podejście do obsługi tego rodzaju wniosków? Czy powinienem podać plik źródłowy adresów jako txt lub xml, czy coś innego?


title: Jak zachować niezależność testów jednostkowych?

text: Czytałem w wielu miejscach, że testy jednostkowe powinny być niezależne. W moim przypadku mam klasę, która dokonuje transformacji danych. Te kroki muszą być wykonywane po kolei, w przeciwnym razie nie mają sensu. Na przykład load_data parse_float label normalize add_bias save_data Na przykład nie mogę znormalizować danych przed oznaczeniem ich etykietą, ponieważ wtedy wartości uległy zmianie i nie mam już dostępu do oryginalnych wartości moich danych. Lub nie mogę zapisać danych przed ich załadowaniem. Więc moja klasa testowa wygląda mniej więcej tak, jak ta klasa TestTransform(Testcase): def setUp(self): self.trans = Transform() def test_main(): self.load() self.parse_float() self.label() def load( self): self.trans.load() attach .... def parse_float(self): self.trans.parse_float() attach .... W tym przypadku moje testy jednostkowe wyraźnie zależą od siebie, ale mogę " nie widzę, jak inaczej mógłbym to zrobić. Alternatywnie mógłbym napisać coś takiego def test_normalize(self): # setup self.trans.load() self.trans.parse_float() self.trans.label() # test zaczyna się tutaj self.trans.normalize() asercja .... Ale w tym przypadku uruchamiam wiele razy wiele kodu, co jest nieefektywne i powoduje, że moje testy działają znacznie dłużej. Czy zatem najlepsza praktyka utrzymywania niezależności testów jednostkowych ma zastosowanie w tym przypadku, czy nie?


title: Najlepszy sposób na tworzenie losowań z ograniczeniami

text: Piszę program, który automatycznie zrobi losowanie na zawody. Istnieją cztery obiekty: `Debata` `Sędzia` `Szkoła` `Drużyna` Każda Debata ma dwie drużyny i sędziego. Każdy zespół bierze udział w trzech debatach. W związku z tym obowiązują następujące zasady: 1) Drużyna nie może zmierzyć się z kimś z tej samej szkoły 2) Drużyna nie może zmierzyć się z inną drużyną z tej samej innej szkoły (tak jak gdyby grali raz z drużyną ze szkoły, nie mogą grać ponownie przeciwko komuś z tej szkoły) 3) Sędzia nie może pochodzić z tej samej szkoły co zespół, który ocenia. Więc jak mam stworzyć remis? Losowanie wygląda jak tabela (potrzebuję tylko danych, ale kiedy piszesz, wygląda to tak) z kolumną dla sędziów, a następnie trzema innymi kolumnami dla każdej rundy debat (trzy debaty, w których bierze udział każdy zespół). W tej chwili zasadniczo wybieram losową drużynę, znajduję przeciwną drużynę, która nie grała wcześniej w szkole pierwszego zespołu i nie pochodzi z tej samej szkoły, a następnie znajduję sędziego z żadnej z tych szkół. Potem robię to samo, dopóki nie przejdę wszystkich debat. Problem polega na tym, że program czasami wpada w koleiny, gdy nie ma innego zespołu/sędziego, który by pasował. Człowiek mógłby wtedy zmienić sytuację i spróbować znaleźć sposób, aby poruszyć innych sędziów, aby to rozgryźć, ale jak mogę to zrobić za pomocą programu. Jeśli ponownie uruchomię program, dowie się o tym tylko dlatego, że losowo wybierane drużyny do jakich. W zasadzie zastanawiam się, jakie jest najlepsze rozwiązanie problemu?


title: Jak zmniejszyć liczbę błędów podczas kodowania?

text: Nikt nie jest doskonały i bez względu na to, co robimy, od czasu do czasu będziemy tworzyć kod, który zawiera błędy. Jakie są metody/techniki zmniejszania liczby generowanych błędów, zarówno podczas pisania nowego oprogramowania, jak i zmiany/utrzymywania istniejącego kodu?


title: Jak być bardziej logicznym? (mniej błędów/błędów)

text: Programuję od 6 lat i chodzę do liceum (wolę nie zdradzać swojego wieku). Bawiłem się wieloma różnymi językami. Wystarczy wymienić kilka: Java, PHP, C++, Python, Autohotkey, Mathematica i wiele innych. Bardzo dobrze rozumiem podstawy programowania ogólnego. Jedynym problemem jest to, że _nadal_ tworzę błędy przez cały czas. Zbyt często myślę. Czy masz jakieś wskazówki _poza kontynuacją_ programowania, które pomogą mi stać się lepszym programistą i popełniać mniej błędów?


title: Jak sprawić, by pisanie kodu było dokładniejsze?

text: Staram się ćwiczyć pisanie kodu przez długi czas przed skompilowaniem i napisaniem testu jednostkowego (jeśli to możliwe) dla tego, co napisałem (językiem jest C++). Oczywiście otrzymałem wsparcie IDE (Emacs lub Eclipse do wykrywania błędów w locie i uzupełniania kodu) z minimalnym błędem lub bez błędu. Ćwiczę tę umiejętność, ponieważ wzorzec „prób i błędów”, w którym jest napisany kawałek kodu, a następnie kompilacja/uruchomienie w celu sprawdzenia poprawności, nie jest produktywny, jak mi się wydaje. Czy jednak to, co robię, nie jest sprzeczne z celem testowania? Być może celem mojej praktyki nie jest zapewnienie 100% poprawności logicznej, ale raczej 100% lub prawie 100% poprawności składni, aby znacznie poprawić produktywność. Postaram się najpierw ćwiczyć z małym fragmentem kodu, a następnie stopniowo poprawiać się w miarę upływu czasu. Jakie jest Twoje ogólne zdanie na temat pisania kodu i produktywności? Ćwiczysz tak jak ja, czy masz znacznie lepszą metodę? (Oprócz bycia w „przepływie” lub skrajnej koncentracji). Martwię się tą sprawą, ponieważ słyszałem, że niektórzy ludzie są prawdziwymi ludzkimi kompilatorami i wydaje się, że mogą bezpośrednio przetłumaczyć logikę na kod jako swój język naturalny. **Edycja:** Trochę się myliłem, kiedy wspomniałem, żeby nie poprawiać poprawności logicznej. Tak, liczy się również poprawność logiczna. Chcę poćwiczyć programowanie do tego stopnia, że będę mógł pisać kod przez długi czas z minimalnymi błędami (np. mogę napisać 1000 linijek kodu,a i tylko kilka trywialnych błędów się pojawi). W przypadku C++ lub dowolny język, korzystanie z bibliotek zewnętrznych wymaga zrozumienia wielu zależności bibliotek, aby poprawnie używać ich w kodzie. Na przykład, jeśli używasz frameworka Spring w Javie, musisz upewnić się, że xml, serwer itp. są poprawnie skonfigurowane. Uważam, że jest to również forma składni, a jednym ze sposobów na osiągnięcie „poprawności składni” jest częste jej ćwiczenie do momentu, w którym można zminimalizować większość błędów pisanych ręcznie. Jest to podobne do tego, kiedy zaczynamy uczyć się programowania, czasami/często brakuje nam średnika. Następnie uczymy się błędu i poprawiamy go.


title: Jak powstrzymać się od popełniania błędów?

text: Kiedyś szczyciłem się wysoką jakością dostarczonego kodu. Dzisiaj popełniłem błąd, który starł uśmiech z mojej twarzy. Był to wyjątek zerowego odwołania spowodowany pośpieszną poprawką przypadku krawędzi, który został przechwycony podczas testowania. Nie miałem odpowiednich testów jednostkowych i nie wykonałem testu regresji po dokonaniu poprawki. Więc moje pytanie brzmi, co robisz, aby zmusić się do przestrzegania najlepszych praktyk? Wiem, że powinieneś pisać testy (jednostkowe, integracyjne, akceptacyjne itp.) i uruchamiać je w celu walidacji wszelkich zmian. Ale kiedy jest presja i spieszysz się, by ugasić pożar, jak możesz się skupić i trzymać tych najlepszych praktyk? Ćwiczenia fizyczne? Religijny TDD?


title: Jak mogę nauczyć się lubić C++?

text: Z zawodu jestem słabym programistą - lubię programować w JavaScript, CoffeeScript, TypeScript i Ruby. Muszę programować w C++ na studiach informatycznych i to mnie frustruje. Nie podoba mi się składnia i czuję, że jest bardziej gadatliwa, niż mogłaby być. Myślę, że przynajmniej raz krzyczałem „Nienawidzę C++” na projekt CS. Nie muszę _kochać_ C++, ale zastanawiam się, czy ktoś, kto uwielbia ten język, może mi powiedzieć, co mogę zrobić, aby złagodzić mój ból. C++11 i Syntastic for Vim z pewnością pomogły, ale zastanawiam się, czy jest coś więcej – konkretne narzędzie lub abstrakcyjna filozofia.


title: Czy wypróbowałeś Audyt Użyteczności dla strony Twojej firmy?

text: Przeprowadziliśmy audyt bezpieczeństwa i był genialny. Czy są firmy, które przeprowadzają audyt użyteczności sieci?


title: Czy są jakieś badania zespołów wielofunkcyjnych w porównaniu z zespołami dziedzinowymi (np. projektami a oprogramowaniem/mechaniką/itd.)?

text: Pracuję w organizacji, która tworzy wiele produktów systemów zintegrowanych - tj. są to kompletne produkty z projektowaniem i produkcją elementów mechanicznych/systemowych/elektronicznych/oprogramowania. Obecnie większość zespołów jest zorganizowana wokół projektów w sposób przekrojowy. Zaletą takiej organizacji jest to, że ludzie, którzy ściśle ze sobą współpracują dla wspólnego celu, są blisko siebie. Wady wynikają z izolacji inżynierów od ich rówieśników. Zazwyczaj do projektu przypisany jest tylko jeden inżynier oprogramowania. Oznacza to, że projekty mają wysoki współczynnik ciężarówek, minimalną wymianę wiedzy i najlepszych praktyk, a rozwój techniczny jest ograniczony. Więc moje pytanie brzmi: czy są jakieś badania porównujące koszty/korzyści tych dwóch podejść?


title: Czy legalne jest rozkładanie biblioteki Microsoft dll i publikowanie wyników na moim blogu?

text: Piszę artykuł na mój blog o nieudokumentowanych funkcjach, które istnieją w bibliotece _dwmapi.dll_. Chcę opublikować wynik zdeasemblowanego kodu, aby wyjaśnić, w jaki sposób uzyskuje się nazwy i parametry tych funkcji, podobnie jak artykuł z tego bloga. **Jest to tylko do celów edukacyjnych**, aby pokazać kilka przykładów korzystających z tych nieudokumentowanych funkcji. Więc pytanie brzmi: _Czy mogę umieścić zdeasemblowany kod tej biblioteki na moim blogu?_ **UPDATE :** Istnieje kilka aplikacji takich jak Aura, które używają tych nieudokumentowanych funkcji (DwmGetColorizationParameters, DwmSetColorizationParameters), oczywiście w pewnym momencie autorzy zdeasemblował plik _dwmapi.dll_ w celu pobrania parametrów i nazw funkcji. Ale oni (autorzy) publikują tylko ostateczny kod źródłowy, aby uzyskać dostęp do tych funkcji. To sprawia, że myślę, że _mogę prywatnie zdemontować bibliotekę Microsoft dll, a następnie opublikować aplikację lub kod źródłowy oparty na tym badaniu_. Czy to jest poprawne?


title: Dlaczego niektóre języki obiektowe pozwalają programistom na używanie typów pierwotnych?

text: Dlaczego niektóre języki obiektowe pozwalają programiście na używanie prymitywnych typów danych? Czy klasy takie jak Integer, Boolean itp. nie wystarczą?


title: Praca w innym kraju - pakiet relokacyjny

text: Mam możliwość pracy w kraju „za granicą”. Zaliczyłem wywiady techniczne i jestem na etapie „oferty”. Wszystko jest ok, z wyjątkiem tego, że mam zapłacić za bilet lotniczy, który wynosi prawie 2000 EUR (odległość około 8000 km). Rozmawiałem o tym z potencjalnym przyszłym pracodawcą i powiedzieli, że bilet lotniczy to mój koszt. Pytam cię: czy nie powinni mi zapłacić za bilet lotniczy? Lub daj mi pakiet relokacyjny? Czy akceptujesz tego rodzaju ofertę? O jaki pakiet relokacyjny byś poprosił, gdybyś był na moim miejscu? PS: Krajem docelowym jest Singapur. Jestem programistą Delphi z 5-letnim doświadczeniem w SD i ogólnie 8-letnim w IT.


title: Dobre wytyczne dotyczące kontroli wersji z perspektywy rozwoju/współpracy?

text: W naszej firmie rozpoczęliśmy outsourcing części naszego rozwoju. To zadziałało dość dobrze. Jednak mamy trudności z nakłonieniem ich do prawidłowego korzystania z kontroli wersji. Znają SVN i wiedzą, jak z niego korzystać. Jednak z jakiegoś powodu nie robią tego regularnie, zamiast tego pracują z 16 rzeczami jednocześnie i robią ogromne commity co 2 tygodnie, jeśli mamy szczęście, może z kilkoma komentarzami. Co bardzo utrudnia zarówno śledzenie, jak i przeglądanie ich pracy, współpracę, a także naprawianie błędów. Próbowałem im wytłumaczyć, aby wykonywali swoją pracę jako jedno małe zadanie na raz i regularnie przedstawiali każde z nich odpowiednimi komentarzami. Bez większego sukcesu albo nie rozumieją koncepcji, albo są leniwi. Moje pytanie brzmi, jakie byłyby dobre wytyczne opisujące, jak należy pracować z kontrolą wersji, nie z perspektywy technicznej (znają SVN), która wydaje się być jedyną rzeczą, którą znajduję w Internecie, ale z rozwoju/współpracy/projektu perspektywiczny?


title: wywołaj funkcję i nigdy nie czekaj na nią w C#

text: Mam kontroler w mojej aplikacji sieci web mvc4, w której istnieje akcja, która musi wywołać inną funkcję. To, co dzieje się w tej funkcji, tj. wartość zwracana, nie ma znaczenia dla mojego działania. Jak mogę wywołać tę funkcję i nigdy nie czekać na jej wykonanie? Myślę, że można to zrobić asynchronicznie, ale moim celem nie jest używanie zasobów, po prostu wywołaj funkcję i nigdy nie czekaj na to, co się stanie. Proszę o radę.


title: Szukasz usługi książki dla programistów cyfrowych

text: Właśnie zacząłem zarządzać małym zespołem programistów w mojej firmie i chciałbym dać im dostęp do biblioteki książek, które pomogłyby im poprawić swoje umiejętności. Zanim kupiłem książki na półce, zastanawiałem się, czy ktoś zna jakieś usługi, które zaspokoją tę potrzebę. Coś, do czego każdy, kto ma konto, może się zalogować i uzyskać dostęp do najnowszych książek o programowaniu i tworzeniu oprogramowania. Idealnie byłoby coś w rodzaju wspólnego konta na Kindle, ale chętnie wysłuchałbym innych doświadczeń lub pomysłów, które również pomogłyby zaspokoić moje potrzeby. Albo nawet jeśli myślisz, że śnię i powinienem po prostu wyłożyć trochę pieniędzy na książki.


title: Gdzie powinienem umieszczać komentarze w moim „kodzie samodokumentującym”?

text: Obecnie sam tworzę aplikację internetową i postanowiłem używać opisowych nazw zmiennych i metod (czasami kosztem zwięzłości) w celu zminimalizowania komentowania. Plan polegał na zakodowaniu każdej metody przy użyciu tej strategii, a następnie skomentowaniu po zakończeniu metody, nad którą obecnie pracuję. Jednak odkryłem, że po (mniej więcej) wszystkich metodach, które ukończyłem, komentarze w wierszu wydawały się zbędne. Nadal przestrzegam konwencji Javadoc dla klas i metod, ale na razie mój kod jest w większości całkowicie pozbawiony jakichkolwiek komentarzy w wierszu. Na szczęście jestem jeszcze stosunkowo wcześnie w procesie tworzenia i wszystkie metody działania są w mojej głowie świeże, gdyby zaistniała sytuacja, w której musiałbym pisać komentarze in-line. Czy to dobra strategia? Jeśli nie, gdzie powinienem umieścić komentarze w tekście? Poniżej zamieściłem jedną z moich metod, aby zilustrować, jak obecnie jest to samodokumentowanie. (Używam Pelops, która jest biblioteką Java używaną do uzyskiwania dostępu do bazy danych Cassandra. Nie wchodząc zbyt głęboko w model danych Cassandry, wiersz zasadniczo odpowiada krotce relacyjnej bazy danych, a kolumna odpowiada kolumnie w relacyjnej bazie danych stół). Chciałbym myśleć, że nawet bez znajomości Pelopsa czy Cassandry będzie można zrozumieć, co się dzieje w kodzie. Czy tak jest? Jeśli nie, gdzie mogę wstawić komentarze, aby wszystko było jasne? Mam nadzieję, że wszelkie sugestie dotyczące umieszczania komentarzy w tym kodzie przekształcę we wszystkie inne metody, które do tej pory napisałem. /** * Zbiera identyfikator i imię użytkownika z bazy danych, tworzy losowy kod aktywacyjny dla tego użytkownika i przechowuje * go w bazie danych, a następnie wysyła aktywacyjną wiadomość e-mail do tego użytkownika. * @param eMail ciąg reprezentujący adres e-mail użytkownika, dla którego wiadomość e-mail jest wysyłana * @throws MyAppConnectionException, jeśli którekolwiek z zapytań nie może zostać wykonane lub wystąpi problem z powodu jednego lub jeśli problem powstaje podczas wysyłania e-maila */ public static void generateAndSendActivation(String eMail) wyrzuca MyAppConnectionException, MyAppActivationException { eMail = eMail.toLowerCase(); try { Selector userIDSelector = Pelops.createSelector(pool); Kolumna userIDColumn = userIDSelector.getColumnFromRow("Users_By_Email", eMail, "User_ID", ConsistencyLevel.ONE); String userIDString = new String(userIDColumn.getValue()); Selektor firstNameAndStatusSelector = Pelops.createSelector(pool); SlicePredicate firstNameAndStatus = Selector.newColumnsPredicate("Imię", "Status"); List<Column> firstNameAndStatusColumns = firstNameAndStatusSelector.getColumnsFromRow("Użytkownicy", userIDString, firstNameAndStatus, ConsistencyLevel.ONE); char statusChar = Selector.getColumnValue(ImieIStatusKolumny, "Status").toChar(); if(statusChar == 'N') { String firstNameString = Selector.getColumnStringValue(firstNameAndStatusColumns, "Imię"); Kod aktywacyjny ciągu = utwórzLosowyKod(); String aktywacjaHash = BCrypt.hashpw(activationCode, BCrypt.gensalt()); Magazyn mutatorówActivationHashMutator = Pelops.createMutator(pool); storeActivationHashMutator.writeColumn("Użytkownicy", userIDString, storeActivationHashMutator.newColumn("Activation_Code", aktywacjaHash) ); storeActivationHashMutator.execute(ConsistencyLevel.ONE); sendEmail(firstNameString, userIDString, eMail,activationCode, "sendActivationCode"); } else { throw new MyAppActivationException("Użytkownik o ID " + userIDString + "próbował aktywować już aktywowane konto"); } } catch(NotFoundException nfe) { MyAppQueryException bqe = new MyAppQueryException("Nie znaleziono konta użytkownika z adresem e-mail " + eMail + ". Nie można wysłać kodu aktywacyjnego", nfe); bqe.accountDoesNotExist = prawda; rzut bqe; } catch(PelopsException pe) { MyAppQueryException be = new MyAppQueryException("Nie można wykonać jednej z operacji wymaganych do wygenerowania i przechowania kodu aktywacyjnego", pe); rzucać być; } catch(MyAppMailException bme) { rzut bme; } }


title: Czy bezpośredni dostęp do bazy danych aplikacji narusza umowę licencyjną?

text: Kupiliśmy dość lekką aplikację, która wykorzystuje bazę danych na SQL Server do swojego zaplecza. Ta aplikacja nie ma interfejsu API. Musimy dodać niewielką funkcję internetową, którą można łatwo dodać, łącząc się bezpośrednio z bazą danych. **Ogólnie rzecz biorąc, odkładając na bok wszystkie kwestie związane z przyszłymi zmianami schematu, czy zazwyczaj pozwala na to licencja oprogramowania?** Współpracownik argumentował, że w duchu licencji na oprogramowanie wykonujemy inżynierię wsteczną ich kodu. Wyrażam przekonanie, że to nasze dane w bazie danych, do których mielibyśmy dostęp i potencjalnie moglibyśmy je modyfikować, nie jest wymagana żadna licencja na rzeczywiste dane. Ponadto, ponieważ nadal płacimy za licencję na korzystanie z oprogramowania, oznacza to, że mamy również licencję na korzystanie z jego schematu, ponieważ schemat jest częścią oprogramowania. Rozumiem również, że powszechną praktyką (przynajmniej wszędzie, gdzie pracowałem) jest bezpośredni dostęp do bazy danych aplikacji w celu raportowania. Co jest uważane za prawidłowe? Interesuje mnie wkład zarówno z punktu widzenia prawnego, jak i powszechnie rozumianego punktu widzenia branży. _Rozumiem również, że będzie się to różnić w zależności od licencji. Szukam ogólnej odpowiedzi, która będzie miała zastosowanie do większości programów. Dziękuję._ * * * **Edytuj:** Być może inaczej na to spojrzeć... Co jest ogólnie uważane za dopuszczalne? Wyrzuć umowę licencyjną, ponieważ na pytanie prawne nie można poprawnie odpowiedzieć bez licencji. **Czy jako programista byłbyś niezadowolony z tego, że Twoi użytkownicy uzyskują bezpośredni dostęp do bazy danych?**


title: Jaki jest najlepszy odpowiednik Java dla Linq?

text: Czy są jakieś biblioteki w Javie, które zbliżają się do zapewnienia funkcjonalności Linq?


title: Jak sprawić, by mój startup pracował z programowaniem Agile?

text: W naszym startupie do tej pory pracowaliśmy w tradycyjnym modelu kaskadowym, ale chcemy wypróbować nasz kolejny projekt z wykorzystaniem metodyki Agile. Jesteśmy prawie obcy całemu procesowi Agile, więc biorąc pod uwagę to, jaki jest najlepszy sposób na zrozumienie Agile (zasoby i praktyczny podręcznik mogą być pomocne), zdecyduj się na konkretną metodologię (Scrum itp.) i rozpocznij ją w nasz następny projekt?


title: Jakie metody należy umieścić w interfejsie, a jakie w klasach abstrakcyjnych?

text: Widziałem wiele frameworków i modułów, a ich standard wygląda następująco 1. `UserInterface`, które mają kilka predefiniowanych metod 2. `AbstractUserClass`, który implementuje `userInterface` 3. Następnie `GenericUserClass`, który rozciąga się od `AbstractuserClass`` 4. Następnie inne klasy wychodzące z tej generycznej Teraz widziałem, że klasa abstrakcyjna ma dodatkowe funkcje do interfejsu, a klasa generyczna ma również dodatkowe funkcje. 1. Więc nie wiem, które metody powinny iść gdzie. 2. Czasami widzę `klasa A extends Abstractuserclass`, a czasami `class A extends Abstractuserclass implementuje interfejs Usera`. Jaka jest różnica, jeśli `Abstractclass` już impelementuje `Userinterface`


title: Jakie stanowiska zawodowe łączą informatykę i marketing?

text: Chciałbym znaleźć pracę, która łączy informatykę z marketingiem, najlepiej na stanowisku, na którym można spotkać wielu ludzi i sporo podróżować. Po pracy jako Front/Back Web App Developer zdobywam dyplom z Zarządzania Technologią, który zawiera również element Marketingu. Jak w sensowny sposób zawodowo i sensownie połączyć moje dwa zainteresowania, informatykę i marketing? Na jakie pozycje powinienem dążyć?


title: Co to jest buforowany schemat zapisu?

text: Otrzymałem tę odpowiedź od Jeffa podczas badania liczników trafień. Powiedział, że odwiedziny strony są zwiększane w „buforowanym schemacie zapisu” i że tabela widoków nie istnieje. Czy możesz wyjaśnić, co to jest schemat buforowanego zapisu? Byłbym wdzięczny za odpowiedzi niezbyt ciężkie od technicznego żargonu. W szczególności interesuje mnie, jak taki schemat można wdrożyć do śledzenia odwiedzin strony. Jestem ciekaw, w jaki sposób dane o trafieniach są utrwalane, ponieważ są potrzebne, aby uniemożliwić użytkownikom zwykłe odświeżanie strony w celu zwiększenia liczby odwiedzin.


title: Czy jestem złym programistą, czy wszyscy mają takie wrażenie?

text: Zwykle rozumiem rzeczy dość szybko, ale po 2 latach programowania w Pythonie wciąż natykam się na rzeczy (takie jak dzisiaj Flask), które mnie zadziwiają. Patrzę na kod, nie mam pojęcia, co się dzieje, a potem czuję się bardzo upokorzony. Za każdym razem, kiedy to się dzieje, czuję się jak absolutny ekspert. Potem przez około 2 tygodnie czuję się jak absolutny początkujący. Czy to się często zdarza, czy może oznacza to, że muszę się jeszcze wiele nauczyć, zanim będę mógł zostać uznany za „dobrego” programistę?


title: Klasy zagnieżdżone lub przestrzeń nazw

text: Po co nam przestrzenie nazw, skoro mamy zagnieżdżone klasy. To, co można zrobić za pomocą przestrzeni nazw, można również osiągnąć za pomocą klas zagnieżdżonych. więc nie rozumiem uzasadnienia posiadania przestrzeni nazw?


title: Jak oddzielić wrażliwe dane w bazie danych (MySql)

text: Muszę zaprojektować bazę danych, która będzie zawierała informacje o osobistych chorobach użytkowników. Jakie może być podejście w celu zaimplementowania kolumn w tabelach DB: szyfrowanie informacji, oddzielne dane w dwóch różnych bazach danych, jedna dla danych wrażliwych, a druga dla danych niewrażliwych, czy oba lub inne podejście?


title: Czy zapomniałeś również kodu po wykonaniu zadania?

text: Jestem nowym programistą i chcę zapytać starszych programistów (programistów, którzy mają pewne doświadczenie w prawdziwym świecie). Wykonuję swoją pracę i po kodowaniu mój projekt zostaje ukończony, ale szczerze mówiąc nie pamiętam kodu, nazw klas i frameworków oraz ich właściwości. Czasami nawet wątpię w siebie, że to zrobiłem? Czy to normalne u wszystkich programistów, czy też jestem najgłupszym programistą, który nie pamięta kodu i nazw klas/właściwości? **Edytuj:** Myślę, że wielu programistów myli mnie tutaj. Powiedziałem, że zapomniałem nazw frameworków, nazw klas, nazw właściwości, ale zaczynam zapamiętywać swój własny kod, gdy znów zaczynam nad nim pracować. Moje pytanie brzmi, czy pamiętasz składnię i nazwy klas/właściwości itp.?


title: Jak poprawić juniora, ale zachęcić go do samodzielnego myślenia?

text: Kieruję małym zespołem, w którym każdy ma mniej niż rok doświadczenia w tworzeniu oprogramowania. W żadnym wypadku nie nazwałbym siebie guru oprogramowania, ale nauczyłem się kilku rzeczy w ciągu kilku lat pisania oprogramowania. Kiedy robimy przeglądy kodu, uczę i poprawiam błędy. Powiem takie rzeczy jak „To jest zbyt skomplikowane i zawiłe, a oto dlaczego” lub „Co myślisz o przeniesieniu tej metody do osobnej klasy?” Jestem bardzo ostrożny, aby przekazać, że jeśli mają pytania lub odmienne opinie, to jest w porządku i musimy przedyskutować. Za każdym razem, gdy kogoś poprawiam, pytam "Co myślisz?" lub coś podobnego. Jednak rzadko, jeśli w ogóle, nie zgadzają się lub pytają dlaczego. A ostatnio dostrzegam bardziej rażące oznaki, że ślepo zgadzają się z moimi stwierdzeniami i nie formułują własnych opinii. Potrzebuję zespołu, który może nauczyć się robić rzeczy właściwie, samodzielnie, a nie tylko postępować zgodnie z instrukcjami. Jak poprawić młodszego programistę, a jednocześnie zachęcić go do samodzielnego myślenia? Edycja: Oto przykład jednej z tych oczywistych oznak, że nie formułują własnych opinii: > Ja: Podoba mi się twój pomysł na stworzenie metody rozszerzającej, ale nie podoba mi się jak > przekazałeś dużą złożoną lambdę jako parametr. Lambda wymusza na innych > zbyt dużą wiedzę o implementacji metody. >> Junior (po zrozumieniu mnie): Tak, całkowicie się zgadzam. Nie powinniśmy używać tutaj metod rozszerzających, ponieważ zmuszają one innych programistów do zbyt dużej wiedzy > o implementacji. Zaszło nieporozumienie i zostało to rozwiązane. Ale w jego stwierdzeniu nie było nawet UNCJI logiki! Myślał, że zwraca mi moją logikę, myśląc, że to miałoby sens, kiedy tak naprawdę nie miał pojęcia, dlaczego to mówi.


title: Wybór głównej wersji biblioteki linux

text: Chcę użyć biblioteki cracklib do testowania bezpieczeństwa haseł w moich aplikacjach linuxowych C/C++. Ale nie mogę znaleźć oryginalnego autora ani oficjalnego kodu, który nie został rozwidlony.


title: GPL – napisanie wyjątku dla interfejsu wtyczki w sekcji 7 GPLv3

text: ## Problem Napisałem aplikację na Androida na licencji GPLv3, która musi korzystać z usług Google Play, zastrzeżonej biblioteki, jako wtyczki do aplikacji. Teraz chciałbym również dodać libspotify jako wtyczkę. Do wszystkich używanych zastrzeżonych bibliotek dostarczam alternatywne wtyczki open source, ale nie są one tak dobre, jak te zastrzeżone, nawet nie są bliskie. Użytkownik powinien wtedy mieć swobodę wyłączania wszystkich części własnościowych podczas kompilacji lub w czasie wykonywania. ## Możliwe rozwiązania GPLv3 zawiera sekcję „7. Warunki dodatkowe”. pod którym możesz dodać wyjątek "classpath". Chciałbym użyć tego wyjątku, aby wykonać następujące czynności. Idea wyjątku ścieżki klas jest wyjaśniona w FAQ GPLv3 tutaj: * Łączenie przez kontrolowany interfejs: http://www.gnu.org/licenses/gpl-faq.html#LinkingOverControlledInterface * http://www.gnu.org /licenses/gpl-faq.html#GPLIncompatibleLibs ## Podstawowa idea Zaimplementuj następujące interfejsy: interface Plugin {} interface ProprietaryPlugin extends Plugin {} interface XYZ_1 extends Plugin { public void someHook(); public void jakiśInnyHook(); ... } interfejs XYZ_2 extends Plugin { public void someHook(); public void jakiśInnyHook(); ... } XYZ_3, 4, ... Powyższe interfejsy są częścią projektu i są objęte GPL. Ale chciałbym, aby cały kod, który rozszerza niektóre podinterfejsy wtyczki, z wyjątkiem ProprietaryPlugin, mógł/dozwolony był zastrzeżony, biorąc pod uwagę, że oznacza się jako ProprietaryPlugin. Moim zamiarem jest stworzenie ciasnych podpięć wtyczek, które muszą podążać za wszystkimi zastrzeżonymi wtyczkami, oraz sposób na wskazanie użytkownikowi, które wtyczki możemy usunąć w czasie wykonywania. Ponadto chcę, aby kod „mostkowy”, implementacja interfejsów wtyczek była typu open source i na licencji zgodnej z GPLv3. A kod źródłowy musi zawierać co najmniej jedną implementację GPLv3, miejmy nadzieję, tworząc betonową ścianę między GPLv3 a kodem zastrzeżonym. ## Objaśnienie wizualne ![wyjaśnienie wizualne z UML i licencjami](http://i.stack.imgur.com/NmkP5.png) Czy to możliwe? Wiem, że większość facetów tutaj nie jest prawnikami, ale uważam, że pytanie deweloperów jest dla mnie pierwszym oświeceniem. ## Sugestia od irc.gnu.org#gnu Chłopaki z irc.gnu.org#gnu dali mi następującą sugestię: https://raw.github.com/qcad/qcad/master/gpl-3.0-exceptions. txt Stanowi, że: W ramach specjalnego wyjątku, właściciele praw autorskich QCAD niniejszym udzielają zgody na używanie i rozpowszechnianie wtyczek niezgodnych z GPL i dodatków skryptów razem z QCAD, pod warunkiem, że spełniasz również warunki licencje tych wtyczek i dodatków skryptów. Czy „wtyczki niezgodne z GPL i dodatki do skryptów” są niejasne / luka, czy jest to jasne i czy dotyczy to mojego przypadku? ## Druga sugestia Dostałem drugą sugestię na #gnu: http://roundcube.net/license/ Stwierdza ona, że: Ten plik stanowi część oprogramowania Roundcube Webmail, do którego dodano następujący wyjątek: Wtyczki i skórki które jedynie wykonują wywołania funkcji oprogramowania Roundcube Webmail i w tym celu zawierają je przez odniesienie, nie są uważane za modyfikacje oprogramowania. Jeśli chcesz użyć tego pliku w innym projekcie lub utworzyć zmodyfikowaną wersję, która nie będzie częścią oprogramowania Roundcube Webmail, możesz usunąć powyższy wyjątek i użyć tego kodu źródłowego w ramach oryginalnej wersji licencji. Co myślisz o tym? ## Moja próba „wyjątku ścieżki klasy” Moim pierwszym pomysłem było dodanie wyjątku ścieżki klasy do wtyczki z czymś podobnym do następującego... czy to spełnia moje zamiary, czy jest wypełnione lukami itp.? Dodatkowe zezwolenie na mocy GNU GPL wersja 3 sekcja 7 0. Definicje „FSF” oznacza Free Software Foundation, Inc. „Licencja kompatybilna” oznacza każdą licencję, którą FSF uważa za zgodną z GNU GPL w wersji 3. „Interfejs wtyczki” oznacza dowolny interfejs plik definicji w Odpowiadającym źródle zawierający - w nagłówku pliku - słowa "Licencjodawcy tego Programu określają ten konkretny plik jako interfejs wtyczki" "Oznaczenie zastrzeżonego interfejsu" oznacza dowolny plik definicji interfejsu w Odpowiadającym źródle zawierający - w nagłówku pliku - słowa "Licencjodawcy tego Programu oznaczają ten konkretny plik jako znak interfejsu zastrzeżonego"" "Dozwolona biblioteka" oznacza dowolną bibliotekę połączoną lub połączoną z tym Programem lub jakąkolwiek pracę objęte licencją, która tworzy pracę pochodną podinterfejsu Interfejs wtyczki nie łączy się bezpośrednio z biblioteką.Taki podinterfejs zapewnia Zawiera co najmniej kod źródłowy jednej działającej implementacji licencjonowanej na mocy niniejszej Licencji. Pochodna praca podinterfejsu, który łączy się z biblioteką Allowed, implementuje oznaczenie interfejsu zastrzeżonego. Taka praca pochodna jest określana jako „Zastrzeżona implementacja wtyczki”. Zastrzeżona implementacja wtyczki jest objęta licencją kompatybilną. 1. Wyjątki Jeśli zmodyfikujesz ten Program lub jakąkolwiek zawartą w nim pracę, łącząc go lub łącząc z dowolną Dozwoloną biblioteką (lub zmodyfikowaną wersją tych bibliotek), zawierającą części objęte warunkami tych bibliotek, licencjodawcy tego Programu udzielają Ci dodatkowe pozwolenie na przekazanie powstałej pracy. {Odpowiednie źródło dla formy takiej kombinacji, która nie jest źródłem, będzie zawierać kod źródłowy dla części dowolnej użytej implementacji Wtyczki Zastrzeżonej, a także dla objętej nią pracy.}


title: Jakie są wymierne zalety właściwych testów jednostkowych nad testami funkcjonalnymi zwanych testami jednostkowymi?

text: Projekt, nad którym pracuję, ma kilka starszych testów, które nie zostały odpowiednio wyśmiewane. Z tego powodu jedyną jego zależnością jest EasyMock, który nie obsługuje statyki, konstruktorów z argumentami itp. Testy zamiast tego polegają na połączeniach z bazą danych i takich jak "uruchomienie" testów. Dodanie powermock do obsługi tych przypadków jest odrzucane jako zaporowe ze względu na konieczność aktualizacji istniejącego projektu, aby go wspierać (inna dyskusja). Moje pytania brzmią, jakie są RZECZYWISTE namacalne korzyści z właściwych testów jednostkowych, których mogę użyć, aby odepchnąć? Czy są jakieś? Czy jestem po prostu pedantem mówiąc, że złe testy jednostkowe (nawet jeśli działają) są złe? Czy pokrycie kodu jest równie skuteczne?


title: Najlepsze praktyki PHP w zwracanych wartościach

text: W przypadku PHP, najlepsze praktyki, przeczytałem gdzieś, że jeśli przypiszesz swoje dane do zmiennej, prawie nie zajmuje to pamięci ani zasobów. Powiedzmy, że mam tę funkcję, która zwraca liczbę. funkcja publiczna returnCount($tablica){ liczba zwrotów($tablica); } czy tak jest lepiej? funkcja publiczna returnCount($tablica){ $count = count($tablica); return $liczba; }


title: Znajdź „dziurę” na liście liczb

text: Jaki jest najszybszy sposób na znalezienie pierwszej (najmniejszej) liczby całkowitej, która nie istnieje na danej liście **nieposortowanych** liczb całkowitych (i która jest większa niż najmniejsza wartość na liście)? Moje prymitywne podejście polega na sortowaniu ich i przeglądaniu listy, czy istnieje lepszy sposób?


title: Wskazówki dotyczące nazywania niewygodnych obiektów specyficznych dla domeny?

text: Modeluję układ chemiczny i mam problemy z nazwaniem moich pierwiastków/elementów w wyliczeniu. Nie jestem pewien, czy powinienem używać: * wzoru atomowego * nazwy chemicznej * skróconej nazwy chemicznej. Na przykład kwas siarkowy to H2SO4, a kwas solny to HCl. W przypadku tych dwóch prawdopodobnie użyłbym wzoru atomowego, ponieważ są one dość powszechne. Mam jednak inne, takie jak heksafluorokrzemian sodu, czyli Na2SiF6. W tym przykładzie wzór atomowy nie jest tak oczywisty (dla mnie), ale nazwa chemiczna jest okropnie długa: „myEnum.SodiumHexaFluoroSilicate”. Nie jestem pewien, jak mógłbym bezpiecznie wymyślić skróconą nazwę chemiczną, która miałaby spójny wzór nazewnictwa. Istnieje kilka problemów, które próbuję rozwiązać, nazywając elementy wyliczenia. Pierwsza to czytelność, przy czym dłuższe nazwy przedstawiają problem. Druga to łatwość pobrania kodu dla nowych opiekunów, a tutaj problemem są krótsze nazwy. Kolejną kwestią jest to, że właściciele firm zwykle odwołują się do pełnej nazwy chemicznej, ale nie zawsze. Chemikalia „w ustach” są określane przez ich formułę. Ostatnim problemem jest upewnienie się, że jest spójny. _Nie_ chcę mieć mieszanej konwencji nazewnictwa, ponieważ niemożliwe będzie zapamiętanie, której użyć. **Z punktu widzenia konserwacji, które z powyższych opcji nazewnictwa wolisz zobaczyć i dlaczego?** * * * _Uwaga: Wszystko tutaj poniżej linii ma charakter uzupełniający | materiał wyjaśniający. Proszę, nie ugrzęź w tym. Główne pytanie dotyczy nazewnictwa niewygodnych obiektów._ _Opcja atomowa_ public myEnum.ChemTypes { H2SO4, HCl, Na2SiF6 } _Nazwa chemiczna Option_ public myEnum.ChemTypes { SulfuricAcid, HydrochloricAcid, SodiumHexafluorokrzemian } * * * Oto kilka dodatkowych informacji z komentarzy pytanie: * Odbiorcami kodu będą tylko programiści, **nie** chemicy. * Używam C#, ale myślę, że to pytanie jest bardziej interesujące przy ignorowaniu języka implementacji. * Zaczynam od 10 - 20 związków i miałbym co najwyżej 100 związków, więc nie muszę się martwić _każdym_ możliwym związkiem. Na szczęście jest to stała domena. * Wyliczenie jest używane jako klucz do wyszukiwania w celu ułatwienia wspólnych / ogólnych obliczeń chemicznych - co oznacza, że równanie jest takie samo dla wszystkich związków, ale wstawiasz właściwość związku, aby uzupełnić równanie. * Na przykład masa molowa (w g/mol) jest używana podczas obliczania liczby moli z masy (w gramach) związku. FWIW, masa molowa == masa molowa. * Innym przykładem typowego obliczenia jest równanie gazu doskonałego i użycie w nim określonej stałej gazowej Przykładowa funkcja może wyglądać tak: public double GetMolesFromMass(double mass_grams, myEnum.ChemTypes chem) { double molarWeight = MolarWeightLookupFunctionByChem(chem); //zwraca gramy / mol podwójne mole = masa / masa molowa; //konwertuje na mole return mole; } //Przykładowe wywołanie: myMoles = GetMolesFromMass(1000, myEnum.ChemTypes.Na2SiF6); //*lub* myMoles = GetMolesFromMass(1000, myEnum.ChemTypes.Hexafluorokrzemian sodu); public double GetSpecificGravity(myEnum.ChemTypes chem, double conc) { //pobiera ciężar właściwy związku chemicznego na podstawie stężenia double sg = SpecificGravityLookupTableByChem(chem, conc); } Tak więc wyliczenie nazwy związku jest używane jako klucz i zapewnia spójność w odwoływaniu się do związku z powiązanymi funkcjami.


title: Wzorce dla aplikacji webowych z dużym obciążeniem ajax

text: Do tej pory byłem wielkim fanem wzorca MVC do tworzenia aplikacji internetowych. W przypadku sieci projektowałem głównie w PHP (z frameworkami Kohana i CodeIgniter) oraz Ruby (RoR). Ponieważ moje aplikacje stają się cięższe po stronie Ajax (aplikacje jednostronicowe itp.), Zauważyłem, że nie mogę powstrzymać się od zdradzania bardzo podstawowych koncepcji MVC: większość prac wykonuje Javascript; wywoływanie kontrolerów tylko po to, by poprosić o widoki lub więcej kodu js/json, wydaje się niewłaściwe. Po dążeniu do zachowania wszystkich zadań routingu w kontrolerach, teraz zasadniczo podzieliłem je między nie a Javascript (czyli z PoV frameworka, część widoków). Pytając o json, subwersja MVC wygląda jeszcze bardziej oczywisto: kod js wykonujący żądanie _jest_ kontrolerem; kontroler frameworka działa jedynie jako proxy dla danych modelu - o co właściwie proszę. Więc na co powinienem zwrócić uwagę? Myślałem o aplikacjach w czystym javascript, na przykład z backbone.js i opartej na dokumentach, plującej json bazie danych (couchDB) jako backendzie, ale uwielbiam moje relacyjne bazy danych. Inna opcja byłaby następująca: po prostu stworzyłbym "modele trasowane" w PHP/ruby/go/whatnot. Te przeanalizują żądanie, wywołają db, oddadzą trochę json. To podejście wydaje mi się interesujące, ale brakuje w nim jakiejkolwiek merytorycznej dokumentacji ani naukowej analizy, więc trochę się boję przeskoku. Pomysły?


title: Gdzie i jak wspomnieć o udziale Stackoverflow w CV?

text: Myślę, że mam teraz wystarczająco dobrą reputację na SO. Cóż, może to nie być tak dużo w porównaniu z tyloma innymi użytkownikami, ale jestem zadowolony z mojego. Zastanawiałem się więc nad dodaniem linku do mojego profilu w moim CV - tylko linku do profilu, a nie tego, że "Mam tak dużą reputację na SO". Ci, którzy nie widzieli, mogą zobaczyć to pytanie. Czy umieściłbyś link z profilem stackoverflow w swoim CV / CV? Jak by to wyglądało? > **Fora/Blogi/Różne inne** > > Brak blogowania, ale aktywny uczestnik Stackoverflow. Link do mojego profilu > - `http://stackoverflow.com/users/userId/username` Myślę o umieszczeniu tej sekcji po sekcjach **Project Details** i **Technical Expertise**. Jakieś wskazówki/rady? **Aktualizacja** MKO zrobiło bardzo dobrą uwagę \- > czy naprawdę chcesz, aby potencjalny pracodawca mógł szczegółowo ocenić > wszystko, co kiedykolwiek napisałeś, więc pomyślałem o skomentowaniu, ale to byłoby zbyt długie - W w moich pytaniach/odpowiedziach zamieszczam bardzo dużo stwierdzeń typu - "AFAIK...", "postępując zgodnie z moimi dotychczasowymi założeniami...", "czy słusznie wnioskuję, że...?", "wątpię, czy tak jest możliwe do…” itp. gdy czegoś nie jestem pewien i rzadko angażuję się w bójki z innymi użytkownikami. Jednak czasami spieram się na tematy, jeśli uważam, że jest to konieczne i jeśli mam rację. Akceptuję swoje błędy i przepraszam za to samo. Jak wszyscy wiemy, nikt nie jest doskonały. Musiałem napisać wiele rzeczy, które potencjalny pracodawca może uznać za złe. Ale co, jeśli ten sam pracodawca zauważy, że poprawiłem jakość treści, porównując stare treści z nowymi? Czy to nie wspaniałe? Staram się również wracać do starszych pytań/odpowiedzi i umieszczać komentarze korygujące itp., gdy czuję, że się myliłem lub jeśli mogę poprawić swój post. Oczywiście jest wielu pracodawców, którzy chcą, abyś (potencjalni pracownicy) miał rację za każdym razem. Natychmiast usuwają cię z rozważania, gdy powiesz jedną nieprawidłową rzecz. Osobiście spotkałem się z takim ankieterem kilka miesięcy temu. Nie chciał nawet słuchać żadnej dobrej rzeczy, którą zrobiłem po tym, jak znalazł jedną niewłaściwą rzecz. Teraz pytanie brzmi, czy naprawdę zależy Ci na pracy z takimi ludźmi? A może lubisz tych ludzi, którzy doceniają fakt, że każdego dnia dążysz do poprawy. Osobiście wolę to drugie.


title: Nauka w klasie

text: Obecnie chodzę na klasę programowania w Assemblerze i szczerze mówiąc, uważam to za wyjątkowo nudne i nużące. Chociaż wcześniej programowałem część asemblera jako część programu C++, uważam, że to, co robimy, jest zupełnie inne niż rzeczywisty kod asemblera, z którym pracowałem (używamy programu o nazwie MARS MIPS, który można znaleźć tutaj). Ponieważ używamy architektury MIPS, która z tego, co zebrałem, jest już prawie nieużywana, uważam, że to, czego się uczymy, nie ma zastosowania do czegokolwiek poza klasą. Podobnie uważam, że nie zatrzymuję materiału, który omawiamy na zajęciach, z powodu oderwania od aplikacji w świecie rzeczywistym, a także samego ustawienia w klasie. Próbowałem napisać kod poza szkołą, aby się z nim zapoznać, ale bez żadnych oczywistych zastosowań w świecie rzeczywistym nie mam do tego motywacji. **Czy jest jakaś rada dotycząca próby nauczenia się języka programowania (takiego jak asembler) dla klasy, gdy nie widziałem żadnego jego zastosowania w świecie rzeczywistym?** A może bardziej szczegółowe pytanie do tego problemu byłoby: ** Czy istnieje jakaś realna aplikacja do architektury MIPS, której nie jestem świadomy?** **EDYTUJ:** Znalazłem następujące informacje na StackOverflow dotyczące MIPS: http://stackoverflow.com/questions/2635086/mips-processors- czy-je-nadal-w-uzyciu-której-innej-architektury-powinnam-nauczyc


title: Jaka jest alternatywa dla częstej ręcznej weryfikacji?

text: Zastanawiałem się, czy w twoim kodowaniu jest określony moment, w którym sprawdzasz, czy działa? Powiedzmy, po zakodowaniu funkcji, całej klasy, całej sekcji aplikacji lub po każdym „istotnym” bloku kodu? Pytam o to, ponieważ zbyt często weryfikuję swoją aplikację, czasami po każdej trzeciej lub czwartej zmianie. To nawyk, który okazał się bardzo trudny do zerwania. Wielokrotne i ręczne robienie tego wydaje się nieproduktywne. Czy jest inne rozwiązanie? Wydaje się, że jest to albo bardziej kompetentny programista i zasadniczo „zna” zwrot większości twojego kodu, albo IDE sprawdza go okresowo, albo testuje zwrot tylko przez TDD.


title: Jak powinien nazywać się ViewModel?

text: Rozpoczynając pracę nad zupełnie nową aplikacją ASP.net MVC, nauczyliśmy się, że powinniśmy przekazać wszystkie dostępne dane, aby ułatwić tworzenie pełnego widoku. Ucząc się tego, zaczęliśmy używać koncepcji ViewModel, czyli złożonego obiektu pełnego właściwości innych podstawowych obiektów przesyłania danych. Teraz naszym problemem było nazwanie tych modeli ViewModels. Natknęliśmy się na pomysł użycia nazwy utworzonej z nazw obiektów DTO, takich jak MemberContactViewModel. chociaż jest to w porządku, uważam, że nazwy powinny być bardziej unikalne lub bardziej związane z tym, co będzie robił złożony obiekt, niż z tym, z czego się składa. Jakie są Twoje myśli. Jak powinien być nazwany złożony ViewModel, w oparciu o dane, które przechowuje, lub widok, z którym będzie współdziałać. Dzięki za wkład.


title: Gdzie mogę się zwrócić, jeśli nie mogę naprawić błędu?

text: Szukam zasobów, do których mogę się zwrócić, gdy nie mam na coś odpowiedzi. Kieruję zespołem programistów. Co miesiąc wprowadzamy nowe wersje oprogramowania. Gdy pojawia się błąd, którego mój zespół nie może naprawić, ląduje na mnie. W większości przypadków udaje mi się rozwiązać problem, ale zdarzają się sytuacje, w których utknę. Niestety w naszej firmie jestem na szczycie. Nie ma nikogo, kogo mógłbym prosić o pomoc lub pomoc w wymyśleniu czegoś. Czy masz jakieś zalecenia lub wskazówki dotyczące takich sytuacji?


title: Podmoduł Git a klon Git

text: Pracuję nad projektem opensource na github. Posiada podkatalog /Vendor, w którym znajduje się **kopia** kilku zewnętrznych bibliotek. Pierwotny opiekun projektu co jakiś czas aktualizował ten katalog o nowszą kopię zewnętrznej biblioteki. Jeden programista wysłał mi pull request z pomysłem zastąpienia tej **kopii** przez **submodule git**. I zastanawiam się, czy to dobry pomysł, czy teraz. Podmoduł Git Plusy: * Moduły podrzędne zostały specjalnie zaprojektowane dla podobnych scenariuszy * Usuwa możliwość przypadkowego zatwierdzenia dostawcy, które zostanie nadpisane podczas następnej aktualizacji. projekt (dodatkowe kroki wymagane po sklonowaniu, aby rozpocząć pracę z projektem: "git submodule init", "git submodule update" Jakie jest Twoje zdanie na ten temat? Jeszcze jedno. Problemem jest stosunkowo niewielka biblioteka z bardzo ograniczonymi zależnościami zewnętrznymi. Myślę, że na razie każde narzędzie do budowania byłoby przesadą.


title: Proces oprogramowania osobistego (PSP1)

text: Próbuję wymyślić ćwiczenie, ale tak naprawdę nie ma to większego sensu.. Nie proszę kogoś o rozwiązanie. po prostu spróbuj i przeanalizuj, co należy zrobić, aby rozwiązać ten problem. Próbuję zrozumieć, którego procesu PSP 1.0 1.1 powinienem użyć. SONDA? Albo coś innego? Byłbym bardzo wdzięczny za pomoc w tej sprawie od kogoś, kto ma doświadczenie z metodologią procesu oprogramowania osobistego. Oto pytanie. > Dla przypadku referencyjnego („code1.c”), podane są następujące metryki s/w: > > * roboczogodziny spędzone w fazie wdrażania (na moduł): 2,7 mh/plik > * roboczogodziny spędzone w fazie testów (na moduł): 4,3 mh/plik > * szacowana liczba pozostałych błędów (na moduł): 0,3 błędów/funkcję, 4 > błędów/moduł (pozostałe) > > > Na podstawie odpowiednich wartości podane dla przypadku referencyjnego, każde z poniższych > zadań koncentruje się na niektórych metrykach s/w, które należy oszacować dla > przypadku testowego („code2.c”): [25 punktów] > > 1. (szacunkowo) roboczogodziny wymagane w fazie wdrażania (na moduł) [8 > punktów] > 2. (szacunkowo) roboczogodziny wymagane w fazie testów (na moduł) [8 punktów] > 3. (szacunkowa) liczba błędów pozostałych do końca faza testowa (na moduł) [9 punktów] > > > Zadania 4 do 6 powinny wykorzystywać dane dostarczone dla przypadku referencyjnego w > kontekście Procesu Oprogramowania Osobistego poziom 1 (PSP-1), używając ich jako > jednopunktowy dziennik danych historycznych. W szczególności te same metryki s/w mają być > oszacowane dla przypadku testowego („code2.c”), przy użyciu PSP jako podstawowego modelu oszacowania >. > > Aby wykonać wyżej wymienione zadania, uczniowie powinni rozważyć > wszystkie fazy procesu tworzenia oprogramowania PSP, zwłaszcza na poziomach > PSP0 i PSP1. Oba przypadki należy traktować jako oddzielne studia przypadków w > kontekście klasycznego rozwoju oprogramowania s/w.


title: Projektant wizualnych stron internetowych dla Django?

text: Dopiero zaczynam naukę Django, więc wybacz mi, jeśli jakakolwiek część tego pytania jest poza bazą. Dużo szukałem w sieci informacji na temat odpowiednika wizualnego projektanta stron internetowych dla Django i wydaje mi się, że nie zaszedłem zbyt daleko. Mam doświadczenie z Delphi (Object Pascal), C, C++, Python, PHP, Java i Javascript oraz stworzyłem i utrzymywałem kilka witryn internetowych, które zawierały zawartość zależną od bazy danych MySQL. Przez długi czas używałem jednego ze standardowych projektantów WYSIWIG do projektowania rzeczywistych stron internetowych, z wszelkim potrzebnym programowaniem zaplecza wykonywanym za pomocą formularzy lub wywołań AJAX, które wywołują skrypty PHP po stronie serwera. Zmęczyły mnie dziwactwa, błędy i inne niedogodności związane z programem. Ponadto jestem głodny funkcjonalności i niezawodności, które zapewniłby mi dobry framework oparty na MVC, dzięki czemu mogłem naprawdę łatwo wyrazić siebie za pomocą niestandardowego kodu. Dlatego zwracam się do Django/Pythona. Jednak nadal jestem ćpunem na dobrego projektanta WYSIWIG do projektowania stron internetowych. Wiem, że istnieją takie, które rozwijają się po otwarciu edytora tekstu, być może z niektórymi narzędziami edytora kodu, które pomagają, i wyrzucaniem stron. Ale uwielbiam edytor przeciągania i upuszczania do prostego układu strony, szczególnie w przypadku takich rzeczy, jak osadzone obrazy, tabele, przyciski itp. Znalazłem kilka projektów open source na GitHub, ale wydaje się, że koncentrują się one na formularzach internetowych HTML, a nie na ogólnym edytor stron internetowych. Czy mogę dostać tutaj to, czego chcę? Nadrzędnym celem byłoby znalezienie nie tylko edytora stron internetowych, który tworzy strony internetowe zgodne z Django, ale jeśli ośmielę się to powiedzieć, posiadanie edytora projektowania, który mógłby dodawać skróty kodu Pythona do różnych elementów strony w stylu Delph/VCL lub Edytory projektowe VB. Uwaga, posiadam również IDE Wing IDE Professional w wersji 2.0. Na marginesie, jeśli znasz jakieś naprawdę fajne, zabawne lub oszczędzające czas biblioteki Pythona, które są zaprojektowane do łatwej integracji z Django, powiedz mi o nich. \-- roschler


title: REPL - Czy uważasz to za przydatne?

text: Niedawno zacząłem uczyć się Clojure i pobrałem Clojure-Box dla Windows, który był dostarczany z SLIME i bawiłem się Clojure w trybie REPL. Teraz zacząłem uczyć się wielu języków, w których dostępny jest REPL (F#, Python, Haskell), ale nigdy go nie używałem, dopóki nie zacząłem z Clojure i zdałem sobie sprawę, jak bardzo to pomaga. Zastanawiałem się, ile osób używa REPL w językach, w których są dostępne. Jeśli ich nie używasz, jakie są twoje rozumowanie, aby ich nie używać? Jeśli ich używasz, czy używasz ich do testowania kodu, czy tylko do nauki języków?


title: Jak skonfigurować testowanie jednostkowe w Visual Studio 2010?

text: Robię swój pierwszy duży projekt i nie mam dużego doświadczenia w profesjonalnym środowisku programistycznym. Podczas badania czegokolwiek związanego z programowaniem często widzę odniesienia do testów jednostkowych, ale wciąż nie wiem, jak je skonfigurować, a nawet czy byłoby to dla mnie korzystne. Czy ktoś może mi wyjaśnić testowanie jednostkowe i jak je skonfigurować w rozwiązaniu Visual Studio 2010, które ma wiele projektów? Czy jest to coś, co występuje w rozwiązaniu twojego projektu, czy jest to oddzielne rozwiązanie? Czy jest to coś, co poleciłbyś małemu zespołowi programistów, czy jest to tylko strata czasu na konfigurację? W tej chwili po prostu uruchamiam cały program, aby przetestować to, nad czym aktualnie pracuję, ale czasami napotykam problemy, które nie są łatwe do debugowania i przydałoby się uruchomić podzbiory kodu w innym miejscu ... Czasami ustawiam inny projekt z niektórymi bibliotekami, do których odwołuje się testowanie niewielkiej części programu, ale czuję, że więcej czasu marnuje się na ustawienie tego, niż po prostu uruchomienie całego programu ze względu na wszystkie powiązane zależności


title: Kiedy ktoś mógłby zostać uznany za złego programistę?

text: Jak uważasz, że programista jest zły w tym, co robi? Jeśli to możliwe... Jak powinien się poprawić?


title: Scrum w środowisku doradczym?

text: Czy możliwe jest wprowadzenie scrum do środowiska konsultingowego? W każdym tygodniu mogę należeć do 4 różnych zespołów, każdy z innym zespołem PM, BA i dev (jestem projektantem). Bycie częścią tak wielu zespołów/projektów nie wydaje się wykonalne, ponieważ dla każdego z nich potrzebne byłyby codzienne stand-upy, przeglądy sprintów itp. Powinienem dodać, że te projekty niekoniecznie są oprogramowaniem, ale głównie projekty internetowe e-commerce. Czy ktoś, kto to zrobił, może powiedzieć, jak do tego podchodzisz? _Edytuj_ Myślę, że moja sytuacja jest inna i powinienem był to dalej przedyskutować. Nasz zespół programistów znajduje się w Indiach, więc znalezienie czasu w USA rano/Indie wieczorem na codzienne stand-upy jest trudne, zwłaszcza gdy prawie zawsze mamy telefony z klientami w USA rano/Indie wieczorem, więc programista może być obecny w razie potrzeby. Zamiast tego to, co nasi premierzy zrobili, to jedno spotkanie dziennie dla zespołu z USA (BA, Design). Jednak przechodzą przez WSZYSTKIE projekty jednocześnie. Tak więc, jeśli nie jesteś w tym projekcie, masz przerąbane i musisz poczekać, aż twój projekt się pojawi. Dla mnie może to być 30-75 minut dziennie. Obłąkany. To NIE anuluje naszego cotygodniowego połączenia z klientem (30m-1h) na temat statusu (x niezależnie od liczby projektów, w których uczestniczysz). To oczywiście nie jest scrum, ponieważ w żadnej z tych akcji nie ma deweloperów, a dla amerykańskiego zespołu są to tylko elementy akcji. Jednak chciałbym dojść do punktu, w którym nasz „scrumowy” zespół deweloperski (rozwijający się w sprintach i mający spotkania planowania sprintów) może być częścią codziennych standupów z zespołem z USA, a my przechodzimy do rzeczywistego frameworka scrumowego.


title: Dlaczego brzydkie słowa kluczowe w C11?

text: Obecnie czytam szkic specyfikacji C11. Nowo wprowadzone słowa kluczowe: `_Bool, _Alignof, _Atomic` przypominają rozszerzenia niestandardowe, zamiast standardowych zarezerwowanych słów kluczowych, takich jak `struct, union, int`. Zdaję sobie sprawę, że standard w zasadzie składa się ze standardowych rozszerzeń… ale i tak jest to okropne! Być może wkrótce skończymy na pełzającym `__Long_Long_Reallylong_Integer_MSVC_2020_t` w standardzie! _Czy kompatybilność wsteczna niestandardowego kodu jest jedynym powodem nowego stylu słów kluczowych?_


title: Wskazówki dla początkującego programisty PHP, jak obniżyć długoterminowe koszty utrzymania

text: Jestem doświadczonym programistą Java, który właśnie rozpoczyna projekt dla organizacji pozarządowej. Będę pracował nad projektem przez co najmniej 6 miesięcy, po czym organizacja pozarządowa będzie musiała zapłacić lub znaleźć wolontariusza do utrzymania projektu. Widząc, że mają już ludzi pracujących na swojej stronie w PHP, uznałem, że PHP jest oczywistym wyborem, aby upewnić się, że umiejętności są nadal dostępne (jest to webby) - wyeliminowałem Javę, ponieważ programiści Java są zazwyczaj drodzy. Niestety nie mam prawie zerowego doświadczenia w poprawnym programowaniu PHP (tylko kilka miesięcy spędzam niewielki procent mojego czasu nad projektem Drupal bez żadnego prawdziwego kodowania). Co mogę zrobić, aby upewnić się, że kod, który zostawiam, będzie mógł być utrzymany przez stosunkowo słabo wykwalifikowanego programistę PHP (np. nastolatka, który chce zarobić trochę świątecznej gotówki)? Czy korzystam z CMS? Czy deweloperzy Drupala są tani? Jakiś inny CMS / Framework, na który powinienem spojrzeć? Tło: projekt jest stroną internetową, na której ludzie będą szukać informacji edukacyjnych, z prostym zarządzaniem użytkownikami, aby umożliwić tylko niektórym użytkownikom tworzenie treści, ograniczeniami do określonych typów treści itp. Pytanie CMS vs piszę siebie nie jest jedyną rzeczą, którą jestem zainteresowany słuchaniem. Interesują mnie również wszelkie wskazówki dotyczące stylu kodu, wszystko, co uważasz, że moje doświadczenie w Javie mogłoby mnie do tego popchnąć, utrudni to hipotetycznemu wolontariuszowi itp. Prawdopodobnie są rzeczy związane z tym scenariuszem, których nie przemyślałem - więc wszystko, co wiąże się z utrzymaniem niskich kosztów utrzymania, byłoby mile widziane.