title: Czytelność kontra minimalizm/zwięzłość/zwięzłość w projektowaniu języka: czy są one antagonistyczne?

text: Obecnie na liście dyskusyjnej PHP-Internals toczy się dyskusja dotycząca implementacji krótkiej składni dla tablic i obiektów, głównie `[1, 2, ...]` dla standardowych tablic, `['one'=>1, 'dwa'=> 2, ...]` dla tablic asocjacyjnych i `{'jeden'=>1, 'dwa'=> 2, ...}` dla obiektów i jest jedna ogólna niezgodność, która mnie niepokoi: niektórzy twierdzą, że jest mniej czytelny. Głównymi powodami, dla których widzę tę propozycję, jest zwiększenie prostoty i czytelności podczas korzystania z tej podstawowej struktury danych w PHP, ale mam problem z przetwarzaniem powodu, dla którego niektórzy ludzie uważają ją za nieczytelną, możesz nawet to zobaczyć, czytelność jest pozycja zarówno na liście za, jak i przeciw, będąca argumentem zarówno dla zwolenników, jak i przeciwników. Podejrzewam, że przeciwnicy rozważają tylko standardowy przypadek `array(...)` vs `[...]`, ale nie widzą zagnieżdżonego przypadku, co oznacza, że: $TV = array( "flintstones" = > (object)array( "series" => "flintstones", "members" => array( (object)array( "name" => "fred", "role" => "lead", "wiek" => 36, ), (object)array( "imię" => "wilma", "role" => "żona", "wiek" => 31, ), (obiekt)array( "imię" => "kamyki", "role" => "dziecko", "wiek" => 4, ), ), ), "jetsons" => (object)array( "series" => "jetsons", "members" => array( (object) )array( "imię" => "george", "role" => "lead", "wiek" => 41, ), (obiekt)array( "imię" => "jane", "role" => " żona", "wiek" => 39, ), (object)array( "imię" => "elroy", "role" => "dziecko", "wiek" => 9, ), ), ), "simpsonowie " => (object)array( "series" => "simpsons", "members" => array( (obiekt)array( "name" => "homer", "role" => "lead", "wiek" = > 34, ), (object)array( "imię" => "marge", "role" => "żona", "wiek" => 37, ), (obiekt)array( "imię" => "bart" , "rola" => "dziecko", "wiek" => 11, ), ), ), ), ); Stałoby się tak: $TV = [ "flintstones" => { "series" => "flintstones", "members" => [ { "name" => "fred", "role" => "lead", "wiek " => 36, }, { "imię" => "wilma", "rola" => "żona", "wiek" => 31, }, { "imię" => "kamyki", "rola" => "kid", "age" => 4, }, ], }, "jetsons" => { "series" => "jetsons", "members" => [ { "name" => "george", "role " => "lead", "wiek" => 41, }, { "imię" => "jane", "rola" => "żona", "wiek" => 39, }, { "imię" => "elroy", "role" => "dziecko", "wiek" => 9, }, ], }, "simpsons" => { "series" => "simpsons", "members" => [ { "name " => "homer", "role" => "lead", "wiek" => 34, }, { "imię" => "marge", "rola" => "żona", "wiek" => 37 , }, { "imię" => "bart", " rola" => "dziecko", "wiek" => 11, }, ], }, ]; Dla mnie drugi przypadek byłby o wiele bardziej czytelny, a nawet odświeżający, ponieważ mogę szybciej poruszać przez niego oczami. Zdecydowana większość ludzi chce krótkiej składni, ale bardzo interesuje mnie, dlaczego drugi przykład, który podałem, jest dla niektórych mniej czytelny (niektórzy z nich są dobrze znanymi programistami, co oznacza, że musieli rozważyć przypadek zagnieżdżony) . W każdym razie widziałem ten argument w innych miejscach, że minimalizm to nie to samo co czytelność, ale dlaczego w tym konkretnym przypadku?, krótka składnia jest dobrze znana w innych językach i nikt nie narzeka na czytelność, **_więc dlaczego?_** . Dziękuję


title: Gdzie mam zająć się fatalnymi wyjątkami

text: Załóżmy, że mam kontroler, który ładuje plik i przekazuje go do przetwarzania. * Czy powinienem obsłużyć wyjątek w programie ładującym pliki i zwrócić `Null` jeśli coś jest nie tak, czy powinienem zgłosić wyjątek i obsłużyć go w kontrolerze? * Bez pliku reszta programu nie może działać. Gdzie powinienem obsłużyć wyjątek, który poprawnie zamyka program? Chcę poprawnie zamknąć aplikację na Androida.


title: co powinienem zapisać w lokalnej bazie danych Androida, aby był bardziej wydajny i trwał więcej niż jedną sesję (i nie powinien być przechowywany tylko na serwerze)?

text: Piszę aplikację na Androida. Użytkownik przesyła serwerowi swoją lokalizację i uzyskuje miejsca, które są dla niego istotne. Następnie może zagłosować w górę lub w dół na dowolną ofertę. Zastanawiam się, czy powinienem pisać do lokalnej bazy danych i kiedy? Łączę się tylko przez fb. Jak widzę, nie ma nic, co powinienem zapisywać w lokalnej wydajności DB, lepiej jest zapisywać i przetwarzać wszystko po stronie serwera. A także w pamięci lokalnej (na sesję aplikacji). Masz pomysł, co powinienem zapisać w lokalnej bazie danych, aby był bardziej wydajny i trwał więcej niż jedną sesję (i nie powinien być przechowywany tylko na serwerze)?


title: Różnica między modelem Unified Process a zwinnym rozwojem

text: Jestem zdezorientowany co do ujednoliconego modelu procesu i zwinnego rozwoju. Kiedy czytam o UP, rozumiem tylko, że jest to iteracyjne ulepszenie. Czy ktoś może to wyjaśnić?


title: Jak nazywa się ten związek między przedmiotami?

text: Różne typy zależności mają określone nazwy, takie jak _zależność liniowa_ , _zależność kołowa_ , _obiekt samoodnoszący się_ , itp. Jak nazywa się zależność, w której te reguły są prawdziwe? 1. A ma zero lub więcej B, 2. B ma zero lub więcej C oraz: 3. A ma zero lub więcej C. ![Diagram UML ilustrujący opisaną powyżej zależność](http://i.stack.imgur .com/qjRPK.png) Jeśli nie ma określonej nazwy dla takiej relacji, czy masz jakieś sugestie?


title: Zaakceptowane najlepsze praktyki dotyczące setup.py projektu rozwidlonego

text: ## Kontekst: Chciałem sprawdzić, czy istnieje narzędzie do zrobienia czegoś (w moim przypadku szukałem proxy, które pozwoliłoby na inspekcję logów http z frameworka testowego Pythona). Okazało się, że istnieje narzędzie, które wymagałoby tylko niewielkich poprawek i wydawało się być dość stabilne/dojrzałe, bez aktualizacji w ciągu ostatnich 5 miesięcy (pymiproxy), więc rozwidłem projekt (tutaj) i uruchomiłem go jak potrzebuję. Celem oryginalnego projektu jest prostota, więc wątpię, aby pull request został zaakceptowany, zwłaszcza że jeden z zaangażowanych plików jest przydatny tylko dla mojego obecnego pracodawcy. W końcu pomyślałem, że powinienem zaktualizować plik `setup.py`, ale nie jestem pewien - wykonałem 'przydatną' ilość pracy na moim widelcu i chociaż pozostawiłem oryginalne pliki w takcie, tworząc podklasy we własnym modułów, jest teraz znacząca dodatkowa funkcjonalność. Nie wiem, czy czuję się komfortowo twierdząc, że jestem „autorem” tego modułu, ponieważ zostałby on zainstalowany przez pythona, ale jako autor projektu fork nie czuję się komfortowo zostawiając e-maile wsparcia skierowane do autora oryginalnego projektu . ## Pytanie: Jaka jest ogólnie przyjęta najlepsza praktyka dla projektów rozwidlonych? Czy należy zmienić nazwę projektu, aby wskazać, że ma inny cel? Oryginalny projekt nie jest dostępny przez pip, w przeciwnym razie struktura mojego projektu pozwoliłaby na to, że zamiast rozwidlać, zawijam oryginał tylko jako zależność. Czy w rzeczywistości powinienem wycofać zmiany, umieścić je w nowym projekcie i umieścić oba wymienione w pypl, czy robienie tego w imieniu oryginalnego autora posuwa się za daleko? ## Uwagi: Nagłówki dodane w celu ułatwienia szybkiego czytania. Szukam zaakceptowanych najlepszych praktyk, więc proszę o opinie bez źródeł, aby je poprzeć, czy to autorytatywny wpis na blogu, czy przykłady innych projektów, które zrobiły to samo.


title: Struktura danych umożliwiająca dostęp do jednostek miar

text: TL;DR - szukam "optymalnej" struktury danych do definiowania jednostek w ramach jednostki miary. * * * „Jednostka miary” to zasadniczo „wartość” (lub ilość) powiązana z „jednostką”. Jednostki SI mają siedem podstaw lub wymiarów. Mianowicie: długość, masa, czas, prąd elektryczny, temperatura, ilość substancji (mole) i natężenie światła. Byłoby to dość proste, ale istnieje wiele jednostek pochodnych, a także stawek, których często używamy. Przykładową jednostką łączoną będzie Newton: `kg * m / s^2`, a przykładową stawką będzie `tony / godz.`. Mamy aplikację, która w dużym stopniu opiera się na jednostkach implikowanych. Umieścimy jednostki w nazwie zmiennej lub kolumny. Ale stwarza to problemy, gdy musimy określić jednostkę miary za pomocą różnych jednostek. Tak, możemy konwertować wartości podczas wprowadzania i wyświetlania, ale generuje to dużo narzutu kodu, który chcielibyśmy zawrzeć w jego własnej klasie. Istnieje wiele rozwiązań dotyczących codeplex i innych środowisk współpracy. Licencjonowanie projektów jest do przyjęcia, ale sam projekt zwykle okazuje się zbyt lekki lub zbyt ciężki. Gonimy za własnym jednorożcem „w sam raz”. Idealnie mógłbym zdefiniować nową jednostkę miary, używając czegoś takiego: > UOM myUom1 = new UOM(10, wolty); > JM mojaJM2 = nowa JM(43.2, Newtony); Oczywiście stosujemy mieszankę jednostek imperialnych i SI w zależności od potrzeb naszych klientów. Musimy również zsynchronizować tę strukturę jednostek z przyszłą tabelą bazy danych, abyśmy mogli zapewnić ten sam stopień spójności również w naszych danych. * * * Jaki jest najlepszy sposób zdefiniowania jednostek, jednostek pochodnych i stawek, których potrzebujemy do utworzenia naszej klasy jednostek miary? Widziałem użycie jednego lub więcej wyliczeń, ale może to być frustrujące dla innych programistów. Pojedyncze wyliczenie byłoby ogromne z ponad 200 wpisami, podczas gdy wiele wyliczeń mogłoby być mylące w oparciu o jednostki SI i imperialne oraz dodatkowy podział oparty na kategoryzacji samej jednostki. Wylicz przykłady pokazujące niektóre z moich obaw: > myUnits.Volt > myUnits.Newton > myUnits.meter > > SIUnit.meter > ImpUnit.foot DrvdUnit.Newton > DrvdUnitSI.Newton > DrvdUnitImp.FtLbs Nasz zestaw jednostek jest dość dobrze zdefiniowany i jest to skończona przestrzeń. Potrzebujemy możliwości rozszerzania i dodawania nowych jednostek pochodnych lub stawek, gdy mamy na nie zapotrzebowanie. Projekt jest w C#, chociaż myślę, że szersze aspekty projektowania mają zastosowanie do wielu języków. * * * Aktualizacja 1: Jedna z bibliotek, które przeglądałem, pozwala na swobodne wprowadzanie jednostek za pomocą łańcucha. Ich klasa UOM następnie przeanalizowała ciąg i odpowiednio umieściła elementy. Wyzwanie związane z tym podejściem polega na tym, że zmusza programistę do zastanowienia się i zapamiętania, jakie są prawidłowe formaty ciągów. I narażam się na błąd/wyjątek w czasie wykonywania, jeśli nie dodamy w kodzie dodatkowych sprawdzeń w celu sprawdzenia poprawności ciągów przekazywanych w konstruktorze. Inna biblioteka zasadniczo stworzyła zbyt wiele klas, z którymi programista musiałby pracować. Wraz z równoważną jednostką UOM dostarczała `DerivedUnit` i `RateUnit` i tak dalej. Zasadniczo kod był zbyt skomplikowany jak na problemy, które rozwiązujemy. Ta biblioteka zasadniczo zezwalałaby na dowolne kombinacje (co jest uzasadnione w świecie jednostek), ale cieszymy się, że możemy ograniczyć nasz problem (uprościć nasz kod), nie zezwalając na każdą możliwą kombinację. Inne biblioteki były śmiesznie proste i nawet nie brały pod uwagę na przykład przeciążania operatorów. Ponadto nie martwię się tak bardzo o próby błędnych konwersji (na przykład: wolty na metry). Deweloperzy są jedynymi, którzy będą mieli dostęp do tego poziomu w tym momencie i niekoniecznie musimy chronić się przed tego typu błędami.


title: Czasochłonny test jednostkowy dla obsługi 100 000 rekordów: czy robię to dobrze?

text: Pracuję nad dodaniem pokrycia testowego dla aplikacji, która wcześniej nie miała żadnego. Jednym z dodatkowych wymagań, które się pojawiły, jest to, że jeden z procesów działających w tle powinien być w stanie przetwarzać jednocześnie 100 000 wierszy. Napisałem test jednostkowy, który zapewnia, że proces w tle jest w stanie pracować ze 100 000 jednostek bez awarii interpretera (PHP) przy limicie pamięci 4,0 MB. Jednak zakończenie każdego testu trwa około 4 minut. Wszystkie inne testy trwają zaledwie 10 sekund. Czy można do tego podejść inaczej niż do testu jednostkowego?


title: Utrzymanie elastyczności dzięki polityce zero błędów/defektów

text: W naszym projekcie pracujemy w metodologii zero błędów (czyli zero defektów). Podstawową ideą jest to, że błędy mają zawsze wyższy priorytet niż funkcje. Jeśli pracujesz nad historią i zawiera ona błąd, należy go rozwiązać, aby historia została zaakceptowana. Jeśli błąd zostanie znaleziony podczas sprintu dla starszej historii, musimy umieścić go w naszym backlogu i rozwiązać go – najwyższy priorytet. Powodem, dla którego mówię o rozwiązaniu, jest to, że nie zawsze naprawiamy błąd. Czasami po prostu deklarujemy, że "nie naprawi", ponieważ nie jest to takie ważne. W sumie brzmi to świetnie. Wysyłamy produkty wysokiej jakości i nie nosimy „garbu” w postaci ogromnych zaległości. Ale nie jestem pewien, czy to podejście jest poprawne. Zwykle zgadzam się, że zawsze musimy jak najszybciej naprawiać poważne błędy i wyrzucać nieciekawe błędy. Ale co z błędami, które są ważne, ale nie tak ważne jak nowe funkcje? Wydaje mi się, że należy je umieszczać w zaległościach z odpowiednim priorytetem. Dla jasności podam przykład - w moim projekcie pracujemy z interfejsem użytkownika napisanym w flexie. Mamy ekran kreatora, który otwiera się w tym samym rozmiarze dla każdej rozdzielczości ekranu. Okazuje się, że gdy rozszerzamy okno kreatora, jedna ze stron nie wygląda dobrze (jest pionowy pasek przewijania, który nie znika, chociaż kreator może teraz wszystko zaprezentować i nie wymaga paska przewijania). Myślę, że ten błąd jest brzydki. Jestem pewien, że MUSISZ to naprawić. Ale mamy napięty harmonogram i mamy wiele funkcji, których obawiamy się, że nie zostaną wycięte i nie wejdą do wydania. Czuję, że z takim błędem możemy żyć. Trzeba to naprawić, ale ma niższy priorytet niż inne funkcje (więc na wypadek, gdybyśmy nie byli w stanie go ukończyć, przynajmniej nie pominęliśmy ważniejszych funkcji). Ale pracujemy zgodnie z zasadą 0 błędów i należy ją teraz naprawić (nawet jeśli spędziliśmy ponad dzień próbując ją rozwiązać i będziemy potrzebować co najmniej innej). Chciałbym usłyszeć opinie o tym, jak radzić sobie z błędami, których nie chcę oznaczać jako „nie naprawię”, ale też nie są najważniejsze.


title: Prowadzenie „historycznych” migracji w Django-południe

text: Po tym, jak system przeszedł wiele migracji i rozwinął się na tyle, aby powstała druga wersja, czy ma sens utrzymywanie starych migracji? Mam na myśli, że stare wersje będą ich używać do aktualizacji do nowej, jasne, ale czy nowa instalacja powinna mieć swoją bazę danych przejść przez wszystkie „historyczne” zmiany przed osiągnięciem obecnego kształtu? Mam przeczucie, że świeża instalacja powinna tworzyć bazę danych „tak jak jest”, a nie przechodzić przez każdy błąd, który został popełniony w cyklu życia produktu, aż do osiągnięcia stabilnego stanu. Ostatnio zadałem pytanie na SO dotyczące dzielenia aplikacji django na wiele. Problem polega na tym, że po tym, jak to zrobię, nigdy nie będę w stanie usunąć starej aplikacji, ponieważ wcześniejsze migracje innych nadal się do niej odnoszą i zerwałyby się bez niej, nawet jeśli aktualna wersja mojego projektu nie używa to już. OTOH, gdybym „przepisał historię” w dużej aktualizacji, mógłbym udawać, że zepsuta aplikacja nigdy nie istniała, co moim zdaniem sprawiłoby, że kod byłby czystszy (chociaż poprzednie poprawki nadal istniałyby w kontroli wersji). Powyższy scenariusz jest tylko przykładem, ale interesują mnie argumenty dotyczące ogólnego przypadku: czy świeże instalacje tworzą bazę danych w takiej postaci, czy przechodzą przez każdą migrację kiedykolwiek wykonaną w cyklu życia produktu?


title: Dlaczego nazywamy to „produkcją”?

text: Współpracownik zastanawiał się dzisiaj nad tym: „Dlaczego w naszej branży »produkcja« oznacza »ostateczny, możliwy do dostarczenia produkt«? że to się skończyło i widzowie to oglądają”.


title: Zarządzanie Entity Framework w Enterprise Projects (z setkami tabel)

text: W swojej pracy używam Entity Framework i napotkałem pewne problemy. Zazwyczaj słyszę o tworzeniu malutkich plików Edmx zawierających tabele związane z jakąś domeną, tj.: Help Desk Edmx, HR Edmx itp. Zamiast ładować wszystkie tabele do jednego dużego Edmxa, co byłoby znacznie prostsze, ale ze względów wydajnościowych (na czas projektowania i budowy), nie jest to wykonalne. Zajęło mi to trochę kłopotów, najpierw z tabelami commom, tj.: Tabele pracowników, to jest we wszystkich Edmxach, konflikt, gdy używam referencji do klasy Employee i używam obu przestrzeni nazw, a następnie muszę odwołać się do Empoyee klasy pod pełną nazwą MyCompany.HelpDesk.Employee. Nie wygląda to naturalnie. Ciągle dodaję te same tabele do wszystkich EDMX, jest to przeróbka i spędzam kilka minut na dodawaniu tabeli do projektu frameworka encji, ponieważ mam 2k tabel w oknie dialogowym Dodaj tabelę. Może VS2012 może być rozwiązaniem do ładowania tabel 2k w tym samym pliku Edmx (ponieważ projektant może być podzielony), ale nie wierzę w to, ponieważ opóźnia również kompilację, a nie tylko otwarcie projektanta. Inną opcją może być Code First, ale nie ma przyzwoitego narzędzia do odwracania bazy danych do klas, ponieważ próbuje załadować wszystkie tabele z bazy danych, co zajmuje około 2 godzin!


title: Najlepsza istniejąca licencja na kod zamkniętego źródła

text: Sam tworzę kilka aplikacji o zamkniętym kodzie źródłowym (żadna duża firma za mną) i zastanawiam się, jak je chronić. Na górze wszystkich plików z kodem źródłowym znajduje się dość prosta informacja o prawach autorskich: /********************************* *********************** * Copyright (C) 2010-2011 {name} <{email}> * * Ten plik jest częścią {project}. * * {projekt} nie może być kopiowany i/lub rozpowszechniany bez wyraźnej * zgody {name} ****************************** ***************************/ Jednak zaczynam myśleć, że to nie wystarczy. Bez pieniędzy na adwokata jestem zainteresowany każdą licencją o zamkniętym kodzie źródłowym, która zasadniczo mówi „Możesz z niej korzystać i to wszystko”. Znalezienie jednego z nich było niezwykle trudne, ponieważ mogę znaleźć tylko porównania licencji open source lub odpowiedzi „Znajdź prawnika”. Czy jest jakaś licencja o zamkniętym kodzie źródłowym _której mogę użyć_, która mówi coś podobnego do tej?


title: Nowy w projekcie, jak sobie z nim poradzić?

text: Właśnie dołączyłem do zespołu, który pracuje nad projektem od ponad półtora roku, jest mnóstwo dokumentów do przeczytania (specyfikacje, wymagania itp.), a repozytorium projektu jest pełne gałęzi i tagów, także ich jest dużo defektów i błędów, które należy poprawić, więc jestem teraz w przerażającej sytuacji. Powinienem może wspomnieć, że projekt wykorzystuje J2EE, WebServices. Więc jeśli ktoś ma jakieś rady jak do tego podejść. Dziękuję.


title: Najlepszy sposób na planowanie programowania dla małych zespołów?

text: Jestem dyrektorem małej organizacji startupowej. Obecnie mamy dwóch programistów (jeden doświadczony, drugi mniej doświadczony), którzy budują platformę aplikacji webowych. Jednym z największych dotychczasowych wyzwań jest proces planowania. Programiści zazwyczaj zajmują się planowaniem własnej pracy, ale my ciągle przekraczamy narzucone im terminy. Na przykład zadanie, które według szacunków zajmie 2 dni, kończy się na 8 dniach. Ciężko mi wesprzeć ich w planowaniu, bo brakuje mi technicznej wiedzy, jak precyzyjnie oszacować, jak długo potrwa dane zadanie. Czy masz jakiś pomysł: 1. Jaki jest tego powód, czy jest to powszechne dla programistów? 2. Co mogę zrobić, aby wesprzeć ich w planowaniu? Czy istnieją metody lub narzędzia przydatne programistom w małych zespołach?


title: jak przejść do programowania funkcjonalnego wyższego poziomu

text: najpierw przepraszam, jeśli to nie jest właściwe miejsce na to pytanie, ale myślę, że th.CS nie jest właściwym miejscem na pewno, podobnie jak StackOverflow. Bardzo lubię programowanie funkcjonalne i myślę, że jestem średniopoziomowym facetem w F# i dość dobrze rozumiem podstawowe pojęcia Haskella - i tak, myślę, że wiem/zakochałem się, jakbym wiedział, czym jest monada. Teraz naprawdę chcę przenieść to na wyższy poziom i zrozumieć, o co chodzi w całej tej rozmowie o funktorach i innych rzeczach. Po prostu nie wiem od czego zacząć. Poczytałeś coś o Rachunku Lambda? Teoria kategorii? Obaj trochę wiem i nie sądzę, że jest to właściwa/najszybsza droga do oświecenia. Może mógłbyś dać mi kilka wskazówek na ten temat. PS: Nie boję się matematyki i nie frustruję się łatwo na ćwiczeniach, ale wolałbym trochę wstępów/tekstów, w których można zapisać trochę kodu, ponieważ w ten sposób natychmiast otrzymujesz informację zwrotną.


title: Jak „proste” jest prawdziwe rozwiązanie KISS?

text: **Przyznaję się** : Mam problem z "Keep It Simple and Short" przez większość czasu, ponieważ próba zrobienia tego zgodnie z przeczytanymi książkami, wzorami projektowymi, które słyszałem itp. daje mi taki entuzjazm - entuzjazm płynący z poczucia, że jestem na właściwej drodze do prawdopodobnej doskonałości. Z drugiej strony, tak, czasami mnie to dodatkowo stresuje, jeśli chodzi o dotrzymywanie terminów... Ale ilekroć mówię sobie: „Następnym razem bądź prosty, ty głupcze!” Ciężko mi sprawić, by było to „proste”, kiedy nadejdzie następny raz, ponieważ zaczyna się to czuć dziwnie… i nieprzyjemnie po punkcie. Potem zaczynam oceniać moje rozumienie pojęcia 'prosty'... > Czy SIMPLE oznacza zbyt krótkie, że działa, ale trudne do utrzymania i rozszerzenia? > > Czy SIMPLE oznacza złamanie wielu zasad OOP? > > Czy SIMPLE oznacza oszukiwanie? > > Czy SIMPLE oznacza po prostu dotrzymywanie terminów bez opóźnień? itd. Właściwie, co to jest? **Pytanie brzmi** : Czy możesz napisać DOKŁADNĄ definicję PROSTEJ pod względem zasady KISS? -Jeśli jest. Dziękuję!


title: Co oznacza rezygnacja ze wsparcia dla Internet Explorera 6?

text: ![youtube ie6](http://i.stack.imgur.com/ef2UO.png) Kiedy Facebook, Youtube, a nawet sam Microsoft mówią, że „porzucili wsparcie dla IE6”, co tak naprawdę mają na myśli? Youtube nadal działa poprawnie w IE6. Jeśli mają na myśli, że zrezygnowali ze wsparcia dla wyglądu i wymyślnych funkcji, to ich punkt jest dyskusyjny. Twórcy stron internetowych od zarania dziejów degradowali wygląd i fantazyjny zestaw funkcji IE6. Więc co oznacza dla nas, twórców stron internetowych, to całe to wbijanie się w IE6 przez najlepsze firmy? Nie ma dużej witryny, która zrezygnowałaby z obsługi _funkcjonalności_ dla IE6, ponieważ obawiają się, że stracą około 5% klientów, którzy nadal z niej korzystają. Do dnia, w którym sam Google zablokuje wyszukiwanie w przeglądarce IE6, obniżając w ten sposób udział IE6 w rynku do prawie 0%, nie widzę, w jaki sposób to „upuszczanie wsparcia” cokolwiek zdziała.


title: Pamięć testów jednostkowych w aplikacjach na Androida

text: Ostatnio eksperymentowałem z aplikacjami na Androida. Opracowałem konwencję (którą widziałem gdzie indziej) umieszczania moich testów jednostkowych w równoległym folderze źródłowym w ramach projektu Eclipse. Działa to dobrze, ponieważ program uruchamiający Eclipse JUnit może łatwo znaleźć testy, a projekt z jego testami jest dobrze zawarty w projekcie. Jednak aplikacje na Androida mają bardzo specyficzną strukturę i nie sądzę, aby mój normalny projekt drzewa jednostek działał. Ponadto nie chcę, aby mój kod testowy znajdował się w opublikowanej aplikacji; może skutecznie podwoić rozmiar dysku. Jak zwykle organizowane są testy jednostkowe Androida?


title: Jak włączyć początkujących programistów do swojego projektu?

text: Rozważamy nauczenie niektórych pracowników, którzy mają zerowe lub ogólne doświadczenie w programowaniu hobbystów, aby odciążyli mnie pracą. Używamy Pythona/Django, który ma najbardziej przyjazną dokumentację i jest łatwy do nauczenia. Obecnie jestem jednoosobowym działem IT w mojej firmie i nie mam wystarczająco dużo godzin, aby rozwijać wszystko, czego firma potrzebuje. Nie jesteśmy firmą programistyczną, ale posiadanie własnego działu IT pomaga automatyzować zadania, rozwijać funkcje obsługi klienta, analizować dane itp. Jak powoli integrować nowicjuszy pracujących na Twojej bazie kodu? Powiedzmy, że masz stażystę – czym się zajmują? Zupełnie niechętnie pozwalam im projektować lub rozwijać podstawowy kod, ponieważ przez lata będziemy mieli do czynienia z ich błędami / dziwnymi wzorcami projektowymi. Jako główny programista będę tym, który będzie musiał obejść ich kod. Myślałem, że nowicjusze będą modyfikować tylko istniejący kod, nigdy nie budując podstawowych funkcji. Mogę zlecić im pracę prostymi zadaniami _po_ zbudowaniu samej funkcji. Chcielibyśmy, aby nasi pracownicy uczyli się / znajdowali wartość w firmie, a ludzie generalnie „wspinają się w górę rankingów”. Czy standardową praktyką jest uczenie ludzi z programowaniem na poziomie ogólnym/hobbystycznym? Jak „wspinanie się w górę rang” w firmie programistycznej działa dla młodszych programistów? Kiedy zaczynają pracować nad podstawowym kodem? Próbuję zdecydować, czy spowoduje to więcej szkód niż pomocy i czy istnieje sposób, w jaki możemy skorzystać z ich pomocy bez potencjalnego narażania podstawowego kodu witryny (odizolowane środowiska?). Dzięki za poświęcony czas!


title: Czy istnieje kanoniczna książka na temat rozpowszechniania obliczeń w Javie?

text: Ostatnie 2 i pół roku spędziłem na budowaniu aplikacji rozproszonej. Zaczęliśmy go testować kilka miesięcy temu i przenosimy go do produkcji. Wszystko działa całkiem dobrze, ale zdecydowanie mogłoby działać lepiej. Szukam książek, które mogę przeczytać, które pomogą upewnić się, że nie popełniamy żadnych oczywistych błędów. Szukałem w Internecie i nie znalazłem niczego od autorów, których uznaję za ekspertów. Inni mieli dziesięć lat. Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje na temat programowania rozproszonego w Javie? Co w tej książce czyni ją wyjątkową?


title: Sterty: Dlaczego istnieje kompromis między ilością zajmowanego miejsca (fragmentacja) a szybkością wykonywania operacji?

text: Najwyraźniej dwa główne kryteria oceny skuteczności stosów to (1) jak bardzo możemy zminimalizować ilość zajmowanego przez nie miejsca oraz (2) jak szybko można wykonać operacje na hałdzie, np. malloc i free. Zastanawiałem się, w jaki sposób te dwa kryteria są powiązane, a mianowicie, dlaczego istnieje „kompromis” i dlaczego szybsza sterta utrudnia _mniejszy_ rozmiar. Ponadto, dlaczego musi istnieć określone wyrównanie alokacji (na przykład 8- lub 16-bajtowe), gdy rozmiar słowa wynosi wyraźnie 4 bajty? Jeśli alokujesz int i double, czy nie może to być po prostu: `alokuj int w lokalizacji 0` a następnie `alokuj double w lokalizacji 4` (i potem w jakiś sposób zapamiętuj fakt, że podwójne słowo znajduje się w tej lokalizacji )? Wtedy wyeliminowalibyśmy DUŻO fragmentacji w stercie...


title: Właściwości identyfikatora obiektów domeny w DDD

text: W mojej domenie mam obiekt `Konto`. np. class Konto { public string Numer; ciąg publiczny SortCode; } Czy w kontekście DDD ten obiekt konta powinien mieć właściwość `ID`? „ID” byłby kluczem podstawowym, w zasadzie artefaktem bazy danych.


title: Dlaczego C nie jest uważany za język „zorientowany obiektowo”?

text: Wydaje się, że C ma swoje własne quasi-obiekty, takie jak „struktury”, które można uznać za obiekty (w sposób wysokopoziomowy, o którym normalnie byśmy myśleli). Poza tym same pliki C są w zasadzie oddzielnymi „modułami”, prawda? Czy zatem moduły też nie są czymś w rodzaju „obiektów”? Jestem zdezorientowany, dlaczego C, który wydaje się tak podobny do C++, jest uważany za język „proceduralny” niskiego poziomu, podczas gdy C++ jest wysokopoziomowy „zorientowany na obiekt” *edytuj: (wyjaśnienie) dlaczego i gdzie jest narysowana linia, czym jest „obiekt”, a czym nie jest?


title: Implementacja słowa kluczowego „const”

text: Stały wskaźnik to wskaźnik, który wskazuje na stałą lokalizację w pamięci. Pytanie brzmi, jak zapewnić, że to zachowanie jest zapewnione bez użycia słowa kluczowego stała podczas deklarowania wskaźnika w programie C.


title: Dlaczego makra nie są zawarte w większości nowoczesnych języków programowania?

text: Wiem, że są one zaimplementowane wyjątkowo niebezpiecznie w C/C++. Czy nie można ich wdrożyć w bezpieczniejszy sposób? Czy wady makr są naprawdę na tyle poważne, że przewyższają ogromną moc, jaką zapewniają?


title: jak wybrać framework webowy i bibliotekę javascript?

text: Odwlekałem naukę jakiegoś frameworka dla aplikacji webowych z biblioteką dla AJAX, czegoś takiego jak django z prototypem, turbogears z mootools, czy komponenty zeta z dojo, grok, jquery, symfony... Chodzi o to, aby wydać trochę mój wolny czas, baw się dobrze i twórz fajne rzeczy, które mam nadzieję, że się przydadzą. Myślę, że może nie spodobałoby mi się coś takiego jak GWT lub piżama, ponieważ nie chciałbym „ożenić się” z jakąś technologią, chcę zachować swobodę dodawania kolejnej biblioteki javascript i tak dalej. Nie zdecydowałem jeszcze nawet języka, ale myślę, że wolałbym pytona. PHP może być w porządku, jeśli istnieje wystarczająco dobry framework. Poza tym nawet nie wiem od czego zacząć. Nie mam ochoty uczyć się frameworka, aby zdać sobie sprawę, że jest coś, czego nie mogę wygodnie zrobić, przełączyć się na inny framework, a następnie odkryć, że trzeci framework ma coś naprawdę fajnego itp. To samo dotyczy bibliotek javascript. Tak więc, niektóre wskazówki byłyby naprawdę mile widziane. Naprawdę nie wiem, dlaczego dostępnych jest tak wiele opcji i do czego służą, myślę, że niektóre z nich koncentrują się na niektórych aspektach, a niektóre na innych, ale chcę po prostu tworzyć fajne i ładne aplikacje, które mogę łatwo utrzymać, bez spędzanie zbyt dużo czasu na kodowaniu lub uczeniu się i unikaniu poczucia „uwięzienia w ramach”, gdy robienie czegoś jest strasznie skomplikowane (lub nawet niemożliwe) w porównaniu z resztą rzeczy lub robienie tego samego w innym środowisku. Chyba w końcu wybiorę django i jquery, ponieważ są to najczęściej używane opcje, afaik, ale jeśli miałbym wybierać najczęściej używane opcje, to chyba powinienem wybrać Javę lub PHP (tak naprawdę nie lubię Ja w wolnym czasie, ale php nie jest takie złe), więc wolałem najpierw zapytać. Myślę, że pytanie musi dotyczyć zarówno frameworka, jak i biblioteki, ponieważ czasami są one połączone. Myślę, że jest to miejsce, w którym można zadać takie pytania, przepraszam, jeśli nie, i dziękuję.


title: Czy wielostronicowa aplikacja internetowa jest nieodpowiednia, gdy wymagane są niezawodne serwery push?

text: Wyobraź sobie aplikację internetową call center z telefonem programowym, który automatycznie wykrywa, kiedy połączenie zostało rozpoczęte lub rozmówca się rozłączył. Oczywistym podejściem do odbierania tych wiadomości byłby jakiś rodzaj serwera push (czyli Comet). To dość katastrofalne, jeśli przegapimy jedno z tych pushów serwera. **Czy ta aplikacja musi być napisana jako jednostronicowa aplikacja z dużą ilością JavaScript, czy też bardziej tradycyjna wielostronicowa aplikacja jest również niezawodną opcją?** (A może po to są `iframe`s?) Moje największe zmartwienie korzystanie z aplikacji wielostronicowej powoduje utratę wiadomości push podczas zmiany stron. Moim największym zmartwieniem związanym z używaniem aplikacji jednostronicowej jest złożoność.


title: Jak kosztowne są wbudowane typy dyktowania i ustawiania w Pythonie?

text: Podjąłem projekt dotyczący deduplikacji baz danych. Zrobiłem trochę badań i odkryłem, że typ dict w Pythonie jest w rzeczywistości hashmapą, która używa otwartego adresowania. W module deduplikacji będziemy mieć kilka reguł, które określają, czy dwa rekordy są identyczne, z regułami zasadniczo określającymi atrybuty, które jednoznacznie identyfikują rekord (nie nazywamy tego kluczem kandydującym, ponieważ baza danych będzie nierelacyjna , bez SQL). Załóżmy teraz, że mamy do czynienia z naprawdę dużym zbiorem danych. Oczywiście hasz jest drogą do zrobienia (znalazłem tę radę tutaj). Pytanie (pytania): * czy moduł musi obliczyć hash _i_, a następnie przechowywać go w dyktacie? Czy nie byłoby to niepotrzebne, ponieważ implementacja dict jest sama w sobie hashmapą? * jak kosztowna jest konwersja listy do zestawu? Ta konwersja powinna usunąć wszystkie duplikaty, ale biorąc pod uwagę ogromną skalę, czy jest to praktyczne? * jaki jest koszt sprawdzania członkostwa w dyktat/zestawie za pomocą słowa kluczowego "w"? Hadoop MapReduce nie jest przynajmniej na razie opcją. Naprawdę nie mogę zagłębić się w źródła Pythona, aby to rozgryźć, ponieważ jestem ściśle ograniczony czasowo :|


title: W jakim kierunku powinienem wziąć pod uwagę przesunięcie podczas wyszukiwania ciągów w odwrotnej kolejności?

text: Tworzę funkcję narzędziową indexOfReverse w moim programie C++ i złapałem trochę szkopuł. Implementacja offset i maxOffset w moim indexOf była dla mnie bardzo intuicyjna. Zaczynają się od początku ciągu (+offset) i idą do końca ciągu (lub maxOffset, jeśli podano). Jednak podczas wdrażania offsetów dla indexOfReverse zastanawiałem się, jaki jest najbardziej logiczny sposób, aby to zrobić? Czy przesunięcie powinno być od początku ciągu, czy od końca ciągu? Czy jest jakaś ustalona norma, której gdzieś mi brakuje? Próbowałam wytłumaczyć to mojej kaczce, ale po prostu spojrzał na mnie dziwnie. Skłaniam się ku myśleniu o tym od samego początku, ponieważ łatwość użycia jest dla mnie bardziej wartościowa niż jego przeciwintuicja.. uwzględnienie przesunięcia od końca tylko utrudnia myślenie w mojej głowie. Przyjrzałem się, jak to się robi w bibliotece ciągów dla C ++, PHP i Python, a to, co wydaje się wspólne w opisie każdego z nich, to znalezienie ostatniego wystąpienia ciągu, w którym przesunięcie jest rozważane od początku, zamiast robić prawdziwe wyszukiwanie odwrotnych ciągów... Ale wolę prawdziwe wyszukiwanie odwrotnych ciągów, a nie ostatnie wystąpienie ofs. Czy jest jednak najbardziej logiczny sposób na rozważenie tego, abym mógł przejść dalej?


title: Kształcenie ustawiczne jako część Twojej pracy

text: Pracuję jako programista w średniej wielkości firmie (około 500 pracowników) z branży medycznej. Wcześniej pracowałem w firmie zajmującej się tworzeniem oprogramowania/doradztwem na zamówienie. W obu firmach programiści nigdy nie otrzymali oficjalnie czasu na kontynuowanie nauki poprzez uczęszczanie na zajęcia, czytanie książek lub blogów lub prowadzenie badań związanych z pracą. W firmie programistycznej zaoferowano nam trochę pieniędzy na opłacenie zajęć, ale nie zaoferowano nam żadnego wolnego od pracy, aby wziąć udział w zajęciach. Zastanawiałem się, czy większość pracodawców programistów daje czas wolny od pracy, aby wziąć udział w zajęciach, przeczytać książkę lub przeprowadzić badania związane z pracą? Przez czas wolny od pracy rozumiem po prostu czas, w którym można zatrzymać rozwój; nie musi to oznaczać wyjścia z biura. Byłbym wdzięczny, gdybym usłyszał o doświadczeniach wszystkich z tym.


title: Kod testu wysyłki jako forma kontroli rozsądku

text: Czy kiedykolwiek wysłałeś kod testowy (JUnit, NUnit itp.) ze swoją aplikacją, który może być uruchamiany przez użytkownika końcowego? Podstawowa idea jest następująca: Aplikację można wdrożyć w zróżnicowanym środowisku i trudno jest zebrać wszystkie możliwe kombinacje sprzętowo-programowe lub wymagania wstępne dla aplikacji. Możliwe jest jednak napisanie zestawu testów, który zapewni, że aplikacja ma wszystko, czego potrzebuje do wykonania danego zadania. Niestety trzeba to zrobić przez mockowanie kilku komponentów, aby test nie miał wpływu na rzeczywiste środowisko produkcyjne. Wysłanie tych testów niesie ze sobą wyraźne korzyści, takie jak: * Daj klientowi możliwość sprawdzenia, czy system jest w porządku. * dostarczaj raporty pomagające w diagnozowaniu problemów. * zapewniać zespołowi wdrożeniowemu środki na potwierdzenie, że ich konfiguracja powinna działać * itd. Naturalnym sposobem na to byłoby posiadanie podzbioru testów, które są faktycznie spakowane z aplikacją (jako oddzielny projekt lub jako część każdego komponentu całości ). Jeszcze bardziej naturalne byłoby użycie narzędzi i technik, których już używamy do naszych własnych testów jednostkowych, a mianowicie biblioteki testów jednostkowych, ramy mockingu itp. Czy kiedykolwiek to zrobiłeś? Jak to zrobiłeś? albo dlaczego uważasz, że to bardzo zły pomysł?


title: Czy używasz interfejsu jako systemu tagowania kodu?

text: Czy używasz interfejsu jako systemu tagowania kodu, czy masz lepszy sposób na zapamiętanie, który obiekt co robi? jak pamiętasz złożony system, po zastosowaniu abstrakcji.


title: Dependency Injection: gdzie przechowywać zależności używane tylko przez jedną metodę?

text: Rozwijam projekt zintegrowany z Dependency Injection (dla porównania używam Unity). Problem polega na tym, że mam kilka klas Managera z kilkoma metodami i w wielu przypadkach mam zależności używane tylko w jednej metodzie. public class UserReportManager : IUserManager { private UserRepository UserRepository {get;set;} private TeamRepository TeamRepository {get;set;} private CacheRepository CacheRepository {get;set;} private WorkgroupRepository WorkgroupRepository {get;set;} public UserManager(UserRepository userRepository, TeamRepository teamRepository , CacheRepository cacheRepository , WorkgroupRepository workgroupRepository, ... // Wiele innych zależności ) { UserRepository = userRepository; TeamRepository = teamRepository; CacheRepository = cacheRepository ; WorkgroupRepository = workgroupRepository; ... // Ustawienie pozostałych zależności } public void CreateReportAboutMostActivesUsers(){ // Wykorzystuje tylko UserRepository } public void CreateReportAboutUserInsideTeams(int teamID){ // Używa UserRepository i TeamRepository } public void CreateReportAboutUserHistory(){ // Używa UserRepository i Cache public void CreateReportAboutUsersInsideWorkgroup(int workgroupID){ // Używa UserRepository i WorkgroupRepository } } Instancja UserManager jest tworzona w następujący sposób: DependencyFactory.Resolve<IUserManager>(); Uwaga: DependencyFactory to tylko opakowanie ułatwiające dostęp do UnityContainer. Czy można mieć takie klasy w przykładzie? Czy istnieje lepszy sposób na zaimplementowanie unikania tworzenia instancji wszystkich niepotrzebnych zależności?


title: Czy klasyczny BASIC był kiedykolwiek używany do tworzenia oprogramowania komercyjnego, a jeśli tak, to w jaki sposób przezwyciężono ograniczenia?

text: Wielu z nas, w tym ja, rozpoczęło swoje życie programistyczne od programów napisanych na komputerach domowych, np. 10 PRINT "ENTER RADIUS" 20 INPUT R 30 PRINT "CIRCUMFERENCE="; 2 * R * PI 40 WYDRUKOWAĆ "PONOWNIE?" 50 INPUT A$ 60 IF A$="Y" TO GOTO 10 70 END Oczywiście BASIC oparty na numerach linii był podatny na tworzenie kodu spagetti, również dlatego, że większość dialektów BASIC pomijała instrukcje strukturalne, takie jak `WHILE`, robiąc wszystko oprócz Pętla „FOR” z „IF”, „GOTO” i „GOSUB”. Mówię o dialektach BASICa sprzed 1991 roku, kiedy pojawiły się QBASIC i Visual Basic. Chociaż dialekty BASIC mogły promować zły styl wśród początkujących programistów, czy były większe komercyjne projekty stworzone w takim dialekcie BASIC? Jeśli tak, to jak udało im się żyć i obejść oczywiste niedociągnięcia? Przez „poważną” mam na myśli: * Nie grę (wiem, że niektóre komercyjne gry zostały napisane w BASIC, na przykład Pimania) * Nie freeware * Nie trywialne, czyli dość duże (powiedzmy: co najmniej 1500 LOC) * Sprzedane dla kilku klientów (nie we własnym zakresie) * „Misja krytyczna” jest plusem


title: Projekt interfejsu, w którym funkcje muszą być wywoływane w określonej kolejności

text: Zadanie polega na skonfigurowaniu elementu sprzętowego w urządzeniu, zgodnie z pewną specyfikacją wejściową. Należy to osiągnąć w następujący sposób: 1) Zbierz informacje o konfiguracji. Może się to zdarzyć w różnym czasie i miejscu. Na przykład moduł A i moduł B mogą żądać (w różnym czasie) niektórych zasobów z mojego modułu. Te „zasoby” są w rzeczywistości konfiguracją. 2) Gdy jest jasne, że żadne żądania nie będą realizowane, do sprzętu należy wysłać polecenie startowe, zawierające podsumowanie żądanych zasobów. 3) Dopiero po tym można (i trzeba) dokonać szczegółowej konfiguracji wspomnianych zasobów. 4) Ponadto, dopiero po 2), można (i trzeba) wykonać routing wybranych zasobów do zadeklarowanych rozmówców. * * * Częstym powodem błędów, nawet dla mnie, który to napisałem, jest pomylenie tej kolejności. Jakie konwencje nazewnictwa, projekty lub mechanizmy mogę zastosować, aby interfejs był użyteczny dla kogoś, kto widzi kod po raz pierwszy?


title: Jak zdobywać doświadczenie?

text: Jest to problem, który myślę, że wiele osób uzna za bardzo powszechny i niektóre wskazówki od doświadczonych użytkowników będą mile widziane. **Tło** Zasadniczo jestem junior web developerem w zespole 6 (wszyscy juniorzy też). 6 miesięcy temu nasz lider zespołu i kierownik projektu odszedł z firmy. Obecnie jesteśmy zarządzani przez osobę nietechniczną. Nowy menedżer wybrał mnie na stanowisko kierownika technicznego dla reszty zespołu, dopóki firma nie zatrudni kogoś bardziej doświadczonego. **Problem** Chociaż jestem dobrym programistą, brakuje mi trochę doświadczenia w dostarczaniu rozwiązań na potrzeby firmy. Mam na myśli to, że nie mam problemu z **wdrażaniem** rozwiązań czy dodawaniem nowych modułów do systemu, ponieważ pracuję już 2 lata w PHP i MySql. Problem pojawia się, gdy projektujemy nową ciężką funkcję lub budujemy krytyczny moduł, który nie toleruje prób i błędów. Sprawdź ten link pod kątem problemu projektowego, który ostatnio musiałem zaimplementować: http://stackoverflow.com/questions/10529459/building-a-cron-job-scheduler Mogę łatwo zbudować wszystkie rozwiązania, o których wspomniałem w poście. Jedynym problemem jest to, że nie mam wystarczającego doświadczenia, aby wybrać jedną z nich. Mój były lider zespołu podejmował trudne decyzje i naprawdę wiele się od niego nauczyłem. Jednak teraz go nie ma, a ja jestem sam. **Rozwiązanie** Teraz są 2 rozwiązania, które uznałem za najlepsze dla mnie: 1. Opuść firmę JAK NAJSZYBCIEJ :D i znajdź lepszą firmę, która zapewni mi dobre doświadczenie i poszerzy moją wiedzę (chociaż nie mogę odejść w najbliższym czasie z różnych powodów). 2. Znajdź książki, referencje lub wszelkie dostępne materiały do projektów na dużą skalę lub technik pro web developerów. W zasadzie wszystko poza prostymi aplikacjami. To jedyna opcja, jaką mam w tej chwili. **Uwagi:** Nie szukam zasobów do nauki PHP, MySql, frameworków, ORM-ów ani wzorców projektowych. Chcę transferu wiedzy od doświadczonych programistów.


title: Łączenie w komentarzach do kodu (do innych unikalnych kotwic/komentarzy)

text: Jak byś polecił tworzenie „kotwicy” w komentarzach do kodu, aby podczas konserwacji programiści mogli łatwo odwoływać się do innych komentarzy do kodu. Zdaję sobie sprawę, że oprogramowanie powinno być inteligentnie skonstruowane i powinno to w pewnym stopniu złagodzić ten wymóg, ale często pisałem komentarz, w którym chciałbym, aby przyszli programiści wzięli pod uwagę coś innego (niekoniecznie bezpośrednią zależność). Na przykład „Jeśli zmienisz ten mechanizm, koniecznie przejrzyj XYZ”. Mam na myśli hiperlinki w stylu wiki, gdzie każdy link ma unikalny identyfikator i może mieć relację jeden-do-wielu z innymi linkami. Idealnie, jeśli ktoś przepisuje część mojego kodu, chciałbym, aby automatycznie otrzymał ostrzeżenie, że „coś innego linkuje tutaj i powinieneś to sprawdzić w przypadku, gdy to zmieniasz” – i nie mam na myśli zerwania czegoś jak w "coś się nie skompiluje", ale tak naprawdę jest to łatwy do naśladowania wskaźnik (lub wskaźniki) do innego miejsca w bazie kodu, które ktoś (lub twoje przeszłe ja) uważał, że istnieje zrozumiałe dla człowieka połączenie koncepcyjne, koncepcja lub realizacja. Byłbym zdziwiony, gdyby nie było już na to standardu, ale wyszukiwanie "komentarza", "linku", "kotwicy" w zrozumiały sposób daje przysłowiowy stóg siana.


Dlaczego 80 znaków to „standardowy” limit szerokości kodu? Dlaczego 80, a nie 79, 81 czy 100? Skąd pochodzi ta konkretna wartość?


title: Czy istnieje metodologia tworzenia oprogramowania, która najlepiej nadaje się do tworzenia iPhone'a?

text: Która metodologia zarządzania projektami i tworzenia oprogramowania najlepiej nadaje się do rozwoju iPhone'a? Czy są dostępne szablony dokumentacji, które dokumentują projekt iPhone Development?


title: co liczy się jako „doświadczenie” z określonym językiem?

text: Jestem studentem CS, który aktualnie szukam letnich praktyk, szczególnie dlatego, że chcę tworzyć aplikacje na Androida i/lub iOS. Szukając wymagań dla różnych możliwości (dowolnych możliwości rozwoju oprogramowania, nie tylko tych, które wymieniłem) wyświetli się "Doświadczenie z x, y, z....". Moje pytanie: co dokładnie liczy się jako doświadczenie z określonym językiem lub technologią? Mam szczęście, że na studiach uniwersyteckich miałem okazję używać kilku języków, od VB po montaż MIPS. Jednak osobiście, z kilkoma wyjątkami, nie uważałbym się za wystarczająco kompetentnego w większości języków, których używałem, aby zostać postawionym w pozycji i kazać kodować x według y daty. Być może znam podstawy języka, składnię i to, co go wyróżnia, ale nie wystarczy, aby opracować funkcjonalne oprogramowanie bez pewnych wskazówek, od czego zacząć, jakich bibliotek użyć itp. Aby użyć konkretnego przykładu, z którym mam teraz do czynienia: staż Jestem zainteresowany wymieniam doświadczenie z C i/lub C++ jako wymóg. Zrobiłem trochę pracy w C, wiem, co możesz, a czego nie możesz zrobić, posiadam i przeczytałem K&R, rozumiem, jak działają wskaźniki itp. Ale tak naprawdę nie napisałem znacznej ilości kodu w C, ja Napisałem kilka krótkich programów i zmodyfikowałem kilka innych, ale nigdy nie napisałem niczego wystarczająco dużego, w którym musiałem zarządzać alokacją pamięci lub wymyślać jakieś abstrakcje, aby uzyskać pożądaną funkcjonalność. Więc chociaż czuję, że mam koncepcyjne zrozumienie, nie zastosowałem go. Czy rozumienie pojęciowe liczy się jako doświadczenie? Zawsze chętnie się uczę i poszerzam swoją wiedzę, ale nie chcę też przesadzać (co wydaje się być przeciwieństwem tego, co każą ci robić na podaniach o pracę). Myśli? Rada?


title: Ponowne wykorzystanie kodu w kilku projektach klientów

text: Od 6 lat jestem niezależnym twórcą stron internetowych. Mam problem, który mnie niepokoi i proszę o radę. (Uwaga: Potrzebuję porady od _doświadczonych niezależnych programistów_ lub osób, które były już w takich sytuacjach i potrafią mówić z doświadczenia, _nie_ od osób, które tylko zgadują...) Pracowałem przez kilka lat dla Klienta A, i stworzona dla nich aplikacja internetowa. Teraz mam nowego klienta, Client B, i tworzę dla niego aplikację internetową. Przez lata opracowałem wiele narzędzi ogólnego przeznaczenia, których używałem dla Klienta A. Na szczęście większość z nich znajduje się w osobnym repozytorium o otwartym kodzie źródłowym i opracowałem je w swoim własnym czasie. Ale niektóre narzędzia znajdują się w repozytorium Klienta A i zgodnie z prawem są adresem IP Klienta A. Nie są one specyficzne dla aplikacji tego klienta, ale są ogólne (takie jak narzędzia do obsługi godzin i dat, narzędzia do manipulowania adresami URL itp.) Teraz, jak Rozpocząłem pracę nad kodem Klienta B, skopiowałem wszystkie narzędzia i używam ich do projektu Klienta B. Wiem, że to nielegalne, ponieważ należą do Klienta A, ale zastanawiam się, jak wielka to wielka sprawa. Proszę nie ze względu na te 2 klientów, które są małymi firmami niezwiązanymi z technologią, które raczej nie dbają ani nawet nie wiedzą, ale o podobną sytuację w przyszłości mojej kariery konsultingowej. Rozważałem poproszenie Klienta A o udostępnienie narzędzi, ale raczej nie. Jestem jedynym programistą w firmie i taka prośba może wydawać się podejrzana prezesowi. Z punktu widzenia dyrektora generalnego ma on (1) niewielkie zrozumienie sytuacji i (2) coś do stracenia i (3) nic do zyskania oraz (4) wiele ważnych rzeczy, nad którymi należy popracować, a które są kluczowe dla firma. Proszę o radę, zwłaszcza o to, co robiłeś w takich sytuacjach i czy okazało się to problemem w praktyce.


title: Pytanie o przechowywanie haseł

text: Tworzę program (w C++), który będzie zabezpieczał hasłem plik bazy danych użytkownika (.dat). Nie wiem, gdzie przechowywać hasło? W pliku bazy danych użytkownika lub gdzie indziej. Jestem nowy w tej koncepcji. Nie wiem, gdzie program powinien przechowywać zaszyfrowane hasło. Myślałem o tym od dawna. Ja też mam pytanie. Jeśli program przechowuje zahaszowane hasło w pliku bazy danych (wraz z danymi użytkownika), czy osoba atakująca może zmienić hash wewnątrz pliku na zwykły hasz, taki jak hash tekstu „hasło”, tak aby hasło stało się „hasłem” ? Edycja: OK! Nieco zrozumiałem koncepcję przechowywania haseł. Zrozumiałem to: > Uzyskaj hasło od użytkownika > > Zahaszuj je (będę używał SHA-512) > > Przechowuj hash w pliku bazy danych > > Gotowe Prawdopodobnie nie zrozumiałem koncepcji skrótu symetrycznego . Proszę o wyjaśnienie mi w prosty sposób. A moje pytanie brzmi... lepiej wyjaśnię to na przykładzie. Załóżmy, że jest to zawartość pliku użytkownika thisismydatabasefile Użytkownik decyduje o dodaniu hasła. Wpisuje hasło, a my je mieszamy. Wygenerowany hasz to somerandomhash. Szyfrujemy plik z hasłem somerandomhash, a hash jest zawarty w zaszyfrowanym pliku. Więc teraz zawartość pliku jest zaszyfrowanafilesomerandomhash Wyobraź sobie, że atakujący dostał zaszyfrowany plik bazy danych. Wie, że hash hasła to „somerandomhash”. Teraz modyfikuje hash hasła „somerandomhash” na coś pospolitego, takiego jak „somehashthatheknows”. Więc jaki jest lepszy sposób na przechowywanie hasła. Dla ułatwienia, w jaki sposób programy takie jak zip, 7z, rar itp. przechowują hasła w pliku archiwum?


title: Czy powinienem zmienić architekturę aplikacji internetowej klienta?

text: Odziedziczyłem projekt, który narastał, warstwa po warstwie, jak perła przez ostatnie sześć lat. Zaczęło się jako strona internetowa, aby umożliwić klientowi sprawdzanie stanu swojej pracy w produkcji, a następnie stało się pełnoprawnym systemem koszyka na zakupy z różnymi funkcjami specyficznymi dla domeny, które obejmują wizualizację niestandardowej grafiki. Nic trudnego, choć z wieloma elementami raczej charakterystycznymi dla tego klienta. Problem polega na tym, że kod jest bardzo zawiły, co nie jest zaskakujące, biorąc pod uwagę jego dziedzictwo: w tym momencie jest jak gigantyczna kula taśmy klejącej, w tym schemat bazy danych; iz tego powodu naprawdę trudno jest się nad tym zastanowić, a także dlatego, że programiści, którzy odpowiadali za to przez ostatnie sześć lat, nie byli programistami stron internetowych i jakby to wszystko zmyślali. W każdym razie system jest skuteczny i użyteczny, a klientowi się podoba, do tego stopnia, że chce regularnie dodawać do niego nowe rzeczy. Ale naprawdę trudno jest dodawać do niego nowe rzeczy, ponieważ jest to kruche, a ja jestem coraz bardziej skłonny do wyrzucania wszystkich nowych projektów na starą bazę kodu i przepisywania rzeczy w Railsach (w tej chwili wszystko to jest niestandardowe PHP.) Pytanie brzmi, powinno I? Powody przeciwko: * Zawsze jest o wiele więcej pracy przy przeprojektowywaniu aplikacji, niż myślisz * Zwłaszcza, gdy robisz to w innym języku i innym frameworku * Utrzymanie dwóch baz kodu (przez jakiś czas) będzie dodatkowe praca * Lepiej byłoby pisać stopniowo od nowa, utrzymywać w PHP i przeprojektowywać na bieżąco Powody: * W tym momencie dodawanie nowych funkcji wymaga rozerwania rzeczy na strzępy i sprawdzenia, co zepsułem. Redesign zwróciłby się w krótkim czasie, gdy proces ten stałby się bardziej regularny i mniej chaotyczny * Potrzeby klienta znacznie się zmieniły w ciągu ostatnich sześciu lat i dobrze byłoby, gdyby od początku znalazły odzwierciedlenie w architekturze * Przejście do popularny, powszechnie wspierany i dobrze rozumiany framework da nam luksus nie wymyślania koła na nowo dla każdej części systemu i pozwoli nam na użycie wysokiej jakości komponentów wykonanych przez innych ludzi. Naprzemiennie robię to, co uważam za słuszne. Mam dobre relacje z klientem, a on mi ufał, więc prawdopodobnie zrobi to, co polecam. Czy ktoś, kto był tu wcześniej, ma jakąś radę?


title: Co oznacza dynamiczna ocena kodu?

text: Poniższy tekst pochodzi z przedmowy do nowej książki Jona Resiga: Sekrety JavaScript Ninja > Części tej książki, które opisują stosunkowo niezmienne funkcje, > takie jak ewaluacja kodu, instrukcje i liczniki czasu, > są stale używane w interesujących sposoby. Obecnie istnieje wiele aktywnych języków programowania, które są zbudowane na bazie lub skompilowane z JavaScriptem: Na przykład CoffeeScript lub Processing.js. Języki te wymagają złożonego > analizowania języka, oceny kodu i manipulacji zakresem w celu > efektywnej pracy. Chociaż dynamiczna ocena kodu została oczerniona ze względu na > złożoność i potencjalne problemy z bezpieczeństwem, bez niej nie mielibyśmy > języka programowania CoffeeScript – który wpłynął na > samą nadchodzącą specyfikację ECMAScript. > > Osobiście wykorzystuję wszystkie te funkcje, nawet dzisiaj, w mojej pracy > w Khan Academy. Dynamiczna ocena kodu w przeglądarce jest potężną > funkcją: możesz tworzyć środowiska programistyczne w przeglądarce i robić szalone > rzeczy, takie jak wstrzykiwanie kodu do działającego środowiska wykonawczego. Może to skutkować > niezwykle atrakcyjnym sposobem nauki programowania komputerowego i zapewnieniem różnego rodzaju > możliwości, które nie byłyby możliwe w > tradycyjnym środowisku uczenia się. Czym właściwie jest „Dynamiczna ocena kodu”? Jakie są jego zalety? Proszę zilustrować ładnie zaaranżowanym przykładem.


title: Czy muszę dostarczać klientom moje narzędzie i kod pomocniczy?

text: Przez lata stworzyłem kilka bibliotek narzędziowych i pomocniczych Java, które po prostu dołączam do nowych projektów. Następnie, kiedy dostarczam kod moim klientom, wysyłam cały kod **z wyjątkiem** samych bibliotek (nie JAR-ów, ale plików kodu źródłowego). Klient skarżył się, że nie może skompilować projektu, ponieważ brakuje niektórych bibliotek. Próbowałem wyjaśnić mu o moich własnych bibliotekach, ale nie był zadowolony. Jak radzisz sobie w takich sytuacjach? Wciąż często dokonuję zmian w tych bibliotekach i nie mogę skompilować plików JAR za każdym razem, gdy zaczynam pracę nad jakimś nowym projektem. Jak przezwyciężyć ten problem – nie udostępniać prywatnych bibliotek (osobista własność intelektualna) i mieć zadowolonych klientów?


title: Wzorce projektowe do zarządzania wieloma oknami/ekranami?

text: Załóżmy, że istnieje aplikacja z wieloma oknami, np.: Logo powitalny Ekran Łączenie... ekran Logowanie-kontrola użytkownika Ekran logowania... itp. Czy istnieje wzorzec projektowy, który pozwala efektywnie zarządzać wszystkimi tymi oknami? (aby ukryć poprzednie okna, wyświetlić nowe okno itp.)


title: Prawidłowe przypisanie pracy pochodnej w projekcie GPL

text: Jest to kontynuacja przepisywania przeze mnie projektu na GPL. Jaki będzie prawidłowy sposób uznania mojego projektu za pochodną innego projektu na licencji GPL? Do tej pory wymyśliłem: HgSharp Original Copyright Matt Mackall <mpm@selenic.com> i współpracowników. Poniższy kod jest dziełem pochodnym kodu projektu Mercurial na licencji GPLv2. Dlatego ten kod jest również licencjonowany na warunkach Licencji Publicznej GNU, wersja 2. Aby uzyskać informacje na temat licencji tego kodu, gdy jest on dystrybuowany i używany w połączeniu z innymi modułami w projekcie HgSharp, zobacz plik KOPIOWANIE na poziomie głównym . Prawa autorskie 2011-2012 Anton Gogolev <anton.gogolev@hglabhq.com>


title: W jaki sposób kwantowany jest histogram 256 bin HSV?

text: Przeprowadzam badania nad deskryptorem ScalableColor w MPEG-7 i natknąłem się na następujący fragment: > Ekstrakcja deskryptorów zaczyna się od obliczenia koloru > historgam z 25 binami w przestrzeni kolorów HSV z komponentem Hue (H) > skwantowany do 16 przedziałów, a Nasycenie (S) i Wartość (V) skwantyzowane do 4 przedziałów > każdy. Moje statystyki są trochę zardzewiałe, więc czy ktoś mógłby wyjaśnić (mam nadzieję, że na przykładzie), w jaki sposób biny są kwantowane?


title: projektowanie zajęć o podobnym celu, ale znacznie odmiennym rdzeniu decyzyjnym

text: Zastanawia mnie, jak modelować tę sytuację. Załóżmy, że masz algorytm działający w pętli. W każdej pętli musi nastąpić procedura `P`, której rolą jest zmodyfikowanie danych wejściowych `I` w dane wyjściowe `O`, tak że `O = P(I)`. W rzeczywistości istnieją różne odmiany „P”, powiedzmy „P1”, „P2”, „P3” i tak dalej. Wybór, który „P” ma zostać uruchomiony, zależy od użytkownika, ale wszystkie „P” mają tę samą ostateczność, wytwarzają „O” z „I”. Nazywa się to dobrze dla klasy bazowej `PBase` z metodą `PBase::apply`, z określonymi reimplementacjami `P1::apply(I)`, `P2::apply(I)` i `P3::apply (I)”. Właściwa klasa `P` jest tworzona w metodzie fabrycznej, a pętla pozostaje prosta. Teraz mam przypadek „P4”, który działa zgodnie z tą samą zasadą, ale tym razem wymaga dodatkowych danych z pętli (takich jak bieżąca iteracja i średnia wartość „O” z poprzednich iteracji). Jak przeprojektowałbyś ten przypadek?


title: Jaki jest dobry sposób na wznowienie od miejsca, w którym skończyłeś?

text: Moja praca to z grubsza praca programistyczna typu "9-5" (czasami jestem tam później, kiedy muszę coś dokończyć), a przez weekend nie ma mnie w biurze. Kiedy wracam do biura w poniedziałek, zazwyczaj muszę spędzać dużo czasu, aby wrócić do rytmu, a także dowiedzieć się, gdzie byłem, kiedy wyszedłem, zwłaszcza jeśli musiałem wyjść w środku czegoś . Od czasu do czasu zostawiam sobie jakieś spisane notatki w bloku przy biurku, ale czasami (tak jak dzisiaj) to nie wystarcza. Jakich kreatywnych sposobów używasz, aby przypomnieć sobie, gdzie skończyłeś? Przydałaby mi się każda pomoc, jaką mogłam uzyskać, ponieważ naprawdę chciałabym zmniejszyć brak produktywności, który cierpię w poniedziałkowe poranki. Dziękuję!


title: Potrzebuję określenia na apel do mojego menedżera lepiej niż „rozwój pojedynczego pudełka”

text: UWAGA: Informacja po pytaniu okazała się prawie jak ktoś, kto się wentyluje. To nie był mój pierwotny zamiar. Jeśli ktoś chce poświęcić czas, aby udzielić mi odpowiedzi/porady, może to pomóc. PYTANIE: Szukam lepszego sposobu na wyrażenie „rozwój pojedynczego pudełka”. Próbuję najpierw powiedzieć mojemu szefowi (współwłaścicielowi firmy, który widzi każdego wydanego dolara jako dolara z kieszeni), że to zaprowadziło nas tak daleko (tzn. nic nie widzi nie tak!), limit został osiągnięty. TŁO: Jestem tylko programistą w 40-osobowej firmie. Zacząłem LOB od podstaw 6 miesięcy temu (WinForms/MSSQL). Jak dotąd jest to miażdżący sukces. Ludzie, którzy pracowali do 22, teraz o szóstej kierują się do drzwi i dziękują mi w drodze (wiem, tak dla mnie). Walczę z postawą „jeśli to nie jest zepsute, nie naprawiaj tego” ze strony ludzi, którzy widzą tylko wyniki zewnętrzne. Siedzę blisko użytkowników końcowych (18 z nich) - jeśli coś nie działa, wszyscy mówią. Jeśli się zawiesza, nie obchodzi ich to, ponieważ podchodzą do mnie (50 stóp najwyżej), naciskam F5, pokazują mi, jak to odtworzyć i częściej niż teraz mówię: „Och, to łatwe do naprawienia – po prostu nie pomyślałem o tym przypadku”. Pięć minut później klikam „Wdróż” i krzyczę „OK, pobierz nową wersję!”. Wdrażanie ClickOnce sprawia, że zaciera się granica między aplikacjami internetowymi a aplikacjami klasycznymi. Wiedząc, że jestem tylko jedną osobą, dołożyłem wszelkich starań, aby przypadki użycia nie były od siebie zależne. Jeśli piszę kod, który może spowodować „uszkodzenie”, jeśli nie zadziała, mam tendencję do wprowadzania środków zapobiegawczych do wyzwalaczy bazy danych, myśląc, że „to ogranicza mój najgorszy przypadek” – ale wydaje mi się to „kreatywne” i zwykle jest to wskaźnik, że nie jest to rozwiązanie długoterminowe. Teraz muszę dodać rozwiązanie ASP.NET dodane do mojego projektu. Mam dwa produkty na dwóch różnych platformach z dwiema różnymi bazami użytkowników, ale wszystkie mają dostęp do tych samych danych i do powiązanych celów biznesowych. Muszę: 1. Pozostać jednoosobowym zespołem programistycznym. 2. Miej coś ze słowem „cykl”. 3. Dostarczaj funkcje w tym samym tempie i niezawodności. Z powodów, o których jestem pewien, że wszyscy już wiedzą (i nie muszą mi o tym mówić), nie mogę dalej dodawać funkcji i dotrzymywać terminów, utrzymując stosunkowo niski wskaźnik defektów, jaki udało mi się do tej pory. NIE MA ŻADNEJ MOŻLIWOŚCI, że otrzymam zobowiązanie finansowe wymagane do założenia własnej firmy programistycznej, ale nie mogę zaprzeczyć korzyściom płynącym z posiadania kogoś, kto jest blisko interesariuszy przez cały czas, obserwując, jak firma działa i jest gotowa poprawiać rzeczy w każdej chwili. Tak więc moim celem jest podążanie w kierunku sposobu, w jaki robi to reszta świata, a moim obecnym krokiem jest zdobycie przynajmniej jednej maszyny więcej, abym mógł mieć formalne środowisko integracyjne.


title: Czy jako wykonawca odpowiadam za błędy? (Czy potrzebuję ubezpieczenia OC?)

text: Mam sąsiada, który próbował sprzedać mi ubezpieczenie na moją poboczną działalność. Twierdzi, że mogę zostać pozwany przez moich klientów, jeśli produkowane przeze mnie oprogramowanie nie działa poprawnie lub zawiera błędy. Wydaje się, że to dość szerokie twierdzenie, ale zastanawiam się nad prawdą. Czy rzeczywiście mogę zostać pozwany przez kogoś, dla kogo pracuję, jeśli zostaną znalezione błędy? Jeśli tak, do jakiej kwoty byłbym odpowiedzialny?


title: Zwinny rozwój z 100 użytkownikami; czy to jest możliwe?

text: Staramy się stworzyć stronę internetową, która zautomatyzuje proces organizacji. Ta firma, nazwijmy ją Acme Limited, zwykle prosi swoich klientów o złożenie papierowych formularzy, a urzędnicy ręcznie wprowadzają te formularze do wewnętrznego systemu. W tej chwili mają 60 klientów w całym stanie. Teraz Acme Ltd chce, aby ich klient wszedł na ich stronę internetową, którą tworzymy, i sam wypełnił dane, a nie ich urzędnicy. Kierowcą do tego jest zwolnienie ich urzędników i przeniesienie ich do innej pracy. W moim rozumieniu dla tego scenariusza - proszę mnie poprawić, jeśli się mylę - klienci w zwinnym środowisku muszą obejmować nie tylko użytkowników z wewnątrz firmy, ale także ich klientów. Gdybyśmy mieli rozwijać ich system z wykorzystaniem metodyki agile, czy lepiej włączyć klientów w proces tworzenia oprogramowania? Czy zasiadają w obszarze rozwoju, abyśmy mogli prosić o ich wkład podczas tworzenia?


title: Przepisanie asemblera IBM + COBOL w C++

text: Pracuję jako agent/menedżer w wypożyczalni samochodów, która działa na systemie wynajmu napisanym w 1972 roku. Zdecydowałem, że może nadszedł czas na aktualizację. Na trochę tła, oto krótki przykład szaleństwa, z jakim codziennie mamy do czynienia z tego programu: Wypożyczalnia musi pamiętać, że drukowanie na jednym ekranie używa „MXC” w polu ACT (wszystko opiera się na krótkich kodach ), co w zakłopotanie oznacza „Maksymalne wyświetlanie na kontrakcie”, podczas gdy na innym wymaga PR (dla wydruku) w polu ACTION, ale kilka ekranów używa Y w polu PT (dla wydruku), jeszcze inny używa Y w pole PRT (dla drukowania), jeszcze inny ekran wymaga od użytkownika naciśnięcia enter (ale nie enter przy literach, bo to jest znak nowej linii, musi to być enter na klawiaturze numerycznej), a następnie F8, inny ale powiązany ekran wymaga po prostu klawisza F8, niektóre ekrany mają pole oznaczone PRT, które powinno być przeznaczone do drukowania, ale w rzeczywistości pole to nic nie robi, a drukowanie odbywa się automatycznie po przejściu kilku monitów, a jeszcze więcej ekranów ma pole oznaczone PRINT Y/N , który szalenie domyślnie przyjmuje wartość Y dla operacji, w których inna lokalizacja ion już dostarcza papierkową robotę, a do N w przypadku operacji, w których inny dealer będzie potrzebował dokumentów. Postanowiłem, że mogę wykonać lepszą pracę niż ta, więc postanowiłem skontaktować się z osobą w firmie, która podejmie decyzję o aktualizacji tego. W końcu docieram do wiceprezesa ds. IT, który odpowiada za ten program. Wyciągam od niego trochę informacji i dowiaduję się, że moja wypożyczalnia samochodów ma swój program wynajmu napisany w asemblerze IBM mainframe z domieszką COBOL. Mówi, że w tej chwili nie ma wolnych stanowisk, ale powinienem i tak wyślij mu moje CV (na wypadek, gdyby coś się otworzyło). To prowadzi mnie do moich pytań. Pierwszy jest techniczny. Z myślą o ulepszeniu pielęgnowalności w przyszłości, moim pomysłem jest przepisanie go w języku wyższego poziomu niż język asembler. Moje doświadczenie to C++, więc jest to dla mnie oczywisty wybór. Firma pilnie potrzebuje łatwiejszego sposobu na aktualizację programu, ponieważ niedawno przeczytałem artykuł, w którym mężczyzna, z którym rozmawiałem, powiedział, że zespół ciężko pracował, i z dumą ogłaszają, że program ma teraz wsparcie dla 5 -cyfrowe kody lokalizacji (zamiast 4) i 8-cyfrowe numery samochodów (zamiast 7). Moja filozofia aktualizacji, nawet w tak tragicznych sytuacjach, jest zgodna z filozofią Joela: http://www.joelonsoftware.com/articles/fog0000000069.html w skrócie, przepisywanie powinno następować stopniowo, zamiast wyrzucać wszystko, co było wcześniej i zaczynam od nowa. Czy istnieje prosty sposób na zintegrowanie złożenia IBM z C++, a jeśli tak, jak mam to zrobić? Niejasno znam słowo kluczowe asm, ale nie wiem, czy najlepiej go użyć, czy zrobić coś innego. Czy taki plan jest nierozważny? Większość mojej pracy wykonuję na Linuksie, używając g++ i GNU make, więc odpowiedzi na nie są mile widziane, ale zdecydowanie nie są wymagane (ponieważ nie mam pojęcia, jakiego systemu budowania nie mają, ale podejrzewam, że prawie żadnego). Drugie pytanie jest bardziej polityczne. Jak mam przekonać tę firmę, że musi dokonać zmiany? Teoretyczne oszczędności kosztów są ogromne (według moich szacunków firma marnuje dodatkowy milion dolarów rocznie tylko na zwiększone koszty szkolenia, aby nauczyć się interakcji z programem), ale proponowane przeze mnie zmiany prawdopodobnie wprowadzą wszystkie obecni programiści są bez pracy, jeśli zostaną uchwaleni, więc istnieje wielki strukturalny opór przed zmianami. edit: Powinienem wyjaśnić, dlaczego modyfikowanie tego, co firma już ma, wydaje mi się najlepszym rozwiązaniem. Nadal jestem otwarty na inne propozycje, bo to jednak potwór programu. Nigdy wcześniej nie miałem pracy programistycznej, więc proszę o popraw mnie w przypadku każdej błędnej analizy, którą mogę podać. Po pierwsze, istnieje gotowe rozwiązanie. Z moich rozmów z kilkoma menedżerami średniego szczebla na ten temat wynika, że jednym z głównych problemów związanych z przejściem na nowy system jest duża liczba lojalnych pracowników, którzy są w firmie od dziesięcioleci i są teraz zadowoleni z systemu . Gdybym miał możliwość modyfikowania tego, co mamy, mógłbym utrzymać obecny interfejs w rodzaju „trybu zgodności”. Użytkownicy muszą się już zalogować, aby korzystać z obecnego systemu, więc mógłbym dodać możliwość aktywowania ustawienia, gdy użytkownicy logują się po raz pierwszy (po wprowadzeniu tej zmiany), gdzie mają możliwość użycia albo interfejs „klasyczny” lub „nowy”. Nie ma mowy, żebym znalazł gotowe rozwiązanie, które na to pozwoli, i myślę, że obawy, że starsi pracownicy zostaną zdezorientowani przez zmianę technologii, byłyby głównym powodem, dla którego wyższe kierownictwo odmówiłoby. Moja firma jest również właścicielem używanego przez nas oprogramowania; nie licencjonujemy go. Oznacza to, że kierownictwo, z którym obecnie rozmawiam, to te same osoby, które faktycznie mogą upoważnić mnie do dokonania zmiany. W przypadku rozwiązania innej firmy oprócz zabezpieczenia wszelkich praw od firmy, która opracowała używany przez nas produkt, musiałbym uzyskać zgodę mojej firmy, co stanowi dodatkową przeszkodę. Wymagałoby to również przekonania firmy do rezygnacji z „swojego” produktu i wzięcia innego produktu, co wydaje się większą przeszkodą niż próba aktualizacji tego, co mamy, ale mogę się mylić w tej kwestii. Wreszcie, patrząc w przyszłość, nie chcę tylko ulepszać interfejsu użytkownika i poprawiać kilka błędów. Po zaktualizowaniu tych „pilnych” problemów miałem nadzieję zaktualizować fundamentalny sposób, w jaki firma działa w odniesieniu do technologii. Po spędzeniu 1-2 lat nad tego rodzaju sprawami, moim planem było wrócić do kierownictwa i zaproponować bardziej radykalne zmiany. Istnieje wiele sposobów działania firmy, które można zasadniczo ulepszyć dzięki technologii, której po prostu obecnie nie używają. Na przykład każdy region działa w zasadzie w ten sam sposób. Lokalne główne lotnisko jest centralnym węzłem dystrybucji samochodów. Są one wysyłane przede wszystkim w miarę potrzeb. Lotnisko jest jednak wykorzystywane jako baza macierzysta dla wszystkich operacji. Wyślą dwie osoby w jednym samochodzie do mojej lokalizacji, aby odebrać od nas jeden samochód, którego nie potrzebujemy, a następnie wrócą na lotnisko samochodem, którym przyjechali, plus to, co zabierają z powrotem (jesteśmy 32 mile od lotnisko). Następnie przyjadą do miejsca oddalonego od nas o 5 mil w dwóch samochodach, aby wysadzić jednego z nich, a następnie wrócą drugim samochodem na lotnisko. Robią to, nawet jeśli samochód, który odesłaliśmy, jest tym samym samochodem, którego potrzebują w pobliżu. Jestem w firmie od około dwóch lat i wydaje mi się, że odbiegają od tego tylko w najbardziej ekstremalnych sytuacjach awaryjnych związanych z brakiem samochodów (czyli około trzy razy w historii). Zamieniłbym 4 osoby pracujące w każdym regionie na zautomatyzowany system planowania, który określa, które samochody i gdzie jeżdżą, i spróbuję znaleźć drogę, która wymaga najmniej czasu + mile + kierowcy, aby dostarczyć wszystkie samochody tam, gdzie muszą być, jako przykład poprawek wyższego poziomu mam nadzieję, że kiedyś dodam. Zanim jednak poczuję się komfortowo proponując to wszystko, uważam, że pomocne byłoby zdobycie podstawy w firmie i bazie kodu, wykonując mniejsze zadania, takie jak aktualizacja interfejsu. Rozwiązania takie jak outsourcing lub inne usunęłyby tę możliwość.


title: Jaka struktura danych/wzorzec projektowy Java najlepiej modeluje ten obiekt, biorąc pod uwagę, że wykonałby te metody?

text: ![Typowa odległość pomiędzy siatką miast](http://i.stack.imgur.com/nmltT.png) Metody: 1. getDistance(CityA,CityB) // Zwraca odległość między dwoma miastami 2. getCitiesInRadius(CityA,integer) // Zwraca miasta w podanej odległości od innego miasta 3. getCitiesBeyondRadius(CityA,integer) //Zwraca miasta znajdujące się w podanej odległości od innego miasta 4. getRemoteDestinations(integer) // Zwraca wszystkie pary miast większe niż x odległość od siebie 5 .getLocalDestinations(integer) //Zwraca wszystkie pary miast w odległości x od siebie


title: Czy istnieje jakaś ustalona architektura gier przeglądarkowych?

text: Rozpoczynam rozwój gry opartej na Broser, w której gracze podejmują określone działania w dowolnym momencie. Duża część rozgrywki będzie miała miejsce w prawdziwym życiu i po prostu trzeba je wprowadzić do systemu. Uważam, że dobre porównanie może być platformą do zarządzania fantasy football, chociaż praktycznie nie mam doświadczenia w graniu w tę grę, więc proszę mnie popraw, jeśli się tutaj mylę. Chodzi o to, że niektóre zdarzenia mają miejsce w programie (np. na serwerze, poza zasięgiem graczy), jak np. wyciąganie nowych wyników z jakiegoś źródła danych, rozpoczynanie nowej rundy przez mistrza gry i tak dalej. Inne wydarzenia mają miejsce w prawdziwym życiu (dwóch graczy podpisujących umowę o transferze jakiegoś członka zespołu lub coś takiego - znowu: nigdy nie grało w fantasy football) i trzeba je wprowadzić do systemu. Pierwsza część jest dość prosta, ponieważ mistrzami gry będą „personel”, dzięki czemu można do pewnego stopnia zaufać, że nie zadzierają z systemem. Ale druga część bardzo mnie niepokoi, zwłaszcza że akcje mogą obejmować wiele kroków i interakcji z różnymi graczami, jak rejestracja umowy w systemie, która następnie musi zostać zatwierdzona przez drugą stronę lub odrzucona i przekazana mistrzowi gry zdecydować. Oczywiście chciałbym jak najdalej oddzielić logikę gry od prezentacji i podstawowej walidacji formy, ale nie jestem pewien, jak to zrobić w czysty sposób. Oczywiście mógłbym (i będę) włożyć trochę wysiłku w podejmowanie własnych decyzji architektonicznych i prototypowanie różnych pomysłów. Ale w pewnym momencie popełnię kilka głupich błędów, więc chciałbym uniknąć niektórych z nich, robiąc wcześniej trochę "mądrej książki". Więc pytanie brzmi: **Czy są jakieś prace architektoniczne, które mogę przeczytać?** Artykuły, blogi, może dokumenty projektowe, a nawet kod źródłowy? Zapisując to, wygląda to bardziej jak aplikacja biznesowa z regułami biznesowymi, przepływami pracy itp. Jakieś dobre punkty wejścia do tego? * * * # EDIT: Po przeczytaniu pierwszych odpowiedzi mam wrażenie, że popełniłem błąd, umieszczając w tytule część "MMO". Gra _nie_ będzie wymyślna (tj. 3D itp.) po stronie klienta, a logika będzie całkowicie istnieć na serwerze. Czyli oprócz podstawowej walidacji formularzy _dla użytkownika_, która będzie również dublowana po stronie serwera. Tak więc docelowym zestawem narzędzi będzie **HTML5, JavaScript** , prawdopodobnie JQuery(UI). Moje pytanie jest bardziej związane z architekturą oprogramowania/projektem systemu, który wymusza pewne zasady. ## Oddzielenie zestawu reguł od prezentacji Jednym z moich problemów jest to, że chcę oddzielić zasady gry od prezentacji. Pierwszym krokiem byłoby stworzenie własnego modułu do „silnika” gry, który udostępnia jedynie interfejs pozwalający na wykonywanie wszystkich czynności w czysty sposób. Jeśli akcja nie powiedzie się w odniesieniu do jakiegoś warunku pre/post, silnik wyrzuca wyjątek, który jest następnie prezentowany użytkownikowi jako „nie możesz sprzedać czegoś, czego nie jesteś właścicielem” lub „po tym znalazłbyś się w sytuacji, która nie jest prawidłowy stan gry." Problem polega na tym, że chciałbym być w stanie nawet nie przedstawiać nieprawidłowej akcji w pierwszej kolejności lub wyszarzać odpowiednie elementy interfejsu użytkownika. ## Zmienianie i ulepszanie zestawu reguł Kolejną ważną rzeczą jest zestaw reguł. Prawdopodobnie będzie ewoluował z czasem i zdecydowanie musi zostać poprawiony. Co więcej, powinno być możliwe (do pewnego stopnia) zbudowanie zestawu reguł pasującego do konkretnej rundy gry, czyli wybór różnych zachowań w różnych aspektach gry. Zrobiłoby to coś w stylu „gramy dzisiaj z rozszerzeniem A, ale wyrzucamy rozszerzenie B”. Dla mnie to krzyczy **„Wzór architektoniczny/projektowy”**, ale nie mam pojęcia, kto mógł coś takiego publikować, nawet po co google.


title: Czy fizyczna tablica Agile „zawsze” jest lepsza od narzędzia elektronicznego?

text: Ilekroć pojawia się pytanie, którego narzędzia Agile użyć, zawsze pojawiają się osoby, które odpowiadają „nie używaj narzędzia elektronicznego, ponieważ stracisz przewagę dużej widocznej tablicy, która lepiej generuje rozmowę w zespole”. Czy zawsze tak jest, czy są jakieś konteksty, w których narzędzie elektroniczne jest lepszym wyborem? Jakie są zalety i wady każdego podejścia?


title: Wstrzykiwanie zależności za pomocą n-warstwowego rozwiązania Entity Framework

text: Obecnie projektuję rozwiązanie n-warstwowe, które używa Entity Framework 5 (.net 4) jako strategii dostępu do danych, ale martwię się o to, jak włączyć iniekcję zależności, aby była testowalna / elastyczna. Mój obecny układ rozwiązania jest następujący (moje rozwiązanie nazywa się Alcatraz): **Alcatraz.WebUI** : Projekt formularza internetowego asp.net, interfejs użytkownika, odwołuje się do projektów _Alcatraz.Business_ i _Alcatraz.Data.Models_. **Alcatraz.Business** : Projekt biblioteki klas, zawiera logikę biznesową, odwołuje się do projektów _Alcatraz.Data.Access_ , _Alcatraz.Data.Models_ **Alcatraz.Data.Access** : Projekt biblioteki klas, domy _AlcatrazModel.edmx_ i `AlcatrazEntities` DbContext, odwołuje się do projektów _Alcatraz.Data.Models_. **Alcatraz.Data.Models** : Projekt biblioteki klas, zawiera POCO dla modelu Alcatraz, bez odniesień. Moja wizja tego, jak to rozwiązanie będzie działać, jest taka, że web-ui tworzyłoby instancję repozytorium w bibliotece biznesowej, to repozytorium miałoby zależność (poprzez konstruktor) z ciągiem połączenia (nie z instancją `AlcatrazEntities`). Interfejs sieciowy będzie znał parametry połączenia z bazą danych, ale nie to, że był to ciąg połączenia struktury encji. W projekcie Business: public class InmateRepository : IInmateRepository { private string _connectionString; public InmateRepository(string connectionString) { if (connectionString == null) { wyrzuć nowy ArgumentNullException("connectionString"); } EntityConnectionStringBuilder connectionBuilder = new EntityConnectionStringBuilder(); connectionBuilder.Metadata = "res://*/AlcatrazModel.csdl|res://*/AlcatrazModel.ssdl|res://*/AlcatrazModel.msl"; connectionBuilder.Provider = "System.Data.SqlClient"; connectionBuilder.ProviderConnectionString = connectionString; _connectionString = connectionBuilder.ToString(); } public IQueryable<Więzień> GetAllInmates() { AlcatrazEntities ents = new AlcatrazEntities(_connectionString); powrót ents.Więźniowie; } } W sieciowym interfejsie użytkownika: IInmateRepository inmateRepo = new InmateRepository(@"źródło danych=MATTHEW-PC\SQLEXPRESS;initial directory=Alcatraz;integrated security=True;"); List<Więzień> deathRowInmates = inmateRepo.GetAllInmates().Where(i => i.OnDeathRow).ToList(); Mam kilka powiązanych pytań dotyczących tego projektu. 1. Czy ten projekt ma sens pod względem możliwości Entity Frameworks? Słyszałem, że framework Entity używa już wzorca Unit-of-work, czy tylko niepotrzebnie dodaję kolejną warstwę abstrakcji? 2. Nie chcę, aby mój web-ui bezpośrednio komunikował się z Entity Framework (lub nawet odwoływał się do niego), chcę, aby cały dostęp do bazy danych przechodził przez warstwę biznesową, ponieważ w przyszłości będę miał wiele projektów korzystających z tego samego warstwę biznesową (usługa sieciowa, aplikacja Windows, itp.) i chcę, aby była łatwa w utrzymaniu/aktualizacji, mając logikę biznesową w jednym centralnym obszarze. Czy jest to odpowiedni sposób, aby to osiągnąć? 3. Czy warstwa biznesowa powinna w ogóle zawierać repozytoria, czy też powinna być zawarta w warstwie dostępu? Jeśli to, gdzie są, jest w porządku, czy przekazywanie parametrów połączenia jest dobrą zależnością do założenia? Dziękujemy za poświęcenie czasu na przeczytanie!


title: Czy zespoły programistyczne oparte na LAMP/Java mają SOE?

text: Jako programista na stosie Windows/.NET jest całkiem normalne, że komputer dostarczony przez firmę jest dostarczany z systemem Windows (zwykle starodawną, archaiczną wersją, taką jak Windows XP) i stosem oprogramowania preinstalowanego jako część standardowego środowiska operacyjnego . W firmach budujących oprogramowanie na stosie Java/Ruby/PHP/C używając Linux/Unix/BSD jako podstawowego systemu operacyjnego, z twojego doświadczenia wynika, że: 1. Czy wszyscy mają tendencję do używania tego samego systemu operacyjnego/wersji? 2. W jaki sposób upewniasz się, że wszyscy używają tej samej wersji bibliotek/zależności/narzędzi (czy ty?) 3. Jak tworzysz SOE, aby wstępnie skonfigurować maszynę (czy ty?)


title: Jak nazywa się struktura danych określonego typu?

text: Postaram się zachować jak najwięcej agnostyki języka, ale podam przykłady w C#, ponieważ teraz wiem, jak rozwiązać ten język w tym języku. Pytanie przyszło mi do głowy, gdy myślałem o tym, jak mogę utworzyć wiele obiektów tego samego typu. Powiedzmy, że chciałem stworzyć jeden prostokąt, zrobiłbym: `Rectangle rect1 = new Rectangle()` Teraz, gdybym chciał stworzyć 2, zrobiłbym to. Rectangle rect1 = new Rectangle() Rectangle rect2 = new Rectangle() To oczywiście nie jest efektywne, gdy trzeba utworzyć wiele prostokątów. Problem polega na tym, że nie mogłem użyć takich pętli do stworzenia wielu prostokątów: for (int i = 0; i < 100; i++){ Rectangle rect1 = new Rectangle() } To oczywiście nie osiąga tego, czym jestem po, ponieważ po prostu stworzyłbym 100 `rect1`. Wskazano mi, że możesz zrobić coś takiego: Dzięki mootinator var rectangles = new Rectangle[100]; for (int i = 0; i < 100; i++){ prostokąty[i] = new Prostokąt(); } Z tego, co zrozumiałem, kod tworzy strukturę danych (Array? ArrayList?) typu `Rectangle` wewnątrz ciebie faktycznie "przechowują" prostokąty. Najtrudniejszą rzeczą dla mnie było postawienie pytania o to. Więc pytania są następujące: 1. Jak to się nazywa? 2. Czy ten standard / "wspólny" w większości języków opartych na OOP? Pytanie faktycznie pojawiło się w ActionsScript 3, ale jest przydatne/niezbędne w każdym języku, na jaki może się wydawać. 3. Czy jest to najlepszy sposób na zrobienie tego, biorąc pod uwagę, że chciałbym na przykład zapętlić Array i zastosować metodę `.Move()`. 4. Czy są? i jakie są inne opcje, aby to zrobić.


title: Przechowywanie i obsługa obiektów serializowanych w C#

text: Jakie są najlepsze rozwiązania dotyczące przechowywania i obsługi obiektów serializowanych w języku C#? Jakieś strategie lub wzorce, które mają zastosowanie? Do tej pory doszedłem do przekonania, że: * Preferuj Json od XML, zarówno pod względem przestrzeni, jak i szybkości, ale xml jest łatwiejszy do zapytania/wydobycia danych za pośrednictwem LINQ to XML dla większych zestawów danych. * Dla każdej właściwości mapuj jawnie nazwę zserializowaną. W przyszłości, gdy będziesz musiał zmienić nazwę usługi, serializowane dane nie ulegną uszkodzeniu. Pomagają w tym atrybuty. * Przechowuj jakieś informacje o wersji na zserializowanym obiekcie, na wypadek, gdybyś musiał w przyszłości masowo migrować dane **Aktualizacja:** (o czym przekonałem się na własnej skórze) * Przechowuj wszystkie daty i godziny w jednolity sposób w całej aplikacji i we wszystkich wersjach. Zarówno pod względem formatu, jak i strefy czasowej.


title: Jak uniknąć strzału w stopę, gdy używasz domykania w JavaScript?

text: Funkcja domykania jest szeroko stosowana w JavaScript i sprawia, że jest ona dość trudna dla programisty, który był przyzwyczajony do programowania w języku niezamykającym. Więc jaka jest najlepsza praktyka w używaniu zamknięcia i jak uniknąć strzału w stopę.


title: Jakie są różne kwestie, które należy wziąć pod uwagę przy określaniu trwałego formatu danych?

text: Ostatnio zmagałem się z koncepcją jakiej struktury plików użyć podczas tworzenia plików zapisu dla aplikacji desktopowych. Kiedy mówię "zapisz-pliki", mam na myśli coś w rodzaju plików *.doc. Pliki zawierające pracę, którą użytkownik umieścił w programie i chcą móc załadować i wznowić swoją pracę w późniejszym czasie. Rzeczy takie jak serializacja binarna są łatwe, ale jeśli i kiedy model aplikacji zostanie ponownie zrefaktoryzowany lub rozszerzony, spowoduje to uszkodzenie (jak sądzę) plików zapisanych w starszym formacie. Rzeczy takie jak XML i JSON są bardziej odporne na przyszłe zmiany, ale czuję, że wpadam w pułapkę używania XML jako mojego „złotego młotka”. Baza danych wydaje się przesadą dla w zasadzie wszystkich aplikacji, które tworzę. Jakie są typowe opcje i jestem pewien, że jest ich wiele, których nie rozważam? Czy możesz opisać, kiedy najlepiej wykorzystać każdą z tych opcji i dlaczego jest to najlepszy wybór?


title: Wyjaśnienie dotyczące połączonej listy

text: To dość proste pytanie, ale java jestem nowy. Połączona lista znaleziona w java.util.LinkedList. Widziałem gdzie indziej, że Java nie używa wskaźników... Kiedy tworzę nową listę i dodaję do niej nowe elementy, czy lista zawiera odniesienia do danych i do następnych/poprzednich elementów, czy też zawiera również sam obiekt.


title: Czy rozsądne jest zerowanie ochrony każdego wyłuszczonego wskaźnika?

text: W nowej pracy otrzymuję flagę w przeglądach kodu w następujący sposób: PowerManager::PowerManager(IMsgSender* msgSender) : msgSender_(msgSender) { } void PowerManager::SignalShutdown() { msgSender_->sendMsg("shutdown ()"); } Powiedziano mi, że ostatnia metoda powinna brzmieć: void PowerManager::SignalShutdown() { if (msgSender_) { msgSender_->sendMsg("shutdown()"); } } Np. _muszę_ umieścić strażnika `NULL` wokół zmiennej `msgSender_`, mimo że jest to prywatny element danych. Trudno mi powstrzymać się od używania przekleństw do opisania tego, co czuję do tej „mądrości”. Kiedy proszę o wyjaśnienie, otrzymuję całą litanię horrorów o tym, jak jakiś młodszy programista, w pewnym roku, zdezorientował się, jak klasa powinna działać i przypadkowo usunął członka, którego nie powinien mieć (i ustawił go na ` Najwyraźniej NULL` później), a zaraz po wydaniu produktu wszystko wybuchło, a my „nauczyliśmy się na własnej skórze, zaufaj nam”, że lepiej jest po prostu `NULL` sprawdzić _wszystko_. Wydaje mi się, że to kultowe programowanie cargo, proste i proste. Kilku dobrych kolegów usilnie próbuje mi pomóc „zdobyć to” i zobaczyć, jak to pomoże mi napisać bardziej solidny kod, ale… nie mogę oprzeć się wrażeniu, że to oni tego nie rozumieją . Czy rozsądne jest, aby standard kodowania wymagał, aby _każdy pojedynczy_ wskaźnik wyłuskany w funkcji był najpierw sprawdzany pod kątem „NULL” — nawet członków prywatnych danych? (Uwaga: Aby nadać kontekst, tworzymy urządzenie elektroniki użytkowej, a nie system kontroli ruchu lotniczego lub jakiś inny produkt „awaria-równa-ludzie-giną”.) **EDYTUJ**: W powyższym przykładzie `msgSender_ Współpracownik nie jest opcjonalny. Jeśli kiedykolwiek ma wartość „NULL”, oznacza to błąd. Jedynym powodem, dla którego jest on przekazywany do konstruktora, jest to, że `PowerManager` może być testowany za pomocą pozorowanej podklasy `IMsgSender`. **PODSUMOWANIE** : Było kilka naprawdę świetnych odpowiedzi na to pytanie, dziękuję wszystkim. Ten od @aaronps przyjąłem głównie ze względu na jego zwięzłość. Wydaje się, że panuje dość ogólna zgoda co do tego, że: 1. Nakaz ochrony `NULL` dla _każdego_ wyłuskanego wskaźnika jest przesadą, ale 2. Można pominąć całą debatę, używając zamiast tego referencji (jeśli to możliwe) lub `stałej` wskaźnik i 3. Instrukcje `asert` są bardziej oświeconą alternatywą dla strażników `NULL` do sprawdzania, czy spełnione są warunki wstępne funkcji.


title: Porady dotyczące projektowania Androida - usługi i odbiorniki transmisji

text: Jestem w trakcie uczenia się Android SDK i tworzenia projektów, aby poznać system. Obecny projekt, nad którym pracuję, działa dobrze, ale chciałbym uzyskać poradę na temat innych sposobów, w jakie mogę go zaprojektować. Oto, co musi zrobić. Gdy wiadomość tekstowa zostanie odebrana z określonego numeru, powinna wyzwolić wiadomość toastową, która będzie się powtarzać w określonych odstępach czasu przez określony czas. 1. Aby to zadziałało, stworzyłem SMS BroadcastReceiver i sprawdzałem przychodzące wiadomości na numer, którego szukam. 2. Jeśli zostanie znaleziony, zostanie uruchomiona usługa IntentService, która wyciągnie interwał i czas trwania z zapisanych wspólnych preferencji. IntentService następnie uruchomi transmisję. 3. Odbiornik BroadcastReceiver w tym celu przechwyciłby go i wykorzystał AlarmManager do obsługi powtórzeń wyskakujących wiadomości. To wszystko działa dobrze, ale zastanawiam się, czy istnieje czystszy lub bardziej wydajny sposób na zrobienie tego? Jakieś sugestie lub porady?


title: Pułapki w projektowaniu domen ORM

text: Czy istnieją wzorce, które wydają się sensowne przy projektowaniu domeny zorientowanej obiektowo, ale nie przekładają się ładnie na schemat relacyjnej bazy danych? Jeśli tak, czy istnieją standardowe wzory, których można użyć zamiast tego?


title: Czy to w porządku, jeśli zespół ma te same umiejętności, ale różne poziomy umiejętności?

text: Uważam, że w idealnym zespole członkowie powinni mieć różne, ale uzupełniające się umiejętności. Ale czy to prawda w przypadku zespołów programistycznych? Jako przykład jesteśmy małym zespołem 5 osób. Mamy prawie takie same zdolności i zainteresowania, ale z różnymi poziomami umiejętności. Jeśli chodzi o taką sytuację, myślę, że nie tuszujemy słabości naszych kolegów z drużyny. * Czy jest jakiś wzorzec do zarządzania i doskonalenia takiego zespołu? * Czy powinienem utworzyć zespół o różnych umiejętnościach i zainteresowaniach, aby zmaksymalizować wydajność i produktywność? \-- EDIT -- Nasz obecny zespół ma określony czas życia. Pracujemy razem w sposób per-projektowy. Innymi słowy, możemy zmienić układ zespołu dla każdego projektu w zależności od projektu i sytuacji deweloperów. Właściwie zapewniliśmy rodzaj pływającej sytuacji. Krótko mówiąc, jesteśmy siecią programistów, a nie zespołem programistów o stałej wielkości.


title: Próba uporządkowania współczynników wielomianu (z-a)(z-b)(z-c)...(z-n) do wektora

text: Więc mam rozłożony na czynniki wielomian postaci (z-a)(z-b)(z-c)...(z-n) dla n parzystej liczby całkowitej dodatniej. Zatem współczynnik z^k dla 0 <= k < n będzie sumą wszystkich odrębnych iloczynów n-k elementów ze zbioru {a,b,...,n} pomnożoną przez (-1)^k, mam nadzieję to ma sens, zapytaj, czy potrzebujesz więcej wyjaśnień. Próbuję umieścić te współczynniki w wektorze wiersza z pierwszą kolumną zawierającą stały współczynnik (który byłby abc...n) i ostatnią kolumną zawierającą współczynnik dla z^n (który byłby 1). Wyobrażam sobie, że istnieje sposób na brutalne wymuszenie tego za pomocą mnóstwa zagnieżdżonych pętli, ale mam nadzieję, że istnieje bardziej wydajny sposób. Odbywa się to w Matlab (z którym nie jestem zaznajomiony) i wiem, że Matlab ma mnóstwo algorytmów i funkcji, więc może ma coś, z czego mogę skorzystać. Czy ktoś może wymyślić sposób, aby to zrobić? Przykład: (z-1)(z-2)(z-3) = z^3 - (1 + 2 + 3)z^2 + (1*2 + 1*3 + 2*3)z - 1* 2*3 = z^3 - 6z^2 + 11z - 6. Zauważ, że ten przykład jest nieparzysty n=3, ale wykonanie n=4 zajęłoby zbyt dużo czasu. Edycja: Daj mi znać, jeśli uważasz, że lepiej byłoby to opublikować na TCS lub Math Stack Exchange.


title: Opcje programowania na podstawie umowy w Javie

text: Pracuję nad projektem (obejmującym aplikacje internetowe JavaEE i aplikacje JavaSE), który rozrósł się z jednego programisty do zespołu trzech, a problemy czytelności i niezawodności zaczynają się pojawiać. Jednym z rażących zaniedbań w języku Java było dostrojenie umów i to, jak łatwo są one udostępniane innym programistom. (Przez kontrakty mam na myśli głównie walidację parametrów metody i warunków przed/po obiektowych). Przyglądam się kilku rozwiązaniom i chciałbym uzyskać informację zwrotną od innych, którzy mają pewne praktyczne doświadczenie. Wygląda na to, że Java ma obecnie dwa obsługiwane sposoby definiowania kontraktów: 1. Instrukcja Assert 2. Zgłaszanie wyjątków (takich jak IllegalArgumentException) Aserty wydają się mieć tylko wartość jako narzędzie do debugowania. Ponieważ asercje nie są domyślnie włączone, oczekuje się, że programiści będą na nich polegać tylko w pewnym sformalizowanym okresie testowania, po którym zostaną zignorowane. Zgłaszanie wyjątków wydaje się solidną opcją, ponieważ pozwalają na wykonanie prawie każdego rodzaju kontroli. Jednak zakres wyjątków zdefiniowany przez bibliotekę Java wydaje sięnieodpowiedni do definiowania kontraktów (na przykład podklas IllegalArgumentException nie dotyczy konkretnie kwestii zakresu, sprawdzania wartości null itp. a podklasy IllegalStateException wydają się dotyczyćpołączenia sieciowego i pliku stanów), co zmusza każdą grupę do zdefiniowania własnego zakresu klas wyjątków. Ale największym problemem jest to, że ani potwierdzenia, ani wyjątki nie mapują wyraźnie wymagań kontraktu na parametry lub koncepcje, takie jak warunki przed i po. Oczekuje się, że programista będzie ręcznie obsługiwał komentarze JavaDoc z kodem, aby było jasne, w jakich warunkach potwierdzenie zakończy się niepowodzeniem lub zostanie zgłoszony wyjątek. Jest dla mnie jasne, że standardowe biblioteki Java nie obsługują odpowiednio projektowania kontraktowego, co prowadzi mnie do pytań: Czy moje powyższe założenia są poprawne, czy też pominąłem jakąś właściwość asercji i wyjątków, która sprawia, że są one całkiem przydatne do tego celu rodzaj problemu?


title: Jak mam rejestrować czas spędzony na wielu zadaniach?

text: W swoim blogu Joel o planowaniu opartym na dowodach sugeruje dokonywanie szacunków w oparciu o najmniejszą jednostkę pracy i rejestrowanie dodatkowej pracy z powrotem do pierwotnego zadania. Problem, którego teraz doświadczam, polega na tym, że stworzę obiekt A za pomocą metody podzadania A, która tworzy obiekt B i testuję wszystkie powyższe. Tworzę zadania dla każdego z nich, które wydają się dawać dobre oszacowania (trzeba poćwiczyć), ale kiedy przechodzę do pracy z dziennikiem, stwierdzam, że pracowałem nad 4 zadaniami jednocześnie, ponieważ poprawiam metodę A i znajduję błąd w testuj i refaktoryzuj obiekt B podczas kodowania. Jak mam się zająć rejestrowaniem tej pracy? czy powinienem powiedzieć, że spędziłem na przykład 2 godziny na każdym z 4 zadań, nad którymi pracowałem w ciągu 8 godzin dziennie?


title: Jak czyta się „SELECT *” w języku angielskim?

text: Pewnego dnia znajomy powiedział mi, że w USA SQL wymawia się jak _squel_ , a nie _es-qu-el_. Byłem zaskoczony. Zastanawiałem się, jak "SELECT *" jest odczytywane/wymawiane podczas mówienia. * wybierz gwiazdkę? * wybrać gwiazdki? * Zaznacz wszystko?


title: Jaki jest dobry algorytm na losowy, nierówny rozkład ustalonej ilości zasobu?

text: ### Problem Mam **X** , dodatnią liczbę całkowitą jakiegoś zasobu, **R**. Istnieje **N** potencjalnych celów. Chcę rozesłać wszystkie **R** do **N** celów w jakiś „interesujący” sposób. „Interesujący” oznacza: * Niektóre cele mogą nie otrzymać **R**. * Rzadko powinien być blisko parzysty (większość celu zbliża się do **X/N** zasobu). * Powinna istnieć co najmniej niewielka szansa, że jeden cel zdobędzie wszystkie **R**. * * * ### Złe rozwiązania Naiwnym podejściem byłoby wybranie losowego celu, nadanie mu jednego **R** i powtórzenie **X** razy. Spowodowałoby to zbyt równomierne podejście. Następnym pomysłem jest wybranie losowej liczby od 1 do **X** i przekazanie jej losowemu celowi. Skutkuje to zbyt dużą liczbą (średnio co najmniej **X/2**) przypisywaną jednemu celowi. ### Pytanie Ten algorytm będzie często używany i chcę, aby dystrybucja była ciekawa i nierówna, aby nie zniknęła niespodzianka dla użytkowników. Czy istnieje dobry algorytm dla czegoś pomiędzy tymi dwoma podejściami, który pasuje do powyższej definicji _interesujące_?


title: Jakie problemy z wdrożeniem wciąż pochłaniają Twój czas?

text: Jakie problemy wdrożeniowe branża twierdziła, że rozwiązała już wiele razy, ale nadal pochłaniają cały Twój czas? Przykłady: * Wieloplatformowy interfejs użytkownika — urządzenia mobilne szeroko rozwiały ten problem. * Mapowanie OO do RDBMS - jak zmapować ten atrybut do tego pola w tej bazie danych przy użyciu tego frameworka. Masz pomysł. * Definicje interfejsów - ..., CORBA, COM, EJB, WSDL, ... itd. Czy możesz pomyśleć o innych?


title: Korzyści dla nowych programistów

text: Zamierzam zatrudnić 2-3 młodszych programistów zaraz po studiach. Jaki oprócz gotówki jest najważniejszy profit dla młodego programisty? Czy to gry w pracy? Chcę być kreatywny... Chcę dobrych pomysłów


title: Jak komercyjny projekt open source może zbudować społeczność open source?

text: Pracuję nad ambitnym, komercyjnym projektem open source* (prawdopodobnie mieści się on w definicji Open Core Wikipedii). Jestem inżynierem projektu, więc nie mam zbyt dużego wpływu na wszystkie nasze zasady. Większość kodu znajduje się w publicznych projektach na GitHubie i mamy publiczne listy mailingowe, ale to w dużej mierze zakres naszego zaangażowania w open source. Używamy list mailingowych, aby odpowiadać na pytania społeczności, ale wiele tematów pozostaje bez odpowiedzi, ponieważ są one niskiej jakości lub ponieważ mamy terminy i nie chcemy spędzać zbyt dużo czasu na liście mailingowej zamiast dostarczać funkcje. Mamy umowę współtwórcy upoważnioną przez korporację, która bardziej przypomina IMO odstraszającą współtwórcę. Obecnie mamy niewielu lub nie ma nas pełnych pasji członków społeczności, którzy czują się na tyle mocno, by reprezentować nasze wsparcie jako wolontariusz. Udało mi się znaleźć kilka poradników (produkcja oprogramowania Open Source była chyba najlepsza) na temat budowania społeczności open source, ale wszystkie z nich opierają się na założeniu, że projekt jest czystym open source, z możliwością bycia przejrzystym dla społeczności . Jeśli chodzi o rzeczy, które opisałem powyżej, wiem, że możemy zrobić to lepiej, ale nie wiem, czy będę w stanie uzyskać wpisowe kierownictwo w którymkolwiek z nich. Jakie rzeczy może zrobić komercyjny projekt open source, aby zaangażować i zbudować społeczność open source? * * * *(Celowo _nie_ wyraźnie nazwałem projektu; poglądy w tym pytaniu są moimi własnymi i niekoniecznie reprezentują poglądy reszty mojego zespołu lub mojego pracodawcy.)


title: Zautomatyzowane testowanie programów z wyjściem graficznym

text: Jestem wykładowcą modułu podyplomowego, w którym oczekuję od moich studentów pisania kodu w Pythonie, który powiela przykłady z podręcznika. Projekt działa już od kilku lat iw tym roku chcę wprowadzić więcej testów automatycznych. Problemem jest pisanie testów dla funkcji, które przede wszystkim tworzą figurę matplotlib. Pamiętaj, że staramy się tylko w przybliżeniu odtworzyć liczby, więc porównanie binarne z obrazem docelowym nie będzie zbyt przydatne. Krótkie pytanie brzmi zatem: jakich strategii mogę użyć do testowania programów, których podstawowych wyników graficznych nie można porównać z dokładnym obrazem referencyjnym? Niektóre z problemów, które mam z istniejącą bazą kodu, która uniemożliwia automatyczne testowanie w tym przypadku: * Tworzenie wykresu zatrzymuje wykonanie w wielu przypadkach * Niepraktyczne jest generowanie kopii rysunku w podręczniku, który zawiera adnotacje i tak dalej , więc algorytmiczne porównanie obrazów raczej nie będzie odpowiedzią. Aby wyjaśnić moje cele: 1. Chciałbym móc _wykonywać cały kod w bazie_, aby sprawdzić, czy faktycznie działa, nawet jeśli oznaczałoby to wyrzucenie danych wyjściowych. To wyłapywałoby regresje, w których funkcja jest zmieniana 2. Zamiast inwestować głęboko w rozmyte dopasowanie graficznego wyjścia do celu, uważam, że _wizualne sprawdzanie_ między obrazem referencyjnym a generowanym będzie prawdopodobnie najprostsze, ale to powinno odroczone, aby wydarzyło się raz na koniec biegu, a nie podczas biegu 3. Ponieważ jest to projekt oparty na współpracy, nie muszę zakładać, że uczniowie będą przeciwni. Błędy będą raczej w dobrej wierze niż przewrotne.