title: Jaka jest konwencja dotycząca nazw klas, które mogą już istnieć w ORM?

text: To jest ogólne pytanie o nazwy klas i ORM-y, ale o kontekst; Pracuję nad aplikacją sieci web Flask w Pythonie przy użyciu SQLalchemy. Walczę z nazwaniem nowej klasy, która będzie zawierała logikę biznesową do przetwarzania przypomnień. W bazie danych znajduje się tabela o nazwie "przypomnienia" zawierająca dane, których potrzebuję. ORM stworzył klasę „Przypomnienia”, aby uzyskać do niej dostęp. Oczywiście dla klasy logiki biznesowej jedyną dobrą nazwą, jaką przychodzi mi do głowy, jest także „Przypomnienia”, ale jak już wspomniałem, w moich modelach jest już klasa o tej nazwie. Myślałem, że to może potencjalnie doprowadzić do zamieszania. Moje pytanie brzmi; czy to nadal jest droga, dwie różne klasy o tej samej nazwie (ale o innej ścieżce), czy może jest lepszy sposób/konwencja, aby temu zaradzić? PS: Jest jedno ograniczenie tego, co mogę zrobić; baza danych jest przestarzała i używana przez inne oprogramowanie, więc zmiana nazwy tabeli byłaby w najlepszym razie „problematyczna”.


title: Jakieś porady w otwartym kodzie źródłowym Object-C?

text: Przez ostatni miesiąc pracowałem nad aplikacją na iPhone'a i jestem zainteresowany otwartym pozyskiwaniem części jej kodu. Zbudowałem kilka kategorii, które inni mogą uznać za przydatne do generowania danych wypełniających podczas testowania i debugowania, a także stworzyłem kontroler widoku do wyświetlania obrazów, które inni mogą chcieć uwzględnić we własnych projektach. Jak idziesz o pakowanie tego typu rzeczy (kategorii, kontrolerów widoków itp.) do udostępniania? O jakich konwencjach nazewnictwa należy pamiętać? Czy standardową praktyką jest poprzedzanie kodu open source inicjałami (EGOTableViewPullRefresh, MGImageUtilities itp.)? Czy powinienem zrobić przykładowy projekt xcode, który pokazuje, jak można ich używać? Czy powinienem stworzyć stronę internetową, aby dokumentować i/lub promować te rzeczy? Czy zautomatyzowana dokumentacja generowana na podstawie komentarzy to dobra droga? Jakie rodzaje licencji powinienem rozważyć?


title: Gdzie refaktoryzacja i optymalizacja kodu powinny mieścić się zarówno w osi czasu procesu zwinnego, jak i kaskadowego?

text: Wydaje się, że wśród zespołu zarządzającego projektem panuje przekonanie, że stwierdzenie „to działa” oznacza, że należy go uznać za w 100% ukończony. Większość programistów wie, że nie zawsze tak jest. Jeśli próbuję alternatywnych podejść, aby jakaś funkcjonalność działała, nie musi to oznaczać, że znalazłem najlepsze rozwiązanie, lub że nie będzie to wymagało przeróbek po sprawdzeniu z innymi programistami. Często kończę coś, cofam się, a potem zadaję sobie pytanie, co mogę zrobić lepiej, gdy zasady biznesowe zostaną spełnione. Czy ten czas „mogę zrobić lepiej” powinien pasować gdzieś na osi czasu? Uważam, że najlepszym podejściem jest to, że zawsze zostawiasz kod lepszy niż wtedy, gdy go znalazłeś (do pewnego stopnia), co może oznaczać refaktoryzację po uruchomieniu. Jednak zespoły projektowe często czują się bardzo niekomfortowo z tym podejściem, ponieważ znowu, jeśli działa i zostało przetestowane, to po co je naprawiać?


title: Testowanie jednostek zewnętrznych zależności

text: Czy podczas pisania programu powinienem pisać testy, które upewnią się, że zależności, których używam, działają? Mogą one pomóc w sprawdzeniu moich założeń na ich temat, a także mogą pomóc w podjęciu decyzji o uaktualnieniu wspomnianych głębi. Poza tym, czy są jakieś ugruntowane opinie lub szkoły na temat tego, czy i jak należy do tego podejść?


title: Narzędzia do zarządzania skomplikowaną konfiguracją projektu z wieloma frameworkami i bez dokumentacji

text: Musimy rozszerzyć ogromny projekt java, który wykorzystuje frameworki, takie jak maven, spring, struts, freemarker i closure templates. Mamy dostęp do kodu źródłowego, ale prawie żadnej dokumentacji i musimy rozszerzyć ten system. Naszym jedynym rozwiązaniem jest znalezienie miejsca w istniejącym kodzie, gdzie coś podobnego jest już zrobione. Aby znaleźć to miejsce, staramy się zacząć od wywołanej akcji, a następnie za pomocą debuggera staramy się dowiedzieć, które klasy i Spring beans są zaangażowane. Ślady stosu z debugera są dość trudne do zrozumienia, ponieważ jest używanych wiele odbić. Czy ktoś miał podobną konfigurację i mógłby udzielić kilku wskazówek, jak zarządzać tak skomplikowaną konfiguracją?


title: Wyjaśnianie typów komentarzy i sprawdzanie typów w językach dynamicznych

text: Często czuję, że coś jest nie tak, gdy koduję bloki takie jak: function foo (arg){ // arg: a obiekt SomeClass ... } lub function foo (arg){ if (Object.prototype.toString.apply(arg) !== '[tablica obiektów]') wyrzuć nowy błąd("Parametr musi być tablicą"); ... } . Przy statycznie typowanym języku nie musiałbym ani wyjaśniać oczekiwanego typu argumentu, ani sprawdzać zgodności z tym oczekiwaniem. Dodatkowo możliwość określenia typu zwracanego czyni kod jeszcze bardziej opisowym. OTOH niektóre przypadki nadają się do samodokumentowania kodu: function parse (json){ ... } . W powyższym przykładzie można założyć, że konsumenci interfejsu API będą wiedzieć, co funkcja ma robić i jakie wartości argumentów będą akceptowalne. Jednak w innych przypadkach wyjaśnienie intencji kodu poprzez wybranie "doprecyzowania" nazw dałoby długie, niezręczne nazwy, które mieszają oczekiwany typ zmiennej i jej _rolę_. Czy używam języków dynamicznych z niewłaściwym nastawieniem? Jakie konwencje, techniki, wzorce mogą uchronić przed koniecznością pisania brzydkiego kodu sprawdzającego typ i/lub nadmiernego uzależnienia od komentarzy?


title: Scrum, DDD i programowanie front-end w środowisku korporacyjnym

text: Tak więc pracuję w banku od 4 lat. Moim głównym obowiązkiem była bankowość internetowa. Przez ostatni rok wdrażaliśmy metodologię scrum. Zmieniliśmy się również na projektowanie oparte na domenie. Teraz mój problem dotyczy tego, co zarząd planuje zrobić. Chcą podzielić zespół bankowości internetowej między zespoły domen, więc jeden programista z zespołu bankowości internetowej przejdzie do każdego zespołu domeny i będzie pracował nad projektami bankowości internetowej, które są częścią domen. Na przykład, jeśli rozwój oprogramowania otrzyma projekt stworzenia nowego przeglądu pożyczki w banku internetowym, zespół ds. pożyczek zajmie się tym przez całą drogę od bazy danych do interfejsu użytkownika. Mój problem z tym polega na tym, że nie skupiamy się już na banku internetowym jako produkcie. Nie ma możliwości zawetowania żadnej nowej funkcji. Właściciele produktów w domenach mogą po prostu wrzucić do banku internetowego każdą niejasną nową funkcję, którą chcą. Nie ma również pracy nad ulepszaniem podstawowych funkcji, z których nasi użytkownicy korzystają cały czas. Każdy projekt ma na celu stworzenie czegoś nowego, a po jego wydaniu programiści muszą natychmiast rozpocząć pracę nad nowym projektem. Nie ma pracy zespołowej, każdy programista musi pracować nad osobnym interfejsem użytkownika dla oddzielnej domeny. Bez utwardzania. Nasza sugestia dla kierownictwa jest taka, aby zespół bankowości internetowej był swoim własnym zespołem scrumowym, skupiającym się na bankowości internetowej jako produkcie. Ten zespół miałby własnego Scrum Mastera, a bank internetowy miałby właściciela produktu. Ten właściciel produktu koordynowałby z właścicielami produktów domen i priorytetyzował projekty, które muszą się odbywać w bankach internetowych. Jeśli projekt z jednej domeny ma wyższy priorytet niż projekt z innej domeny, wyjaśniłby operatorowi domeny, że najpierw musimy popracować nad domeną o wyższym priorytecie. Zarząd nas nie posłuchał. Moje pytanie brzmi, jaki jest właściwy sposób, aby to zrobić?


title: Zajmuję się .NET od kilku lat i myślę o zmianie platformy. Gdzie ludzie proponują, żebym poszedł?

text: Programuję w .NET od kilku lat i myślę, że może czas zrobić przełącznik platformy. Jakieś sugestie dotyczące której platformy najlepiej byłoby się nauczyć? Myślałem o powrocie do programowania w C++ lub po prostu skupieniu się na T-SQL w stosie Microsoft. Myślę o przełączeniu się, ponieważ: a) Czuję, że platforma .NET staje się coraz bardziej utowarowiona – co oznacza, że bardziej chodzi o nauczenie się GUI i pewnych rzeczy do kliknięcia niż o zrozumienie programowania. Obawiam się, że to sprawi, że deweloperzy na tym stosie będą coraz mniej opłacani. b) Bardzo frustrujące jest spędzanie całego dnia na debugowaniu czegoś, co _powinno_ działać, ale nie działa. Zazwyczaj Microsoft publikuje coś, co sugeruje, że _każdy_ może po prostu kliknąć tu i tam i _poof_ tam jest Twoja aplikacja. Przez większość czasu to nie działa i kończy się ssaniem o wiele więcej czasu, niż miało zaoszczędzić. c) Niedawno kierowałem zespołem w małym startupie budującym aplikację WPF. Naprawdę mocno dotknęło nas to, że ludzie narzekali na konieczność pobierania środowiska wykonawczego. Nasz kod również nie był przenoszony na żadną inną platformę. Co więcej, zużycie pamięci RAM i powolność ładowania aplikacji były niezwykłe ze względu na jej rozmiar. Badałem to i nie mogliśmy znaleźć sposobu na jego optymalizację. d) Jestem trochę zaniepokojony przywiązaniem do platformy Windows. Jakie są plusy i minusy dodania kolejnej platformy i jaką platformę sugerują ludzie? Dziękuję!


title: Kiedy Aggregate Root powinien zawierać inny AR (a kiedy nie)

text: _Pozwólcie, że zacznę od przeprosin za długość posta, ale naprawdę chciałem przekazać jak najwięcej szczegółów z góry, więc nie zabieram czasu na wrzucanie komentarzy w tę i z powrotem._ Projektuję aplikację zgodnie z podejściem DDD i zastanawiam się, jakimi wskazówkami mogę się kierować, aby określić, czy Aggregate Root powinien zawierać inne AR, czy też powinny być pozostawione jako oddzielne, „wolnostojące” AR. Weźmy na przykład prostą aplikację Zegara Czasu, która pozwala Pracownikom na rejestrowanie się lub odliczanie przez cały dzień. Interfejs użytkownika umożliwia im wprowadzenie identyfikatora i kodu PIN pracownika, które są następnie zatwierdzane i pobierany jest aktualny stan pracownika. Jeśli pracownik jest aktualnie zarejestrowany, interfejs użytkownika wyświetla przycisk „Wyrejestruj”; i odwrotnie, jeśli nie są taktowane, przycisk brzmi "Clock In". Akcja podejmowana przez przycisk odpowiada również stanowi pracownika. Aplikacja jest klientem WWW, który wywołuje serwer zaplecza udostępniany za pośrednictwem interfejsu usługi RESTful. Mój pierwszy krok w tworzeniu intuicyjnych, czytelnych adresów URL zaowocował następującymi dwoma punktami końcowymi: http://myhost/employees/{id}/clockin http://myhost/employees/{id}/clockout _UWAGA: Są one używane po pracowniku Identyfikator i PIN zostały zweryfikowane, a w nagłówku jest przekazywany „token” reprezentujący „użytkownika”. Dzieje się tak, ponieważ istnieje „tryb menedżera”, który umożliwia kierownikowi lub przełożonemu zarejestrowanie lub wyrejestrowanie innego pracownika. Ale ze względu na tę dyskusję staram się zachować prostotę._ Na serwerze mam ApplicationService, który udostępnia API. Mój początkowy pomysł na metodę ClockIn to coś takiego: public void ClockIn(String id) { var worker = EmployeeRepository.FindById(id); if (pracownik == null) throw SomeException(); pracownik.ClockIn(); Repozytorium Pracownika.Zapisz(); } Wygląda to całkiem prosto, dopóki nie zdamy sobie sprawy, że informacje z karty czasu pracy pracownika są w rzeczywistości przechowywane jako lista transakcji. Oznacza to, że za każdym razem, gdy wywołuję ClockIn lub ClockOut, nie zmieniam bezpośrednio stanu pracownika, ale zamiast tego dodaję nowy wpis do karty czasu pracy pracownika. Bieżący stan pracownika (zarejestrowany lub nie) pochodzi z najnowszego wpisu w grafiku. Tak więc, jeśli pójdę z kodem pokazanym powyżej, moje repozytorium musi rozpoznać, że trwałe właściwości pracownika nie uległy zmianie, ale że nowy wpis został dodany do karty czasu pracy pracownika i wykonać wstawienie do magazynu danych. Z drugiej strony (i tutaj jest ostateczna kwestia postu), TimeSheet wydaje się być Aggregate Root, a także ma tożsamość (identyfikator pracownika i okres) i mogę równie łatwo zaimplementować tę samą logikę, co TimeSheet.ClockIn (dowód pracownika). Zastanawiam się nad zaletami tych dwóch podejść i, jak stwierdzono w akapicie otwierającym, zastanawiam się, jakie kryteria powinienem oceniać, aby określić, które podejście jest bardziej odpowiednie dla problemu.


title: C# dynamicznie łączy różne biblioteki i/lub klasy zewnętrzne

text: ## tl;dr Czy możliwe jest dołączenie zewnętrznej biblioteki (i tworzenie instancji obiektów reprezentowanych w tej bibliotece) na podstawie pewnego warunku? To musi być zrobione w czasie kompilacji, więc oddzielne kompilacje? ## Informacje w tle ### Ostrzeżenie: ściana tekstu. Jeśli mam jakiś kod, który wymaga łącza do klasy zewnętrznej: using myExternalLibrary; namespace myNamespace { public class Engine { public Engine() { // klasa zewnętrzna jest zawarta // w myExternalLibrary public externalClass instanceOfExternalClass = new externalClass(); } } } // zewnętrzna przestrzeń nazw klas myExternalLibrary { public class externalClass { public externalClass() { // logika konstruktora } } } Poprzez podanie referencji do myExternalLibrary w projekcie, który zawiera myClass oraz podanie instrukcji using w odpowiednim miejscu, mogę tworzyć instancja externalClass, kiedy i kiedy jej potrzebuję w ramach myClass. To mi odpowiada. Jeśli mam bardzo powszechny kod, który wymaga kilku różnych bibliotek zewnętrznych, mogę zrobić to samo, ale z każdą z wymaganych bibliotek zewnętrznych (tj. dodać odwołanie i instrukcję using dla każdej z bibliotek zewnętrznych). Jednak ze względu na konstrukcję oprogramowania, nad którym pracuję, jestem zobowiązany do korzystania z zewnętrznej biblioteki tylko po spełnieniu określonych warunków. Nie mam też zamieszczać odniesień do tych zewnętrznych bibliotek, jeśli nie są one wymagane. ## Szczegóły klasy Nie mogę wchodzić w szczegóły dotyczące projektu klasy, ale mam to w zasadzie: mam klasę (jest to klasa silnika), która jest wymagana do działania jako pomost między GUI a pewnym sprzętem. Klasa Engine wymaga zewnętrznych bibliotek, aby umożliwić komunikację z zewnętrznym sprzętem. Mam dwie zewnętrzne biblioteki dla dwóch oddzielnych typów sprzętu: * InternallyDevelopedHardwareControlLibrary (nasza wewnętrznie opracowana biblioteka sprzętowa do kontrolowania naszego wewnętrznie opracowanego sprzętu) * LicensedHardwareControlLibrary (biblioteka, na którą posiadamy licencję do kontrolowania zakupionego sprzętu). Domyślnie silnik będzie komunikował się za pośrednictwem InternallyDevelopedHardwareControlLibrary z naszym wewnętrznie opracowanym sprzętem. Jednak silnik musi również być w stanie komunikować się za pośrednictwem LicensedHardwareControlLibrary z licencjonowanym sprzętem, jeśli (i tylko wtedy), gdy użytkownik końcowy udzielił licencji na nasze oprogramowanie, aby działało razem ze sprzętem opracowanym zewnętrznie. LicensedHardwareControlLibrary będzie licencjonowany dla użytkownika końcowego wraz z naszym oprogramowaniem dla niektórych naszych użytkowników końcowych. W takim przypadku, wraz z naszym oprogramowaniem musi być dostarczona LicensedHardwareControlLibrary. Jeśli jednak użytkownik końcowy nie ma licencji na korzystanie z LicensedHardwareControlLibrary, nie możemy wysyłać tej biblioteki bez oprogramowania. Ponieważ silnik domyślnie zastępuje komunikację z zewnętrznym sprzętem za pośrednictwem InternallyDevelopedHardwareControlLibrary, wymaga odniesienia do niego. Jeśli jednak użytkownik ma licencję na korzystanie z LicensedHardwareControlLibrary, muszę dodać odniesienie do tego, ale tylko wtedy, gdy użytkownik ma licencję na korzystanie z tej biblioteki. ## Pytanie Ponieważ silnik musi być generyczny, muszę znaleźć sposób na warunkowe włączenie tej drugiej biblioteki. Moją pierwszą myślą było przeniesienie wszystkich elementów Engine do klasy abstrakcyjnej i posiadanie dwóch oddzielnych silników (po jednym dla każdej z bibliotek), które rozszerzają abstrakcyjną klasę Engine. Coś w stylu: public class Engine { // cały wspólny kod dla każdego silnika // wpisz tutaj } public class StandardEngine : Engine { // silnik, który będzie wykorzystywał // InternallyDevelopedHardwareControlLibrary } public class LicensedEngine : Engine { // silnik, który będzie wykorzystywał use // LicensedHardwareControlLibrary } Kod StandardEngine użyje instancji obiektów reprezentowanych w InternallyDevelopedHardwareControlLibrary, a LicensedEngine użyje instancji obiektów reprezentowanych w LicensedHardwareControlLibrary. Mówiąc prościej: każda z mniej abstrakcyjnych wersji silnika wymaga działania na reprezentacji obiektu, która jest zawarta w InternallyDevelopedHardwareControlLibrary (StandardEngine) lub LicensedHardwareControlLibrary (LicensedEngine). Standardowa kompilacja będzie zawierać tylko klasę StandardEngine, jednak w przypadku niektórych użytkowników będziemy musieli uruchomić oddzielną kompilację, która zawiera również klasę LicensedEngine. Uważam jednak, że nie będzie to optymalne, ponieważ LicensedEngine będzie musiał znajdować się poza głównym projektem/biblioteką, ponieważ nie może być dostarczony w naszej standardowej wersji. W jaki sposób mogę to osiągnąć?


title: Kiedy usuwasz stare technologie ze swojego CV?

text: Przeglądałem kilka życiorysów, które mamy na nowe stanowisko. Zauważyłem, że niektórzy z nich mają w swoim CV wiele starych wersji języków programowania i starych aplikacji (np. SQL 4.2, VB5, Lotus 123, Novell). To sprawiło, że ich lista doświadczeń komputerowych była bardzo długa. Czy utrzymujesz to świeże? Czy pokazujesz swoją głębię doświadczenia, mimo że nigdy więcej nie użyjesz tej technologii? Kiedy powinieneś porzucić starą technologię w swoim CV? Czy pozostawienie starej technologii w swoim CV zaszkodzi w zostaniu zatrudnionym?


title: Dlaczego mam powiedzieć, że moja funkcja jest typu IFly, a nie typu Samolot?

text: Powiedzmy, mam dwie klasy: Samolot i Ptak, obie latają. Oba implementują interfejs IFly. IFly deklaruje funkcję `StartFlying()`. W związku z tym zarówno samolot, jak i ptak muszą zdefiniować funkcję i używać jej zgodnie ze swoimi wymaganiami. Teraz, kiedy tworzę podręcznik dotyczący informacji o klasach, co powinienem napisać dla funkcji `StartFlying`? 1) `StartFlying` jest funkcją typu IFly . 2) `StartFlying` jest funkcją typu Samolot 3) `StartFlying` jest funkcją typu Ptak. Moja opinia to 2 i 3 są bardziej pouczające. Ale widzę, że odwołania do klas używają pierwszego. Mówią, w jakim interfejsie jest zadeklarowana funkcja. Problem polega na tym, że naprawdę nie otrzymuję żadnych użytecznych informacji, wiedząc, że `StartFlying` jest typu IFly. Jednak wiedza, że `StartFlying` jest funkcją wewnątrz Airplane i Bird, jest bardziej pouczająca, ponieważ mogę zdecydować, której instancji (Airplane lub Bird ) użyć. Jakieś światła na ten temat: jak powiedzenie `StartFlying` jest funkcją typu IFly, może pomóc programiście zrozumieć, jak używać tej funkcji?


title: Jak dużego zespołu potrzebujesz, aby korzystać z oprogramowania do śledzenia błędów?

text: Mój zespół programistów właśnie powiększył się o 100% (z 1 programisty do 2). Moja nowa kohorta chce zainwestować w oprogramowanie do śledzenia błędów. Czy takie oprogramowanie jest korzystne dla tak małego zespołu?


title: Jakie są niechętne pomysły w Extreme Programming (XP)

text: Jeśli chodzi o inżynierię oprogramowania, istnieje kilka przeszkód dla ekstremalnego programowania, jedną z nich są niechętne pomysły. Nie akceptowanie pewnego rodzaju idei. Jakie jest dokładne znaczenie terminu „niechętne pomysły”


title: Umowa na oprogramowanie do prowadzenia prac rozwojowych

text: Szukam wskazówek od kogoś, kto z powodzeniem zatrudnił freelancera do pomocy przy pisaniu oprogramowania, które później sprzedawał publicznie. Po prostu, jaki rodzaj umowy na oprogramowanie powinienem mieć podpisane przez freelancera, abym miał pełne prawa do kodu i nie mógł być później pozwany. Obecnie jestem niezależny, ale planuję założyć firmę programistyczną, gdy dopracuję do perfekcji swoje oprogramowanie.


title: Jakie są wymagania dla pomyślnej architektury SOA?

text: Jestem EA w organizacji zatrudniającej ponad 10000 pracowników. Strategicznie zmierzamy w kierunku SOA. Obecnie badam architekturę SOA i tworzę mapę drogową oraz natrafiłam na wiele blogów, które mówią o „SOA nie żyje”. Wszyscy możemy się zgodzić, że SOA to nie tylko usługi sieciowe. Problem polega na tym, że trudno mi znaleźć jakiekolwiek informacje na temat przyczyn niepowodzeń SOA w przedsiębiorstwach. Co poszło źle, a co poszło dobrze? Moje pytanie brzmi: **Jakie są najczęstsze błędy SOA w przedsiębiorstwach, które powodują, że SOA zawodzi w dłuższej perspektywie? Czy jest jakaś najlepsza praktyka dla SOA? Jakie są najważniejsze wymagania skutecznej architektury SOA w przedsiębiorstwie?** To byłaby dobra informacja zwrotna na temat naszej strategii SOA w tej organizacji. Próbowałem zawęzić pytanie, ale jest to trudne ze względu na charakter pytania.


title: Dlaczego używanie kluczy ciągów jest ogólnie uważane za zły pomysł?

text: Od jakiegoś czasu mnie to denerwuje. W większości przypadków, jeśli chodzi o przechowywanie danych w strukturach takich jak tablice haszujące, programiści, książki i artykuły twierdzą, że indeksowanie elementów w tych strukturach za pomocą wartości String jest uważane za złą praktykę. Jednak do tej pory nie znalazłem ani jednego takiego źródła, które wyjaśniałoby również DLACZEGO uważa się to za złą praktykę. Czy to zależy od języka programowania? Na podstawowych ramach? Na wdrożeniu? Weź dwa proste przykłady, jeśli to pomoże: Tabela podobna do SQL, w której wiersze są indeksowane przez klucz podstawowy String. Słownik .NET, w którym klucze są ciągami.


title: Czy zewnętrzne pliki konfiguracyjne są uważane za antywzorzec?

text: Wiele razy byłem w sytuacji, w której aplikacja jest pozornie zepsuta, tylko po to, by stwierdzić, że winny jest zewnętrzny plik konfiguracyjny. Zazwyczaj dzieje się tak, ponieważ istnieje niewłaściwy plik lub zawiera nieprawidłowe dane. Czy istnieje lepszy sposób na umożliwienie zewnętrznemu użytkownikowi/procesowi modyfikowanie charakterystyk środowiska wykonawczego aplikacji, czy też jest to najbardziej znane rozwiązanie problemu? Chciałbym zobaczyć dyskusję na temat ogólnego przypadku, zamiast skupiać się na, powiedzmy, Unix `/etc` lub Java JNDI i tak dalej.


title: Współdzielony hosting Harmonogramu zadań

text: Używam udostępnionego hosta, który nie obsługuje CRON/TaskScheduler (jest to serwer Windows GoDaddy). Co godzinę muszę szukać na serwerze pocztowym nowych e-maili, mam skrypt na PHP. Czy mogę używać `PERL` do emulowania zadania w określonych godzinach, czy są jakieś inne alternatywy?


title: Wywiad programistyczny: na posortowanych tablicach, dowód algorytmu

text: Poniżej znajduje się pytanie do wywiadu programistycznego: Biorąc pod uwagę 3 posortowane tablice. Find(x,y,z), (gdzie x jest z pierwszej tablicy, y jest z drugiej tablicy, a z jest z trzeciej tablicy), tak że Max(x,y,z) - Min(x,y,z) jest minimalna. To pytanie jest omawiane tutaj: http://www.careercup.com/question?id=14805690 Jedno z możliwych rozwiązań omawianych na stronie pucharu kariery jest następujące: „Weź trzy wskazówki. Każdy do pierwszego elementu listy. minimum z nich. obliczyć max(xyx)-Min(xyz).Jeśli wynik jest mniejszy niż dotychczas, zmień go.zwiększ wskaźnik tablicy, która zawiera ich minimum" Moje pytanie brzmi, jak możemy udowodnić poprawność ten algorytm? Jeśli nie, czy możemy wymyślić przypadki, w których algorytm zawiedzie. A jeśli tak, to jaki jest prawidłowy algorytm do rozwiązania tego problemu z dowodem.


title: Wybór systemu operacyjnego do rozwoju funkcjonalnego

text: Jestem głównie programistą .NET, więc normalnie używam Windows/VisualStudio (to znaczy: jestem rozpieszczony), ale w wolnym czasie lubię Haskell i inne (głównie funkcjonalne) języki. Teraz dla Haskella obsługa systemu Windows jest w porządku (możesz uzyskać Haskell-Platform), ale latley próbowałem ustawić podstawowe środowisko Clojure/Scheme i jest to po prostu uciążliwe dla systemu Windows. Zastanawiam się więc nad wypróbowaniem innego systemu operacyjnego, aby uzyskać lepsze narzędzia i obsługę języka. Oczywiście zostaję z MacOS lub jakąś dystrybucją Linuksa. Nigdy wcześniej nie używałem MacOS i oczywiście Linux byłby tańszy (darmowy) i nie sądzę, żebym mógł równolegle uruchomić MacOS na twoim normalnym sprzęcie PC (możesz?). PLUS: Nie mam pojęcia o narzędziach, których możesz użyć na tych (dla mnie) obcych systemach operacyjnych. Krótko mówiąc: chcę poznać więcej Haskell, Clojure, Scala, Scheme i oczywiście potrzebuję przynajmniej dobrego oprzyrządowania do JavaScript/HTML5/Css. Wsparcie dla .NET/Mono/F# byłoby świetne, ale do tego nadal będę miał bootowanie Win7. Więc chciałbym wiedzieć: \- jaki jest twój preferowany system operacyjny, dystrybucja (czy Ubuntu jest opłacalny?) \- jakiego edytora/IDE używasz Dziękujemy za pomoc! PS: Nie jestem pewien, czy to właściwe miejsce na to pytanie, ale mam nadzieję, że tak - jeśli nie, daj mi znać, dokąd mam to przenieść (StackOverflow nie wydaje się być właściwym miejscem IMHO)


title: W jaki sposób wzorce projektowe do tworzenia stron internetowych powinny różnić się od wzorców projektowych do tworzenia oprogramowania?

text: Chcę zostać lepszym programistą, więc większość wolnego czasu poza pracą poświęcam na naukę wzorców projektowych i kiedy je wdrażać (ponieważ uważam, że uczenie się ogólnych wzorców jest lepszym punktem wyjścia niż uczenie się konkretnych bibliotek lub narzędzi) . Jedną z kwestii jest to, że większość cenionych wzorców projektowych, o których czytam, jest opisywanych pod kątem ich zastosowań w tworzeniu oprogramowania. Zastanawiałem się, co należy wziąć pod uwagę, stosując je do tworzenia stron internetowych, a nie tworzenia oprogramowania? Dla odniesienia, te (Reference1 Reference2) są tym, czego używałem jako odniesienia podczas wybierania wzorca projektowego, który byłby najlepiej zastosowany w moim bieżącym projekcie.


title: Obiekt niezmienny vs zmienny jako parametr zwracany dla metody klasy

text: Istnieje metoda klasowa (metoda statyczna), w której tworzę i buduję jakiś obiekt. Aby wypełnić ten obiekt, tworzę go jako obiekt zmienny. Mój zmienny obiekt jest podklasą niezmiennego obiektu. Więc mogę zwrócić go jako typ superklasy. Ten obiekt jest właśnie tworzony w metodzie klasy i zwraca. Nie jest częścią stanu obiektu ani klasy. **Czy powinienem zwrócić obiekt zmienny czy niezmienną kopię?** (jakie rozwiązanie będzie poprawne w koncepcji **enkapsulacji** ) Na przykład jest jakiś pseudokod: // MutableArray jest podklasą Array MutableArray : Array; // Kolejna klasa static (Array *)getEngineers { Tablica *employees = Array.arrayWithContentsOfResource("employees.txt"); MutableArray *engineers = new MutableArray; for (Pracownik *pracownik w pracownikach) { if (employee.profession == "Inżynier") { inżynierowie.addObject(pracownik) } } powrót inżynierowie; // czy powinienem zwrócić Array.arrayWithArray(engineers) zamiast inżynierów? } **Update:** Mam na myśli to, że jeśli mam zmienną tablicę, która jest członkiem obiektu, to sensowne jest zwrócenie niezmiennej kopii w metodzie pobierającej (aby zapewnić kontrolę dostępu i enkapsulację). Ale jeśli mam metodę jak w przykładzie. Potrzebuję tylko niezmiennego obiektu do użycia. Ale tworzenie niezmiennej kopii tablicy to dodatkowe operacje. Czy ma sens, aby było to niezmienne?


title: Jak w prosty sposób dodać zatwierdzenia po fakcie z tej samej funkcji do drzewa git

text: Jestem jednym z dwóch programistów w systemie. Większość zatwierdzeń dokonuję w tym okresie. Mój obecny przepływ pracy git jest taki: * jest tylko gałąź `master` (bez rozwijania/wydawania) * Tworzę nową gałąź, gdy chcę wykonać funkcję, wykonać wiele zatwierdzeń, a kiedy skończę, ja połącz tę gałąź z powrotem z `master` i zwykle przekaż ją do zdalnego. ...z wyjątkiem tego, że zwykle nie kończę. Często wracam, żeby coś zmienić i za każdym razem, kiedy myślę, że jest zrobione, ale może to być 3-4 commitów zanim naprawdę skończę i przejdę do czegoś innego. **Problem** Problem, który mam teraz, polega na tym, że .. moje drzewo gałęzi funkcji jest scalone i wepchnięte do mastera i zdalnego mastera, a potem zdaję sobie sprawę, że tak naprawdę nie skończyłem z tą funkcją, ponieważ mam ostatnie poprawki, których chcę dodam, gdzie wykończenie może być tylko kosmetyczne lub może być znaczące, ale nadal należą do tej jednej funkcji, nad którą właśnie pracowałem. **Co robię teraz** Obecnie, gdy mam dodatkowe zatwierdzenia po fakcie, takie jak ta, rozwiązuję ten problem, wycofując moje scalenie i ponownie scalając gałąź `feature` w `master` z moimi nowymi zatwierdzeniami , i robię to, aby drzewo git wyglądało na czyste. Jedna czysta gałąź funkcji rozgałęziła się z `master` i połączyła z nią z powrotem. Następnie naciskam --force moje zmiany w punkcie początkowym, ponieważ mój punkt początkowy nie ma w tej chwili dużego ruchu, więc mogę prawie liczyć, że wszystko będzie bezpieczne, lub mogę nawet porozmawiać z innym deweloperem, jeśli muszę koordynować. Ale wiem, że ogólnie nie jest to dobry sposób, ponieważ przepisuje to, co inni już wyciągnęli, powodując potencjalne problemy. I zdarzyło się to nawet z moim deweloperem, gdzie git musiał wykonać dodatkowe dziwne połączenie, gdy nasze drzewa się rozeszły. **Inne sposoby rozwiązania tego, które uważam za niezbyt wspaniałe** * Następnym najlepszym sposobem jest po prostu wykonanie tych dodatkowych zatwierdzeń bezpośrednio w gałęzi `master`, niezależnie od tego, czy jest to scalanie do przodu, czy nie. To nie sprawia, że drzewo wygląda tak ładnie, jak w moim obecnym sposobie, w którym to rozwiązuję, ale nie jest to przepisywanie historii. * Jeszcze innym sposobem jest _czekanie_. Może poczekaj 24 godziny i nie popychaj rzeczy do początku. W ten sposób mogę przepisać rzeczy według własnego uznania. Wadą tego podejścia jest strata czasu na czekanie, podczas gdy ludzie mogą teraz czekać na rozwiązanie problemu. * Jeszcze innym sposobem jest tworzenie „nowej” gałęzi funkcji za każdym razem, gdy zdaję sobie sprawę, że muszę coś poprawić. Mogę skończyć z takimi rzeczami jak `gałąź-funkcji` `gałąź-funkcji-html-fix`, `gałąź-funkcji-checkbox-fix` i tak dalej, w pewien sposób zanieczyszczając drzewo git. Czy istnieje sposób na zarządzanie tym, co próbuję zrobić, bez opisanych przeze mnie wad? Zamierzam tutaj uzyskać czystą historię, ale może muszę zrezygnować z tego celu, jeśli technicznie nie jest to możliwe. **Przykładowe komunikaty o zatwierdzeniu po fakcie** Główne zatwierdzenia: zmień zachowanie modułu, aby dać użytkownikowi więcej informacji Tutaj myślałem, że skończyłem, wyewidencjonowałem i połącz z masterem, a potem ups, zapomniałem o tym (OFT): OFT: ( (ulepszenie) dodano lepsze komunikaty o błędach OK, już skończone! Później użytkownik wraca i prosi o ulepszenie/funkcję. Okazuje się, że określony numer wejściowy dla zamówienia może mieć powiązaną z nim wersję. Więc tak naprawdę są to dwie liczby, a nie jedna. OFT: (feature-add): popraw dane wejściowe zamówienia, aby zaakceptować poprawki Teraz skończyłem ... OFT: (poprawka błędów) wystąpił błąd z dwucyfrową metodą wprowadzania, napraw SQL dla tego dobrze, teraz ja' m gotowe ... OFT: (ulepszenie) och czekaj, ponownie poprawiono komunikaty o błędach, dla jasności!


title: Jak można if (sscanf(buf, "%i", &mode) != 1 || TRUE) przepisać na if (TRUE)?

text: Zgubiłem się w otwarciu tego posta na reddicie. Jak można przepisać `if (sscanf(buf, "%i", &mode) != 1 || TRUE)` na `if (TRUE)`? Czy to zakłada, że `sscanf` nigdy nie zawodzi?


title: Jaki problem mają rozwiązać submoduły git?

text: Jaki problem dobrze rozwiązują podmoduły git? Kiedy powinienem ich używać? A raczej jaki jest ich przypadek użycia? Jedyne użycie submodułów, które widziałem „na wolności”, dotyczyło współdzielenia kodu między wieloma repozytoriami. Z tego, czego doświadczyłem, podmoduły nie wydają się być idealnie dopasowane do tego przypadku użycia. Natrafiasz na nieszczęście `git update submodule`, a Twoja historia zostaje wypełniona zatwierdzeniami `updating submodule pointer`. Jeśli przypadek użycia „współdzielenie kodu” nie jest najlepiej rozwiązywany przez podmoduły, jakie są problemy?


title: Dlaczego każdy język programowania jest „potężny”?

text: Za każdym razem, gdy przeglądam stronę internetową poświęconą jakiemuś językowi programowania, zawsze widzę słowo _"potężny"_ na liście cech charakterystycznych / atrybutów. Jeśli każdy język programowania jest potężny, dlaczego umieszczają to słowo w samouczkach/dokumentacji?


title: Hash wersji do rozwiązywania problemów z Event Sourcing

text: Podstawowe przykłady dotyczące Event Sourcing, które widziałem, nie dotyczą zdarzeń poza kolejnością, przesunięć zegara w różnych systemach i późnych zdarzeń z partycji systemowych. Zastanawiam się, czy bardziej dopracowane implementacje Event Sourcing opierają się na stemplu wersji zmodyfikowanych obiektów? Na przykład zakładając, że system renderuje jednostkę **Klient** o identyfikatorze wersji _ABCD1234_. Jeśli użytkownik zmodyfikuje encję, system utworzy zdarzenie ze zmodyfikowanymi polami ORAZ identyfikatorem wersji, której wersji dotyczy. Później obiekt odpowiadający na zdarzenia wykryje zdarzenia niezgodne z kolejnością i połączy je.


title: Rekruter proszący o pomoc w zrozumieniu JEE5 lub JEE6 i J2EE. (NIE OFERTA PRACY, KTÓRA NIE POSZUKUJE KANDYDATÓW)

text: Jestem rekruterem. Chcę dowiedzieć się jak najwięcej o JEE5/JEE6, więc kiedy próbuję znaleźć tego typu kandydatów, mogę przynajmniej z nimi inteligentnie porozmawiać. Muszę zrozumieć, co jest oczywiste? Na przykład, jeśli byłeś J2EE lub miałeś doświadczenie z JEE5 lub JEE6, czy mógłbym założyć, że masz wiosnę i hibernację? Czy mogę założyć, że masz administratora Jboss i Jboss? Myślę, że byłoby pomocne, gdybym zamieścił opis stanowiska i pozwolił wam powiedzieć, co jest z nim nie tak? Kandydat musi posiadać następujące umiejętności: * Duże doświadczenie w programowaniu Java/J2EE * Doświadczenie z różnymi narzędziami programistycznymi (Eclipse, SVN, itp.) * Projektowanie baz danych i znajomość SQL * Usługi sieciowe * JavaServer Faces (JSF) * Model-View-Controller (MVC) * Wygodna praca w środowisku Unix/Linux * Maven * Wdrażanie i administracja JBoss * Swing/AWT * Scrum/Agile * TeamForge Czy gdybym był certyfikowanym J2EE, posiadałbym wszystkie te umiejętności? Czy te umiejętności są w ogóle pogrupowane? Gdybyś pisał ten opis stanowiska dla J2EE, co byś zmienił? Próbuję się uczyć. Nie zamieszczam tego, aby znaleźć kandydatów do pracy. Publikuję to, aby spróbować zrozumieć, o co prosi menedżer ds. Rekrutacji i móc mu powiedzieć, że nie ma mowy, aby J2EE posiadało wszystkie te umiejętności lub, nie ma problemu, wszyscy J2EE mają te umiejętności. Czy mam sens?


title: Praca jako jedyny programista: przeglądanie kodu

text: _Nie mam wyboru_, jak tylko pracować samodzielnie i nie mogę znaleźć odpowiedniego rozwiązania, aby przejrzeć moją pracę, sprawdzić rozsądek, mieć kogoś, z kim mógłbym przeprowadzić burzę mózgów, przedyskutować najlepsze praktyki i tak dalej. Myślałem, że uzyskam odpowiedź za pośrednictwem artykułu Jeffa Atwooda: W programowaniu, jeden jest najsamotniejszym numerem, najlepszy, jaki mogłem znaleźć na ten temat, ale okazało się, że tylko powtórzyłem moje pytanie. Wiem, że strony wymiany stosów, takie jak ta, i Code Review są oczywistą potencjalną odpowiedzią, ale jak wielu by to doceniło, jest to DALEKO od ideału: chociaż nie mogę wymienić wszystkich pułapek, często formułując pytanie i umieszczając je w pudełku samodzielny problem często wymaga tak wiele pracy, że zanim odpowiednio go przygotujesz, odpowiesz na własne pytanie w czasie dłuższym, niż zajęłoby to w innym przypadku. Ponadto ukrywanie szczegółów w celu zadania dobrze zdefiniowanego pytania eliminuje możliwość wykrycia przez kogoś problemów, o których nie pomyślałeś. Ponadto, chociaż nie mogę tego do końca położyć, reakcji swobodnej rozmowy nie można dorównać żadną formą tekstowej dyskusji internetowej, o której mogę pomyśleć. Na koniec, z oczywistych powodów, nie chcę publikować całego mojego projektu, aby świat mógł patrzeć na niego przez resztę wieczności. Czy są jakieś inne odpowiedzi niż zapłacenie konsultantowi za przejrzenie mojego kodu?


title: Jak zapoznać się z generowaniem certyfikatów

text: Mam pracować nad usługami sieciowymi (używając Apache CXF i Spring ). Zostałem poproszony o zapoznanie się z generowaniem certyfikatów, ponieważ będziemy musieli generować certyfikaty w przyszłości dla usług sieciowych. Wiedziałem tylko, że używają serwera Glassfish. Wygooglowałem , ale nic nie zrozumiałem. Wiem, że podane przeze mnie informacje nie są wystarczające, aby oczekiwać odpowiedniej odpowiedzi. Ale czy ktoś mógłby mi powiedzieć, jaki będzie najlepszy punkt wyjścia do tego? a jakich innych informacji potrzebujemy od klienta, aby było to jaśniejsze ??


title: Dlaczego nazwanie kolumny klucza podstawowego tabeli „Id” jest uważane za złą praktykę?

text: Mój nauczyciel t-sql powiedział nam, że nazywanie naszej kolumny PK „Id” jest uważane za złą praktykę bez dalszych wyjaśnień. Dlaczego nazwanie kolumny PK tabeli „Id” jest uważane za złą praktykę?


title: Dlaczego build.number jest „nadużyciem” wersji semantycznej?

text: Wyjaśniałem proponowany system budowania (Gradle/Artifactory/Jenkins/Chef) jednemu z naszych starszych architektów, a on skomentował mi, że _jakoś_ się z nim nie zgadzam, ale nie mam wystarczającego doświadczenia, aby naprawdę się nad tym zastanawiać. Ten projekt buduje bibliotekę Java (JAR) jako artefakt do ponownego wykorzystania przez inne zespoły. Do wersjonowania chciałbym użyć semantycznego podejścia: <główna>.<poboczna>.<poprawka> Gdzie `łatka` wskazuje poprawki błędów/awaryjnych, `minor` wskazuje wydania kompatybilne wstecz, a `major` wskazuje albo masowe refaktoryzacje API i/lub zmiany niekompatybilne wstecz. Jeśli chodzi o dostarczanie, to jest to, czego chcę: programista wprowadza jakiś kod; uruchamia to kompilację w środowisku QA/TEST. Niektóre testy są prowadzone (niektóre zautomatyzowane, inne manualne). Jeśli wszystkie testy zakończą się pomyślnie, kompilacja produkcyjna publikuje plik JAR w naszym wewnętrznym repozytorium. W tym momencie JAR powinien być poprawnie wersjonowany, a moim pomysłem było użycie `build.number`, który jest automatycznie generowany i dostarczany przez nasze narzędzie CI jako numer łatki. Tak więc wersjonowanie w rzeczywistości wyglądałoby następująco: <główna>.<podrzędna>.<numer.budowy> Ponownie, gdzie `numer_budowy` jest dostarczany przez narzędzie CI. Architekt odrzucił to, mówiąc, że użycie numeru kompilacji CI było „nadużyciem” wersjonowania semantycznego. Moje pytanie brzmi: czy to prawda, a jeśli tak, to dlaczego? A jeśli nie to dlaczego nie?


title: Kiedy programista powinien zmienić technologię lub framework?

text: Jestem programistą ASP.NET od 3 lat temu i teraz jestem dość potężny w WebForms. Ale teraz wydaje się, że wszyscy zmierzają lub przesuwają się w kierunku ASP.NET MVC, a moja firma również podejmuje tę zmianę. Pytanie brzmi, kiedy i jak możesz odczuć, że nadszedł czas, aby przejść na nowszą technologię. Na przykład, kiedy i jak czujesz, że musisz przejść z HTML4 do HTML5 lub CSS2 do CSS3 lub ASP.NET WebForms do ASP.NET MVC itp.?


title: Który wzorzec projektowy jest zwykle używany podczas projektowania aplikacji WinForm opartej na usługach danych WCF?

text: Proszę mi wybaczyć, ponieważ jestem trochę nowy w następujących technologiach i praktykach. Otrzymałem zadanie stworzenia pakietu zarządzania wykorzystującego GUI MDI. Ten pakiet będzie stanowić fronton usługi danych WCF. Moje pytanie brzmi, jaki wzorzec projektowy jest zwykle używany przez większość profesjonalistów przy projektowaniu takiej aplikacji. W tej chwili przyglądałem się zarówno wzorcom projektowym MVC, jak i 3-warstwowym. Jeśli trasa MVC jest zwykle pobierana, zakładam, że ponieważ usługa WCF jest dodawana jako odwołanie do usługi, która zapewnia widoczność wszystkich jej klas, część modelu MVC jest w dużej mierze objęta? Czy ma sens generowanie interfejsu z klasy WCF? Jeśli używany jest wzorzec 3-warstwowy, czy sensowne byłoby tworzenie obiektów warstwy danych dla każdej widocznej klasy WCF (np. PropertyDAL), a ponadto obiektów warstwy biznesowej dla każdego obiektu warstwy danych? Jeśli tak jest w przypadku ponad 114 klas, które byłyby widoczne, oznaczałoby to 228 dodatkowych klas, co wydaje mi się nieco nadęte i nie jest konieczne. Oto link do użycia wzorca projektowego MVC, który naprowadził mnie na moje pytanie.


title: Czy metody rozwoju powinny zdławić indywidualizm dewelopera?

text: Jestem na ostatnim semestrze college'u i biorę udział w kursie inżynierii oprogramowania. Na zajęciach poznajemy różne metody tworzenia oprogramowania. Tą, na której się skupiliśmy i wykorzystaliśmy do rozwoju naszego projektu, była metoda wodospadu. Czuję, że instruktor mógł to źle zaimplementować. W naszych diagramach klas musieliśmy wymienić WSZYSTKIE właściwości i metody, w tym prywatne. Przeczytałem kilka książek, a mianowicie Clean Code, które mówią, aby funkcje były jak najkrótsze i skoncentrowane. Wyliczanie każdej małej funkcji na naszych diagramach wydaje się nużące, jeśli nie pomagają one innym programistom (są prywatne, nikt inny ich nie użyje). Poza tym mogę nie myśleć o każdej malutkiej funkcji podczas projektowania programu, mogą one pojawić się podczas refaktoryzacji. Czy instruktor powiedział nam źle, prosząc nas o wymienienie wszystkich funkcji? I czy te metody projektowania tłumią indywidualizm programistów w pisaniu kodu w sposób, w jaki mogą go najlepiej zrozumieć?


title: Kierowanie kierownictwem do właściwej decyzji

text: Mój przełożony (również programista) i ja żartujemy na temat pisania książki zatytułowanej „Managing From Beneath: Subversively Guiding Management to the Right Decision” i zawierającej szereg „technik”, które opracowaliśmy, aby pomóc tym, którzy podejmują decyzje zrobić właściwe. Jak na razie mamy (ostrzeżenie o cynizmie!): * **BIC It!** BIC to skrót od „Bury In Committee”. Kiedy pojawia się zły pomysł, który ktoś chce promować, staramy się, aby został on przekazany komisji w celu uzyskania opinii. Zazwyczaj albo zostanie od razu zabity (zwłaszcza jeśli inni członkowie komitetu rywalizują o ciebie jako zasób), albo zostanie zawieszony na tyle długo, że proponujący o tym zapomni. * **Mądre, głupie czy drogie?** Gdy ktoś wpadnie na wizjonerski pomysł, zaproponuj mu trzy sposoby: sprytny, głupi i kosztowny. Mam nadzieję, że masz przynajmniej 2/3 szansy na to, że nie musisz robić tego w sposób, który sprawia, że kawałek twojej duszy umiera. * **Wszystko-Pro**. To zapobiegawcza lista za/przeciw, w której wchodzisz do umysłu (za)przeciwnika i zastanawiasz się, jakie byłyby wady przeciwko robieniu tego po swojemu. Przekształć je w zawodowców i przedstaw na swojej liście zawodowców, zanim będą mieli szansę przedstawić je jako wady. * **Zapalenie odleżyn**. Połącz ze sobą oczekujące decyzje, najlepiej z projektem zwierzaka proponującego jako ostatnim ogniwem w łańcuchu. Użyj tej dźwigni, aby wymusić działanie na tych, którzy zostali odrzuceni. * **Akceptacja z wyprzedzeniem**. Czasami jest jasne, że kierownictwo zmierza w określonym kierunku, niezależnie od rady, która jest przeciwna, i nadszedł czas, aby jak najlepiej to wykorzystać. Skorzystaj jednak z okazji, aby zdobyć coś innego, czego potrzebujesz. Zbliż się niespodziewanie do sponsora i zrób pierwszy krok: „Wiesz, myślałem o tym i choć nie jest to trasa, którą radziłbym, o ile uda nam się rozluźnić harmonogram i budżet Projektu Awesome , mogę użyć magii, aby Twój projekt odleciał”. Więc ... jakie techniki wymyśliłeś, aby spróbować zażegnać problematyczne projekty lub jak najlepiej wykorzystać to, co może przyjść?


title: czy pozwalasz ludziom pracować do późna?

text: Natknąłem się na ten link Prawo Parkinsona, w którym jest napisane: „Praca rozszerza się, aby wypełnić czas dostępny na jej ukończenie”. Czy zgadzasz się z tym? Jeśli tak, jak wymuszasz to na ludziach? W naszym przypadku, jeśli poprosimy ludzi o wcześniejsze wykonanie zadania i poprosimy ich o odejście, niektórzy uważają to za demotywujące. Jaka jest Twoja opinia, aby uniknąć uczucia demotywacji, a także ukończenia i szybkiego opuszczenia pracy?


title: Czy należy pisać złożoność Big Oh w dokumentacji algorytmów?

text: Czy pisząc lub używając algorytmu należy wspomnieć o złożoności Big Oh?


title: Programowanie stosowane a programowanie podstawowe

text: Mój szef po prostu pozwolił mi wybrać, co chcę zrobić: rdzeń programu, który będzie używany przez innych programistów, lub systemy programowe, które będą korzystać z tego rdzenia. Jakie są plusy i minusy obu? Jakie możliwości kariery da mi każdy z nich? Co jest ciekawego w każdym z nich?


title: Jak uzyskać płynny ruch gestów w aplikacji map innych firm na iOS?

text: W App Store jest kilka aplikacji, które z różnych powodów wykorzystują zewnętrzne źródła map do wyświetlania danych map. Niektóre mają nawet wiele źródeł ruchu rowerowego i tak dalej. Jednak niektóre z nich są dość kłopotliwe w użyciu, podczas panoramowania i powiększania poruszają się gwałtownie podczas ładowania i nie są tak płynne, jak aplikacja Mapy Apple. Jednak napotkałem niektóre, które są dość płynne i wydają się owijać rzeczywistą „mapę” w obiekt sferyczny 3D, który staje się płaski, gdy zbliżasz się coraz bliżej. **Jak osiąga się to zachowanie? Czy Apple zapewnia specjalną klasę, aby uzyskać tego rodzaju interakcję?** Widziałem również podobne rozwiązanie w aplikacji Mac App Store o nazwie Planito, ruch jest bardzo płynny i mogą nawet wyświetlać w ten sposób mapy Bing.


title: Problem greckich filozofów, kamiennych tablic i niemych niewolników

text: To jedno z pytań, na które natknąłem się przygotowując się do rozmowy programistycznej. > Zaprojektuj system dla greckich filozofów do wymiany wiadomości za pomocą kamiennych > tabliczek noszonych przez głupich niewolników. Cóż, ludzie, którzy mieli to pytanie, zasugerowali użycie analogii protokołu TCP/IP do opisania komunikacji i niektórych sugerowanych transmisji danych pakietowych, aby wyjaśnić projekt. Oto, co myślę o tym, kierując się wskazówkami: 1. Greccy filozofowie działaliby jak „maszyny”, które próbują się porozumieć. 2. Głupi niewolnicy byliby nośnikiem wiadomości, który w naszej analogii jest „siecią”. 3. Kamienne tablice byłyby wiadomościami przenoszonymi jak „pakiety danych”. 4. Być może niewolnicy dotarliby do filozofów, prosząc o trasę od jakichś przypadkowych gości, którzy zaprowadzą ich do miejsca filozofa, tak jak pakiety docierają do miejsca przeznaczenia za pomocą routerów w sieci. 5. Wiadomość może zostać podzielona na wiele tabliczek, dzięki czemu wiadomość może być ostatecznie niesiona przez więcej niż jednego niewolnika, który może podążać różnymi ścieżkami i docierać w dowolnej kolejności. Musi być sposób na uporządkowanie wiadomości w odpowiedniej kolejności po ich dotarciu do odbiorcy. (numer sekwencyjny w tabletkach?) 6. System powinien również być w stanie obsłużyć brakujące tablety iw takim przypadku filozof nadawcy powinien spróbować ponownie wysłać całą wiadomość po przekroczeniu limitu czasu? **EDYTUJ:** Chciałbym zadać następujące pytania: 1. Czy myślę o właściwych liniach? 2. Czy brakuje mi ważnych rzeczy w wymienionych powyżej rzeczach? 3. To pytanie dotyczące projektowania systemu wydaje mi się niejasne. Jak ktoś zobrazowałby taki system w wywiadzie? Używasz diagramów do pokazywania interakcji między podmiotami? 4. Czy prawidłowo radzę sobie z problemem brakujących tabletów (wymienionych w punkcie 6. powyżej)?


title: Czy diagramy sekwencji powinny być szczegółowe czy abstrakcyjne?

text: Tworzę diagram sekwencji dla prostego programu, nad którym pracuję do pracy. Diagram, nad którym obecnie pracuję, jest bardzo wysoki - definiuje interfejs z wieloma ścieżkami alt, ale nie stanowi przykładu żadnych konkretnych przypadków użycia. Zastanawiałem się, czy nie lepiej byłoby zamiast tego zrobić kilka diagramów, które pokazują konkretne przykłady. Nie znam sposobu, w jaki te diagramy mają być używane, a widziałem zarówno konkretne przykłady, jak i abstrakcyjne przykłady. Dziękuję!


title: Czy firma może zaprzeczyć, że uczysz ludzi obsługi oprogramowania na licencji MIT?

text: Istnieje sposób, w jaki firma/fundacja, która posiada określone oprogramowanie (framework) na licencji MIT, odmawia lub uniemożliwia nauczenie go innym programistom i czerpanie z tego zysków? A co jeśli ta firma ma swoje własne kursy/zajęcia na ten temat? Czy mogą powstrzymać „kogoś innego” przed nauczaniem tego?


Jak wybrać inżyniera oprogramowania aplikacji internetowych? Pozycją (stałą) jest przepisanie klienta istniejącej aplikacji serwera klienckiego typu desktop. Strony nie będą generowane dynamicznie na serwerze, ale serwer udostępni pełny interfejs API w dowolny sposób, na przykład wywołania JSON RPC, i może udostępnić pliki statyczne. Zastąpi klienta, którego ludzie muszą pobrać i zainstalować, więc wymaganie przyzwoitej przeglądarki z rozsądnymi ustawieniami (np. Włączony JavaScript) jest w porządku. Prawie wszystkie przypadki użycia dotyczą komputera stacjonarnego. Nie będzie dostępny dla wyszukiwarek (jest to aplikacja korporacyjna). Możemy posunąć się do tego, że napiszemy całość na jednej stronie, ale nie musimy. Prawie wszystko zostałoby napisane przez danego inżyniera oprogramowania aplikacji internetowych. Dokładne biblioteki open source, których należy użyć, zależą również od inżyniera, w granicach rozsądku. W szczególności szukam porady na temat tego, jakich kwalifikacji szukać/sprawdzać podczas rozmowy kwalifikacyjnej, ponieważ wybór inżyniera oprogramowania aplikacji internetowych jest ogólnie zbyt obszernym tematem. Edytuj — stanowisko to zajmowałoby się wyłącznie programowaniem JavaScript w przeglądarce (i byłoby odpowiedzialne za HTML i CSS) — inni programiści rozwijaliby serwer, ale ta pozycja mogłaby żądać fasad przez API. Nie ma Ruby, ASP, JSP itp., ponieważ warstwa serwera WWW jest bardzo cienka i po prostu tłumaczy wywołania na API warstwy biznesowej i zwraca je jako JSON (lub cokolwiek innego, ale JSON wydaje się najłatwiejszy).


title: Jak organizujesz swoje repozytoria git?

text: Mam problem z poprawnym sformułowaniem tego pytania, stąd kiepski tytuł. Zasadniczo mam proste rozszerzenie do Chrome, które rozwijam do pracy. Jest w użyciu i ponieważ używam go regularnie, ciągle myślę o ulepszeniach lub dodatkowych funkcjach, które mógłby mieć. Moja struktura plików wygląda tak (jestem na Macu) `~/Sites/Chrome_extensions/{nazwa mojego pracodawcy}/CharCounter/` `CharCounter/` zawiera wszystkie pliki potrzebne do rozszerzenia Chrome. Za każdym razem, gdy jestem zadowolony z nowej wersji mojego rozszerzenia, pakuję je w Chrome, a wynikowy plik .crx nazywa się `CharCounter_{numer wersji}.crx` Więc na przykład najnowsza nazywa się `CharCounter_1.3.3.crx`. Jednak folder deweloperski ma obecnie zawsze taką samą nazwę. Jeśli chcę wycofać i dalej rozwijać poprzednią wersję, nie mogę. Zdecydowałem się zacząć używać git, ale nie jestem pewien, jak poradzić sobie z kontrolą wersji. Czy powinienem skonfigurować moje repozytorium git w `~/Sites/Chrome_extensions/{nazwa mojego pracodawcy}`, kiedy zdecyduję, że wprowadzam wystarczająco dużą zmianę w rozszerzeniu, aby zagwarantować nowy numer wersji, powielam folder CharCounter i dodaję `_ {nowy numer wersji}` do niego? Dzięki temu mamy kilka folderów CharCounter, każdy z dołączonym innym numerem wersji. czy też powinienem skonfigurować go w `~Sites/Chrome_extensions/{nazwa mojego pracodawcy}/CharCounter/` i nigdy nie duplikować folderu CharCounter, ale po prostu robić nowe zatwierdzenie za każdym razem, gdy tworzę nową wersję? Jak radzisz sobie z kontrolą wersji? Czy używanie git eliminuje konieczność przechowywania wielu wersji (aktualnej i starszej) kodu w folderach o nazwie `folder_version_X.Y.Z`, czy to nadal jest dobry pomysł?


title: Pisanie prostego skryptu wykonywalnego w systemie Windows

text: Jestem użytkownikiem komputera Mac, ale muszę napisać skrypt w systemie Windows i nie wiem, jak mam się do tego zabrać. Oto scenariusz: ktoś dodaje zdjęcia na dysk USB. Napęd jest następnie wstawiany do cyfrowej ramki do zdjęć. Aby zdjęcia były odtwarzane automatycznie, na dysku musi znajdować się plik „playlist.asb”. **Chcę utworzyć skrypt, który można kliknąć i uruchomić, aby automatycznie utworzyć plik listy odtwarzania na podstawie plików graficznych dodanych do pamięci USB.** Skrypt wykonałby coś takiego: 1. Sprawdź, czy w folderze znajdują się obrazy folder „pokaz slajdów”. 2. Sprawdź, czy istnieje plik o nazwie „playlist.alb”, jeśli nie, utwórz go. Jeśli tak, nadpisz go. 3. Przeglądaj dostępne obrazy. 4. Dodaj każdą nazwę obrazu i rozszerzenie w nowej linii. 5. Zapisz (i nadpisz dowolny istniejący plik listy odtwarzania) i wyjdź. Czuję się dobrze z AppleScript dla komputerów Mac, ale nie jestem pewien, czy odpowiednik Windowsa miałby sens, czy też jakiś rodzaj skryptu wiersza poleceń działałby lepiej. Każda pomoc jest bardzo ceniona.


title: Jak zaprojektować aplikację z możliwością wycofania?

text: Obecnie pracuję nad aplikacją (w zasadzie jest to rodzaj silnika wykonawczego zdolnego do uruchamiania zadań zdefiniowanych przez użytkownika i generowania danych wyjściowych w czasie rzeczywistym), która musi obsługiwać funkcję wycofywania, może to zabrzmieć szaleńczo, ale czy można mieć coś takiego w aplikacji poziom? np. wyobraź sobie, że jakiś użytkownik próbuje uruchomić zadanie J1, a kiedy zostanie uruchomione, chciał je edytować/zmodyfikować, \- oznacza to, że aktualnie uruchomione zadanie musi zostać zabite, \- wszystkie podjęte do tej pory działania muszą zostać cofnięte i \- ponownie uruchom zadanie J1 kilka rzeczy, które przychodzą mi na myśl, to to, że musimy gdzieś przechowywać lub utrzymywać stany aplikacji, a następnie wywołać wycofywanie zmian wraz z poprzednimi punktami zapisu. Czytałem kilka artykułów na temat wycofywania na poziomie DB, ale scenariusz nie pasuje do tego przypadku, ponieważ musi działać w środowisku czasu rzeczywistego. Ale nie potrafię znaleźć odpowiedniego podejścia, jak postępować i co jeszcze należy wziąć pod uwagę. Daj mi znać, jeśli brzmi to niejasno, postaram się podać więcej informacji, jeśli to możliwe. Jakaś pomoc lub porada?


title: Jeśli wzajemne wykluczanie nie zostanie zaimplementowane, jak moglibyśmy wykryć sytuację wyścigu?

text: Załóżmy, że znajdujemy się w środowisku rozproszonym, a wzajemne wykluczanie nie zostało jeszcze zaimplementowane. Jak więc będziemy w stanie wykryć warunki wyścigu? Podczas badań okazało się, że rozwiązaniem jest zastosowanie algorytmów nieblokujących. Oznacza to użycie struktur danych, takich jak stos, kolejka itp. Aby uniknąć wzajemnego wykluczania. Ale jak to wykrywamy?


title: Ile czasu dajesz rozmówcy na przygotowanie się przed właściwym spotkaniem?

text: Myślałem, że dawanie 3-4 dni roboczych jest w porządku. Ale teraz nie jestem tego taki pewien. Wydaje się, że kandydaci w dzisiejszych czasach szukają mnie na LinkedIn, próbując zgadywać, prawdopodobnie o co mógłbym ich zapytać, w przeciwieństwie do odświeżenia podstaw i podjęcia trudnych ćwiczeń ze SPOJ itp. Po prostu myślę, że powinienem to zrobić dzień lub max. 2 dni teraz?


title: Wybór licencji open source tak, aby maksymalna wartość była dodawana do startupu

text: Istnieje wiele firm produkujących oprogramowanie o otwartym kodzie źródłowym i wiele modeli biznesowych, z których te firmy mogą korzystać. Szczególnie interesują mnie firmy takie jak 280 North, firma stojąca za frameworkami Objective-J i Cappucino. Moje rozumienie modelu biznesowego tej organizacji jest takie, że: 1. pracowali nad stworzeniem narzędzia, które przyniosłoby znaczną wartość programistom, 2. wydali narzędzie na licencji open source, 3. zbudowali społeczność wokół narzędzia (w czym pomogli licencji open source projektu), 4. stworzyłem ciekawe dema ilustrujące wartość projektu. Wszystkie te rzeczy dodały wartości do projektu i firmy, która była jego właścicielem. Ostatecznie 280 North zostało sprzedane Motoroli. Moje pytanie dotyczy roli licencjonowania oprogramowania w tym konkretnym modelu biznesowym. 280 North udzieliło licencji na swoje projekty oprogramowania na licencji LGPL, co dało im pewną własność kontroli nad sposobem wykorzystania projektu. Uważam, że LGPL jest tak zwaną licencją „słabą typu copyleft”, co oznacza, że projekt może być powiązany z tym, że kod linkujący nie jest również licencjonowany na podstawie LGPL; ale oprogramowanie pochodzące bezpośrednio z projektu musiałoby być objęte licencją LGPL. Zwłaszcza w przypadku bibliotek internetowych słabe licencjonowanie typu copyleft lub nie-copyleft wydaje się być dość powszechne; Nie wyobrażam sobie ani jednego przykładu popularnej lub dobrze znanej biblioteki internetowej, która jest licencjonowana na licencji GPL (lub AGPL). Powstaje zatem pytanie, ile wartości słaba licencja typu copyleft, taka jak LGPL, dodałaby do przedsięwzięcia programistycznego, takiego jak 280 North, w porównaniu z licencją bez copyleft, taką jak licencja BSD lub licencja na oprogramowanie Apache? Naprawdę byłbym wdzięczny za wszelkie wglądy, jakie ktokolwiek może zaoferować w tej sprawie, ale najbardziej interesują mnie odpowiedzi, które mogą przytaczać inne firmy jako studia przypadków lub przykłady.


title: Jak ustawić link do płatnej wersji aplikacji, jeśli nie mamy aplikacji w App Store?

text: Jeśli nie mamy jeszcze darmowych i płatnych aplikacji w sklepie Apple App Store, jak moglibyśmy zaprogramować w wersji bezpłatnej link do wersji płatnej, ponieważ linku jeszcze nie ma? Czy musimy mieć stronę internetową jako symbol zastępczy, aby kontynuować w tym pierwszym, początkowym przypadku? Czy to jedyne rozwiązanie, a co jeśli nie mamy strony internetowej?


title: Integracja Redmine (lub Trac) z systemem śledzenia problemów klientów

text: Pracuję w obszarze rozwoju oprogramowania na mojej uczelni i zauważyliśmy, że potrzebujemy systemu do śledzenia błędów i błędów, z kim i kiedy się tym zajmuje. Zbadałem niektóre aplikacje do zarządzania oprogramowaniem / śledzenia błędów, a Redmine jest tym, który najbardziej mi się podoba ze względu na prosty interfejs użytkownika (w rzeczywistości odkryłem, że nasz serwer ma już zainstalowany jeden system, Trac, ale nigdy nie był używany w swoim czasie i moi koledzy powiedzieli mi, że użycie któregokolwiek z nich zajmie tyle samo czasu). Jednak kolega powiedział mi również, że ma pomysł na wdrożenie _systemu śledzenia problemów klientów_ w perspektywie średnio-/długoterminowej (opowiedział mi o tworzeniu zgłoszeń dla problemów użytkowników, przeszukiwaniu bazy wiedzy o typowych problemach i zaznaczaniu częstych problemy, aby sobie z nimi poradzić. Wydaje się, że rzeczy takie jak OTRS są bliskie temu, o czym myślał. Bada również ITIL). O ile mi wiadomo, system śledzenia problemów dewelopera i system śledzenia problemów klienta są różne i muszą mieć między sobą jakąś integrację. **A może nie?** Jeśli tak, moje pytanie brzmi: Czy można zintegrować Redmine (lub Trac, jeśli jest to łatwiejsze, lub ogólnie system zarządzania projektami / śledzenia błędów) z tego rodzaju klientem systemy śledzenia problemów? Czy muszę się martwić o zmianę systemu zarządzania projektami w przyszłości, aby to wdrożyć? A może w przypadku niektórych z nich wdrożenie jest łatwiejsze?


title: Czy niektóre korporacje przywiązują większą wagę do CV?

text: Czy stanowisko programisty/testera w Google, Apple, Microsoft itp. (jakiejkolwiek dużej firmie technologicznej, o której większość ludzi słyszała) byłoby bardziej wartościowe w CV niż praca jako programista/tester gdzieś, gdzie technologia jest technologiczna? nie jest głównym celem (firma spedycyjna, sieć restauracji, firma ubezpieczeniowa itp.)? Załóżmy, że masz dwie oferty i planujesz pozostać w dowolnej firmie tylko przez 5 lat, zanim spróbujesz uzyskać lepszą pozycję w innej firmie. Jeden w Google, który ma początkową pensję w wysokości 60 000 USD, a drugi w jakiejś firmie ubezpieczeniowej, która ma początkową pensję w wysokości 80 000 USD. Myślę, że to, co chcę powiedzieć, to... na uniwersytecie, jeśli ktoś kończy studia na MIT lub Carnegie Mellon, może znaleźć pracę wszędzie. Czy ktoś wydaje się bardziej wartościowy po pracy w firmie takiej jak Google, Apple, Microsoft itp.? Innymi słowy, czy podjęcie gorzej płatnej pracy byłoby lepsze na dłuższą metę, skoro jest to w Google, czy też lepiej byłoby podjąć lepiej płatną pracę w firmie ubezpieczeniowej?


title: Shift framework JavaScript – co to za wzorzec? MVP, MVC czy coś innego

text: Stworzyłem bardzo mały framework, aby móc uciec od bałaganu podczas programowania. Celem tego frameworka nie jest zastąpienie dowolnej wybranej biblioteki, ale po prostu segregowanie kodu zgodnie z poprawną logiką. Możesz zobaczyć źródło na github wraz z kilkoma przykładami kodu: https://github.com/erik-landvall/shift Próbując opisać wzorzec, którego używam, zaczynam się zastanawiać, jak to powinno być zdefiniowane. I to jest moje pytanie do Ciebie. Co twoim zdaniem symbolizuje poniższy wykres? ![Schemat blokowy frameworku shift](http://i.stack.imgur.com/3TAXX.png) Lubię traktować to jako wzorzec MVP, ale chciałbym poznać Twoją opinię. Ponadto, jeśli uważasz, że schemat blokowy słabo resamplinguje kod, daj mi komentarz na ten temat, a postaram się to naprawić.


title: Jak należy zaprojektować transfer danych między klientem a internetowym interfejsem API dla znormalizowanych danych?

text: Chcę zaprojektować API wspierane przez jakąś bazę danych (nie ma to większego znaczenia, ale żeby urozmaicić dyskusję, powiedzmy, że jest to Mongo - wyjaśnienie poniżej), które wysyła dane do klienta. Baza danych zawiera kilka typów rekordów. Niektóre z nich odwołują się do innych typów rekordów. Nierzadko zdarza się, że do rekordu odwołuje się kilka innych rekordów różnych typów. W ten sposób dane w DB są znormalizowane. **Jakie są względy przy projektowaniu serwera API, który wysyła rekordy do klienta?** Przychodzą mi do głowy dwie opcje (proszę o więcej sugestii lub poprawienie mnie): 1. API jest szczegółowe. Wyślij znormalizowane dane. Pozwól klientowi poprosić o więcej rekordów na podstawie tego, co otrzyma. Klient może mieć pamięć podręczną, może zdecydować, że nie musi pytać o wszystko serwera. 2. API wysyła wszystkie rekordy, których klient może ewentualnie potrzebować, na podstawie żądanych danych. W ten sposób skutecznie denormalizuje dane. W przypadku opcji 1 klient może wysyłać więcej żądań HTTP, aby mieć pełne dane, których potrzebuje. Oznacza to większą komunikację sieciową, co może spowolnić całkowity transfer danych. Serwer jest jednak prostszy, a klient może selektywnie pytać tylko o rekordy, których jeszcze nie posiada. W przypadku opcji 2 mniej żądań HTTP. Ale możemy wysłać dane klienta, które już posiada (być może zostały już odebrane i zapisane w pamięci podręcznej, niektóre rekordy z poprzedniego żądania). Serwer jest bardziej skomplikowany. Zwłaszcza jeśli to nie RDBMS. W Mongo nie ma złączeń, więc musimy wykonać zapytanie do bazy danych więcej niż raz, aby uzyskać wszystkie dane. Dalsze założenia: 1. Dane zmieniają się co kilka dni (2-3 razy w tygodniu). Tak więc klient może potencjalnie mieć trwałą pamięć podręczną. 2. Zapytania Mongo są nieco powolne (miliony dokumentów w każdej kolekcji). 3. W każdej takiej sesji do klienta zostanie wysłane około 2MB danych.


title: Czy te firmowe warunki są dobre dla programisty, czy powinienem się przeprowadzić?

text: Oto niektóre z warunków określonych przez mojego pracodawcę. Czy to ma sens w przypadku pracy takiej jak programowanie? > 1. Zakaz wykonywania pracy jako freelancer nawet w czasie wolnym poza pracą w firmie wykonać podobną pracę dla konkurencyjnego klienta (całkowicie racjonalne w tym > sensie). -> Więc się zgodziłem. > 2. Każda rzecz, którą rozwijasz, np. pomysły, projekt, kod itp., gdy jestem > tam, czyni ich właścicielem. Na serio? Nie sądzisz, że to źle > (dla mnie)? Jeśli mam rozwijać coś w wolnym czasie (przez ograniczenie snu > i ciężką pracę), poza czasem i zasobami firmy, czy to twierdzenie > jest racjonalne? Słyszałem, że Steve Wozniak miał taką umowę, gdy > pracował w HP. Ale ten rodzaj konstrukcji sprzętu, a także te firmy, płacą > dobrze, w porównaniu do orzeszków ziemnych, które dostaję. > 3. Zabronione jest wykonywanie innych prac. Oznacza brak materiałów o otwartym kodzie źródłowym. Całkowicie > oddany byciu marionetką dla pracodawcy, chociaż środowisko pracy > jest w porządku. Według mojej oceny to miejsce uzyskałoby 10/12 > w teście Joela. > Czy te warunki są w porządku, zwłaszcza biorąc pod uwagę fakt, że zarabiam za mało w orzeszkach ziemnych?


title: projekt dla podmiotów wspierających z obrazami

text: Mam wiele podmiotów, takich jak hotele, miasta docelowe itp., które mogą zawierać obrazy. Sposób, w jaki mam teraz konfigurację systemu, polega na tym, że myślę o wszystkich obrazach należących do tego uniwersalnego zestawu (tabela w DB zawiera ścieżki do wszystkich obrazów). Kiedy muszę dodać obraz do istoty, widzę, czy istota istnieje w tym uniwersalnym zestawie obrazów. Jeśli istnieje, dołącz odwołanie do tego obrazu, w przeciwnym razie utwórz nowy obraz. Np.: class ImageEntityHibernateDAO { public void addImageToEntity(IContainImage entity, String filePath, String title, String altText) { ImageEntity image = this.getImage(filePath); if (image == null) image = new ImageEntity(filePath, title, altText); getSession().beginTransaction(); podmiot.getImages().add(obraz); getSession().getTransaction().commit(); } } Moje **pytanie** brzmi: Wcześniej musiałem napisać ten kod dla każdej encji (a każda encja miałaby kolekcję Set). Więc zamiast przepisywać ten sam kod, stworzyłem następujący interfejs: public interface IContainImage { Set<ImageEntity> getImages(); } Jednostki, które mają kolekcje obrazów, również implementują interfejs `IContainImage`. Teraz dla każdej jednostki, która musi obsługiwać funkcję dodawania obrazu, wszystko, co muszę wywołać z DAO, wygląda mniej więcej tak: // in DestinationDAO::addImageToDestination { imageDao.addImageToEntity(destination, imageFileName, imageTitle, imageAltText); // w HotelDAO::addImageToHotel { imageDao.addImageToEntity(hotel, imageFileName, imageTitle, imageAltText); Byłoby bardzo pomocne, gdyby ktoś mógł mi coś skrytykować na temat tego projektu? Czy są jakieś poważne wady, których nie widzę od razu?


title: Czy zezwalanie na głosowanie bez logowania to zawsze zły pomysł?

text: Mam aplikację mobilną, z której chcę umożliwić głosowanie na Rzeczy. Nie chcę zmuszać wszystkich użytkowników do rejestracji przez e-mail/Facebook/itp. tylko po to, żebym mógł odpowiednio ograniczyć głosowanie. Czy naprawdę złym pomysłem jest pozostawienie głosowania jako „otwartego” procesu, w którym każdy może głosować? Teoretycznie wiem, że pozwala to na stosowanie niewłaściwych technik głosowania itp., ale z drugiej strony zdobycie większej liczby głosów tak naprawdę nie daje żadnej motywacji finansowej. \--Edytuj-- Być może istnieją sposoby na ograniczenie fałszowania głosów? Wiem, że teoretycznie nic nie jest nie do złamania, ale może uda mi się ograniczyć ilość głosów, które można uzyskać w ciągu minuty/godziny/dzień? \--Edytuj 2 – pomyśl o tym jako o „wyświetleniach” filmu. Jest to prosta miara popularności, niewymagająca logowania. Jakie są sposoby ograniczenia manipulacji widokami i kiedy jest to konieczne?


title: Brak generatora dokumentacji Microsoft-Official C#?

text: Nie udało mi się znaleźć żadnego "oficjalnego" generatora dokumentacji dla C#. Znam projekty takie jak DOxygen, Sandcastle czy Ndoc. Ale dla mnie są to bardziej narzędzia firm trzecich. Można argumentować, że javadoc jest narzędziem zewnętrznym, ale jest częścią dystrybucji java. Jaka jest opcja firmy Microsoft, jeśli w ogóle?


title: Struktura wykonywania poleceń dla bazy danych wykresów

text: Budujemy aplikację, która wykorzystuje złożone dane z bogatymi relacjami. Aby umożliwić nam maksymalne wykorzystanie tych danych i łatwe rozszerzenie modelu, zdecydowaliśmy się na wykorzystanie grafowej bazy danych (Neo4j z Cypherem). Badam użycie architektury aplikacji opartej na CQRS (bez źródła zdarzeń), aby umożliwić nam pełne wykorzystanie elastyczności wykresu za pomocą różnych poleceń i elastycznej, prawie ad-hoc strony odczytu. Obecnie zmagam się z tym, jak ustrukturyzować część persystencji po stronie poleceń w taki sposób, aby zachować elastyczność grafu, ale nie stracić zbyt wiele struktury w aplikacji (np. poprzez powtarzanie w zapytaniach Cypher lub duże, zbyt rozbudowane interfejsy). Rozważałem kilka opcji: 1. Użyj repozytoriów i agregatów, utrwalonych przez odbicie lub akcesory. Zaletą jest to, że interfejsy są proste, wadą jest to, że samo repozytorium może stać się złożone dla agregatów zawierających wiele relacji (nie ma dobrze utrzymanych ORM .NET dla Neo4j). Inną wadą tego jest możliwość załadowania wielu niepotrzebnych „agregacji puchu” do domeny dla prostych poleceń, które niekoniecznie tego potrzebują (ten problem dotyczy nawet jeśli w końcu odejdę od CQRS). 2. Specjalistyczne repozytoria, które udostępniają bardziej ograniczone polecenia (np. `AddThingToOtherThing`), które są wywoływane z programów obsługi poleceń. Zaletą jest to, że nie ma niepotrzebnych zapytań. Minusem są potencjalnie duże, niezgrabne interfejsy repozytorium (może jest lepszy sposób na przerwanie tego?) 3. Użyj _events_ (nie sourcingu zdarzeń) i użyj obsługi zdarzeń do jawnego wykonywania poleceń grafu DB. Dobrą rzeczą jest to, że zawsze wykonuję tylko te polecenia bazy danych, których potrzebuję, ale mój DAL jest rozproszony i bardziej powiązany z aplikacją - przez co potencjalnie trudniejszy w utrzymaniu. Czy istnieje alternatywny wzorzec (lub nawet uproszczenie), którego nie brałem pod uwagę?


title: Pomoc w tworzeniu własnego PHP MVC - jak napisać dobry router

text: Rok temu stworzyłem wannabe-MVC w PHP (niektóre części proceduralne, niektóre w klasach), teraz zamierzam go dalej rozwijać, aby był bardziej podobny do prawdziwego MVC. Struktura folderów/plików: html/ html/images/ html/css/ html/js/ (mój JS) html/js/lib/ (jquery...) app/ app/kontroler/ app/include/ (funkcje specjalne) aplikacja /lang/ (języki - en.php, de.php...) app/lib/ (php mailer, klasa zmiany rozmiaru obrazu, facebook sdk...) app/log/ (dziennik błędów) app/model/ app/view / app/view/include/ (część widoków, które się powtarzają - nawigacja, paginacja..) app/config.php app/ini.php index.php W index.php wywołuję klasę routera, gdzie znajdę jaki kontroler i widok do załadowania , ale jest napisany w sposób switch case. Masz problemy z automatycznym ładowaniem, ponieważ jest to zależność od Bazy Danych. **Struktura adresu URL (stały router):** / (strona główna) -> homeController.php /error404/ (strona błędu) -> error404Controller.php /users/ (lista wszystkich użytkowników) -> usersController.php /users/2/ (strona 2 wszystkich użytkowników) /users/login/ (strona logowania) -> usersController.php?action=login /users/login/facebook/ (podczas logowania facebook przekierowuje na tę stronę) -> ?? /users/some-username-{ID}/ (profil użytkownika - a-Z-0-9 nazwa użytkownika i identyfikator tego użytkownika) -> usersController?action=single **Struktura URL (niestandardowy router - zależny od bazy danych):** /categ / (domyślny router, pobieranie kategorii z bazy danych i wyświetlanie wiadomości z tej kategorii) -> categController.php /categ/2/ (druga strona listy kategorii wiadomości) /categ/news-title-{ID}/ (pobierz pojedynczy - > newsController.php /categ/subcateg/ (pobierz kategorię i podkategorię z bazy danych) -> subcategController.php /categ/subcateg/2/ (druga strona podkategorii) /categ/subcateg/news-title-{ID}/ i jego przechodzi na poziom 4 - categ/subcateg/subsubcateg/news-title-ID/ **userController.php (uproszczony)** userController extends mainController{ function index(){ $users = new user(); $users->limit = 10; $users->where = "is_active='1'"; $users_list = $users->loadAll(); } } **userModel.php (uproszczony)** userModel rozszerza mainModel{ public $tableName = "użytkownicy"; publiczny limit $ = 20; public $gdzie = '1=1'; funkcja loadAll(){ global $db; $load = $db->fetch_all('SELECT * FROM $tableName WHERE $where LIMIT $limit'); zwróć $load; } } Pytania: 1. Jak stworzyć **klasę routera**, aby dopasować mieszankę **stałych i niestandardowych adresów URL** ? Teraz jest prosty **przypadek przełącznika**, gdzie **niestandardowy router** jest w **domyślnie: przypadek** 2. Gdzie mogę umieścić **dane użytkownika** \- sprawdź, czy użytkownik jest zalogowany, czy nie, abym mógł wyciągać dane na tej podstawie ? **init.php, userModel.php, userController.php** czy ? Potrzebuję tych informacji przed załadowaniem widoku... 3. Gdzie umieścić zapytania, które powtarzają się, takie jak uzyskiwanie najlepszych danych nawigacji lub stopki, gdy ładują się na każdej stronie? w niektórych **głównym kontrolerze lub modelu**, które ładują się automatycznie bez względu na to, na jakiej stronie jest użytkownik. 4. Czy to dobry początek, czy coś jest nie tak, jeśli tak, to w czym? Przeczytałem wiele samouczków MVC i ktoś powiedział, że potrzebujesz **fat Model** , ktoś mówi **fat Controller**, więc jaka jest tutaj dobra praktyka?


title: Metoda vs funkcja vs procedura

text: Proste pytanie, ale często słyszę te trzy terminy zdefiniowane z taką zaciekłością, ale które przez lata miały różne znaczenia. Jakie są „prawidłowe” definicje „procedury”, „metody”, „funkcji”, „podprogramów” itp.? Dziękuję!


title: Styl kodu dla XAML

text: Zacząłem kodować aplikacje WPF kilka miesięcy temu, a teraz zadaję sobie pytanie, czy są jakieś przewodniki po stylu dla XAML. Nie muszę wyjaśniać korzyści płynących z wiązania, konwerterów, stylów, szablonów itp. Moje pytanie jest bardziej podstawowe. Czy istnieje oficjalna (lub nieoficjalna) „najlepsza praktyka” dotycząca kolejności atrybutów itp.: Na przykład: <ComboBox Grid.Column="0" Grid.Row="0" Name="CellType" ItemsSource="{Binding EditorTypes} " SelectedItem="{Binding EditorType}"> Czy istnieje coś takiego jak * zawsze dołączane właściwości najpierw [ostatni] * zawsze deklaruj kolumnę [wiersz] w siatce, nawet jeśli jest tylko jedna Czy są jakieś zasady/przewodniki, z którymi powinienem się zapoznać sprawić, by mój kod wyglądał bardziej powszechnie?


title: Jakie technologie są potrzebne, aby być niezależnym twórcą stron internetowych / projektantem skierowanym do małych firm?

text: Po pierwsze, nie szukam odpowiedzi: „naucz się PHP/MySQL, JQuery, HTML/CSS...”. Moje pochodzenie, noszę wiele kapeluszy i robię wiele rzeczy. Obecnie prowadzę rachunki inwestycyjne z partnerem biznesowym, który jest również przyjacielem. Zdarza się, że uczęszcza do szkoły biznesu / prawa, studiując wspólne JD i MBA. W rezultacie kładziemy się na „wybrzeżu”, utrzymując naszych obecnych klientów, ale nie pozyskując więcej. Ostatnio zacząłem pracować jako freelancer w zakresie projektowania graficznego / tworzenia stron internetowych / marketingu internetowego (Photoshop, HTML/CSS, WordPress) za pośrednictwem sieci osobistych. Praca jest przyjemna; teraz myślę o rozszerzeniu go na większy biznes z następującymi głównymi celami: 1. pomnożyć swoje finanse (robię około 1000-2000 dolarów miesięcznie), 2. nauczyć się nowych technologii, 3. zaangażować się w sensowną pracę . Jako przedsiębiorca nie mam nic przeciwko tym aspektom prowadzenia biznesu, które przeszkadzają innym freelancerom... \-- marketing \-- rozliczenia \-- itd. Rozważam skierowanie do małych i średnich firm i organizacji, w których Mogę uczestniczyć od podstaw w projektach marketingowych, projektowych i deweloperskich. Dzięki temu będę miał swobodę decydowania o konkretnej technologii (nie będę musiał pracować z istniejącą bazą kodu). **Na jakich projektach powinienem się skupić? Jakie technologie dobrze pasują do tego stylu pracy?** Na przykład: może być fajnie rozwijać się w Ruby on Rails. Być może jednak wiele projektów będzie wdrażać rozwiązania e-commerce. Dlatego powinienem skupić się na PHP ze względu na więcej opcji koszyka, całkowicie pomijając ROR.


title: Termin określający przypadkowe cechy

text: Pomimo najlepszych intencji programistów; często w świecie rzeczywistym systemy oprogramowania zawierają „przypadkowe cechy”, które są akceptowane jako część działającego systemu. Na przykład może się zdarzyć, że jakiś proces zabraknie pamięci i ulegnie awarii, zanim proces przekroczy limit wywołań do systemu zewnętrznego (co będzie kosztować pieniądze firmy). Chociaż zespół programistów przyznaje, że jest to problem, po prostu nie ma wystarczającej wartości biznesowej, aby rozwiązać problem. Takie korzystne przypadkowe zachowanie jest często tracone w przypadku każdego rodzaju znaczącej migracji technicznej. Moje pytanie: **Czy istnieje termin na określenie tego typu „funkcji”, który może odróżnić ją od zwykłego błędu?**


title: Zapewnienie niezależnego systemu autoryzacji

text: Próbuję zaprojektować małą platformę internetową, która będzie hostować kilka "aplikacji" ze wspólną pulą użytkowników. Moja refleksja skupia się teraz na systemie uprawnień. Aplikację definiuję jako interfejs, który pozwala użytkownikom wykonywać CRUD i więcej niestandardowych operacji na zbiorze zasobów. Zwykle wolę modelować aplikację jako zbiór usług internetowych RESTful, które mają być używane z różnych interfejsów. Naprawdę chciałbym uogólnić system uprawnień i sprawić, by był agnostyczny dla aplikacji; Zastanawiam się nad wdrożeniem go jako usługi internetowej, wykorzystując nieustrukturyzowane bazy danych dokumentów. Zakładając, że: * Programista aplikacji ma dostęp do usługi zarządzania użytkownikami i grupami; * Zakres dowolnej aplikacji byłby ograniczony do wykonywania CRUD i większej liczby niestandardowych operacji na zasobach, jak wspomniano wcześniej; Moim pomysłem jest zapewnienie programistom dostępu do odczytu/zapisu w takiej strukturze: [{ "Application":"Application1", "Ressource":"ResourceType1", "id":"123", "read":{ "whitelist_group_ids ":[ 2 ], "whitelist_user_ids":[ 1 ], "blacklist_users_ids":[ 2 ] }, "CustomOperation1":{ "whitelist_group_ids":[ * ], "whitelist_user_ids":[ 1, 2 ], "blacklist_users_ids": [ 3 ] } },{ "Application":"Aplikacja1", "Ressource":"ResourceType2", "id":"13", "read":{ "whitelist_group_ids":[ * ], "whitelist_user_ids":[ 1 ], "blacklist_users_ids":[ 2 ] }, "CustomOperation2":{ "whitelist_group_ids":[ 2 ], "whitelist_user_ids":[ 1, 2], "blacklist_users_ids":[ 3 ] } }] przechowywać, sprawdzać i aktualizować ograniczenia dostępu działania na żądanie; Jakie byłyby wady takiego podejścia? Czy jest jakaś standardowa strategia, aby osiągnąć coś zbliżonego do tego, co opisałem?


title: Jak wybrać książkę o programowaniu/strukturze danych/algorytmach?

text: Naprawdę nie powinienem wymieniać nazwy książki, ale kiedy po raz pierwszy ją przeczytałem (na studiach), prawie doszedłem do wniosku, że struktura danych była złym wyborem. Co prowadzi mnie do pytania, które tutaj zadaję. Co sprawia, że programowanie, struktura danych lub księga algorytmów działają? Jasne wyjaśnienie jest jednym z nich. Ale zdaję sobie też sprawę, że organizacja materiału jest bardzo ważna, podobnie jak schematy. Co jeszcze? Niektóre wskazówki będą oczywiście pomocne, gdy następnym razem będę spędzać czas w mojej sąsiedzkiej księgarni komputerowej.


title: Dziedziczenie w klasach testowych

text: Mam interfejs `Serializer` z metodami `serialize` i `isSerializerFor`. Stworzyłem pierwszą implementację tego przy użyciu TDD i skończyłem z ładnym czystym przypadkiem testowym w pełni obejmującym ładną czystą implementację. Aby uzyskać bardziej konkretny pomysł, oto jedno istotne zobowiązanie. Teraz ktoś inny (nieprzyzwyczajony do TDD) zaczął pisać drugą implementację interfejsu `Serializer`. Ta osoba stwierdziła, że test potrzebny do drugiej implementacji będzie częściowo pokrywał się z moim początkowym testem. Dlatego utworzono abstrakcyjną klasę bazową dla testów serializatora, zawierającą metody, które prawdopodobnie są wspólne dla wszystkich przypadków testowych serializatora. Nie jestem z tego zadowolony z dwóch głównych powodów. Po pierwsze, jedynym powodem, dla którego stosuje się tutaj dziedziczenie, jest ponowne użycie kodu, co jest silnym zapachem kodu. Po drugie, przerywa to cykl TDD. Jeśli teraz chcę stworzyć kolejną implementację `Serializer` i stworzyć pochodną bazowej klasy testowej, muszę zaimplementować cały kod produkcyjny w jednym kroku. Z drugiej strony, zwykłe powielanie wspólnego kodu w klasach testowych również wydaje się dość dziwne. Mam nadzieję, że kompozycja może być tutaj użyta w rozsądny sposób, aby uniknąć tych problemów. Wydaje się to dość powszechną sytuacją. Jak byś to rozwiązał? Co zrobiłbyś inaczej?


title: Wzorzec obserwatora przez HTTP i TCP/IP (serwer-klient)

text: Mam serwer i wielu klientów (około 50 klientów), którzy łączą się z tym serwerem w oparciu o aplikację internetową, która jest oczywiście oparta na protokole HTTP, który z kolei korzysta z TCP/IP (popraw mnie, jeśli się mylę, bo ja nie jestem dobry w nawiązywaniu kontaktów). Problem polega na tym, że powinienem opracować mechanizm alertów, w którym, gdy ktoś prześle formularz z niebezpiecznymi wartościami, menedżer (który jest również połączony przez tę samą aplikację internetową) powinien otrzymać na ekranie wyskakujące okienko alertu, prawie prawdziwe -czas (natychmiast). Jednakże, ponieważ protokół HTTP jest bezstanowy, trochę mnie to zdziwiło. Nie wiem, jak mogę to zaimplementować. Jednym z rozwiązań może być użycie JavaScript wraz z funkcją `setInterval()` do **pobierania** danych co sekundę z serwera. Ale wydaje mi się to trochę brudne i nieprofesjonalne. Czy macie pomysł na wdrożenie innego rozwiązania?


title: Filtrowanie sterowników NDIS VS API Hooking

text: Widziałem wielu programistów pytających o "Jak przechwytywać/wychodzić pakiety HTTP", "Jak modyfikować je w locie". Najbardziej „czystą” odpowiedzią, jaką widziałem, jest stworzenie od podstaw filtra sterowników trybu jądra (TDI dla systemów XP i wcześniejszych winx9 lub NDIS dla systemów NT). Innym sposobem jest użycie sterownika trybu użytkownika, takiego jak Windivert, również Komodia ma świetne rozwiązanie (bez pisania żadnego pojedynczego kodu). Ideą tego wprowadzenia jest tylko chcę wiedzieć, czy API Hooking może być uważane za alternatywę pisania całego filtra sterowników? napisanie sterownika od podstaw nie jest łatwym zadaniem, dlaczego po prostu nie przechwycić HttpSendRequest lub jakiegokolwiek innego API używanego przez przeglądarkę? Istnieje wiele darmowych/komercyjnych bibliotek, które pozwalają to robić w bezpieczny sposób (np.: EasyHook, Mhook, Nektra...). Nie jestem pierwszym, który pyta, istnieje już Sockscap, który używa Hook(wstrzykiwanie DLL) do zmiany zachowania innych aplikacji i zmuszenia ich do użycia proxy Socks, również ataku Form grabbing ' _używany przez keylogger.._


title: Moduły programu oddzielone w różnych bibliotekach DLL

text: Mamy istniejący system ERP napisany w VB 6, który stopniowo konwertujemy do .Net. Teraz każdy moduł w systemie jest podzielony na biblioteki DLL, dzięki czemu produkt staje się konfigurowalny i elastyczny. Nie jestem pewien, czy to jest sposób na zrobienie tego. Myślę, że w przyszłości będzie to kosztować dużo konserwacji. Co myślisz?


title: Gdzie powinienem umieścić mój interfejs?

text: Mam interfejs do komunikacji z bazą danych (właściwie to nie jest baza danych, ale to jest konkretny przykład): interface DbInterface{ Result sendQuery(Query q); } A ja staram się poprawić reużywalność poprzez rozdzielenie poszczególnych komponentów na poszczególne projekty: * App1, aplikacja wymagająca dostępu do bazy danych * App2, aplikacja wymagająca dostępu do bazy danych * DB1, konkretna implementacja DbInterface (powiedzmy SQL ) * DB2, konkretna implementacja DbInterface (powiedzmy używając jakiejś bazy danych NoSql) Jak zwykle projektuje się taką architekturę i gdzie powinien znajdować się `DbInterface`? * w jednej z aplikacji? ale to oznacza, że wszystkie pozostałe trzy komponenty zależą od tego projektu, aby uzyskać dostęp do interfejsu - nie brzmi dobrze * w jednej z implementacji DB? to samo - nie brzmi dobrze. * w obu implementacjach DB? powielanie kodu. * w osobnym projekcie, który zawierałby tylko ten interfejs? wydaje się nadużyciem dołączanie zależności tylko dla jednego interfejsu. Dla porównania, to jest Java + maven, ale wydaje mi się, że problem jest dość ogólny.


title: Nowy projekt PHP - Czy powinienem nadal wspierać PHP 5.2?

text: Zaraz zacznę pracę nad nowym komercyjnym projektem PHP z przyjacielem, który będzie licencjonowany i sprzedawany jako skrypt do uruchomienia na twoim własnym współdzielonym koncie hostingowym lub serwerze. Patrząc na statystyki (http://w3techs.com/technologies/details/pl-php/5/all) 50,3% instalacji PHP 5 to wciąż PHP 5.2 lub niższe (43,5% to php 5.2). Mając to na uwadze, czy mądrze jest upewnić się, że nowe oprogramowanie nadal obsługuje PHP 5.2, biorąc pod uwagę, że tak duży odsetek instalacji nie będzie obsługiwał nowoczesnych funkcji PHP, takich jak przestrzenie nazw i takie jak Composer.


title: Przekaż identyfikatory rekordów w adresie URL w PHP

text: Robię aplikację PHP z CodeIgniter i większość moich kontrolerów akceptuje identyfikatory rekordów jako parametry do celów pobierania. Przekazuję również identyfikatory rekordów w mojej akcji formularzy. Na przykład: www.sample.com/records/save/sFKu=4 Czy to właściwy sposób na zrobienie tego? Zauważ, że identyfikatory rekordów są zaszyfrowane.


title: Jak mogę utrzymać biegłość w wielu językach?

text: Jak mogę utrzymać biegłość (jeśli nie wiedzę) w wielu językach? W każdej dużej organizacji konieczna wydaje się znajomość więcej niż jednego języka. Na przykład w tym tygodniu przyjrzałem się, jeśli nie napisanemu kodowi w następujących językach. * VBA * C * C# * Java Na szczęście wszystkie są językami imperatywnymi, inaczej bym stracił rozum. Walczyłem przez dzień lub dwa z C, ponieważ minęło trochę czasu (czytaj: lata), odkąd używałem go poważnie. Jakie są wskazówki, nawyki i szkolenia, które pomogą Ci utrzymać wiedzę w tak wielu językach?


title: Logowanie jednokrotne, jeśli nie masz kontroli nad co najmniej jedną aplikacją kliencką/sieciową?

text: Mam klienta, który ma aplikację kliencką i po zalogowaniu się do aplikacji klienckiej zobaczy link do mojej witryny. Kiedy klikną na link, powinien automatycznie zalogować się na stronie bez pytania o dane uwierzytelniające. Czy jest to możliwe tylko wtedy, gdy nazwa użytkownika/hasło są takie same w aplikacji klienckiej i witrynie? A co, jeśli nazwa użytkownika/hasło nie jest znana aplikacji klienckiej? Jak to jest obsługiwane? Słyszałem o technologiach takich jak openId, oAuth itp., ale nie pasują one do mojego scenariusza, w którym istnieje aplikacja kliencka, która ma już bazę członków i nie potrzebuje dostępu do mojej witryny. Nie jestem pewien, jakie podejście tutaj przyjąć? Jeśli powyższe jest mylące, podam scenariusz: 1. Użytkownik A loguje się do aplikacji desktopowej. 2. Użytkownik A klika łącze, aby przejść do witryny www.mysite.com. 3. Użytkownik A jest uwierzytelniony i autoryzowany w witrynie www.mysite.com, więc nie musi podawać poświadczeń.


title: FizzBuzz - naprawdę?

text: Jeśli chodzi o pytania „testowe wywiadu”, często pojawia się temat FizzBuzz. Jest też o tym wpis Coding Horror. Teraz, jeśli zawracasz sobie głowę czytaniem takich witryn, prawdopodobnie jest mniej prawdopodobne, że znajdziesz się w grupie programistów, którzy uznaliby FizzBuzz za trywialne. Ale czy to prawda, że 99% programistów będzie się z tym zmagać? Naprawdę? Jakie są dowody na poparcie tego? Kilka przykładów z życia byłoby bardzo pomocnych w odpowiedzi na to pytanie.


title: Dlaczego Android's Bundle API akceptuje ArrayLists zamiast Lists?

text: Jestem nowym użytkownikiem Androida i podczas przechodzenia przez samouczek dotyczący zapisywania stanu `Activity` do pakietu, zauważyłem, że zamiast akceptować bardziej ogólny interfejs `List`, metody put `Bundle` oczekują `ArrayLists`. Przykład: Bundle.putCharSequenceArrayList(klucz, wartość) Bundle.putIntegerArrayList(klucz, wartość) Bundle.putParcelableArrayList(klucz, wartość) Bundle.putStringArrayList(klucz, wartość) Większość z nas zna punkt 52 Efektywnej Javy sugerujący, że obiekty muszą być do którego odwołuje się ich interfejs, więc zastanawiam się, jaki był powód tej decyzji API. Czy `ArrayList` może być preferowaną implementacją listy w systemie Android?


title: Znajdź średnią prędkość dla dróg

text: Pracuję nad aplikacją mobilną i chciałbym zadać Ci pytanie. Czy istnieje API lub metoda na uzyskanie/obliczenie średniej prędkości, jaką samochód powinien mieć na drodze. Pracuję nad aplikacją typu GPS i chcę obliczyć średni czas, jaki zajmie użytkownikowi pokonanie określonej ścieżki. Dziękuję.


title: Czy notacja węgierska Systems nadal jest przydatną praktyką?

text: Przeszukałem forum, ale nie znalazłem odpowiedzi, dlaczego należy tego unikać, tylko dlaczego nie jest to srebrna kula. Więc nie sądzę, że to pytanie jest duplikatem. Czy istnieje **WAŻNY** powód, dla którego powinienem oduczyć się węgierskiego w systemach, do którego jestem przyzwyczajony? Jak dotąd widzę następujące korzyści z jego używania: * Spójne nazewnictwo zmiennych * Widzisz typ bez wyszukiwania (intellisense nie działa/indeksuje przez połowę czasu, więc nadal jest to słuszny powód) * Semantyka nadal może być upakowana w drugiej części name I następujące wady: * To denerwuje niektórych ludzi (nie mam pojęcia dlaczego) * Jeśli typ zostanie zmieniony, typ może nie pasować do nazwy zmiennej (nie sądzę, że jest to słuszny powód, typy są zmieniane rzadko i masz " zmień nazwę wszystkich") Dlaczego więc: vector<string> vecCityNames; wstring strMiasto = L"abc"; //więcej kodu tutaj vecCityNames.push_back(strCity); jest gorszy niż: vector<string> cityNames; miasto sznurka = L"abc"; //więcej kodu tutaj cityNames.push_back(city);//Czy odkładamy int do kolejki? Unosić się na stosie? Coś innego?


title: Jak możemy sprawdzić, czy oprogramowanie spełnia wymagania techniczne?

text: Jesteśmy więc całkiem dobrzy w pozyskiwaniu wymagań od naszych klientów końcowych, działu biznesowego i sprzedaży/marketingu. Planujemy projekty, aby dodać/ulepszyć funkcje, aby spełnić te żądania i priorytetyzować zadania, aby dotrzymać terminów w najbardziej opłacalnej kolejności. Z biegiem czasu oprogramowanie urosło, rynek się zmienił, a pierwotni klienci mają mniejszy priorytet w porównaniu z nowymi możliwościami. Zmieniły się więc wymagania, a co za tym idzie specyfikacje, chociaż wszystkie wymagania wszystkich interesariuszy mogą współistnieć (nie ma konfliktów). Mieliśmy również pewne zmiany w zespole programistów, ludzie poruszali się w górę, w poprzek lub poza, więc teraz nie ma nikogo, kto był tam „na początku”. Doprowadziło to do niektórych przestojów klientów, w wyniku których usunęliśmy coś, co wyglądało na nieużywane ścieżki kodu (logika była nieznana dla wszystkich), tylko po to, aby znaleźć klienta, który potrzebował tej logiki, który uruchomił aplikację kilka miesięcy później. Wiemy, że moglibyśmy umieścić testy jednostkowe, aby sprawdzić, czy zachowanie nie zmienia się przypadkowo (jak w powyższym przypadku), ale jest to duża baza kodu, więc testowanie jednostkowe wszystkiego zajmuje trochę czasu. Jakie techniki/technologie/najlepsze praktyki inne niż manualne są dla nas dostępne w celu sprawdzenia, czy oprogramowanie (nadal) spełnia specyfikacje i wymagania? Słyszałem, że zwolennicy metodyki Agile/iterative mówią coś w stylu „testy jednostkowe są specyfikacją”. Czy jest coś, czego moglibyśmy użyć, aby połączyć testy jednostkowe z pierwotnymi wymaganiami? * * * _Przypisy_ (Widziałem ten inny post, ale mniej chodzi o weryfikację, a więcej o testowanie użyteczności) Robimy już iteracyjny rozwój, wypuszczając co dwa tygodnie lub mniej. Bazą źródłową jest głównie C++ w systemie Unix. Wymagania i specyfikacje obecnie udokumentowane w Wiki, Word, systemach biletowych i MS Project.


title: Jak mogę śledzić atrybuty jakości w Kanbanie mojego zespołu?

text: Mój zespół używa systemu Kanban do śledzenia codziennych postępów i działa on naprawdę dobrze, aby zrozumieć postępy w funkcjach (przechwycone jako historyjki użytkownika). W dużej mierze pozwoliliśmy na pojawienie się naszego projektu systemu, rozwijając funkcje, które działały dobrze do niedawna. W ciągu ostatnich dwóch tygodni przeprowadziliśmy kilka dyskusji na temat kompromisów architektonicznych związanych konkretnie z atrybutami jakości wydajności i możliwości modyfikacji. Myślę, że gdy wdrażamy funkcje i projektujemy system, domyślnie podejmujemy decyzje dotyczące architektury, ale nie rozważamy tych decyzji pod kątem naszych znanych wymagań atrybutów jakościowych. Byłoby naprawdę wspaniale, gdybym mógł śledzić/przechwytywać/wizualnie przedstawiać, w jaki sposób podejmowane są te ważne decyzje projektowe, aby członkowie zespołu mieli większą szansę nie tworzyć dodatkowego napięcia w architekturze systemu podczas jego wdrażania. I oczywiście, aby jeszcze bardziej skomplikować sprawy, funkcje na naszej tablicy nie są _wyłącznie_ funkcjonalne i czasami ukrywają złożoność architektoniczną! Jak mogę śledzić postępy w zakresie atrybutów jakości (lub innych decyzji istotnych z punktu widzenia architektury) wizualnie w kanbanie mojego zespołu?


title: Które argumenty przechodzą przez wartość, a które przez odwołanie w Javie?

text: Zaczynam uczyć się Javy dzięki samouczkom Java Trails oferowanym przez Oracle. Jestem w sekcji, w której mówi się o przekazywaniu argumentów do metod (http://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html). Mówi, że typy pierwotne są przekazywane przez wartość, co ma dla mnie sens. Zaraz po tym jest napisane: > Parametry typu danych referencyjnych, takie jak obiekty, są również przekazywane do metod > według wartości. Oznacza to, że gdy metoda zwraca, przekazana referencja > nadal odwołuje się do tego samego obiektu, co poprzednio. Jednak wartości pól > obiektu można zmienić w metodzie, jeśli mają odpowiedni > poziom dostępu. Teraz to nie ma dla mnie sensu. Jeśli obiekt jest przekazywany przez wartość, zmiana pól tego obiektu spowoduje zmianę pól kopii wewnątrz metody, a nie oryginalnej. Podczas testowania za pomocą poniższego programu: class Point{ int x; int y; public static void movePoint(Point p, int x, int y){ p.x+=x; p.y+=y; } } class App{ public static void main(String argv[]){ Point p1; p1 = nowy Punkt(); p1.x = 2; p1.y = 3; p1.przesuńPunkt(p1,2,2); System.out.println("x = " + p1.x + " y = " + p1.y); } } Działało to tak, jakby obiekt był przekazywany przez referencję (w końcu wypisuje x = 4 y = 5). Więc co dokładnie Oracle miała na myśli w powyższym fragmencie? Czy ktoś może podsumować, co jest przekazywane przez wartość i co jest przekazywane przez odwołanie w Javie?


title: Kiedy przechowywać datę/data/godzinę?

text: Pracuję nad portalem społecznościowym i nie jestem do końca pewien, kiedy powinienem przechowywać datę/godzinę. Usługa obejmuje niektóre z następujących zdarzeń: * Zarejestruj się/Zaloguj się * Obserwuj * "Lubię to" (obrazy i komentarze) * Dodaj komentarz * Dodaj obraz Moim zdaniem używałbym `DateTime` dla wszystkich z nich... Chociaż Nie jestem pewien, czy to profesjonalizm, czy może to tylko strata miejsca. Kiedy powinienem przechowywać czas wydarzenia? Z góry dziękuję.


title: Nazewnictwo parametrów typu w java

text: Wszyscy wiemy, że dobrze jest używać opisowych nazw identyfikatorów. Jednak konwencja w java polega na użyciu pojedynczej litery jako identyfikatora parametru typu. Domyślną wartością, do której trafia większość ludzi, jest `T`, ale jeśli masz do czynienia z elementami kolekcji, często widzisz `E`. Teraz widzę, jak sensowne jest używanie jednoliterowych identyfikatorów dla parametrów typu nieograniczonego, ponieważ tak naprawdę mogą to być dowolne, więc nie masz informacji, które mogłyby być reprezentowane przez identyfikator. Ale załóżmy, że masz dwa parametry typu ograniczonego, powiedzmy `T extends Iterable<Integer>` i `S extends Consumer<Integer>`, czy nie byłoby bardziej sensowne użycie bardziej opisowych identyfikatorów niż `T` lub `S`, aby nie mylić ich? Możesz być w stanie ujść na sucho używając, powiedzmy, „I” i „C”, ale ludzie nigdy (w moim idealnym świecie) nie byliby tak zwięźli ze zmiennymi identyfikatorami. Dlaczego więc ludzie są tak zwięźli z identyfikatorami parametrów typu? A może konwencja identyfikatorów parametrów typu jednoznakowego nie jest tak wszechobecna, jak sobie wyobrażam?


title: Czy powinienem używać właściwości automatycznych?

text: Jestem nowy w C# pochodzących z tła Java. Pracuję nad zadaniem do domu na rozmowę kwalifikacyjną z kodowaniem. Zwykle piszę swój kod w następujący sposób (Java): public class Test { //fields private string fieldA; pole B prywatne int; public Test () { //..... } public String getFieldA() { return fieldA; } //ETC. } Chodzi o to, że używam getterów/setterów jak powyżej. Teraz mam zadanie kodowania do wykonania rozmowy kwalifikacyjnej, a przy użyciu C# natknąłem się na właściwości automatyczne. Początkowo byłem nieco zdezorientowany, ale rozumiem, co teraz robi i używałem go. Więc dla pól napisałbym public string fieldA {get; set;} Dziwnie jest deklarować pola jako publiczne i czy nie narusza to niektórych zasad enkapsulacji OOP? Moje pytanie brzmi, czy powinienem po prostu użyć właściwości automatycznych, aby pokazać ankieterom, że wiem, co to jest? Na wypadek, gdybym chciał zapobiec ustawianiu pola, mógłbym po prostu użyć: public string fieldA {get; private set;} Ale czy wyglądałoby na to, że nie przestrzegam "zasad" enkapsulacji, oczywiście nie chciałbym ryzykować. Mógłbym to napisać tak, jak to robię w Javie. Jaki jest Twój pogląd na używanie właściwości automatycznych?


title: Zmienny kursor w obiekcie tylko do odczytu?

text: Szukałem różnych zastosowań słowa kluczowego `mutable`. Odkryłem, że jest on ogólnie używany do buforowania, leniwego przetwarzania, muteksu, ... Ale zastanawiam się, czy jest spójne używanie go do kursora na obiekcie tylko do odczytu. Na przykład mam klasę dźwięku i chcę, aby każdy dźwięk był w stanie śledzić kursor odtwarzania, do użytku odtwarzania/wstrzymywania, ale nie sądzę, że jest to część stanu dźwięku. Dźwięku stałego nie można modyfikować, ale można go odczytać. Czy można zmienić atrybut kursora?


title: Zautomatyzowane testy GUI trwają zbyt długo ze względu na wykonanie tych samych kroków przed kontynuowaniem „głównej akcji testowej”

text: Tworzymy aplikację desktopową i odpowiadam za testowanie GUI. Obecnie mamy około 500 testów, których wykonanie zajmuje 8 godzin. Testy testują prawie każdy przycisk/menu/pole itp. w aplikacji. Niektóre funkcje zajmują od 3 do 15 minut, ponieważ aplikacja faktycznie coś mierzy, ale większość testów zajmuje około 2 minut. Największym problemem, jaki widzę, jest to, że wiele testów wykonuje te same kroki, zanim "główna akcja testowa" może się rozpocząć, na przykład zaczyna się od importu dokumentów do użycia w testach, co zajmuje kilka sekund. Jak skrócić ten czas? Testowanie równoległe lub jakieś wymyślne środowisko wykonawcze prawdopodobnie nie jest rozwiązaniem lub tym, o co proszę. Bardziej interesuje mnie projekt testu lub kilka wskazówek dotyczących zmniejszenia powtarzalności pracy.