title: Czy to przełom, jeśli osoba HR zadaje pytania programistyczne podczas rozmowy kwalifikacyjnej?

text: Tytuł mówi wszystko, ale dłuższa historia jest taka: w zeszłym roku poszedłem na rozmowę kwalifikacyjną na stanowisko młodszego testera. Pierwsza rozmowa odbyła się z osobą z działu HR. To dziwne, moim zdaniem wywiad techniczny powinien być na pierwszym miejscu. Zaczęliśmy rozmawiać o konkretnych rzeczach HR i kilku szczegółach dotyczących firmy/pracy/itd. Potem nagle zaczęła zadawać mi bardzo ogólne i proste pytania dotyczące programowania obiektowego. Co to jest klasa, czym jest dziedziczenie, jaka jest różnica między nadpisywaniem a przeciążaniem blabla. Teraz może ma sens biznesowy, aby ludzie w HR zapamiętywali niektóre pytania programistyczne i odpowiedzi, aby odfiltrować całkowicie idiotycznych kandydatów. Istnieje jednak kilka ważnych niepowodzeń: * przez większość czasu osoba z działu HR nie będzie miała pojęcia, o czym on/ona lub wnioskodawca mówi w danym momencie. Jeśli więc prawidłowa odpowiedź wnioskodawcy różni się od tej, którą zapamiętał (co prawdopodobnie będzie), to błędnie uzna (z bardzo dużym prawdopodobieństwem), że wnioskodawca nie ma pojęcia o OOP. * dlaczego zamiast tego nie można po prostu zlecić starszemu programiście sprawdzenia telefonu? Wydaje się znacznie skuteczniejszy (a także tańszy). * moje CV było całkiem kompletne, zawierało wszystkie moje umiejętności i projekty. Czy on/ona w ogóle zadał sobie trud przeczytania tego? A jeśli to przeczytał, to czy po prostu zakłada, że każdy kandydat kłamie w swoim CV? W takim razie, dlaczego miałbym zawracać sobie głowę składaniem jednego i wysyłaniem go do nich? Wszystko to na pewno wzbudziło w moim umyśle kilka czerwonych flag z powodów wymienionych na powyższej liście. Nie poszliśmy do przodu na drugą i/lub trzecią rozmowę kwalifikacyjną (powód tego jest nieistotny), ale **czy rozsądne jest uważanie tego za zerwanie umowy?**


title: Dobry sposób na dzielenie się wiedzą o nowej technologii z członkami zespołu, gdy czasu jest mało?

text: Ciągle zmienialiśmy wymagania dotyczące wyboru biblioteki do renderowania grafiki, która ma być użyta w naszym projekcie. W zespole liczącym około 10 członków, dwóch z nas bada nową bibliotekę graficzną. Lider zespołu oczekuje, że w ciągu 2 dni dowiemy się, co jest konieczne i przedstawimy to reszcie zespołu ( _chce, abyśmy oboje dawali wartość dodaną innym zespołom, przedstawiając im to, aby nie zgubili się_ ) . Powiedzieliśmy mu, że 2 dni to śmieszne, więc poprosił nas o przedstawienie mu naszego planu. Straciliśmy już kilka miesięcy na eksplorację innych bibliotek graficznych, więc projekt jest opóźniony. Pozostali członkowie zespołu opracowują algorytmy, które będą wywoływać biblioteki graficzne. Będą też musieli napisać kod przy użyciu biblioteki graficznej. Jaki jest w takiej sytuacji dobry sposób na dzielenie się wiedzą? * Czy sesje burzy mózgów odbywają się codziennie przez godzinę, podczas których mówią nam interfejsy algorytmów, a my mówimy im interfejsy bibliotek graficznych, z których mogą korzystać? * Daj im krótki przegląd szkieletu tego, jak ich interfejsy pasowałyby do naszego i pozwól im samodzielnie wymyślić kod biblioteki graficznej? * Jakieś inne sposoby?


title: Jak utrzymać rozdwojone repozytorium git z gałęziami funkcji, których nie można wyciągnąć z góry?

text: Oto typowy przepływ pracy na Github... 1. Jak w przypadku niektórych projektów `->` rozwidlej `->` `git clone https://github.com/you/someproject`. 2. Otwórz projekt. Podoba Ci się to, co widzisz, ale wprowadź pewne zmiany. 3. Uważając, aby pracować tylko w `gałęzi funkcji` (`git checkout -b some-feature`), decydujesz się wykonać pull request u opiekuna `upstream` - po wypchnięciu `gałęzi funkcji` do widelca Github. 4. Opiekun, z jakiegokolwiek powodu, odmawia ściągania. Na przykład... tutaj jest nieudane żądanie ściągnięcia, które przesłałem, które pasuje do powyższego scenariusza... Teraz _zazwyczaj_ , jeśli opiekun _HAD scalił_ ściąganie... przepływ pracy byłby prosty... Na moim lokalnym komputerze zatwierdziłbym wszelkie lokalne zmiany w „gałęzie funkcji”, na której byłem w tym czasie... `git fetch --all`, `git checkout master`, `git pull upstream --ff-only`. Następnie odtwórz ponownie moje zmiany, zgodnie z życzeniem... ALE... Co jeśli zdecyduję, że chcesz kontynuować pracę nad zmianami w moim rozwidleniu, bez względu na to... ale nadal chcesz mieć możliwość śledzenia + scalania zmian to się dzieje „pod prąd”? Normalnie, usunęłabym gałąź funkcji i ruszyła w dalszą drogę.. Jak możesz utrzymywać gałąź `master`, która może być scalona w górę, ale zachowuje cechy twojego rozwidlenia, będąc jednocześnie "trwale odłączona" od gałęzi `upstream` "GŁOWA"?


title: Jakieś sugestie, jak dobrze byłoby wypromować oprogramowanie w małej firmie?

text: Ok, wiem, czy jestem Red Hatem czy innym gigantem i oferuję jakieś wsparcie itp. Mogę być zyskowny, w rzeczywistości Red Hat radzi sobie całkiem nieźle. A co z małą firmą, w której tworzę mały program. np. komunikator internetowy dla systemu Windows lub linux (jako ilustracja) i chcę go sprzedać. Ale jak mogę go sprzedać, jeśli jest bezpłatny i każdy może go pobrać? Jakakolwiek rada? Podoba mi się pomysł FSF Richarda Stallmana, jednak brakuje mi sposobu sprzedaży mojego oprogramowania na licencji GNU/GPL. Wszelkie porady, jak mogę rozwiązać ten problem? Czy są jakieś dochodowe deweloperzy oprogramowania dla małych firm z ich opinią? Jakieś linki lub nazwy małych firm, na które mogę zajrzeć i przestudiować ich model biznesowy?


title: Jak nazwać wymagania, które są „założone”/„niewidoczne”/„bardzo oczywiste”

text: Szukam ogólnego określenia dla wszystkich drobiazgowych wymagań, które warto określić z góry, ale o których klient nigdy nie myśli w swoim podekscytowaniu produktem. Klient myśli o wymaganiach nagłówkowych, głównych historiach użytkowników, takich jak „Muszę mieć możliwość podglądu stanu całego sprzętu” i „Muszę automatycznie otrzymywać powiadomienia o awarii sprzętu”. Ale czasami pojawiają się te przyziemne, ale klient nigdy o nich nie wspomina, dopóki wynik nie odbiega od jego niewypowiedzianych oczekiwań: „Cóż _oczywiście_ użytkownik musi mieć możliwość zmiany własnego hasła” i „ _Oczywiście_ sesja użytkownika musi wygasnąć po 30 min” Każdy zespół programistów może przewidzieć, co może być potrzebne, ale czy istnieje nazwa dla tej kategorii wymagań? Oczywiste/infrastrukturalne/nudne/szczegóły?


title: Animacja w Swingu

text: Mam projekt napisany za pomocą Swinga i chcę go usprawnić (tak jak JavaFX) poprzez dodanie animacji do niektórych komponentów (`JButton`, `JScrollPane`, `JSplitPane`) za pomocą `javax.swing.Timer`. **UPD:** To nie jest gra. Chcę używać Timera do krótkich animacji, takich jak zdarzenia mouseHover, lista rozwijana lub przewijanie. Ale problem polega na tym, że należy utworzyć wiele obiektów Timer. **Pytanie:** Jakie działanie wykonuje dla JVM? Podczas sesji aplikacji uruchamiałbym i zatrzymywał wiele Timerów.


title: Jakie są kluczowe czynniki przy wyborze Mocking Framework?

text: Zamierzam rozpocząć pracę z obiektami w moich testach jednostkowych. Wygląda na to, że istnieje mnóstwo dobrych frameworków do prześmiewania. 1. Czy różne ramy mają różne grupy docelowe? 2. Jakie czynniki powinienem wziąć pod uwagę wybierając ramy odpowiednie dla mojej sytuacji?


title: Czy są jakieś obawy związane z mapowaniem projektu TFS przez jednego użytkownika na dwa katalogi?

text: Planuję zmapować niektóre z moich projektów TFS do dwóch różnych katalogów, jak omówiono tutaj. Będę korzystał z dwóch różnych przestrzeni roboczych, z tym samym komputerem i tym samym właścicielem. Czy jest jakiś powód, dla którego byłby to zły pomysł? Czy są jakieś komplikacje związane ze scalaniem lub blokadą, na które natrafiłby jeden użytkownik z dwoma mapowaniami, które różnią się od normalnych komplikacji, z jakimi spotyka się dwóch użytkowników sprawdzających projekt? Zasadniczo chcę zachować wszystkie moje projekty na dysku współdzielonym, wszystkie zamapowane na TFS, ale następnie mieć dodatkowe drugie lokalne mapowania dla kilku projektów, nad którymi najbardziej aktywnie pracuję, aby program Visual Studio był szybszy. Używam VS 2010 z rozszerzeniem TFS Power Tools.


title: Muszę stworzyć harmonogram/program spotkań dla pracowników, ale nie wiem jak go skonfigurować

text: Pracuję na siłowni. Jestem programistą, to tylko ja, nikt inny! Robi się naprawdę frustrujące, gdy nie ma nikogo, od kogo można by odrzucić konceptualne pomysły. Pozbywam się naszych archaicznych systemów segregatorów papierowych do śledzenia spotkań i innych. Wiele rzeczy udało mi się już zrobić, teraz próbuję zmierzyć się z działem treningu personalnego. Czego chcę: * Informacje o trenerze i harmonogram pracy * Rezerwacja spotkania, która może być wykonana według przedziału czasowego ze wszystkimi dostępnymi trenerami na ten czas lub przez trenera ze wszystkimi dostępnymi godzinami dla tego trenera To, czego próbowałem do tej pory: * Zacząłem od baza danych „spotkań”, baza danych „trenerów” oraz baza danych „harmonogramów”. To stało się tak skomplikowane, próbując dopasować się do harmonogramu, że zrezygnowałem z tego. Czy ktoś wie, jak najlepiej ustrukturyzować tabele i jak sprawić, by komunikowały się poprawnie? Nie potrzebuję konkretnego kodu, potrzebuję tylko pomocy w zrozumieniu _jak_ to zrobić!


title: Jak przekonać moich menedżerów do egzekwowania standardów dokumentacji?

text: Próbuję przekonać inną grupę w mojej firmie — która ma zamiar przekazać kod mojej grupie — że muszą dostarczyć więcej dokumentacji w swoim kodzie źródłowym, ale traktują to jako „miło mieć”. Moim zdaniem to konieczność. Oczywiście popieram również intuicyjne konwencje nazewnictwa, ale myślę, że będę miał mniej trudności z nakłonieniem oryginalnych autorów do dodania komentarzy niż z nakłonieniem ich do zmiany nazw funkcji i zmiennych. Uruchomiłem narzędzie do analizy kodu źródłowego, które pokazuje około 10% linii komentarza, ale patrząc na kod źródłowy, większość z nich pochodzi z całych funkcji, które autor zakomentował. Jak mogę przekonać moich menedżerów do egzekwowania standardów dokumentacji w tym innym zespole? Czy przeprowadzono badania lub prace, aby udowodnić, że dokumentacja kodu zwiększa rentowność lub produktywność?


title: Redex i strategie redukcji

text: Studiuję Typy i Języki Programowania i mam pewne problemy ze zrozumieniem pojęć zawartych w 5. rozdziale, _Rachunek Lambda bez typu_. W szczególności _redex_ , _redukcja_ i różne strategie ewaluacji wbijają mi się w głowę. To, co rozumiem, wyrażam własnymi słowami, próbując wyjaśnić sobie różne rzeczy i zachęcić bardziej kompetentnych ludzi do poprawienia moich błędów / nieścisłości. Szczerze nie jestem pewien, czy jest to akceptowalny format wymiany stosów i jestem otwarty na sugestie, aby lepiej to dopasować. Zauważ, że inni próbowali odpowiedzieć na bardzo podobne pytanie, ale wciąż mnie zdezorientowali: * Wywołanie według wartości w rachunku lambda * Niewpisany rachunek lambda: Dlaczego wywołanie według wartości jest ścisłe? ## Redex Jeśli moje rozumienie jest poprawne, _redex_ jest wyrażeniem redukowalnym, to znaczy zastosowaniem terminu lambda do abstrakcji lambda. Lub bardziej konkretnie, redex ma zawsze postać `(λx.s)t`. ## Redex Redex Redukcja `(λx.s)t` odbywa się poprzez zastąpienie wszystkich wolnych wystąpień `x` w `s` przez `t`. Na przykład: (λx.x + 2) 1 → 1 + 2 → 3 Proces redukowania wyrażenia lambda do jego normalnej postaci jest sterowany przez strategię oceny: algorytm wybierania, które przekształcenie należy najpierw zredukować. Aby je jednak opisać, potrzebujemy więcej słownictwa. ## Kwalifikacje redeksowe ### Najbardziej lewy i najbardziej prawy * _lewy redeks_ to ten, którego abstrakcja jest tekstowo po lewej stronie wszystkich innych przeróbek. * najbardziej prawostronny redeks to ten, którego abstrakcja jest tekstowo na prawo od wszystkich innych redeksów. Tak więc, na przykład, w `(λx.x + 2) (λy.y + 1)` mamy: * przegrupowanie skrajne lewe: `λx.x + 2` * przekształcenie skrajne prawe: `λy.y + 1` być tylko jednym skrajnym lewym i jednym skrajnym prawym przekształceniem w danym wyrażeniu. Zakładam, że w wyrażeniu składającym się z pojedynczego odbicia, ten odruch jest zarówno skrajnie lewy, jak i skrajny prawy. ### Najbardziej wewnętrzny i zewnętrzny * _najbardziej wewnętrzny redex_ to taki, który nie zawiera żadnego innego redexu. * _najbardziej zewnętrzny redeks_ to taki, który nie jest zawarty w żadnym innym przebudowie. Na przykład w `(λx.(λy.y + 1) x) 2` mamy: * najbardziej wewnętrzne: `λy.y + 1`, ponieważ nie zawiera żadnego innego przekształcenia. * zewnętrzny: `λx.[...]`, ponieważ nie jest zawarty w żadnym innym redexie. Zakładam, że w wyrażeniu składającym się z pojedynczego odbicia, ten odruch jest zarówno najbardziej zewnętrzny, jak i wewnętrzny. ## Strategie ewaluacji Po zdefiniowaniu tego możemy mówić o dwóch strategiach ewaluacji, z którymi się zmagam: _call by name_ i _call by value_. ### Call by name W _call by name_ , do redukcji wybierany jest zawsze skrajny lewy zewnętrzny redex. Ponadto w abstrakcji lambda nie może wystąpić żadna redukcja. Przykład podany przez _Typy i języki programowania_ to: id (id (λz. id z)) # skrajnie lewy, zewnętrzny redex jest pierwszym id → id (λz. id z) # skrajnie lewy, zewnętrzny redex jest nadal pierwszym id → λz. id z # nie pozostał żaden zewnętrzny redex, gotowe. Nie rozumiem potrzeby, aby definicja strategii zawierała _żadna redukcja nie może wystąpić w ramach abstrakcji lambda_: czy nie wynika to z faktu, że tylko najbardziej zewnętrzne redeksy kwalifikują się do redukcji? ### Wywołaj według wartości W _wywołaj według wartości_ do redukcji zawsze wybierany jest najbardziej zewnętrzny z prawej strony redex. Przykład podany przez _Typy i języki programowania_ to: id (id (λz. id z)) # najbardziej na prawo, zewnętrzny redex to drugi id → id (λz. id z) # najbardziej na prawo, zewnętrzny redex to pierwszy id # ( jest tekstowo po lewej stronie, ale po prawej nie ma redexu) → λz. id z # jedyny pozostały przerób nie jest najbardziej zewnętrzny (zawarty w # abstrakcji) i nie można go zredukować.


title: Czy istnieje korelacja między złożonością a osiągalnością?

text: Ostatnio badam złożoność cyklomatyczną (McCabe) i osiągalność oprogramowania na uniwersytecie. Dzisiaj mój wykładowca powiedział, że nie ma korelacji między tymi dwoma wskaźnikami, ale czy tak jest naprawdę? Myślę, że na pewno będzie _jakaś_ korelacja, ponieważ mniej złożone programy (z nielicznych, którym przyjrzeliśmy się) wydają się mieć „lepsze” wyniki pod względem osiągalności. Czy ktoś wie o próbie spojrzenia na te dwie metryki razem, a jeśli nie, jakie byłoby dobre miejsce na znalezienie danych dotyczących zarówno złożoności, jak i osiągalności dla dużej (niewielkiej) liczby programów?


title: Jak sprzedawać rozwój Agile klientom (wodospadem)

text: Nasz sklep deweloperski naprawdę chciałby realizować bardziej zwinne projekty, ale mamy problem z pozyskaniem klientów. Wielu klientów chce budżetu i terminu. Trudno sprzedać klientowi projekt zwinny, gdy nasi konkurenci wymyślają ustalone terminy kaskadowe i stałe ceny. Wiemy, że ich stałe numery są złe, ale klient o tym nie wie. Tak więc wyglądamy źle dla klienta, ponieważ nie możemy ustalić ceny ani terminu, ale nasi konkurenci mogą. Jak więc skłonić swoich handlowców do skutecznej sprzedaży projektu wykorzystującego zwinne metody rozwoju lub produktu opracowanego przy użyciu takich metod? Wszystkie informacje, które znalazłem, wydają się skupiać na zarządzaniu projektami i programistach.


title: Jakie podstawowe umiejętności powinien posiadać początkujący programista JavaScript?

text: W Nowym Jorku pracujemy nad stworzeniem środowiska programistycznego opartego na współpracy i próbujemy podzielić inżynierów oprogramowania na różne segmenty. Obecnie staramy się zdefiniować: * Początkujący * Średniozaawansowany * Zaawansowany * Eksperci (i/lub Mistrzowie) Podobnie jak w przypadku praktyk, aby osiągnąć różne poziomy, musisz wykazać się określonymi umiejętnościami. W tej chwili określiliśmy umiejętności programowania dla początkujących jako: * Obiekt - metoda, atrybuty, dziedziczenie * Zmienna - matematyka, łańcuch, tablica, boolean - wszystkie są obiektami * Podstawowe funkcje arytmetyczne - pierwszeństwo funkcji * Manipulacja ciągami * Zapętlanie - kontrola przepływu * Warunkowe - algebra Boole'a Jest to pierwsza próba i jest to wyzwanie, ponieważ znamy naturalne napięcie między programowaniem a inżynierią oprogramowania. Jak w ten sposób stworzyłbyś taki ranking oparty na umiejętnościach dla JavaScriptu? Na przykład, jakie byłyby umiejętności w zakresie języka JavaScript dla początkujących, które byłyby potrzebne, aby przejść do szkolenia średniozaawansowanego? I tak dalej.


title: Certyfikowany programista rozwiązań Microsoft z .net Framework 4?

text: Więc jestem zdezorientowany, jeśli chodzi o platformę .net 4. Czy istnieje program Microsoft Certified Solution Developer dla platformy .net 4? Wydaje się, że ścieżki certyfikatów programu Visual Studio 2010 wyróżniają MCPD 70-519 dla jednego, który nie ma wymagań wstępnych... Czy popełniłem błąd? Czy nadal istnieje program Microsoft Certified Solution Developer? a Microsoft Certified Solution Developer Enterprise?


title: Wymagania wstępne do teorii kompilatora?

text: Nie ma być subiektywna ani uzyskać porady, jaka byłaby najlepsza droga, ale obiektywna lista rzeczy, które muszą być znane, abym mógł wziąć książkę o teorii kompilatora i ją zrozumieć. Jaki poziom matematyki i powiązanych umiejętności jest wymagany?


title: Ruby on Rails - branding

text: Pracuję nad stroną internetową, która ma mieć wiele marek. Podstawowa funkcjonalność dla wszystkich marek będzie taka sama, jednak będzie między nimi szereg różnic. Różnice te mogą oczywiście pojawiać się w aktywach, modelach, widokach lub ustawieniach. Przykładem może być to, że jedna marka będzie miała jedno dodatkowe pole dla jednego z naszych modeli. Oznacza to, że musimy mieć dodatkową kolumnę bazy danych tylko dla tej marki, wraz z odpowiednimi walidacjami w ramach modelu i zmodyfikowanym widokiem. Pytanie brzmi, jaki byłby najlepszy sposób na wdrożenie tego? Istnieje wiele sposobów, które możemy wymyślić, żaden z nich nie jest doskonały: 1. Warunkowe (poprzednia implementacja): na początku aplikacji ustaw zmienną globalną o nazwie `BRAND`, a następnie rozwiń naszą logikę w zależności od tej stałej. To oczywiście nie jest to, czego szukamy, ponieważ będzie to strasznie zaśmiecać kod, ponieważ planujemy mieć dużą liczbę marek. 2. Pierwszeństwo ścieżki ładowania (bieżąca implementacja): możemy mieć jeden folder z podstawowymi funkcjami i inny z nadpisaniami specyficznymi dla marki. Na starcie aplikacji możemy poprzedzić ścieżki ładowania ścieżką folderu specyficzną dla marki. W ten sposób zawsze będzie próbował załadować modele specyficzne dla marki i wrócić do rdzenia, jeśli żaden nie jest tam zdefiniowany. Minusem tego podejścia jest to, że musimy zduplikować każdy plik, który chcemy zmodyfikować dla danej marki. Jeśli więc chcemy dodać do marki dodatkowe pole, musimy skopiować widok podstawowy do folderu marki i tam go zmodyfikować. Jeśli w dowolnym momencie chcielibyśmy zmienić widok podstawowy, tę zmianę należy również dodać ręcznie do tego widoku z marką. 3. Korzystanie z gałęzi git (proponowane): Podstawowa implementacja znajduje się na gałęzi git master, a każda marka zajmuje własną gałąź. Następnie wszelkie zmiany specyficzne dla marki są wprowadzane do podstawowej gałęzi marki. Jeśli potrzebujemy zmodyfikować wszystkie marki, modyfikujemy gałąź master, a następnie scalamy tę zmianę do wszystkich marek. Minus: dla dużej liczby marek łączenie tej zmiany może być dość długim i podatnym na konflikty procesem. Czy są jakieś inne sposoby na wdrożenie elastycznego brandingu dla aplikacji ruby on rails? Zdecydowanie popieram opcję git - czy są jakieś oczywiste „nie-nie” dla tego rozwiązania?


title: Jak mogę ograniczyć dostęp do automatycznie generowanych plików do określonych użytkowników w konfiguracji MVC?

text: Mam typową witrynę opartą na MVC i chciałbym umożliwić niektórym zarejestrowanym użytkownikom pobieranie danych z bazy danych (w różnych formatach). Przebieg pracy jest bardzo prosty: * Użytkownik loguje się, * Użytkownik klika eksport, * Generowany jest plik, * Użytkownik pobiera plik. Próbuję znaleźć sposób na zabezpieczenie ostatniego kroku i ograniczenie dostępu do pliku. Aby użytkownik mógł pobrać plik, powinien on znajdować się w publicznie dostępnym folderze. Oznacza to jednak, że plik jest dostępny dla wszystkich innych osób, które mają dostęp do jego pełnego adresu URL. Pomyślałem o kilku możliwych rozwiązaniach: 1. Wyślij plik eksportu pocztą e-mail Zamiast zmuszać użytkownika do pobrania pliku, mogłem po prostu wysłać go pocztą e-mail na jego adres e-mail (ten, którego użyli do rejestracji na stronie). Wydaje się to przyzwoitą opcją, gdy pliki eksportu są małe, ale nie sądzę, aby była optymalna dla większych plików. 2. Magia .htaccess Mogę automagicznie wygenerować plik .htaccess w katalogu eksportu, który umożliwi dostęp tylko użytkownikowi, który zażądał eksportu. Również przyzwoita opcja, ale jest zależna od serwera WWW i oparta na IP. Nie wiem, czy Apache zawsze będzie serwerem z wyboru dla projektu i nie jestem pewien, czy rozwiązanie oparte na IP jest rzeczywiście bezpieczne. 3. Przechowuj plik eksportu w prywatnym folderze i poproś użytkownika o pobranie go przez ftp Secure, ale niezbyt przyjazny dla użytkownika. Wszystkie moje opcje wydają się mieć problemy i jestem w tym momencie, w którym całkowicie utknąłem i nie mogę pozbyć się wrażenia, że tracę coś oczywistego. Jestem? Czy istnieje lepszy przepływ pracy? Bardziej interesuje mnie ogólny przegląd niż szczegóły techniczne, projekt jest wciąż w powijakach, a wymagania techniczne jeszcze się nie ustabilizowały (np. w końcu możemy nie używać Apache). Projekt jest zbudowany w PHP, ale nie sądzę, że ma to znaczenie (prawda?). Dziękuję.


title: Projekt demonstracyjny

text: Jestem studentem studiów licencjackich na kierunku informatyka. Pracuję w firmie jako naukowiec i w przyszłym tygodniu mam zademonstrować mój pełny projekt mojemu szefowi i innym programistom. Jest to najbardziej rozbudowany i największy program jaki stworzyłem. Moje pytania to: Jaki jest najskuteczniejszy sposób demonstracji? Czy są jakieś dobre artykuły na ten temat? Jakie są kluczowe punkty do pokazania? Jak robisz demo? Rozpocząłem ten projekt, zanim dużo wiedziałem o TDD, więc nie był rozwijany w ten sposób. Większość moich testów/walidacji została wykonana, gdy pisałem program za pomocą instrukcji print i sam weryfikowałem wyniki. Chcę udowodnić, że program działa i na podstawie moich testów jest wolny od błędów. Moim jedynym dowodem jest to, że robi to, co powinien... To trochę dla mnie niepokojące. Wszelkie odpowiedzi na pytania, komentarze, sugestie, linki i wszystko inne jest bardzo mile widziane. Dziękuję Ci!


title: Czy to zły pomysł, aby sprzedawać aplikacje na Androida w Android Market pod swoim prawdziwym imieniem i nazwiskiem?

text: Dopiero zaczynam pracę nad Androidem i pracuję nad kilkoma małymi aplikacjami „ćwiczeniami”. Przykładem jest tapeta na żywo. Pozostałe są podobne pod względem wysiłku rozwojowego. Kiedy te aplikacje są gotowe, chciałbym je wymienić na rynku. Mogę je wymienić za darmo (a może nie) i są to proste aplikacje, ale jeśli wszystko pójdzie gładko, mogę spróbować budować i sprzedawać większe i bardziej ambitne projekty w przyszłości. Moje pytanie brzmi: **czy mądrze jest sprzedawać aplikacje w Android Market pod własnym nazwiskiem?** Rozglądając się po rynku, wydaje się, że prawie każdy sprzedaje pod nazwą firmy, nawet jeśli są to tylko 1-2 osoby sklep. Zdecydowanie widzę zalety stworzenia firmy do sprzedaży moich aplikacji, jeśli były to duże aplikacje angażujące zespół ludzi. Ale wydaje się, że tworzenie firmy jest przesadą, nawet jeśli chodzi o nazwę i tożsamość, tylko po to, by wymienić coś w rodzaju tapety na żywo. Z drugiej strony nie chcę narażać się na odpowiedzialność prawną lub inne potencjalne problemy, których nie przewidziałem. Jaki jest najlepszy kierunek działania tutaj? Do celów jurysdykcji prawnej znajduję się w Stanach Zjednoczonych. Rozumiem, że nie jesteś moim prawnikiem, a odpowiedzi nie są poradami prawnymi. **Edytuj w celu wyjaśnienia:** Żeby było jasne, chcę zapytać mniej o zalety tworzenia firmy, a bardziej o potencjalne zagrożenia związane z _nie_ jej tworzeniem. Innymi słowy, czy zdarzają się sytuacje, w których biję się i mówię „Och, gdybym tylko założył firmę, zamiast wymieniać to jako osobisty projekt!”.


title: Jakie są wady Development Managerów jako Scrum Masterów?

text: Powszechnie uważa się, że menedżerowie zespołów nie powinni być mistrzami scrum, ale nie mogę zrozumieć, dlaczego. Dla kontekstu jestem menedżerem ds. rozwoju aplikacji z 4 programistami w zespole Scrum. Pochodzę ze środowiska Scrum Mastera i wprowadziłem scrum do organizacji. Zbudowałem zespół od podstaw i wyjaśniłem, że wszystko, co robię, to ułatwianie pracy zespołowi i podejmowanie decyzji. Jako zespół jesteśmy bardzo otwarci - nawet uciszali mnie na chwilę podczas stójek, aby wyeliminować poczucie „reportażu”, które zaczynaliśmy mieć. Brak otwartości jest generalnie największym argumentem przeciwko menedżerowi jako scrum masterowi, ale dobrze potraktowany, można go łatwo przezwyciężyć odpowiednią kulturą. Doświadczeni trenerzy scrum ostrzegali mnie, że jest to niebezpieczna sytuacja i istnieje ryzyko, że „jeśli sprawy potoczą się źle”. W moim odczuciu te dwie pozycje nie są ze sobą sprzeczne, w obu rolach mam ten sam cel dla zespołu i dla poszczególnych osób. Scrum rozwiązuje konflikty w zespole, które tradycyjnie mogłyby być rolą menedżera. Samozarządzający charakter sprintów odbiera przydział pracy, którą tradycyjnie wykonywałby menedżer. Jedyne, co naprawdę mam do zrobienia jako dev manager, to upewnienie się, że indywidualne potrzeby są spełnione, cele zawodowe, miejsce pracy itp. Mam cotygodniowe nadrabianie zaległości z każdym członkiem zespołu, aby poruszyć wszelkie problemy i zająć się zadaniami administracyjnymi. Wiele z tego odnosi się bezpośrednio do zespołu, a w każdym razie do mojej roli jako scrum mastera. Rozumiem, że w dużych organizacjach może to być niemożliwe do zarządzania i odrębna rola, ale dla małej organizacji z pewnością nie moglibyśmy uzasadnić kolejnego Scrum Mastera lub Development Managera. Proszę, wyjaśnij mi pułapki Development Managerów jako Scrum Masterów, z wyłączeniem punktów, które podniosłem powyżej i które już przezwyciężyłem.


title: Jaki jest najlepszy sposób połączenia kontekstu bazy danych Entity Framework (modelu) z ViewModel w MVVM WPF?

text: Jak w powyższym pytaniu: Jaki jest najlepszy sposób na połączenie modelu bazy danych Entity Framework (kontekstu) z viewModel w MVVM (WPF)? Uczę się wzorca MVVM w WPF, wiele przykładów pokazuje jak zaimplementować model do viewModel, ale modele w tych przykładach to tylko proste klasy, chcę użyć MVVM razem z modelem encji (podejście base first). Jaki jest najlepszy sposób połączenia modelu z viewModel. Dzięki za odpowiedzi. //ctor ViewModel public ViewModel() { db = new PackageShipmentDBEntities(); // klasa wygenerowana przez Entity Framework ListaZBazy = new ObservableCollection<Pack>(db.Packs.Where(w => w.IsSent == false)); } To jest mój zwykły ctor ViewModel, myślę, że jest lepszy sposób, czytałem o wzorcu repozytorium, nie jestem pewien, czy mogę to dostosować do WPF MVVM


title: Udostępniasz kod źródłowy mojej gry online?

text: Tak więc jednym z moich długoletnich projektów jest gra online dla fanów, która działa już od dobrych czterech lat i jest przynajmniej trochę dobrze znana wśród powiązanej społeczności. Aby dać ci wyobrażenie, Alexa plasuje moją grę online wyżej niż oficjalna strona marki, na której opiera się moja gra. Zastanawiałem się nad tym, czy dobrym pomysłem byłoby publiczne udostępnienie kodu źródłowego gry? Powodem tego pomysłu jest to, że pozwoli to bardziej zorientowanym na programistom osobom w społeczności odkryć, w jaki sposób gra działa wewnętrznie, zbadać pewne funkcje, aby określić możliwe wyniki zdarzeń i podzielić się tą wiedzą z innymi użytkownikami. Na przykład byliby w stanie odkryć dokładne szanse na pojawienie się różnych skarbów w skrzyniach, a nie tylko przeprowadzić analizę statystyczną. Głównym argumentem przeciwko temu jest „ludzie mogą to skopiować”, ale szczerze mówiąc, istnieją już witryny naśladujące i wiele z nich upada na twarz po prostu dlatego, że starają się być moją grą i albo po prostu nie przyciągają uwagi w pierwszym lub zostać wezwanym przez innych członków społeczności za oszukanie. Te dwa punkty były jak huśtawka w moim umyśle, przechylając się w tę i z powrotem między „Powinienem to zrobić całkowicie” a „nowai, src iz myne!” (nie do końca tak :p) Więc miałem nadzieję, że będę mógł uzyskać tutaj jakąś radę, być może ktoś inny przez to przeszedł i może miał do zaoferowania zaprawioną radę?


title: Aktualizacja GUI w czasie rzeczywistym za pomocą zdarzeń

text: Mój plan * Miej system, który przechowuje niektóre obiekty * Miej formularz winforms, który wyświetla niektóre kluczowe wartości tych obiektów * Gdy wystąpią pewne zmiany (obiekt zostanie dodany / usunięty / zmieni się dane): Zaktualizuj GUI Mój pomysł * zapisz mój formularz do zdarzeń w formularzach objects * aktualizacja, gdy obiekty zmieniają się (/raise events) My Troubles * winforms (z dobrych powodów) nie zezwala na zmiany pochodzące z obcych wątków * eventHandler jest w rzeczywistości uruchamiany w wątku obiektu wywołującego * stąd .net zgłasza wyjątek i gotowe. Pytanie: Czy istnieje sposób na manipulowanie formą poprzez zdarzenia, które nie zostały wywołane przez samą siebie? Ewentualnie: Czy istnieje sposób, abym „szturchał” mój formularz, aby powiedzieć „hej, lepiej sprawdź swoje dane, jest coś nowego”, bez konieczności ciągłego odpytywania?


title: Czy w C++ rzutowanie w celu znalezienia złych wskaźników jest niezdefiniowane?

text: Przez przypadek odkryłem, że przy typie polimorficznym użycie dynamic_cast z powrotem do klasy pochodnej spowoduje wyświetlenie błędu „złego rzutowania”, jeśli wskaźnik nie jest już prawidłowy. Czy to niezdefiniowane zachowanie, czy może to być sposób na sprawdzenie prawidłowych wskaźników bez użycia inteligentnych wskaźników? Nie jestem przeciwny używaniu inteligentnych wskaźników, ponieważ służą one rzeczywistym potrzebom, ale nie lubię składni. Nie mam nic przeciwko typom szablonowym, ale znajduję inteligentne wskaźniki do rozrostu kodu i nie jestem fanem makr, które próbują uniknąć tego rozdęcia. Chciałbym, aby C ++ zawierał coś w samej składni języka, a nie korzystał z funkcji szablonu ** ale z tym pytaniem jestem bardziej zaniepokojony tym, co dzieje się poniżej i czy jest to prawidłowy i zdefiniowany sposób sprawdzania poprawności wskaźników, ponieważ daje to wyjątek za każdym razem z moich testów.** #include <string> #include <map> using namespace std; class Base { public: virtual ~Base(){} }; class Derived : public Base { public: virtual ~Derived(){} }; class Storage { private: map<string, Base*> storage; public: void AddItem(string name, Base* base) { if (storage.find(name) == storage.end()) { storage[name] = base; } } template <klasa T> T& FindItem(string name) { if (storage.find(name) != storage.end()) { Base* item = storage[name]; return dynamic_cast<T&>(*pozycja); }                  rzucić; } }; int main() { Magazyn pamięci; // wymuś, aby 'd' wyszło poza zakres naszego testu { Pochodne d; store.AddItem("test", &d); } // spowoduje to zgłoszenie wyjątku złego rzutowania Derived& test = store.FindItem<Derived>("test"); zwróć 0; }


title: Importuj dane i modyfikuj

text: Powinienem zbudować importera w PHP. Poniżej możesz zobaczyć, jak to powinno działać lub jak działa obecnie. To tylko mały przykład, rzeczywisty importer jest znacznie większy, więc metoda import() jest również bardzo duża :( function import($src, $dest) { // Name if(!$dest->nameFixed()) { $dest->setName($src->getFirstName() . $src->getLastName()); } // Miasto $city = City::searchByName($src->getCity()); if (instancja $city miasta ) { $dest->setCityById($city); } else { $dest->setCity($src->getCity()) } // Obraz $now = new DateTime(); if ($src->getImage() && $now->diff($src->getBirthdate())->format('%y') >= 18) { $image = myDowndloader::download($src->getImage()); $dest-> setImage($image); } // Data urodzenia $dest->setBirthdate($src->getBirthdate()); // ... } kilka pomysłów: class Translate { protected $src = NULL; protected $dest = NULL; public zabawa ction __construct($src, $dest) { $this->src = $src; $to->cel = $cel; } public function importName() { if(!$this->dest->nameFixed()) { $this->dest->setName($this->src->getFirstName() . $this->src->getLastName ()); } } funkcja publiczna importCity() { $city = City::searchByName($this->src->getCity()); if (instancja $cityof City) { $this->dest->setCity($city); } else { $this->dest->setCity(City::createByName($this->src->getCity())); } } // ... } lub trochę bardziej wymyślne: namespace Translate { class Abstract { protected $src = NULL; chroniony $cel = NULL; public function __construct($src, $dest) { ... } abstrakcyjna funkcja publicc import(); } class Name extends Abstract { public function import() { if(!$this->dest->nameFixed()) { $this->dest->setName($this->src->getFirstName() . $this- >src->getLastName()); } } // ... } } Nie jestem zadowolony z powyższych przykładów. Główny problem polega na tym, jak wywołać metody (1. rozwiązanie) lub utworzyć Obiekty (2. rozwiązanie). Jedną z opcji jest dynamiczne pobranie wszystkich metod lub klas przez get_class_methods() i przeanalizowanie nazw metod dla /import\w+/. Ale nie jestem pewien, jaka jest to wydajność. Inną opcją jest wywołanie metod statycznie, ale istnieje również niebezpieczeństwo, że zapomnisz metody do wywołania...


title: Jak zaimplementować tylko część interfejsu

text: Kiedy programujesz w OOP, czasami interfejs / kontrakt jest podawany przez bibliotekę, której nie możesz zmienić. Nazwijmy ten interfejs J. Teraz masz obiekt klasy A, który wykorzystuje obiekty implementujące ten interfejs. Wewnątrz A potrzebna jest tylko niewielka część definicji interfejsu. Niektóre klasy obiektów są tworzone przeze mnie w trakcie projektu (nazwijmy jedną z nich typem D), więc implementacja wszystkiego wewnątrz interfejsu J jest narzutem. Chcę zaimplementować podzbiór funkcjonalności w interfejsie J, ale mój dotychczasowe rozwiązania mnie nie satysfakcjonują: * zaimplementowanie każdego aspektu J, a następnie wyrzucenie „notImplementedExceptions” dezinformuje użytkownika o moich obiektach: wydawałoby się, że moje obiekty typu D są zgodne z interfejsem J, ale nie są - i inni konsumenci moich obiektów (które akceptują obiekty implementujące interfejs J) nie mogą polegać na integralności moich obiektów. * Implementacja nowo zdefiniowanego interfejsu uniemożliwia mi używanie obiektów, które implementują tylko interfejs J, chociaż interfejs J jest w pełni kompatybilny z moim własnym interfejsem. * Pozwolenie moim niestandardowym obiektom na implementację interfejsu J spowodowałoby znaczne obciążenie, ponieważ nie potrzebują one całej tej funkcjonalności. Kiedy udało mi się zmienić interfejs J, utworzyłbym „super-interfejs” K, który miałby ten podzbiór funkcjonalności interfejsu J, i sprawił, że interfejs J dziedziczył po interfejsie K. Ale nie mogę zmienić interfejsu J. Co to jest obiekt ukierunkowane rozwiązanie tego problemu? Czy najlepsze rozwiązanie nadal implementuje „tylko” interfejs J? A może istnieją sposoby OOP, aby „ulepszyć” interfejs bez zmieniania go?


title: Jak uczymy się produktów BPM?

text: Jakich tematów powinienem się nauczyć dla produktu BPM (Business Process Management)? Chodzi mi o to, czy muszę się nauczyć BPMN (ang. Business Process Modeling Notation), BPEL (Business Process Excecution Language)? Czy są jakieś lekkie produkty BPM typu open source firmy Apache lub kogoś innego?


title: Czy powinienem nadal wykonywać pracę na zlecenie dla klientów, którzy wciąż wymagają więcej bez płacenia?

text: Więc klient przychodzi do mnie i mówi, że potrzebuje trochę pracy. W zasadzie 4 zadania, które zgodziłem się wykonać za określoną cenę. Klient tworzy ofertę pracy (praca na czas i cenę) na ODesku, akceptuję, ale zajęło to kilka dni i ciągłe przypominanie klientowi o zainicjowaniu umowy na podstawie tej pracy. Problem w tym, że pierwotne zadanie zostało wykonane, umowa jest nadal aktywna, jeszcze nie otrzymałem zapłaty, klient mówi, że zapłaci po zakończeniu projektu, a do tego czasu ciągle pojawiają się nowe zadania, lub zmiany w starszych zadaniach które wymagają pełnego przerobienia elementów. Za to wszystko klient obiecuje zapłatę. Brak aktualizacji od tego klienta w ODesk, brak tam nowych zadań. Ciągle przypominam klientowi o załatwieniu spraw administracyjnych, ale bez rezultatu. Jednocześnie klient naciska na kontynuację prac, ponieważ projekt ma wkrótce ruszyć. Nie wiem co robić. * Jeśli odmówię wykonania jakiejkolwiek pracy bez biurokracji, projekt się spóźni. Ale to nie moja wina, prawda? Boję się, że w tym przypadku mogę otrzymać negatywną opinię lub coś jeszcze gorszego. * Jeśli zrezygnuję z tego projektu, obawiam się, że nie dostanę nawet tego, co zarobiłem. * Jeśli będę kontynuował w ten sposób, będę tracił dużo czasu robiąc rzeczy podobne do rzeczy opisanych tutaj, ale jako programista (tak, już doszedłem do podobnych żądań, dla wielu treści zakodowanych na sztywno). Jak komunikuję się z takimi klientami w takich sytuacjach? Jak uniknąć konfliktu? PS Klient to mała firma. Różni ludzie zajmują się różnymi aspektami tego projektu i każdy wprowadza własne zmiany do oryginalnej specyfikacji. **Po 2 latach** : Wow! Bardzo pytanie! Bardzo popularny! Postanowiłem wpuścić wszystkich na zakończenie tej historii. Skonfrontowałem się z klientem, wyjaśniłem, że nie będę pracował, dopóki nie dostanę zapłaty za to, co zrobiłem i dopóki nie zostanie otwarta umowa godzinowa. Zapłacili mi następnego dnia i otworzyli umowę. Rozpoczęła się owocna, ale krótka współpraca. Wszyscy byli zadowoleni. Tyle że nie otrzymałem żadnej informacji zwrotnej.


title: Dlaczego dla HTML nie wybrano ścisłego parsowania?

text: Jestem prawie nieświadomy szczegółowej historii obliczeniowej otaczającej Internet, ale zawsze skłaniało mnie to do myślenia, dlaczego podczas tworzenia HTML nie wybrano ścisłego parsowania. Przeglądarki akceptują wszelkie pisane przez Ciebie śmieci i starają się je przeanalizować. Proces, jeśli się nie mylę, utrudnia wydajność, pozwala ludziom pisać szalone znaczniki, a także pozwala na obsługę przestarzałych funkcji przeglądarek z powodów związanych ze starszymi wersjami. Czy istnieje konkretny powód, dla którego kod HTML nie jest ściśle analizowany?


title: Jaki jest najbardziej niezawodny magazyn sesji w PHP: Memcache, baza danych czy pliki?

text: Jaki jest najlepszy i najbezpieczniejszy sposób obsługi sesji PHP. Czy jest to najlepszy sposób na przechowywanie sesji w: 1. Bazie danych (bardziej niezawodna, ale o dużym wąskim gardle, niska prędkość, nieodpowiednia dla witryn o dużym wykorzystaniu bazy danych)? 2. Memcache (super szybki, ale rozproszony więcej problemów z bezpieczeństwem, szanse na utratę danych po ponownym uruchomieniu serwera i szanse na utratę danych, gdy pamięć podręczna jest pełna)? 3. Pliki (opcja domyślna, myślę, że powolna, ponieważ odczytuje i zapisuje z pliku I/O, mniejsze bezpieczeństwo itp.). Która metoda jest najlepsza? Jakie są problemy i dobre strony każdego z tych podejść?


title: Najlepszy sposób na wprowadzenie C++ do projektu Objective-C

text: W nadchodzącym projekcie XCode iOS planuję napisać moje widoki i kontrolery widoków w Objective-C. Mój model zostanie mi dostarczony w C++. Znam 2 sposoby używania C++ w projekcie Objective-C. Zostały one opisane poniżej. Jakie są zalety i wady każdej metody. Czy jest jakiś inny zalecany sposób i jakie są jego plusy i minusy? -W plikach nagłówkowych C++ użyj zewnętrznej deklaracji "C" opisanej w Wikipedii. -Zawijanie C++ z Objective-C++ zgodnie z opisem Roba Napier.


title: Dlaczego przeglądarki przeciekają pamięć?

text: Rozmawialiśmy z kolegą o przeglądarkach (używając obiektu kontrolnego przeglądarki w projekcie) i wydaje się, że wszystkie przeglądarki (Firefox, Chrome, IE, Opera) wyświetlają tę samą charakterystykę lub efekt uboczny ich użycia i to jest „przeciekająca pamięć”. Czy ktoś może wyjaśnić, dlaczego tak jest? Z pewnością, tak jak w przypadku każdej formy kodu, powinno istnieć odpowiednie odśmiecanie? PS. Czytałem o pewnych wzorcach obronnych, które wyjaśniają, dlaczego może się to zdarzyć z perspektywy programisty. Znam artykuł, który Crockford napisał w IE; ale dlaczego problem jest symptomatyczny dla każdej przeglądarki? Dziękuję


title: Jak zlecić projekt zwierzaka?

text: Mam dość ambitny projekt programistyczny, na który nie mam czasu. Ten projekt jest dla mojego życia osobistego i jeśli zostanie zrealizowany, zaoszczędzi mi dużo czasu i pieniędzy. Z zawodu jestem programistą, ale nie mam zbyt wiele czasu na pracę nad tym projektem. Zastanawiam się więc nad outsourcingiem lub zleceniem części prac na zewnątrz, abym mógł je wykonać szybciej. To jeden z tych projektów, w których im więcej czasu zabiera mi jego ukończenie, tym więcej mnie to kosztuje. Niczego nie zleciłem na zewnątrz i chciałbym spróbować, od czego zacząć? Jakie zagrożenia mogę napotkać?


title: jaki certyfikat jest potrzebny do mojej aplikacji?

text: Wypuszczam darmowe oprogramowanie C#, które stworzyłem w Visual Studio. W przyszłości niektóre z tych programów mogą stać się płatne. Zastanawiałem się, czy muszę kupić na nie jakąkolwiek licencję? Rozumiem, że dobrze jest mieć certyfikat dla swojej witryny (SSL?), jeśli próbujesz sprzedać swoje oprogramowanie, ale co z aplikacjami? Po prostu nie chcę, aby programy antywirusowe/przeglądarki oznaczały moją aplikację jako niezaufaną. Wszelkie sugestie są mile widziane.


title: Jak powszechne są poprawki „bandaży”?

text: Wyobraź sobie następujący scenariusz: Wykryłeś, że twój (lub ktoś inny) program ma błąd — funkcja daje zły wynik, gdy podaje określone dane wejściowe. Sprawdzasz kod i nie możesz znaleźć niczego złego: wydaje się, że po prostu zawodzi, gdy otrzymujesz te dane wejściowe. Możesz teraz zrobić jedną z dwóch rzeczy: albo zbadać kod dalej, aż znajdziesz faktyczną przyczynę; lub klepiesz bandażem, dodając instrukcję `if` sprawdzającą, czy dane wejściowe są tym konkretnym wejściem - jeśli tak, zwróć oczekiwaną wartość. Dla mnie nałożenie bandaża byłoby całkowicie niedopuszczalne. Jeśli kod zachowuje się nieoczekiwanie na tym wejściu, na jakie _inne_ wejście, które przegapiłeś, zareaguje dziwnie? To po prostu nie wydaje się być rozwiązaniem – po prostu chowasz problem pod dywan. Ponieważ nawet nie brałbym pod uwagę tego, jestem zaskoczony, jak często profesorowie i książki przypominają nam, że nakładanie poprawek „bandażowych” nie jest dobrym pomysłem. Zastanawiam się więc: jak powszechne są tego rodzaju „poprawki”?


title: Sporadycznie przekroczono limit czasu wykonania kodu

text: Pracuję nad stroną e-commerce. Zdarza się, że muszę pobrać całe dane z bazy danych przez zewnętrzne API i wysłać je do silnika indeksującego. Ten zewnętrzny interfejs API ma wiele funkcji, takich jak getproducts, getproductprice itp., a każda z tych funkcji zwróci dane w formacie XML. Stamtąd przejmę kontrolę, będę korzystać z różnych wywołań API i obsłużę dane XML za pomocą XSLT. I napisze do pliku CSV. Ten plik zostanie przesłany do wyszukiwarki indeksującej. W tej chwili mam szczegóły 8000 produktów do zasilania silnika i prawie cały czas ten proces trwa około 15 minut, a czasami kończy się niepowodzeniem. Nie mogę znaleźć lepszego rozwiązania tego problemu. Zastanawiam się nad obsługą danych XML w samym C# i pozbyć XSLT. Jak sądzę, XSLT jest znacznie wolniejszy niż C#. Czy to dobry pomysł? Lub co jeszcze mogę zrobić, aby rozwiązać ten problem?


title: Co powinieneś zrobić, gdy zostaniesz zaprezentowany z okropnym projektem?

text: Nasza firma zajmuje się tworzeniem stron internetowych. Zajmujemy się również projektowaniem stron internetowych. Ale czasami nasz klient przywozi własny projekt. Jest to często wykonywane przez wewnętrznego projektanta lub jest to ten sam projekt, którego używali do czegoś innego. Czasami jednak te projekty wyglądają okropnie. I mówię naprawdę nieprofesjonalne, niezrównoważone, niefajne. Ale klient naprawdę chce tego projektu. Naprawdę nie lubię pracować z tak okropnym projektem. Zabiera całą przyjemność z kodowania. Ty kodujesz. Sprawdzasz demo. Działa świetnie. Wygląda okropnie. To po prostu nie jest zabawne. I ostatecznie klient może być zadowolony, ale 1) nie czuję się dumny z produktu końcowego i 2) społeczność widzi, że „tworzysz” brzydkie strony internetowe, co jest szkodliwe dla twojego wizerunku. Czy ktoś doświadcza tego rodzaju rzeczy? Co polecasz? Myślałem: * Blokowanie tych klientów. Jeśli ktoś ma „własny” projekt, poproś go najpierw o obejrzenie. Potem jakoś grzecznie odmawiam. Wada: tracisz klienta. * Utwórz nowy projekt. Niech nasi wewnętrzni projektanci opracują coś naprawdę fajnego. Wady: klient musiałby za to zapłacić (bez proszenia o to), albo zostanie odrzucony, a firma straci czas = pieniądze. I może to być obrazą, jeśli zaproponujesz nowy projekt znikąd. ICH projektantowi na pewno się to nie spodoba. * Umieść wyraźne zastrzeżenie na dole strony: Projekt strony internetowej przez XXXXX, Rozwój strony internetowej przez USA. Pomaga w oddziaływaniu na społeczność (jeśli ludzie zwracają uwagę), ale nie na nieprzyjemne uczucie.


title: Jakimi technikami używasz w kontaktach z trudnym kierownikiem projektu?

text: Obecnie pracuję nad jedną częścią dużego projektu dotyczącego danych technicznych. Kierownik projektu odpowiedzialny za ten projekt jest kimś, kogo można by nazwać „Staromodnym Kierownikiem Projektu”, ponieważ nie ma absolutnie żadnej wiedzy na temat domeny aplikacji ani niczego w ogóle technicznego – jak sam mówi: „To, co robi, to dostarcza”. Oprócz projektowania specyfikacji technicznych i tworzenia kodu zgodnie z tymi specyfikacjami, moja rola jest również zorientowana na klienta, więc muszę wchodzić w interakcje z ludźmi, którzy będą konsumować dane, aby pomóc w ich ukształtowaniu, gdy wszystko będzie w końcu rozmieszczony; większość zadań, o które proszono tych klientów, wykracza daleko poza zakres ich pracy i myślę, że należy to szanować i zdawać sobie sprawę, że każda pomoc, której nam udzielają, opiera się na dobrej woli. Premier jest absolutnym maniakiem kontroli, który szoruje wszystkich, z którymi ma do czynienia, całkowicie w niewłaściwy sposób. Wszystkie e-maile muszą przechodzić przez niego (może przekaże je dalej, może da znać, czy była odpowiedź), a wszystkie e-maile muszą być napisane w języku, który rozumie (nie wie, co to jest baza danych lub różnica między schematem a danymi, tak...). Prawie nigdy nie czyta niczego, co wysłał, a to, co czyta, odsyła z prośbą o „wyższy poziom” i nigdy nie wie, o co prosi, po prostu zaczyna gadać o „to musi być proste, prawda, to jest jak to jest, nie? - nie, żeby się do tego przyznał, on tylko mówi, że potrzebuje mnie, aby to, co powiedziałem, było "wyższe". Przez cały dzień walczę o to, co on właściwie robi, z wyjątkiem oczywiście dostarczania i pełnienia funkcji poczmistrza. Jak pracujesz z menedżerem, który ma taką osobowość?


title: Czy powinienem podpisać umowę NDA i IP bez daty wygaśnięcia?

text: Pracuję w małej firmie programistycznej. Właśnie otrzymałem do podpisania umowę NDA i IP, ale nie ma ona daty wygaśnięcia. 1. Czy to oznacza, że jest to dożywotnia umowa z korporacją? 2. Brak wyraźnej daty wygaśnięcia, czy istnieje dorozumiana data wygaśnięcia umowy? 3. Jeśli/kiedy odchodzę z firmy, czy umowa nadal obowiązuje? Jeśli tak, jak długo?


title: Jakie jest najlepsze IDE dla Scali?

text: Próbowałem programować Scala w Netbeans i Eclipse, ale to nie jest to, czego szukam. W Netbeans sugestie dotyczące nazw metod itp. nie działają. W Eclipse nie mogę przejść do niektórych źródeł klas, naciskając F3. (np. lista skala). Czy wsparcie w IntelliJ IDEA jest lepsze? Czy istnieją inne IDE wspierające Scala?


title: Jakie byłoby kilka pomysłów/koncepcji z programowania, które mógłbym mieć na papierze i powiesić na ścianie jako sztukę?

text: Mam tu na myśli dowolny kawałek kodu, pomysł/algorytm przedstawiony w pseudokodzie, coś, co jest bardzo ważne i jest teraz niemal sztuką. Zamierzam umieścić kilka obrazów i popracować na papierze wokół mojego biura, które przedstawiają inżynierię, a raczej celebrują inżynierię. Chcę, żeby nie były tak banalne jak e=mc2 czy coś zbyt geekowego, jak 42. Są wyjątkowi, są ważni i osiągnęli pozycję prawie świętych dzięki ich wkładowi w swoją dziedzinę. Więc chcę również reprezentacji programowania komputerowego. Dziękuję za Twój czas. EDYCJA: Po zapoznaniu się z kilkoma wstępnymi odpowiedziami chciałbym wspomnieć, że nie szukam rzeczy, które pasują do koszulki lub kubka, ale ogromnej ramy na ścianie. Więc wszystko, co zabawne/złośliwe/sprytne, nie tylko nie jest odpowiednie, ale chcę, żeby było inspirujące/świętujące. Nie mówię, że nie lubię zabawnych, ale tym razem chcę skupić się na rzeczach poważnych.


title: Wymagane porady dotyczące nazewnictwa metod

text: Moje pytanie będzie dotyczyło, jak myślisz, że wypadałoby wymienić niektóre metody w płynnym interfejsie. Spróbuję zademonstrować problem. Rozważmy to drzewo relacji: ![associations](http://i.stack.imgur.com/SgfFs.png) Osoba może mieć psy i koty, a pies może mieć kości. Dość proste. To, co staram się zrobić, to stworzyć specyficzny dla domeny, płynny interfejs do określania, której z tych relacji potrzebuje użytkownik. Jest w stanie poradzić sobie z każdą głębią relacji. **Zaprojektowałem operację mniej więcej tak** (Jest to budowanie drzewa asocjacyjnego, z którego mogę określić, czego chce użytkownik): ![budowanie drzewa asocjacyjnego](http://i.stack.imgur.com/ R1UCs.png) Jako kod (może być bardziej czytelny): personAssoc = person.associate().withCats().and().withDogs().withBones().up().done(); Ale staram się, aby ta część była jak najbardziej intuicyjna, więc nie chcę, aby **nazwy metod** **nabierały po sobie sensu** i **były jak najbardziej zbliżone do języka mówionego** . Moje największe obawy dotyczą następujących 3 nazw metod: 1. **`and()`** w wybranym przeze mnie języku `and` jest zastrzeżonym słowem kluczowym, więc nie mogę go używać. Szukałem synonimów (`razem()`, `w tym()`, `also()`), ale nie brzmią/wyglądają właściwie (`i` oznacza, że dodamy więcej dzieci do powiązania rodzica). 2. **`up()`** oczywiście przerywa jakikolwiek przepływ. Z tą nazwą metody, całość oddaliła się znacznie dalej od języka mówionego, niż chciałem ("w górę" oznacza, że nie musimy dodawać więcej relacji do rodzica, ale skończyliśmy z obecnym W kodzie jest to to samo co `i`). 3. **`done()`** jest wywoływana tylko raz, na końcu wywołania metody, ale nadal nie pasuje do obrazu (`done` oznacza, że dosłownie skończyliśmy, nie dodamy więcej wspomnienia). **To, czego szukam**, to inne, lepsze nazwy dla powyższych 3, które: 1. Zbliżają korzystanie z płynnego interfejsu do języka mówionego. 2. Dla `i` nazwa, która jest jak najdalej od słów kluczowych języka. Jeśli przeczytasz to wszystko, nie wahaj się wpaść na jakieś pomysły, może mi to bardzo pomóc! **Dziękujemy za wszelkie sugestie.**


title: Implementacja strumienia schematu

text: Po przejściu przez SICP postanowiłem przepracować niektóre problemy Projektu Euler za pomocą schematu. W tym konkretnym problemie próbuję wygenerować nieskończony strumień liczb całkowitych, jednak otrzymuję błąd z interpretera MIT Scheme. ;Aborting!: maksymalna głębokość rekurencji przekroczona To prowadzi mnie do wniosku, że moja implementacja strumienia jest niepoprawna, jednak po porównaniu mojego kodu z tym w książce nie mogę znaleźć żadnych błędów. (zdefiniuj (opóźnienie x) (lambda () (x))) (zdefiniuj (siła x) (x)) (zdefiniuj (strumień przeciw a b) (przeciw a (opóźnienie b))) (zdefiniuj (strumień samochodu) (samochody)) (define (cdr-stream s) (siła (cdr s))) (define (liczby całkowite-od-n) (cons-stream n (liczby-całkowite-od-(+ n 1))))) Błąd pojawia się, gdy uruchamiam następujący kod: (zdefiniuj n (liczby całkowite zaczynające się od 1)) Gdzie popełniłem błąd? **EDYTUJ:** Dzięki Chrisowi Jester-Youngowi poniżej mam to już działa. Poprawna implementacja opóźnienia i strumienia jest następująca. (zdefiniuj opóźnienie składni (reguły-składni ()) ((wyraż opóźnienia) (lambda () (wyraż)))) (zdefiniuj strumień składni (reguły-składni ()) ((strumień a b) (przeciw a (opóźnienie b)) )))


title: JUnitEE vs JUnit

text: Wiem, czym jest ogólnie testowanie jednostkowe, a czym jest _JUnit_ w szczególności. Ale tutaj widzę, że istnieje projekt o nazwie _JUnitEE_, który wydaje mi się opakowaniem JUnit. Chciałbym więc lepiej zrozumieć problem związany z używaniem wanilii _JUnit_ i jak _JUnitEE_ jest w stanie rozwiązać te problemy.


title: Kogo można nazwać dobrym graczem zespołowym?

text: Wiele razy można spotkać coś takiego jak „pracownik zespołowy” lub „entuzjasta pracy w zespole” lub tego typu rzeczy w ogłoszeniach o pracę, które stwierdzają, że chcą, abyś był lub został dobrym członkiem zespołu programistów. Kogo można uznać za dobrego członka zespołu? Jakie cechy programisty można uznać za dobre punkty w pracy w zespole? Jak programista może poprawić swoje umiejętności pracy zespołowej (lub atrybuty, jeśli wolisz)?


title: Styl kodu Pythona - puste linie na długiej liście

text: Jestem ciekaw, czy istnieje standardowe podejście do radzenia sobie z długimi listami w społeczności Pythona, a w szczególności, czy jest jakaś niechęć do robienia pustych linii, po których następują komentarze, aby rozbić szczególnie długą listę, np. krotek, czy w dykcie itp.? Na przykład tworzę aplikację GUI w wxPython i definiuję mapowania skrótów klawiaturowych do . Czy to jest dość Pythonowe? accelerator_table = wx.AcceleratorTable([ # Akceleratory Case (CTRL, ord('S'), EventIds.SAVE_CASE), (CTRL_SHIFT, ord('S'), EventIds.RENAME_CASE), (CTRL, wx.WXK_DELETE, EventIds.REMOVE_CASE ), (CTRL_SHIFT, wx.WXK_DELETE, EventIds.DELETE_CASE), # Akceleratory projektów (CTRL_ALT_SHIFT, ord('S'), EventIds.RENAME_PROJECT), (ALT, wx.WXK_DELETE, EventIds.REMOVE_PROJECT, w_ALTx.WX , EventIds.DELETE_PROJECT), # Akceleratory pomocy (NORMAL, wx.WXK_F1, EventIds.HELP), (NORMAL, wx.WXK_F2, EventIds.LAUNCH_MANUAL), (NORMAL, wx.WXK_F12, EventIds.ABOUT), ... ]) Szczegóły nie są szczególnie ważne, ale chciałbym pisać w stylu, który nie będzie po drodze denerwował innych programistów, dlatego już teraz zadecyduję, czy warto zachować ten wzorzec. **Edytuj:** tylko dla wyjaśnienia: nie zamierzam umieszczać niczego poza tą pojedynczą pustą linią między sekcjami na liście. Wygląda na to, że powinno to zminimalizować zamieszanie ze strony osoby czytającej kod.


title: Formalne badanie dotyczące trendów i rozpowszechnienia metodologii zwinnej vs tradycyjnej w branży

text: Czy przeprowadzono formalne badanie dotyczące rozpowszechnienia metodologii zwinnej w porównaniu z tradycyjną (np. kaskadową) metodologią tworzenia oprogramowania w branży IT? A jak szybko rośnie udział zwinny (zakładając, że tak)?


title: Rozważanie zalet i wad korzystania z jQuery tylko dla jednego widgetu

text: Używam pól wyboru html lub pól tekstowych do wprowadzania daty. Po przesłaniu data jest weryfikowana, a jeśli jest nieprawidłowa, zwracany jest błąd. Do tej pory unikałem kalendarzy javascript, ale datepicker jQuery wydaje się być popularnym wyborem wśród ludzi na SO. Aktualizowałem swoją aplikację i zastanawiałem się, czy użyć kalendarza JavaScript (w szczególności datepicker jQuery). Byłaby to dobra "funkcja" dla obecnych użytkowników i będzie pasować do ulepszonego wyglądu aplikacji "2011". Nie używam jQuery ani anyother biblioteki JS. Używane skrypty to „zwykły” javascript. Z jQuery będę musiał dołączyć bibliotekę jQuery do uniwersalnej listy plików .js lub link do kopii Google. Tak czy inaczej wydłuży to czas ładowania strony. Rozumiem, że z lub bez niego walidacja (i obsługa błędów) pozostaje, a widżet datepicker służy wyłącznie do celów wizualnych. Ale interfejs użytkownika jest ważnym czynnikiem. Widzę pozytyw, że być może w przyszłości będę używał więcej jquery i nie będę musiał wtedy myśleć o czasie ładowania strony i problemach z przepustowością. Więc moje pytanie brzmi, czy dźwiganie jQuery to właściwa decyzja, kiedy widzę tylko jedno użycie w najbliższej przyszłości? A może powinienem użyć „zwykłego” widżetu kalendarza JS, czy po prostu trzymać się pól wyboru lub tekstowych. Chciałem to opublikować na SO, ale ponieważ temat dotyczy bardziej praktyk programistycznych i podejmowania decyzji, zamieszczam tutaj pytanie.


title: unique_ptr i referencje - pytanie o styl kodowania

text: Jestem prawie pewien, że jest to pytanie czysto estetyczne, ale chciałem poznać wszystkie wasze opinie na ten temat, zanim zacznę rozpowszechniać ten rodzaj kodu w mojej bazie. Rozważmy następujący kod: //Foo.h class Bar; class Foo { public: Bar& GetBar(){return *bar.get();} private: std::unique_ptr<Bar> bar; }; //Bar.h class Bar { public: DoSomething(){//coś zrobił...} }; To pozwala nam przekazać dalej Bar w Foo.h i uniknąć konieczności #include Bar.h. Prowadzi to do używania Foo's Bar w następujący sposób: Foo foo; foo.PobierzBar().ZróbCoś(); Osobiście uważam, że wyglądałoby to o wiele ładniej: Foo foo; foo.bar.ZrobićCoś(); Aby to osiągnąć napisałem: //Foo.h class Bar; class Foo { public: Foo(); Bar& bar; prywatne: std::unique_ptr<Bar> bar_ptr; }; //Foo.cpp #include "Bar.h" Foo::Foo() : bar_ptr(new Bar()), bar(*bar_ptr) {} To pozwala mi przekazać dalej Bar i użyć 'bar.' składnia. Brzydki? Niebrzydka? Minusem jest to, że mam 2 zmienne członkowskie tylko dla 1 obiektu.


title: Jaka praktyka jest najlepsza w przypadku połączenia z bazą danych? (PHP itp.)

text: Pozostawić otwarte połączenie z bazą danych przez cały czas działania aplikacji, czy za każdym razem, gdy wykonywana będzie operacja, będzie tworzone nowe połączenie? Otwórz przez całe wykonanie: Otwórz aplikację -> Otwórz połączenie; Operacje -> użyj otwartego połączenia -> zatwierdź; Zamknij aplikację -> zamknij połączenie; Za każdym razem zostanie wykonana operacja: Otwórz aplikację -> ...; Operacje -> utwórz połączenie, wykonaj operację, zatwierdź, zamknij połączenie; Zamknij aplikację -> ...;


title: każda dobra książka o bankowości inwestycyjnej dla informatyków

text: Pracuję jako programista Java dla klienta Bankowości Korporacyjnej. Teraz chcę zająć się domeną bankowości inwestycyjnej. Jakich zasobów (książek, witryn itp.) mogę używać, aby zrozumieć bankowość inwestycyjną, aby jako informatyk mógł efektywnie tworzyć aplikacje dla tej domeny?


title: Jak zrobić archiwum plików tekstowych o swobodnym dostępie?

text: Napisałem aplikację, która testuje działanie algorytmów ewolucyjnych. Ta aplikacja wykonuje **uruchom** algorytm składający się z **kilku generacji**. Dane generowane przez moją aplikację wyglądają tak: run1.run // plik tekstowy zawierający metadane run1_data // folder zawierający dane eksperymentalne -statistics1 // plik tekstowy zawierający pewne specyficzne statystyki -statistics2 -generation0 -generation10 // snapshot algorytmu at generation10 -generation20 ... Po zapisaniu tych danych **nigdy się nie zmieniają**. Gdy chcę **sprawdzić** dane, moja aplikacja odczytuje plik **metadata** (.run), otwiera katalog **_data** i odczytuje resztę danych. Do niedawna wszystko było w porządku. Mam teraz **setki tysięcy** tych plików i zabrakło mi i-węzłów w moim systemie, a ładowanie danych i kopiowanie jest bardzo powolne, mimo że jest tylko kilka gigabajtów. Moje dane wydają się zbyt pofragmentowane, ponieważ pliki są dość małe. Moja aplikacja jest napisana w języku **C++** i używa biblioteki **Qt** do operacji na systemie plików. Myślałem o użyciu nagłówka `<system>` do wydania polecenia `tar` w celu zarchiwizowania danych po zapisaniu i rozpakowaniu przed odczytaniem, ale dowiedziałem się, że `tar` musi przeczytać całe archiwum, aby znaleźć zawartość. Jest to dla mnie problem, ponieważ dla zaoszczędzenia pamięci operacyjnej i czasu ładuję czasem tylko `Statystyki1`, czasem tylko `generacja10`... Zastanawiałem się nad zmianą formatu moich danych tak, aby był **tylko jeden plik ** , który na początku miałby coś w rodzaju **spisu treści**, po którym następuje **wszystkie połączone pliki danych**. Spis treści wskazywałby **początek i koniec** każdego połączonego pliku. Nie jestem jednak pewien, czy jest to dobre rozwiązanie, ponieważ klasa `std::ifstream`, której używam do odczytu plików **nie może wykonywać losowych skoków**. Jestem początkującym programistą i nie chcę tracić czasu na tworzenie czegoś, co by nie zadziałało, więc proszę o wszelkie porady, jak rozwiązać mój problem.


title: Odpowiadam na prośby o funkcje aplikacji, których nie zamierzam wdrażać

text: Jestem nowym programistą aplikacji i po około 20 pobraniach mojej aplikacji (bezpłatnej i bez reklam) otrzymałem już dwie prośby o nowe funkcje i nie zamierzam ich wdrażać. Czy powinienem odpowiedzieć na te prośby o dodanie funkcji, a jeśli tak, to w jaki sposób? Wolałbym w ogóle nie odpowiadać, ponieważ wolę poświęcić czas na pracę nad moją aplikacją, ale będąc nowym programistą, kilka słabych ocen w sklepie z aplikacjami może zaszkodzić mojej aplikacji.


title: Wspieranie wielodostępności

text: Jakie są typowe wyzwania, które pojawiają się podczas konwertowania aplikacji dla jednej dzierżawy w aplikację dla wielu dzierżawców? Najistotniejsze wydaje mi się bezpieczeństwo i izolacja danych. Jakie są inne? Jestem jednym z architektów zajmujących się dość znaczącym wysiłkiem w zakresie automatyzacji, a historycznie to tylko nasza firma z niego korzystała. Chcemy umożliwić korzystanie z niego także innym. Za każdym razem, gdy mówimy o „uczynieniu go wielodostępnym”, rozmowa toczy się wokół trzymania użytkowników z jedną dzierżawą z dala od danych, które posiada inna dzierżawa, i upewnienia się, że użytkownicy z jedną dzierżawą nie mogą (celowo lub nieumyślnie) wywierać wpływu na inną środowiska najemcy. Zastanawiam się, czy bezpieczeństwo / izolacja danych są naprawdę jedynymi poważnymi problemami tutaj, czy też istnieją inne poważne problemy, o których po prostu nie myślimy.


title: Jak wykryć kodowanie pliku?

text: W moim systemie plików (Windows 7) mam kilka plików tekstowych (są to pliki skryptów SQL, jeśli to ma znaczenie). Po otwarciu za pomocą Notepad++, w menu "Kodowanie" niektóre z nich mają kodowanie "UCS-2 Little Endian", a niektóre "UTF-8 bez BOM". Jaka jest tutaj różnica? Wszystkie wydają się być całkowicie poprawnymi skryptami. Jak mogę stwierdzić, jakie kodowanie ma plik bez Notepad ++?


title: Jak wyszukiwać w sieci rozwiązania związane z programowaniem?

text: Mam wrażenie, że Google stało się bezużyteczne przy wyszukiwaniu pytań związanych z programowaniem. Przykład: Googling dla XML-RPC Redstone Cookie Oczekuję wyników, w których zawarte są wszystkie trzy terminy. Nie obchodzą mnie wyniki, w których brakuje jednego terminu. Chyba jeszcze kilka miesięcy temu Google po prostu tak działało, tzn. wszystkie terminy były uwzględnione. W jakiś sposób ta funkcja zniknęła (Google najwyraźniej uważa, że jest bardziej inteligentny niż użytkownik i wie, czego szuka). Pomogłem więc sobie, umieszczając + przed każdym słowem. Jest to jednak trochę kłopotliwe. A przez ostatnie tygodnie nawet nie działa już we wszystkich przypadkach, Google ignoruje +. Jak więc szukać problemów związanych z programowaniem? Czy nadal korzystasz z Google? Jeśli tak, jakich technik używasz, aby uzyskać właściwe wyniki? A może używasz innej wyszukiwarki? Który?


title: Ogromny symulator sieci pojazdów

text: Interesuje mnie wykonanie symulatora sieci pojazdów (sieć pojazdów jak w pojazdach może być wyposażona w radioodbiorniki i gdy znajdą się w zasięgu mogą ze sobą rozmawiać). Chcę mieć możliwość skalowania do tysięcy węzłów, jeśli nie więcej. Szczerze mówiąc, jestem rozdarty, jak to zrobić, a nawet jakiego języka użyć lub czy powinienem zamiast tego używać innego oprogramowania/kodu. Wiem, że powinno to zależeć od wielu decyzji projektowych, które mogę podjąć, ale byłoby wspaniale, gdyby ktoś wskazał mi właściwy kierunek. Planowałem użyć architektury wielowątkowej, ale nie jestem pewien, czy to utrudni, czy ułatwi. Również jeśli wybieram architekturę wielowątkową, czy myślisz, że język Go będzie dobrym wyborem? Mam kilkuletnie doświadczenie w Javie, ale nie robiłem żadnego dużego projektu i zasadniczo nie mam doświadczenia w Go.


title: Ruby przy użyciu frameworka Gosu: dlaczego za pierwszym razem działa wolno?

text: Tworzę grę Ruby przy użyciu frameworka Gosu. Wszystko dobrze. Czasami, gdy uruchamiam grę, uruchamia się ona powoli i prawdopodobnie będzie to dość powolne przez całą grę. Więc zamykam i... otwieram ponownie. Jest bardzo prawdopodobne, że uruchomi się szybko, a cała gra będzie działać płynnie i szybko. Dlaczego? Czym jest to zjawisko? Czy jest szybszy z powodu jakiejś pamięci podręcznej przechowywanej od pierwszego uruchomienia? (Ale dlaczego pamięć podręczna miałaby być przechowywana? Jeśli aplikacja umrze, nie spodziewałbym się żadnych odniesień itp.) Ruby, Windows 7.


title: Jaka jest droga do wyodrębnienia danych ze stron internetowych?

text: Myślałem o projekcie pobocznym, który obejmuje scraping danych internetowych. Ok, czytam pytanie Pobieranie danych ze strony internetowej w sposób stabilny i skuteczny, a dyskusja dała mi pewne informacje. W dyskusji Joachim Sauer stwierdził, że można skontaktować się z właścicielami witryn i architektem w jakiś sposób, aby podać potrzebne mi dane. Problem, który widzę, polega na tym, że strony internetowe są generalnie źle tworzone i najwyraźniej rzadko zawierają zmiany w HTML (nie sądzę, że mi to pomogą), ale dane są istotne. Dużo cierpiałem podczas korzystania z tych stron, więc chciałbym je zagregować i pokazać w lepszy sposób. Więc chodzenie ze skrobaniem, a konkretnie ze Scrapy (dla Pythona), jest problematycznym podejściem? Przeczytałem, że parse.ly używa scrapingu (Python i Scrapy), ale w innym kontekście. Biorąc pod uwagę mój kontekst, istnieje lepsze podejście niż skrobanie? Jeśli idziesz do scrapingu, jak radzić sobie ze zmianami struktury strony?


title: Czy kod CC0 może korzystać z biblioteki GPL?

text: Załóżmy, że mój kod używa (po prostu łączy do) biblioteki na licencji GPL. Czy mogę zwolnić _mój kod_ w ramach CC0 (dedykacja do domeny publicznej)? Czy na mój kod wpływ ma copyleft GPL?


title: użycie tagu skryptu w innej pozycji strony

text: Zauważyłem, że czasami skrypt nie działa poprawnie po dodaniu tagu skryptu w sekcji head. Ale kiedy dodaję skrypt tuż przed końcowym tagiem body, działa to dobrze. Jaka jest różnica między dodaniem skryptu w tagu head **OR** tuż przed zakończeniem tagu body **OR** tuż po kontrolce? Bardzo często spotykałem się z tym problemem, gdy używam JQuery..


title: REST: Jak przechowywać i ponownie wykorzystywać zapytania wywołań REST

text: Uczę się C# programując prawdziwą potworność aplikacji na własny użytek. Część mojej aplikacji używa kilku zapytań SPARQL, takich jak: const string ArtistByRdfsLabel = @" PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http: //www.w3.org/2000/01/rdf-schema#> SELECT DISTINCT ?artist WHERE {{ {{ ?artist rdf:type <http://dbpedia.org/ontology/MusicalArtist> . ?artist rdfs:label ?rdfsLabel }} UNION {{ ?artist rdf:type <http://dbpedia.org/ontology/Band> ?artist rdfs:label ?rdfsLabel }} FILTER ( str(?rdfsLabel) = '{0}' ) }}"; String Query = String.Format(ArtistByRdfsLabel, Artist); Nie podoba mi się pomysł utrzymywania wszystkich tych zapytań w tej samej klasie, w której ich używam, więc pomyślałem, że po prostu przeniosę je do ich własnej dedykowanej klasy, aby usunąć bałagan w mojej klasie RestClient. Jestem przyzwyczajony do pracy z SQL Server i po prostu zawijania każdego zapytania w procedurę składowaną, ale ponieważ to nie jest SQL Server, drapię się po głowie, co byłoby najlepsze dla tych zapytań SPARQL. Czy istnieją lepsze podejścia do przechowywania tych zapytań przy użyciu specjalnych funkcji języka C# (lub ogólnych, niespecyficznych dla języka C# podejść), o których być może jeszcze nie wiem? **EDYTUJ:** Naprawdę, te zapytania SPARQL nie są niczym specjalnym. Po prostu bloby tekstu, które później chcę pobrać, wstaw kilka parametrów do za pośrednictwem String.Format i wyślij wywołanie REST. Przypuszczam, że można o nich myśleć tak samo, jak o każdym zapytaniu SQL, które jest przechowywane w warstwie aplikacji, po prostu nigdy nie ćwiczyłem utrzymywania zapytań SQL w warstwie aplikacji, więc zastanawiam się, czy są jakieś „standardowe” praktyki z tego typu rzeczami .


title: Metody efektywnego przechowywania wiedzy i szybkiego wyszukiwania materiałów do nauki

text: Kiedy czytam książkę lub artykuł o czymś nowym, mam dwie główne obawy: 1. Zachowanie nowej wiedzy, którą właśnie nabyłem 2. Możliwość późniejszego efektywnego dostępu do nowej wiedzy Jakich metod używacie, aby opisywać to, czego się uczycie ? Niedawno czytałem _Pragmatyczne myślenie i uczenie się_ i jedną z rzeczy, które próbuję, jest robienie notatek z książek w formacie mapy myśli. Inną metodą, którą wypróbowuję, jest oznaczanie ważnych fragmentów książek etykietami, takimi jak: definicja, funkcja, zapamiętaj, użycie, zastrzeżenie... Jest za wcześnie, aby powiedzieć, jak to zadziała, ale chciałbym wiedzieć, co działa dla Ciebie i jak z niego korzystasz. Są inne pytania dotyczące narzędzi, których ludzie używają, ale myślę, że proces jest ważniejszy niż narzędzie, więc o tym chciałbym się dowiedzieć.


title: W jaki sposób pomaga zgłoszenie ArgumentNullException?

text: Powiedzmy, że mam metodę: public void DoSomething(ISomeInterface someObject) { if(someObject == null) throw new ArgumentNullException("someObject"); jakiśObiekt.DoToOrTo(); } Zostałem nauczony, aby wierzyć, że zgłoszenie `ArgumentNullException` jest „poprawne”, ale błąd „Odwołanie do obiektu nie jest ustawione na instancję obiektu” oznacza, że mam błąd. Czemu? Wiem, że jeśli buforowałem odwołanie do `someObject` i używałem go później, to lepiej sprawdzić, czy po przekazaniu nie ma wartości null, i wcześnie się nie udać. Jeśli jednak wyłuskam to w następnym wierszu, dlaczego mamy to sprawdzić? Zgłosi wyjątek w taki czy inny sposób. **Edytuj** : Właśnie przyszło mi do głowy... czy strach przed wyłuskanym wartością null pochodzi z języka takiego jak C++, który nie sprawdza dla ciebie (tj. po prostu próbuje wykonać jakąś metodę w lokalizacji pamięci zero + przesunięcie metody )?


title: Nowoczesny język programowania z intuicyjnymi abstrakcjami programowania współbieżnego

text: Interesuje mnie nauka programowania współbieżnego, skupiając się na poziomie aplikacji/użytkownika (nie programowania systemowego). Poszukuję nowoczesnego języka programowania wysokiego poziomu, który zapewnia intuicyjne abstrakcje do pisania współbieżnych aplikacji. Chcę skupić się na językach, które zwiększają produktywność i ukrywają złożoność programowania współbieżnego. Aby podać kilka przykładów, nie uważam za dobrą opcję pisania kodu wielowątkowego w C, C++ lub Javie, ponieważ IMHO moja produktywność jest zmniejszona, a ich model programowania nie jest intuicyjny. Z drugiej strony dobrymi opcjami byłyby języki, które zwiększają produktywność i oferują bardziej intuicyjne abstrakcje, takie jak Python i moduł wieloprocesowy, Erlang, Clojure, Scala itp. Co poleciłbyś na podstawie swojego doświadczenia i dlaczego? EDYCJA: Dziękuję wszystkim za interesujące odpowiedzi. Trudno wyciągnąć wnioski bez faktycznego spróbowania, ponieważ jest wielu dobrych kandydatów: Erlang, Clojure, Scala, Groovy i być może Haskell. Głosowałem na odpowiedź z najbardziej przekonującymi argumentami, ale wypróbuję wszystkich dobrych kandydatów, zanim zdecyduję, którego wybrać :)


title: Programowanie wizualne dla poważnego oprogramowania

text: Czy wizualne diagramy przepływu sterowania programem i języki obsługujące te używane w większych poważnych programach? Dlaczego nie? Wyglądają na ładny przegląd kodu. W wątku Jakie języki programowania oprogramowania były używane przez program kosmiczny Związku Radzieckiego? mowa jest o języku wizualnym (Drakon) i zastanawiałem się, dlaczego takie podejścia nie są stosowane częściej? Czy nic nie jest w stanie pomóc w wizualnej reprezentacji przepływu kontroli (nie mam na myśli diagramów klas itp.), które są 1-do-1 z kodem w porównaniu do wpisywania liter w edytorze?


title: Eksperymenty korelujące metryki kodu z gęstością błędów

text: Zastanawiam się, czy ktoś wykonał jakieś eksperymenty korelujące metryki kodu (SLOC, Cyclomatic Complexity itp.) Z gęstością błędów w aplikacjach zorientowanych obiektowo. Nie szukam eksperymentów, które tylko dowodzą lub obalają korelację, ale na obu. Nie próbuję znaleźć srebrnej kuli, ponieważ uważam, że gęstość błędów projektu _może_ korelować z jedną lub więcej metrykami dla danego projektu lub zespołu, a korelacja może się zmienić w trakcie życia projektu / zespołu. Moim celem jest 1. Pomiar wszystkich interesujących metryk przez 2-3 miesiące (mamy już sporo z sonaru). 2. Znajdź jedną metrykę, która koreluje z liczbą nowych błędów. 3. Przeprowadź analizę przyczyn źródłowych, aby sprawdzić, dlaczego tak się dzieje (np. Czy brakuje nam pewnej umiejętności projektowania?). 4. Popraw umiejętność i zmierz zmianę przez kilka iteracji. 5. Przepłucz i powtórz od 2. Jeśli nie masz w tym żadnego doświadczenia, ale pamiętaj, że widziałeś artykuł / blog na ten temat, byłbym wdzięczny, gdybyś mógł się nim podzielić. * * * Do tej pory znalazłem następujące linki z pewnymi informacjami na ten temat * Czy błędy rezydują w kodzie złożonym? - tylko slajdy z prezentacji. * Zmiany i błędy: Wydobycie i przewidywanie działań rozwojowych - Po prostu slajdy z prezentacji. Podsumowując, im więcej zależności, tym większe szanse na błędy (myślę, że jest to dość ogólna zasada). * Porażka to czteroliterowe słowo — parady na temat korelacji między błędami a metrykami.


title: Treści generowane przez użytkowników i ochrona Hotlink

text: Mam stronę internetową, która umożliwia użytkownikom wklejanie treści (takich jak fragmenty kodu itp.) do udostępniania. Podobnie jak Pastebin i Github, mam również link „surowy”, który wyświetla surową zawartość tych postów. Jednak niektórzy użytkownicy publikują kod, a następnie korzystają z naszej usługi jako hosta do dystrybucji treści, które naruszają nasze TOS (na przykład kod javascript, a następnie linki do tego kodu z witryn zewnętrznych). Działając na NGINX i PHP, jaki jest najlepszy sposób zarządzania tym? Mam funkcję, dzięki której po zgłoszeniu mogę wyłączyć surową wersję danego postu. Nie da się jednak monitorować każdego posta (a potem mieć pewność, że rozumiem, co jest dobre, a co złe). Czy moim jedynym rozwiązaniem jest wyłączenie surowej funkcjonalności na całym świecie? Czy powinienem blokować surowe wersje z witryn takich jak Facebook (może za pomocą odsyłacza)? Bawiłem się ochroną hotlink, ale prawdę mówiąc, nie wydaje się, aby działała dobrze (lub może to być tylko moja konfiguracja).


title: Modelowanie sieci i trwałych reprezentacji encji

text: Mam aplikację, w której muszę zsynchronizować niektóre encje (po prostu pobierz najnowsze wersje encji z serwera do klienta). Jednostka ma kilka właściwości tekstowych i kilka linków do zasobów (do których odwołują się identyfikatory, adresy URL, cokolwiek). Na przykład niech `Entity` ma trzy właściwości: id: integer, name: string, photos: tablica identyfikatorów zdjęć Na razie `Entity` jest reprezentowane przez dwie klasy: jedną dla magazynu trwałego (używam magazynu CoreData w iOS, ty może uznać go za ORM, jeśli nie znasz iOS SDK) i jeden do analizowania i serializacji JSON o nazwach odpowiednio „Entity” i „JSONEntity”. Identyfikator `Entity`: liczba całkowita, nazwa: ciąg, zdjęcia: tablica ścieżek do plików w lokalnym systemie plików oczekująceDownloads: obiekt do śledzenia oczekujących pobrań plików dla `Entity` `JSONEntity` id: liczba całkowita, nazwa: ciąg, zdjęcia: tablica zdjęć ids Użyję następującego algorytmu: 1. wywołaj API serwera i uzyskaj tablicę instancji `JSONEntity` 2. dla każdego pobranego `JSONEntity` 1. znajdź lub utwórz odpowiednią instancję `Entity`, która powinna zostać zaktualizowana 2. natychmiast zaktualizuj właściwość `name` instancji `Entity` 3. powiąż instancję `pendingDownloads` z bieżącą instancją `Entity` instancją `Entity`, która ma skojarzony obiekt `pendingDownloads` jest uważana za pobieraną i nie może być używana. Po uruchomieniu aplikacji: 1. znajdź instancje `Entity` które mają niepuste `pendingDownloads` 2. dla każdego `id` w `pendingDownloads` 1. pobierz zdjęcie 2. dodaj odniesienie do lokalnego pliku do zdjęcia w `photos` 3. usuń bieżące element z `pendingDownloads` 3. właściwość null-out `pendingDownloads` 4. powiadom model, że `Entity` zakończył synchronizację Jak dla mnie największą wadą obecnego podejścia jest to, że muszę zachować dwie równoległe hierarchie klas - jedną dla trwałego przechowywania i jeden do analizowania/serializacji JSON. Próbowałem użyć dziedziczenia: zadeklarowałem właściwości newtork-level (jak identyfikatory zdjęć) w superklasie i na poziomie lokalnym (jak odwołania do plików) w podklasie. Ale też nie podoba mi się to podejście - obiekt staje się przeładowany obowiązkami - musi śledzić informacje zarówno na poziomie sieci, jak i na poziomie lokalnym. Czy istnieją jakieś wzorce lub podejścia do radzenia sobie z tego rodzaju sytuacjami? Byłbym wdzięczny za wszelkie przemyślenia. Dziękuję.


title: Pełna kontrola produkcji w celu łatwego cofania zmian?

text: Chcę szybkiego sposobu na cofnięcie naszej wersji produkcyjnej w przypadku jakichkolwiek wpadek - rozwiązanie jednym kliknięciem, jeśli chcesz. Przeczucie mówi mi, że jest to ważne – i wierzę, że mam rację, ale chcę porady wdrożeniowej. Moją obecną myślą jest uruchomienie lokalnego repozytorium na naszym serwerze produkcyjnym i po prostu przekazanie całej kompilacji produkcyjnej do repo - binarnych, zasobów internetowych, wszystkiego. Kiedy dokonujemy aktualizacji w witrynie produkcyjnej, możemy zatwierdzić zmiany w repozytorium. W ten sposób, jeśli coś się zepsuje z jakiegoś powodu i potrzebujemy szybkiego wycofania - jest to po prostu sprawa sprawdzenia poprzedniego zatwierdzenia. Jakie lepsze metody są dostępne dla tego typu wycofywania? Wiem, że istnieje wiele rozwiązań do tworzenia kopii zapasowych, ale VCS jest znany z pracy i zapewnia podobne korzyści. Czy wchodzę w pułapkę?


title: Pytanie o mniejszą ogólną licencję publiczną na gnu

text: Mam pytanie dotyczące licencji Thingiviews. Mam stronę, która ma związek z drukowaniem 3D, nie jest to jeszcze zrobione, ale zastanawiałem się, czy będę mógł z niej korzystać na mojej stronie. Głównym powodem, o który pytam, jest to, że będzie on używany do pokazywania modeli 3D, które w końcu zostaną wyprodukowane i sprzedane, jak w pewnym sensie shapeways, więc nie sprzedam Thingiview, ale będzie to używane do pokazania czegoś, co ostatecznie przyniesie pieniądze. Thingiview jest obecnie na licencji: > GNU LESSER GENERAL PUBLIC LICENSE i z tego, co mogę wywnioskować, wydaje się, że to, co chcę zrobić, powinno być w porządku, czy muszę tylko podać uznanie twórcy? Tak czy inaczej, ale wydaje się, że to wszystko, co jest wymagane. Czy to, co chcę zrobić, jest w porządku (przez ok mam na myśli legalne)? Również jeśli chcę to zmienić, mogę to zrobić też dobrze, mam kilka pomysłów do dodania. Czy muszę coś zrobić, jeśli trochę to zmienię?


title: Czy są jakieś badania naukowe dotyczące TDD, które wykorzystują całkowity koszt posiadania produktu jako miarę?

text: Kiedy czytałem podsumowanie poprzedniej pracy w _Dogsa T, Batic D. Skuteczność rozwoju sterowanego testami: studium przypadku przemysłowego. Dziennik jakości oprogramowania. 2011;19(4):643-661._ Uderzyło mnie, że pomiary używane w wielu badaniach dotyczących TDD opierają się na takich elementach, jak linie kodu, defekty i czas poświęcony na rozwój. Czy są jakieś badania, które skupiają się na całkowitym koszcie posiadania produktów, które zostały opracowane przy użyciu TDD w porównaniu z tradycyjnym rozwojem lub testowaniem? Szczególnie interesuje mnie całkowity koszt zakupu oraz koszty eksploatacyjne.


title: Nauka badania błędów

text: Nie jestem nawet pewien, jak zdefiniować tę trudność. Przypomina mi się test, który zrobiła na mnie para potencjalnych pracowników, zanim dostałem pracę. Wybierali przedmiot w pokoju, a potem mogłem zadawać pytania, aby pomóc mi określić, czym jest ten przedmiot (podobnie jak 20 pytań). Byłem w tym absurdalnie dobry (nie, nigdy nie dostałem wysokich punktów za pokorę), więc założyłem, że będę naprawdę dobry w rozwiązywaniu problemów ... Ale oto rzecz, którą ostatnio odkryłem. Jestem naprawdę dobry w tej sytuacji, ponieważ naprawdę łatwo jest zobaczyć wszystko, co jest w pokoju, więc mogę podejść do mojego problemu z pewną koncepcją jego części składowych. W gruncie rzeczy „wiem to, czego nie wiem”. Ale przy programowaniu spotykam się z wieloma sytuacjami, w których problem jest dla mnie zupełnie nieznany. Wiem, że jest zepsuty, ale nie mam pojęcia, jak może się zepsuć. Postępowałem zgodnie ze wszystkimi instrukcjami, znam technologię dość dobrze... Jeśli mam być szczery, czuję, że po prostu mam trudności z wyobrażeniem sobie rzeczy, które mogą być nie tak, abym mógł je przetestować i, miejmy nadzieję, znaleźć rozwiązanie. Jak mam rozwijać tę umiejętność? Co muszę zrobić, aby pomóc mojej pozornie ograniczonej wyobraźni wymyślić sposoby na zepsucie mojego projektu? Czy istnieją ćwiczenia (może zagadki?), które mogą sprawić, że będę w tym lepszy? Zdaję sobie sprawę, że prawdopodobnie największym lekarstwem jest po prostu doświadczenie... ale mam nadzieję, że w miarę możliwości przyspieszę ten proces. Wpatrywanie się w ekran komputera bez wyrazu przez kilka godzin nie jest nawet zabawne...


title: Czy mam oddzielić część administracyjną od reszty wojny?

text: Zbudowałem aplikację internetową za pomocą struts2. Potem zbudowałem mały interfejs administratora w tej samej wojnie. Z czasem rozrosła się aplikacja webowa, a więc i interfejs administratora. Teraz myślę o oddzieleniu interfejsu administratora od reszty aplikacji w osobnej wojnie. Czy to dobry pomysł? Czy jest jakaś korzyść wydajności, którą mogę uzyskać dzięki oddzieleniu wojny administratorów i reszty aplikacji internetowej. Część administracyjna dotyczy głównie wprowadzania zmian/aktualizacji/ustawień w bazie danych, więc nie ma to bezpośredniego wpływu na interfejs użytkownika reszty aplikacji. Oddzielenie go zapewnia również, że mogę wprowadzać aktualizacje do obu części bez wpływu na drugą. [AKTUALIZACJA] Nie mogę umieścić części administratora na komputerze lokalnym. To aplikacja internetowa. „Czy używają tych samych klas?” Nie, cały pakiet jest inny w przypadku działań administracyjnych, a widok jest również osobny. `Jak je aktualizować?` wojna upload `Czy używasz sesji aplikacji?` oczywiście tak, chociaż różne sesje są używane dla administratora i zwykłego użytkownika.


title: Mocowanie klasy betonu - Niezalecane

text: Właśnie przeczytałem fragment książki "Growing Object-Oriented Software", która wyjaśnia niektóre powody, dla których nie zaleca się naśladowania konkretnych klas. Oto przykładowy kod testu jednostkowego dla klasy MusicCentre: public class MusicCentreTest { @Test public void startedCdPlayerAtTimeRequested() { final MutableTime ScheduleTime = new MutableTime(); CdPlayer player = new CdPlayer() { @Override public void scheduleToStartAt(Time startTime) { scheduleTime.set(startTime); } } Centrum MusicCentre = new MusicCentre(player); center.startMediaAt(PÓŹNIEJ); attachEquals(PÓŹNIEJ, ScheduleTime.get()); } } I jego pierwsze wyjaśnienie: > Problem z tym podejściem polega na tym, że związek między > obiektami pozostaje ukryty. Mam nadzieję, że wyjaśniliśmy już, że intencją > Programowania sterowanego testami z pozorowanymi obiektami jest odkrycie relacji > między obiektami. Jeśli I podklasę, w kodzie domeny nie ma nic, co mogłoby > pokazać taką relację, tylko metody na obiekcie. Utrudnia to > sprawdzenie, czy usługa, która obsługuje tę relację, może być odpowiednia > w innym miejscu i będę musiał przeprowadzić analizę ponownie przy następnej pracy z klasą >. Nie rozumiem dokładnie, co ma na myśli, gdy mówi: > Utrudnia to stwierdzenie, czy usługa, która wspiera tę relację > może być odpowiednia gdzie indziej i następnym razem będę musiał przeprowadzić analizę ponownie > Pracuję z klasa. Rozumiem, że usługa odpowiada metodzie `MusicCentre` o nazwie `startMediaAt`. Co ma na myśli mówiąc „gdzie indziej”? Pełny fragment znajduje się tutaj: http://www.mockobjects.com/2007/04/test-smell-mocking-concrete-classes.html


title: Jak wykonać wstrzykiwanie zależności i warunkowe tworzenie obiektów na podstawie typu?

text: Mam punkt końcowy usługi zainicjowany przy użyciu DI. Ma następujący styl. Ten punkt końcowy jest używany w całej aplikacji. public class CustomerService : ICustomerService { prywatne IValidationService ValidationService { get; ustawić; } prywatne repozytorium ICustomerRepository { get; ustawić; } public CustomerService(IValidationService validationService,ICustomerRepository repozytorium) { ValidationService = validationService; Repozytorium = repozytorium; } public void Zapisz(KlientDTO klient) { if (ValidationService.Valid(klient)) Repository.Save(klient); } Teraz, wraz ze zmieniającymi się wymaganiami, pojawią się różne typy klientów (starsze/zwykłe). Wymóg jest oparty na typie klienta, którego muszę zweryfikować i utrzymać klienta w inny sposób (np. jeśli klient starszego pozostaje w LegacyRepository). **Niewłaściwym** sposobem na zrobienie tego będzie przerwanie DI i zrobienie czegoś takiego jak public void Save(CustomerDTO customer) { if(customer.Type == CustomerTypes.Legacy) { if (LegacyValidationService.Valid(customer)) LegacyRepository. Zapisz (klient); } else { if (ValidationService.Valid(klient)) Repozytorium.Save(klient); } } Moje opcje wydają mi się jak 1. DI wszystkie możliwe `IValidationService` i `ICustomerRepository` i przełączaj się na podstawie typu, który wydaje się niepoprawny. 2. Drugim jest zmiana sygnatury usługi na `Save(IValidationService validation, ICustomerRepository repozytorium, CustomerDTO customer)`, co jest zmianą inwazyjną. 3. Przerwij DI. Użyj podejścia wzorca strategii dla każdego typu i wykonaj coś takiego: validation= CustomerValidationServiceFactory.GetStratedgy(customer.Type); validation.Valid(customer), ale teraz mam statyczną metodę, która musi wiedzieć, jak zainicjować różne usługi. Jestem pewien, że jest to bardzo powszechny problem. Jaki jest właściwy sposób rozwiązania tego bez zmiany sygnatur usług lub łamania DI?


title: jak przeprowadzić pełne testy jednostkowe funkcji i ich wewnętrzną walidację

text: Właśnie wchodzę w formalne testy jednostkowe i natknąłem się na problem z testowaniem oddzielnych wewnętrznych części funkcji. Stworzyłem klasę bazową manipulacji danymi (tj. przenoszenie plików, chmodding pliku itp.) i w `moveFile()` mam wiele poziomów walidacji, aby wskazać, kiedy `moveFile()` nie powiedzie się (tj. nie można odczytać pliku źródłowego , miejsce docelowe nie jest zapisywalne). Nie potrafię wymyślić, jak zmusić kilka konkretnych walidacji do niepowodzenia, nie wyłączając poprzednich walidacji. Przykład: > Chcę, aby kopiowanie pliku zakończyło się niepowodzeniem, ale zanim dotarłem do > właściwego kopiowania, sprawdziłem przed > kopiowaniem wszystko, co może się nie udać. Fragment kodu: (Zły kod w piątym wierszu...) // jeśli uprawnienia do zmiany są ustawione, zmień uprawnienia do pliku if($chmod !== null) { $mod_result = chmod($katalog_docelowy.DIRECTORY_SEPARATOR.$new_filename, $chmod); if($mod_result === false || $source_directory.DIRECTORY_SEPARATOR.$source_filename == '/home/k...../file_chmod_failed.qif') { DataMan::logRawMessage('Aktualizacja uprawnień do pliku nie powiodła się podczas przenoszenia pliku [ERR0009 ] - ['.$katalog_docelowy.SEPARATOR_KATALOGU.$nowa_nazwa_pliku.' - '.$chmod.']', sfLogger::ALERT); return array('success' => false, 'type' => 'Wewnętrzny błąd serwera [ERR0009]'); } } Jak więc zasymulować awarię kopii. Moim środkiem zastępczym było wykonanie walidacji kopiowanej nazwy pliku i jeśli ścieżka bezwzględna pasuje do mojego pliku testowego, wymuszenie niepowodzenia. Wiem, że bardzo źle jest umieszczać kod testowy w rzeczywistym kodzie, który będzie używany do uruchomienia na serwerze produkcyjnym, ale nie jestem pewien, jak inaczej to zrobić. Notatka: Jestem na PHP 5.2, symfony, używając `lime_test()`. **EDIT** Testuję chmodding i upewniam się, że zwracana jest tablica ('success' => false, 'type' => ..)


title: Czasy odpowiedzi systemu --- Dobra umowa o gwarantowanym poziomie usług?

text: Aby zobaczyć wydajność systemu, zostałem poproszony przez kierownictwo o podanie czasów odpowiedzi dla kilku kluczowych stron. Chcę mieć pewność, że przedstawiam dobry obraz ogólnego stanu systemu, a nie ograniczam się do pojedynczego pomiaru. Więc moje pytanie brzmi: **Jakie metryki dostarczyłbyś swoim interesariuszom podczas tworzenia oprogramowania, aby wskazać, że system jest sprawny i działa dobrze?** (jeśli nie działa dobrze, to również powinno być oczywiste! Nie próbuj ukrywać /przesłonić wszelkie problemy.)


title: Gówniana szkoła, co robić?

text: Programowanie zacząłem dość późno. Mam 24 lata i niedługo ukończę lokalny uniwersytet publiczny z naprawdę kiepsko zaprojektowanym programem nauczania i nauczycielami. Większość pracy wydawała mi się zajęta pracą i bez względu na to, jak bardzo się staram, wszystko wydaje się marnotrawstwem. Wiem, jak wygląda dobry program nauczania. Wiem, jakie książki powinienem przeczytać, ale na moim uniwersytecie tak nie jest. W tym momencie nie mogę dogonić absolwentów takich miejsc jak MIT. Moje pytanie i to jest poważne: co mam zrobić? Czy po prostu odkładam naukę teorii na później i skupiam się na umiejętnościach inżynierii oprogramowania? Jak ważna jest teoria, jeśli chodzi o znalezienie pracy w Nowym Jorku? Jakieś konkretne rzeczy, na których powinienem się skupić, aby dostać pracę inżyniera oprogramowania? Jestem bardzo zmotywowany i chciałbym, żeby ktoś dał mi czas i szansę.


title: Jak nazywasz porównanie „X <= $foo <= Y”?

text: Pisząc po raz kolejny instrukcję Perla, taką jak `if ( $foo >= X && $foo <= Y )`, zastanawiałem się, dlaczego wiele języków programowania nie obsługuje wygodniejszej formy `if ( X <= $foo <= Y ) ` i jak to się nazywa. Wymyśliłem „porównanie z trzema nogami”, ale nie ma wyników podczas wyszukiwania. Nawiasem mówiąc, istnieje również forma "elementu zbioru" `if ( $foo in X..Y )`, którą uważam za bardziej czytelną tylko wtedy, gdy jest dostarczana za pomocą krótkiego słowa kluczowego. Czy istnieje termin dla porównania `X <= $foo <= Y`? Jakie języki to obsługują?


title: Zdalnie sparować programowanie z programem Visual Studio?

text: Jakie narzędzia istnieją, aby ułatwić programowanie w parach z programem Visual Studio, gdy programiści nie znajdują się w tej samej fizycznej lokalizacji? W tej chwili myślimy o głosie (Skype?) plus zdalnym pulpicie (VNC? TeamViewer?), ale dobrze byłoby poznać inne sugestie i doświadczenia. Czy jest coś bardziej zintegrowanego z Visual Studio? Trochę więcej tła: jesteśmy dwoma doświadczonymi programistami, z którymi współpracowaliśmy przez długi czas przy dużym, dojrzałym projekcie (ASP.NET, Windows Forms i SQL Server). Jednak zazwyczaj nie pracujemy jednocześnie nad tą samą częścią kodu. Zamierzamy poświęcić kilka tygodni na znaczną refaktoryzację i byłoby idealnie, gdybyśmy byli w stanie wykonać tę pracę z podejściem programowania w parach.


title: Jak uświadomić studentom CS i przyszłym programistom różne licencje oprogramowania i ich niuanse?

text: Mówiąc konkretnie: w jaki sposób uwzględniłbyś to jako część programu nauczania? Czy nie byłoby nudno przedstawiać je jako wyłącznie podmiot prawny? Czy jest jakaś dostępna struktura kursu, czy możemy ją wyprowadzić? Jakie książki można wykorzystać? Chciałabym, aby po ukończeniu kursu kandydat doskonale wiedział, "czym są licencje na oprogramowanie i do czego się nadają". Różne implikacje niewiedzy we właściwym tego słowa znaczeniu. Jakich licencji powinni używać do własnego kodu. Co wziąć pod uwagę, gdy próbują wykorzystać określone biblioteki lub narzędzia w swoim projekcie i ocenić związane z tym ryzyko/nagrody. Chodzi o to, aby pozwolić im dokonywać świadomych wyborów, gdy są profesjonalistami/praktykami w dziedzinie programowania, a nie zastępować prawnika lub nawet asystenta prawnego, który będzie walczył ze sprawą lub przygotowywał projekty.


title: Jakie są główne różnice między profilem FUML a wykonywalnym UML?

text: Chciałbym wiedzieć, jaka jest główna różnica między podstawowym podzbiorem modeli wykonywalnych UML a profilem wykonywalnego UML (który był zgodny z metodologią Schlaer-Mellor). Dziękuję Ci


title: Mieszanie języków w .Net

text: Wiem, że .Net zapewnia funkcję mieszania kilku języków w tej samej aplikacji (oczywiście istnieją pewne ograniczenia, ale nie jest to konieczne). Teoretycznie można to zrobić, ponieważ języki obsługiwane przez .Net nie udostępniają w pełni wszystkich funkcji, które może zapewnić. Oczywiście IL. Jeśli więc potrzebujesz funkcji, której nie zapewnia obecny język, możesz napisać ją w innym języku .Net. Cały kod zostałby przetłumaczony na IL, dzięki czemu zyskałbyś więcej funkcji. Z własnego doświadczenia pisałem projekt w C# i potrzebowałem zintegrować mały projekt napisany w C++ pod .Net. Kiedy konsultowałem się z kilkoma bardziej doświadczonymi programistami, powiedzieli, że znacznie łatwiej byłoby „przetłumaczyć” kod C++ na C# niż go zintegrować. Ponieważ miałem mało czasu, robiłem to i było to dość łatwe (projekt był dość mały). Więc moje pytanie brzmi, czy ktoś doświadczył sytuacji z prawdziwego życia, kiedy mieszanie języków jest absolutną koniecznością?


title: Czy niedeterministyczne zarządzanie zasobami jest nieszczelną abstrakcją?

text: Z tego, co widzę, istnieją dwie wszechobecne formy zarządzania zasobami: deterministyczna destrukcja i jawna. Przykładami tych pierwszych mogą być destruktory i inteligentne wskaźniki C++ lub sub DESTROY Perla, podczas gdy przykładem drugiego może być paradygmat bloków do zarządzania zasobami Rubiego lub interfejs IDispose platformy .NET. Wydaje się, że nowsze języki wybierają to drugie, być może jako efekt uboczny używania systemów zbierania śmieci w odmianie nie liczącej odniesień. Moje pytanie brzmi: biorąc pod uwagę, że destruktory dla inteligentnych wskaźników lub systemów zbierania śmieci zliczających referencje – prawie to samo – pozwalają na niejawne i przejrzyste niszczenie zasobów, czy jest to mniej przeciekająca abstrakcja niż typy niedeterministyczne, które opierają się na jawnym notacja? Podam konkretny przykład. Jeśli masz trzy podklasy C++ jednej nadklasy, jedna z nich może mieć implementację, która nie wymaga żadnego konkretnego zniszczenia. Być może robi swoją magię w inny sposób. Fakt, że nie wymaga specjalnego zniszczenia, jest nieistotny – wszystkie podklasy są nadal używane w ten sam sposób. Inny przykład używa bloków Ruby. Dwie podklasy muszą zwolnić zasoby, więc nadklasa wybiera interfejs, który używa bloku w konstruktorze, nawet jeśli inne specyficzne podklasy mogą go nie potrzebować, ponieważ nie wymagają specjalnego zniszczenia. Czy jest tak, że ta ostatnia ujawnia szczegóły implementacji niszczenia zasobów, a ta pierwsza nie? EDYCJA: Porównanie, powiedzmy, Ruby do Perla może być bardziej sprawiedliwe, ponieważ jeden ma deterministyczne zniszczenie, a drugi nie, ale oba są zbierane na śmieci.


title: Czy istnieje łatwy w zarządzaniu sposób śledzenia luźnego kodu?

text: Codziennie programuję proste zadania, ale trudno mi znaleźć skrypty i fragmenty kodu, które piszę. Czy istnieje łatwy do opanowania sposób na śledzenie tego typu rzeczy?


title: Czy przy projektowaniu programu powinniśmy napisać szczegółowy projekt architektury, czy tylko zarys?

text: Kiedy robię projekt do zadania, walczę z tym dokuczliwym uczuciem, że oprócz bycia ogólnym zarysem, zostanie w końcu mniej lub bardziej zignorowany. Podam przykład: pisałem frontend dla urządzenia, które ma operacje odczytu/zapisu. W diagramie klas sensowne było nadanie mu funkcji odczytu i zapisu. Jednak kiedy przyszło do ich napisania, zdałem sobie sprawę, że są to dosłownie ta sama funkcja ze zmianą tylko jednej linii kodu (wywołanie funkcji odczytu vs zapisu), więc aby uniknąć duplikacji kodu, zaimplementowałem funkcję do_io z parametrem, który rozróżnia między operacje. Żegnaj oryginalny design. Nie jest to strasznie destrukcyjna zmiana, ale zdarza się często i może się również zdarzyć w bardziej krytycznych częściach programu, więc nie mogę przestać się zastanawiać, czy jest sens zaprojektować więcej szczegółów niż ogólny zarys, przynajmniej gdy to nastąpi chodzi o architekturę programu (oczywiście, kiedy określasz API, musisz wszystko przeliterować). Może to być po prostu wynikiem mojego braku doświadczenia w projektowaniu, ale z drugiej strony mamy zwinne metodologie, które niejako mówią „rezygnujemy z planowania daleko w przód, i tak wszystko się zmieni za kilka dni”, co często jak się czuję. Jak więc dokładnie „używać” projektu?


title: Wątpliwości dotyczące wyszukiwarki/wtyczki (jedna obecna na samej stronie)

text: Jestem nowy w tworzeniu stron internetowych i próbuję studiować różne typy stron internetowych jako studium przypadku. W tej chwili skupiam się na tym, jak działają wyszukiwarki w witrynie eCommerce. Znam podstawowe zasady funkcjonowania wyszukiwarki, tj. przemierzam strony internetowe, indeksuję je i wyświetlam wyniki za pomocą tych indeksów. Ale trochę się pomyliłem w przypadku witryny eCommerce. Czy nie sądzisz, że lepiej by było, gdyby wyszukiwarka zamiast indeksować strony zawierające produkty, przeszukiwała bezpośrednio bazę danych i indeksowała produkty przechowywane w bazie? A kiedy użytkownik szuka dowolnego produktu, po prostu poda nam wiersze tabeli, które pasują do zapytania użytkownika? Jeśli tak nie jest, czy ktoś mógłby wyjaśnić, jak działa zwykła metoda na stronie eCommerce?