title: Rozwój Lib sieci Android

text: Muszę opracować bibliotekę Androida, która powinna często komunikować się z serwerem w tle. Dostęp do obiektu lib powinien być gwarantowany wszędzie w aplikacjach, które będą z niego korzystać, więc zdecydowałem się rozszerzyć klasę Application z Android API i zwracać instancję utworzoną podczas uruchamiania aplikacji, za każdym razem, gdy jest to potrzebne. Biblioteka wysyła częste sondy do serwera (Nie jest to najlepsza praktyka, wiem. Ale to dany system i wciąż eksperymentalny). Jeśli jest wiadomość, że aplikacja ma być parsowana, powinna wywołać pewnego rodzaju słuchacza, który musi być zarejestrowany przez aplikację. Po wywołaniu onPause Lib powinna kontynuować komunikację przez określony czas. Więc moje pytania to: * Czy byłby to najlepszy sposób na zaimplementowanie biblioteki jako usługi intencji? * Czy jest to właściwe podejście do rozszerzenia klasy Application? To mój pierwszy projekt biblioteczny na Androida, więc przepraszam, jeśli niektóre pytania wydają się zbyt proste.


title: Jak oceniłbyś umiejętności projektowania obiektowego?

text: jakiego rodzaju spostrzeżenia lub pytania doprowadziłyby cię do określenia umiejętności OOAD danej osoby.


title: Java vs C#: Co powinien wziąć pod uwagę młodszy programista (właśnie ukończony stopień naukowy) wchodząc w świat programowania?

text: **Chcę tylko usłyszeć kilka za i przeciw – to oczywiste, że nie ma właściwej odpowiedzi** Czy Java byłaby lepszym wyborem na dłuższą karierę? A może powinienem wybrać .Net, ponieważ może to być platforma posiadająca wszystkie najnowsze osiągnięcia? **Chcę tylko poznać punkt widzenia innych, więc proszę nie zamykać tego pytania tylko dlatego, że jest subiektywne**


title: Ocena konserwacji oprogramowania

text: **1. Kiedy traktować oprogramowanie jako wdrożone, a kiedy zacząć pobierać opłaty za utrzymanie?** W większości przypadków tworzone przez nas oprogramowanie jest wdrażane w sieci na wczesnych etapach, aby usprawnić proces testowania od strony klienta. Oznacza to, że błędy wciąż się pojawiają i naprawiamy je wraz z rozwojem. Mało tego, gdy klienci z niego korzystają, dowiadują się o wymaganych modyfikacjach, co tworzy dla nas stos dodatkowej pracy. Ze względu na brak linii rozgraniczającej między etapami rozwoju, wdrażania i konserwacji trudno jest zrozumieć, kiedy za co pobierać opłaty. **2. Jak pobierać opłaty za utrzymanie oprogramowania ?** Czytałem, że sprzedawcy generalnie pobierają rocznie 15%-22% za oprogramowanie. Ponieważ jest to stała opłata, co się stanie, jeśli konserwacja zajmie więcej czasu niż oczekiwano? Co się stanie, jeśli system będzie działał poprawnie lub bez problemów przez rok? Czy klient nadal płaci alimenty? **3. Jak pobierać opłaty za ulepszenia niespecyficzne dla aplikacji ?** Do tworzenia aplikacji biznesowych używamy podstawowego silnika. Udoskonalenie tego silnika oznacza, że ulepszenia, nowe funkcje itp. mogą być udostępniane wszystkim klientom bez modyfikowania ich warstwy aplikacji. Czy powinno to być uwzględnione w konserwacji jako bezpłatne aktualizacje? **4. Jak pobierać opłaty za utrzymanie w przypadku umów godzinowych ?** Jeśli pracujemy nad projektem godzinowym najczęściej zakres projektu ciągle się rozszerza, ale nie wymaga to przeszacowania projektu, ponieważ zwiększenie zakresu oznacza wzrost w godzinach, a tym samym zwiększenie budżetu. Jednak w większości przypadków, ze względu na zwiększenie zakresu, prace związane z naprawą błędów i konserwacją są również uwzględniane w czasie opracowywania. Czy to dobrze ? A może powinno istnieć rozgraniczenie między wdrożeniem a konserwacją nawet w przypadku projektów godzinowych?


title: Utrzymywanie Regex w aplikacji .net

text: Jestem pewien, że każdy miał swój udział w nieszczęściach regex. Mamy dużą aplikację z około 30 programistami pracującymi nad aplikacją sieciową mvc3 , a dwukrotna walidacja wyrażeń regularnych (front-end i strona serwera) staje się koszmarem do utrzymania. Czy istnieje sposób na przechowywanie wszystkich wyrażeń regularnych w jednym miejscu? aby mogły być używane jako atrybuty dla podmiotów, a także używane do walidacji w kontrolerze?


title: Jak nauczyć się efektywnie korzystać z więcej niż jednego frameworka?

text: Pewnego dnia mój lider powiedział mi, że _nie wymyślaj kół na nowo, używaj wbudowanych klas frameworka_ (z poważnym nastrojem), kiedy implementuję jakiś algorytm, wspierany był przez .NET fx. A tak na poważnie, wcześniej nie wiedziałem o tym wsparciu, bo po raz pierwszy pracuję z .NET). Więc mam te pytania. Na przykład, aby zbudować Web-App mamy kilka sposobów: 1. C# z frameworkiem ASP.NET 2. Java z frameworkiem JavaEE (i przyjaciele jak Struts, Spring v.v.). 3. PHP z frameworkiem Zend. 4. ... Nauczenie się języka (C#, Java, PHP...) zajmuje tylko około 1 miesiąca, ALE nauka **efektywnego** korzystania z frameworka zajmuje Ci co najmniej KILKA LAT pracy (znajdziesz każdy fragment kodu został wbudowany). A więc _jak można nauczyć się efektywnie korzystać z 2 (lub więcej) frameworków?_ Wszelkie pomysły są mile widziane!


title: Najlepszy algorytm do korelacji podobnych artykułów

text: jaki jest najlepszy sposób skorelowania i pogrupowania podobnych artykułów? Mam na myśli coś takiego jak Google News, które grupuje pod jednym tematem różne artykuły z różnych źródeł. Nie interesuje mnie coś bardzo wyrafinowanego, po prostu ważne jest, aby być wydajnym pod względem szybkości i potrzebnych zasobów. Mogę żyć z korelacją tylko na krótkich tekstach, takich jak tytuły artykułów, a nie sam artykuł. Przeczytałem artykuł, który mówi o krotkach składających się z dwóch lub trzech słów (najlepiej z trzema), które należy wyodrębnić i użyć do uzyskania wyniku w celu uzyskania korelacji, ale jest to dla mnie zbyt dużo akademickie


title: Uwzględniając fakt, że klucze podstawowe nie są częścią domeny Twojej firmy

text: W prawie wszystkich okolicznościach klucze podstawowe nie są częścią domeny Twojej firmy. Oczywiście możesz mieć kilka ważnych obiektów skierowanych do użytkowników z unikalnymi indeksami („Nazwa użytkownika” w przypadku użytkowników lub „Numer zamówienia” w przypadku zamówień), ale w większości przypadków nie ma _potrzeby biznesowej_, aby jawnie identyfikować obiekty domeny za pomocą pojedynczej wartości lub zestawu wartości , każdemu, ale być może administratorowi. Nawet w tych wyjątkowych przypadkach, zwłaszcza jeśli używasz globalnych unikalnych identyfikatorów (GUID), będziesz chciał lub chciał zastosować klucz alternatywny zamiast ujawniać sam klucz podstawowy. Tak więc, jeśli moje rozumienie projektowania opartego na domenie jest dokładne, klucze podstawowe _nie muszą_ i dlatego _nie powinny_ być ujawniane i należy je pominąć. Są brzydkie i krępują mój styl. Ale jeśli zdecydujemy się nie uwzględniać kluczy podstawowych w modelu domeny, konsekwencje: 1. Naiwnie, obiekty transferu danych (DTO), które pochodzą wyłącznie z kombinacji modeli domen, nie będą miały kluczy podstawowych 2. Przychodzące DTO nie będą miały podstawowego klucz Czy można bezpiecznie powiedzieć, że jeśli naprawdę zamierzasz pozostać czystym i wyeliminować klucze podstawowe w swoim modelu domeny, powinieneś być przygotowany na obsługę każdego żądania pod względem unikalnych indeksów w tym kluczu podstawowym? Innymi słowy, które z poniższych rozwiązań jest właściwym podejściem do radzenia sobie z identyfikacją poszczególnych obiektów po usunięciu PK w modelach dziedzinowych? 1. Umiejętność identyfikowania obiektów, z którymi musisz się zmierzyć na podstawie innych atrybutów 2. Odzyskiwanie klucza podstawowego z powrotem w DTO; tj. eliminowanie PK podczas mapowania z trwałości na domenę, a następnie rekombinowanie PK podczas mapowania z domeny na DTO? EDIT: Zróbmy ten beton. Załóżmy, że mój model domeny to „VoIPProvider”, który obejmuje pola takie jak „Nazwa”, „Opis”, „URL”, a także odniesienia, takie jak „ProviderType”, „PhysicalAddress” i „Transakcje”. Załóżmy teraz, że chcę zbudować usługę sieciową, która umożliwi uprzywilejowanym użytkownikom zarządzanie usługami `VoIPProvider'. Być może przyjazny dla użytkownika identyfikator jest w tym przypadku bezużyteczny; w końcu dostawcy VoIP to firmy, których nazwy wydają się być różne w sensie komputerowym, a nawet wystarczająco wyraźne w ludzkim znaczeniu ze względów biznesowych. Może więc wystarczy powiedzieć, że unikalny `VoIPProvider` jest całkowicie określony przez `(Nazwa, URL)`. Załóżmy teraz, że potrzebuję metody `PUT api/providers/voip`, aby uprzywilejowani użytkownicy mogli aktualizować dostawców `VoIP`. Wysyłają `VoIPProviderDTO`, który zawiera wiele, ale nie wszystkie pola z `VoIPProvider`, w tym niektóre potencjalnie spłaszczające. Nie mogę jednak czytać w ich myślach, a oni nadal muszą mi powiedzieć, o którym dostawcy mówimy. Wygląda na to, że mam 2 (może 3) opcje: 1. Dołącz klucz podstawowy lub klucz alternatywny do mojego modelu domeny i wyślij go do DTO i odwrotnie 2. Zidentyfikuj dostawcę, na którym nam zależy, za pomocą unikalnego indeksu, na przykład `( Name, Url)` 3. Wprowadź jakiś obiekt pośredni, który zawsze może mapować pomiędzy warstwą trwałości, domeną i DTO w sposób, który nie ujawnia szczegółów implementacji warstwy trwałości - powiedzmy wprowadzając tymczasowy identyfikator w pamięci podczas przechodzenia od domeny do DTO iz powrotem,


title: Czy tworzenie i zapisywanie do jednego dużego pliku jest szybsze niż tworzenie i zapisywanie wielu mniejszych plików w Pythonie w systemie Linux?

text: Jeśli używasz Pythona na maszynie z systemem Linux, które z poniższych będzie szybsze? Czemu? 1. Utworzenie pliku na samym początku programu, zapisanie bardzo dużej ilości danych (tekstu), zamknięcie go, a następnie podzielenie dużego pliku na wiele mniejszych plików na samym końcu programu. 2. W trakcie działania programu zostanie utworzonych, zapisanych i zamkniętych wiele mniejszych plików. W szczególności program, o którym mowa, to taki, który musi rejestrować stan bardzo dużej tablicy w każdym z wielu kroków czasowych. Stan tablicy w każdym kroku czasowym musi być rejestrowany w niezależnych plikach. Pracowałem z C na Linuksie i wiem, że otwieranie/tworzenie i zamykanie plików jest dość czasochłonne, a mniej operacji otwierania/tworzenia oznacza szybsze programy. Czy to samo dotyczy pisania w Pythonie? Czy zmiana języka miałaby znaczenie, jeśli nadal używasz tego samego systemu operacyjnego? Interesuje mnie również rola RAM w tym kontekście. Na przykład - popraw mnie, jeśli się mylę - zakładam, że części pliku, do którego jest zapisywany, zostaną umieszczone w pamięci RAM. Jeśli plik stanie się zbyt duży, czy zwiększy ilość pamięci RAM i spowoduje problemy z szybkością lub innymi obszarami? Gdyby odpowiedź mogła zawierać pamięć RAM, byłoby świetnie.


title: Ustawienie zmiennej w konstruktorze lub w metodzie

text: Mam klasę, która zawiera dwie metody. Te metody dodają i usuwają obiekt do magazynu danych. Klasa, która zawiera te metody, ma konstruktor no arg, ale każda z dwóch metod pobiera zmienną liczbę parametrów do dodawania/usuwania. Czy te metody powinny być statyczne, a jeśli nie, czy parametry metody powinny być inicjowane w strukturze jako zmienne wystąpienia zamiast na poziomie metody? pseudo kod : class Utility { public Utility(){ } public void add(String arg1, int arg2, boolean arg3){ //dodaj tutaj logikę } public void remove(int arg1, char arg2, float arg3){ //usuń logikę tutaj         }         }


title: Kiedy używać DI, a kiedy tworzyć w Javie

text: Mam przyzwoitą ilość OOP z różnymi językami, ale jestem całkiem nowy w Javie. Czytam wiele samouczków, w których w kodzie klasy tworzone są duże liczby obiektów i próbuję je uruchomić, ale kompiluję wersje klas w samouczkach, które wykonują wstrzykiwanie zależności zamiast tworzyć wystąpienia wszystkich same klasy. Ale Java nie jest podobna do innych języków, których używałem w tym, że prawie wszystko jest obiektem. Gdybym miał dosłownie wszystko wstrzyknąć, wynik byłby bardzo niechlujny i trudny do naśladowania. Oczywiście nie wstrzykujesz obiektów String i domyślam się, że istnieją inne obiekty, których nie wstrzykujesz, ale nie jestem pewien, gdzie powinna iść linia. W którym momencie DI przestaje być właściwą rzeczą do zrobienia, a kiedy zaczyna być ciężarem? Jak w sposób pragmatyczny decydujesz, co wstrzyknąć, a co po prostu utworzyć? FYI, tutoriale, które robię to http://edn.embarcadero.com/article/31995 i http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html do budowania prostego klienta i serwer. Nie kopiuję ich jednak linia po linii, staram się stworzyć równoważne klasy zgodne z najlepszymi praktykami


title: Pytanie GPL : aplikacja internetowa używająca Imagick i GhostScript => Jaka będzie ostateczna licencja?

text: Jestem trochę zakłopotany i potrzebuję twojej pomocy, aby zrozumieć mój problem. Stworzyłem aplikację webową (PHP, JQuery) dla jednego z moich klientów. Ostatnio mój klient poprosił mnie o dodanie nowej funkcji umożliwiającej konwersję plików PDF do JPG. Po przejrzeniu stron internetowych odkryłem, że jedynym rozwiązaniem jest rozszerzenie PHP iMagick (licencja Apache) z GhostScript (licencja GPL). Ale ponieważ mój klient chce sprzedawać aplikację internetową innym firmom, muszę korzystać z licencji innych niż GPL. Nawiasem mówiąc, ta funkcja jest OPCJONALNA, a użytkownik końcowy musi ręcznie pobrać i zainstalować iMagick i GhostScript, jeśli jest interesujący, korzystając z konwersji PDF. Czy jest ktoś, kto mógłby mi powiedzieć, czy fakt użycia Imagick do konwersji plików PDF na JPG (a zatem użycia GhostScript) zmienia moją obecną licencję własności na GPL? A co jeśli nie używam Imagick, ale wywołuję GhostScript przy użyciu funkcji PHP exec()? Czy istnieją inne projekty spoza GPL do konwersji plików PDF na JPG, których mógłbym używać z PHP? Każda pomoc byłaby bardzo mile widziana.


title: Czy istnieje sposób na obliczenie, czy odrodzić nowy wątek, czy użyć bieżącego wątku?

text: Buduję interpretację DSL, w której równoległość jest częścią języka - użytkownik po prostu stwierdza, że obliczenia mogą być wykonywane równolegle, a tłumacz _może_ zdecydować, czy wykonać obliczenia równolegle, czy nie. Ponieważ nie zawsze pomocne jest wykonywanie obliczeń równoległych, szczególnie w przypadku bardzo małych zadań (przełączanie kontekstu, kopiowanie pamięci między rdzeniami itp. może faktycznie spowolnić program). Chcę wiedzieć, czy są dostępne „najlepsze praktyki”, które mogą obliczyć (z dużym stopniem pewności), czy wykonać nowe obliczenia w bieżącym wątku, czy też utworzyć nowy wątek do obliczeń. Zauważ, że ponieważ mój język jest interpretowany, mogę wykonywać wszelkiego rodzaju monitorowanie wykonywanego programu i podejmować tę decyzję w zależności od tego, jak program się wykonuje (coś w rodzaju kompilatora JIT). **Aktualizacja** Przez "Spawn" nie miałem na myśli, że utworzę nowy wątek, ale przeniosę przetwarzanie do innego wątku, może z puli wątków. Zauważ, że nawet przy korzystaniu z puli wątków istnieje obciążenie związane z możliwym transferem pamięci między rdzeniami procesora i tym podobne, więc nawet w tym przypadku ilość pracy powinna być stosunkowo duża.


title: W jaki sposób duże firmy programistów sprawdzają błędy w swoich programach?

text: Zastanawiałem się, jak duże firmy programistów sprawdzają błędy w swoich programach. Czy po prostu testują to na kilku komputerach?


title: Zarządzanie hiszpańskim kodem

text: Mamy nowy projekt od klienta, który jest Hiszpanem i ma cały swój kod Java i komentarze, zmienne, nazwy metod w języku hiszpańskim. Nie wolno nam konwertować go na język angielski, a następnie go używać. Jeśli ktoś z was pracował w takim stanie, czy może doradzić, co można zrobić, aby złagodzić to ryzyko, ponieważ musimy wprowadzać nowe rozwiązania i jest to główna przeszkoda. Ich projekt Java zawiera mieszankę EJB, Struts, Custom Framework i ponad 10000 plików Java z co najmniej 200 tys. linii kodu (szacunkowo) i jest wdrażany przy użyciu Weblogic Server 10 Pozdrawiam, Dazzlers


title: Architektura aplikacji MVVM, gdzie umieścić klasę konfiguracji wstrzykiwania zależności, interfejsy BusinessLayer i Common?

text: Planując moją architekturę dla aplikacji MVVM dochodzę do tego: * MyApp.UI * View * MyApp.BusinessLayer * ViewModel * MyApp.DataAccessLayer * RepositoryImplEF * MyApp.DomainLayer * DomainObject * RepositoryInterface * MyApp.Common * Logging * Security * Utility (zawiera jakaś metoda refleksji używana przez wiele poziomów) * CustomException * MyApp.UnitTest Byłem zainspirowany projektowaniem opartym na domenie, programowaniu opartym na testach i architekturze cebuli, ale nie jestem pewien, czy wszystko dobrze mi się udało. Nie jestem pewien kilku rzeczy: 1. gdzie umieścić klasę konfiguracji wstrzykiwania zależności? We wspólnym projekcie? 2. gdzie umieścić interfejsy BusinessLayer? w warstwie domeny? 3. gdzie umieścić wspólne interfejsy? w warstwie domeny? Ale wspólne w odniesieniu do domeny (dla niektórych narzędzi odbicia i dla DI, jeśli odpowiedź na 1. jest tak), a odwołanie cykliczne nie jest dobre


title: Co to jest „pula zadań”?

text: Szukałem na wielu stronach internetowych definicji „puli zadań”, ale większość opisów jest bardzo niejasna. Gdziekolwiek mogę znaleźć dokładną definicję tego? Więcej szczegółów. * Czy w puli zadań dozwolone są zależności? * Czy uruchomione zadanie może wymieniać dane z innymi uruchomionymi zadaniami? * Mówiąc odwrotnie, czy zadania mogą akceptować dane _tylko_ przed rozpoczęciem i mogą publikować wyniki _tylko_ po zakończeniu zadania? * Co śledzi tymczasowe zasoby (pamięć, procesor itp.), które są używane przez zadania? * Jak zdefiniować wagi, które zachęcą do sprawnego przydzielania zadań? * Na przykład, jeśli jedno zadanie wymaga przekazania dużej ilości danych do następnego zadania, sensowne może być uruchomienie następnego zadania bezpośrednio po pierwszym zadaniu i jak najbliżej pierwszego wątku/procesora/maszyny/klastra (lokalizacja) jak to możliwe * A co z zadaniami, które na początku nie są znane (nie istnieją), ale zostały „stworzone” później?


title: jak modelować połączenie z zasobem z podstawowym przetwarzaniem zdarzeń

text: Dla mojego prostego klienta MUD używam Apache Telnet (nie, nie ssh). Klient mud to dziwna bestia: > Ogólnie rzecz biorąc, klient MUD jest bardzo prostym klientem telnetu, który nie ma emulacji terminala VT100 i możliwości przeprowadzania negocjacji telnetu. ... > Standardowe funkcje widoczne w większości klientów MUD obejmują obsługę kolorów ANSI, > aliasy, wyzwalacze i skrypty. - Wikipedia **Chciałbym**, aby nienapisany jeszcze `Controller` miał odniesienie do `TelnetConnection` i po prostu używał go do wyższego poziomu abstrakcji dla I/O, ale wszystkie próby wyróżnienia tej klasy zawieść dla mnie. `TelnetConnection` wydaje się brać odpowiedzialność za wszystko, a potem za niektóre i po prostu się rozwija. pakiet telnet; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.SocketException; import java.util.Deque; import java.util.Observable; import java.util.Obserwatora; import java.util.logging.Logger; importuj org.apache.commons.net.telnet.TelnetClient; importuj player.GameAction; import player.DataFromRegex; importuj odtwarzacz.Wyrażenie regularne; public class TelnetConnection implementuje Observer { private static Logger log = Logger.getLogger(TelnetConnection.class.getName()); prywatny Klient Telnet telnetClient = nowy Klient Telnet(); prywatne InputOutput inputOutput = new InputOutput(); private Regex regexParser = nowe Regex(); prywatne DataFromRegex dane = null; private Logika logiczna = new Logic(); public TelnetConnection() { init(); } private void init() { try { int port = 3000; InetAddress host = InetAddress.getByName("Rainmaker.wunderground.com"); telnetClient.connect(host, port); inputOutput.readWriteParse(telnetClient.getInputStream(), telnetClient.getOutputStream()); } catch (SocketException ex) { } catch (IOException ex) { } inputOutput.addObserver(this); } private void sendAction(GameAction action) wyrzuca IOException { log.info(action.toString()); byte[] bajty akcji = akcja.getAction().getBytes(); OutputStream outputStream = telnetClient.getOutputStream(); outputStream.write(actionBytes); outputStream.write(13); outputStream.write(10); outputStream.flush(); } private void sendActions(Deque<GameAction> gameActions) { while (!gameActions.isEmpty()) { GameAction akcja = gameActions.remove(); spróbuj { sendAction(akcja); } catch (IOException ex) { } } } @Override public void update(Observable o, Object arg) { String line = null; if (o instanceof InputOutput) { line = inputOutput.getLine(); log.dobra(wiersz); dane = regexParser.parse(linia); Deque<GameAction> gameActions = logic.getActions(data); sendActions(gameActions); } } public static void main(String[] args) { new TelnetConnection(); } } Część trudności leży w klasie `InputOutput`, która jest zaadaptowana z `IOUtil` z Apache. (Z jakiegoś powodu nie mogę dołączyć linku do kodu źródłowego Apache.) Po wysłaniu `InputStream` do `InputOutput` konieczne jest wywołanie zwrotne za pomocą `Observable`, aby następnie wysłać dane String w celu dopasowania i wyszukiwania? A potem wrócisz **co** po dopasowaniu i wyszukaniu tekstu? Sztuczka polega na tym, że jeśli chodzi o I/O: 1. przechwytywanie wejścia konsoli 2. drukowanie zdalnego wyjścia z serwera MUD na konsolę jak zwykły telnet 3. trochę wyrażeń regularnych/etc na zdalnym wyjściu, _concurrent_ z otwartymi, niezakończonymi strumieniami. Ten ostatni wymóg wydaje się być dziwną bestią, dla której nie mogę sobie wyobrazić przepływu kontroli i danych.


title: Czy architekt lub kierownik ds. rozwoju powinien powiedzieć kolegom z zespołu, gdzie dodać swój kod przed zakodowaniem nowej funkcji?

text: Doświadczyłem z dwoma rodzajami zespołów. Po przypisaniu mi funkcji jeden z kierowników programistów podaje mi dokładny plik lub klasę, którą należy dodać, a inny zespół po prostu opowiada mi historię lub wymaganie. Ta druga praca jest trudna, jeśli oprogramowanie, nad którym pracuję, jest zbyt duże, aby uchwycić strukturę. Czy starsi faceci powinni powiedzieć miejsce, aby dodać kod przed kodowaniem?


title: Dlaczego powinienem dodać SPRAWDŹ OGRANICZENIE?

text: Poniżej znajduje się skrypt tworzący tabelę utworzony przez Entity Framework przy użyciu modelu przedstawionego w http://codereview.stackexchange.com/questions/14077/is-it-property-tpt-inheritance. W tym skrypcie są dwie instrukcje alter. Jaka jest potrzeba drugiego oświadczenia ALTER? SCRIPT CREATE TABLE [dbo].[SellingItems_Book]( [Tytuł] [nvarchar](max) NULL, [Id] [int] NOT NULL, CONSTRAINT [PK_SellingItems_Book] KLUCZ PODSTAWOWY ( [Id] ASC ) Z (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] PRZEJDŹ Najpierw zmień ALTER TABLE [dbo]. ) REFERENCJE [dbo].[SellingItems] ([Id]) PRZEJDŹ Druga zmiana ALTER TABELA [dbo].[SellingItems_Book] SPRAWDŹ OGRANICZENIE [FK_Book_inherits_SellingItem] PRZEJDŹ


title: Interfejsy w klasie abstrakcyjnej

text: Mój współpracownik i ja mamy różne opinie na temat relacji między klasami bazowymi a interfejsami. Jestem przekonany, że klasa nie powinna implementować interfejsu, chyba że ta klasa może być użyta, gdy wymagana jest implementacja interfejsu. Innymi słowy, podoba mi się taki kod: interface IFooWorker { void Work(); } abstract class BaseWorker { ... zachowania klasy bazowej ... public abstract void Work() { } chroniony string CleanData(string data) { ... } } class DbWorker : BaseWorker, IFooWorker { public void Work() { Repozytorium. AddCleanData(base.CleanData(UI.GetDirtyData())); } } DbWorker jest tym, co otrzymuje interfejs IFooWorker, ponieważ jest to implementowalna implementacja interfejsu. W pełni realizuje kontrakt. Mój współpracownik woli prawie identyczne: interface IFooWorker { void Work(); } abstract class BaseWorker : IFooWorker { ... zachowania klasy bazowej ... public abstract void Work() { } chroniony string CleanData(string data) { ... } } class DbWorker : BaseWorker { public void Work() { Repozytorium. AddCleanData(base.CleanData(UI.GetDirtyData())); } } Gdzie klasa bazowa otrzymuje interfejs iz tego powodu wszyscy spadkobiercy klasy bazowej również należą do tego interfejsu. To mnie wkurza, ale nie mogę wymyślić konkretnych powodów, dla których poza „klasą bazową nie można samodzielnie działać jako implementacja interfejsu”. Jakie są zalety i wady jego metody w porównaniu z moją i dlaczego jedna powinna być stosowana zamiast innej?


title: Co zwykle oznacza, że funkcja jest „obsługiwana”?

text: Obecnie pracuję nad testami dla określonego obszaru aplikacji. Musiałem napisać kilka automatycznych testów dla konkretnej funkcji, ale ze względu na okoliczności nie było to łatwe. Kiedy zapytałem o to jednego z innych testerów, wspomniał, że te same funkcje istnieją w siostrzanej aplikacji produkowanej przez naszą firmę, ale nie są nigdzie udokumentowane (dokumentacja użytkownika końcowego lub w inny sposób). Powiedział również, że funkcja zazwyczaj nie jest w ogóle testowana w siostrzanej aplikacji i zwykle nie jest testowana w aplikacji, nad którą pracuję. Najwyraźniej ta funkcja nie jest intensywnie używana, ale usunięcie jej wymagałoby sporo pracy, więc stosunek korzyści do kosztów nie działa. Wszystko to pozostawiło mi kilka pytań. Co innego niż „Dokumentacja tak mówi” lub „Powiedzieliśmy klientowi, że tak jest”, co zwykle sprawia, że funkcja jest „obsługiwana” lub nieobsługiwana?


title: Jak zarządzać długotrwałymi wątkami w tle i raportować postępy za pomocą DDD

text: Tytuł mówi większość z tego. Znalazłem zaskakująco mało informacji na ten temat. Mam długo działającą operację, której użytkownik chce zobaczyć postęp (jak w przypadku przetworzonego elementu x z y). Muszę też być w stanie wstrzymać i zatrzymać operację. (Zatrzymanie nie wycofuje już przetworzonych elementów.) Chodzi o to, że nie chodzi o to, że przetworzenie każdego elementu zajmuje dużo czasu, ale o to, że zwykle jest ich dużo. A do tej pory czytałem o tym, że umieszczanie czegoś w rodzaju kolejki w DB jest trochę antywzorem. Obecnie nie mam żadnego systemu przesyłania wiadomości i nigdy z nim nie pracowałem. Inną rzeczą, którą gdzieś przeczytałem, jest to, że raportowanie postępów jest czymś, co należy do warstwy aplikacji, ale nie wchodziło w szczegóły. Powiedziawszy to wszystko, mam na myśli następujące. * Żądanie użytkownika z listą pozycji wchodzi do warstwy aplikacji. * Warstwa aplikacji pobiera pewne informacje z domeny potrzebne do przetworzenia elementów. * Warstwa aplikacji przekazuje elementy i informacje do jakiejś usługi domeny (czy implementacja tej usługi powinna należeć do warstwy infrastruktury?) * Ta usługa uruchamia wątek roboczy z wywołaniami zwrotnymi zarówno do raportowania postępu, jak i wstrzymywania/zatrzymywania go. * Ten wątek roboczy będzie przetwarzał każdy element we własnym UoW. Oznacza to, że wcześniejsze informacje o domenie muszą być przechowywane w niektórych DTO. * Ponieważ nic nie jest tak naprawdę utrwalone, **usługa powinna być bezpieczna dla pojedynczych i wątków** * Za każdym razem, gdy użytkownik zażąda raportu o postępie lub chce wstrzymać/zatrzymać operację, warstwa aplikacji zapyta usługę. Czy to byłoby właściwe rozwiązanie? Czy przynajmniej jestem na dobrej drodze z tym? Zwłaszcza część bezpieczna dla pojedynczego tonu i nici sprawia, że całość wydaje się nieprzyjemna.


title: Jak napisać kod wielokrotnego użytku w node.js

text: Próbuję zrozumieć, jak projektować aplikacje node.js, ale wydaje się, że jest coś, czego nie mogę pojąć w programowaniu asynchronicznym. Załóżmy, że moja aplikacja musi uzyskać dostęp do bazy danych. W środowisku synchronicznym zaimplementowałbym klasę dostępu do danych metodą read(), zwracającą tablicę asocjacyjną. W node.js, ponieważ kod jest wykonywany asynchronicznie, ta metoda nie może zwrócić wartości, więc po wykonaniu będzie musiała coś "zrobić" jako efekt uboczny. Będzie wtedy zawierał kod, który robi coś innego niż tylko czytanie danych. Załóżmy, że chcę wielokrotnie wywoływać tę metodę, za każdym razem z innym wywołaniem zwrotnym powodzenia. Ponieważ wywołanie zwrotne jest zawarte w samej metodzie, nie mogę znaleźć czystego sposobu na zrobienie tego bez duplikowania metody lub określania wszystkich możliwych wywołań zwrotnych w długiej instrukcji switch. Jaki jest właściwy sposób radzenia sobie z tym problemem? Czy podchodzę do tego w niewłaściwy sposób?


title: Czy Młodsi Programiści powinni być zaangażowani jako recenzenci kodu w projekty Starszych Programistów?

text: Jeden z członków mojego zespołu, młodszy programista, ma imponujące umiejętności programowania jak na swój poziom doświadczenia. A podczas przeglądów kodu wierzę w kładzenie nacisku na uczenie się, a nie wytykanie błędów. Ale czy młodsi programiści powinni być zaangażowani w przeglądy kodu dla starszych programistów? A może na przeglądy kodu powinni brać udział tylko programiści z odpowiednim doświadczeniem?


title: Jakie rodzaje procesów muszą znaleźć odzwierciedlenie w schemacie blokowym?

text: W programowaniu wizualnym istnieje wiele zdarzeń, które wspierają nasze zadania aplikacyjne. Czy wraz z procesami zdefiniowanymi przez użytkownika powinny one również znajdować się na schemacie blokowym, czy nie? A co z konstruktorami klas, czy mają być pokazane na schemacie blokowym, czy nie?


title: Jakich metod używasz do promowania świadomości programistów w interfejsie API lub niestandardowej architekturze?

text: Jeśli tworzysz własną architekturę lub intensywnie korzystasz z API innych dostawców, w jaki sposób promujesz świadomość personelu programistycznego? Załóżmy na przykład, że używasz kontrolek Infragistics dla aplikacji C# winforms — kontrolki mają mnóstwo metod, pewne dziwactwa i najlepszy sposób ich użycia w aplikacji. Jak promujecie transfer wiedzy wśród swoich programistów? Wiki? E-mail? Blogi?.


title: Jak mogę świadomie przećwiczyć wzorce projektowe i refaktoryzację?

text: Czytałem książkę Refaktoryzacja do wzorców i zastanawiałem się, jak mogę uzyskać szansę na przećwiczenie umiejętności, ponieważ bez świadomego przećwiczenia nowych sposobów refaktoryzacji i wykorzystania wzorców moje umiejętności się nie poprawią. Ale praca biurowa wymaga ode mnie jak najszybszego zakończenia każdego zadania. Przez większość czasu projekt i architektura projektu nie jest przeze mnie kontrolowana, mogę jedynie podążać podobnym stylem do istniejącego kodu. Czasem jest projekt ze złym projektem, ale jest też inny programista, którego umiejętności projektowe są lepsze ode mnie i ma już cały plan refaktoryzacji projektu, więc po prostu podążam za jego planem. Jak uzyskać możliwość ćwiczenia?


title: Czy przedsiębiorstwa używają ocen TIOBE dla języków programowania?

text: Czy ocena języka programowania TIOBE odgrywa znaczącą rolę w wyborze języka programowania w komputerach korporacyjnych?


title: Czy klasy konkretne powinny unikać wywoływania innych klas konkretnych, z wyjątkiem obiektów danych?

text: W Dodatku A do _The Art of Unit Testing_ Roy Osherove, mówiąc o sposobach pisania testowalnego kodu od samego początku, mówi: > Klasa abstrakcyjna nie powinna wywoływać klas konkretnych, a klasy konkretne > również nie powinny wywoływać klas konkretnych, chyba że są obiektami danych (obiekty > przechowujące dane, bez zachowania). (259) Pierwsza połowa zdania to po prostu **D** odwrócenie zależności od SOLID. Druga połowa wydaje mi się dość ekstremalna. Oznacza to, że za każdym razem, gdy mam zamiar napisać klasę, która nie jest prostą strukturą danych, czyli większością klas, powinienem najpierw napisać interfejs lub klasę abstrakcyjną, prawda? Czy naprawdę warto posunąć się tak daleko w definiowaniu klas abstrakcyjnych i interfejsów? Czy ktoś może wyjaśnić bardziej szczegółowo dlaczego lub obalić to pomimo korzyści dla testowalności?


title: Ruby: złe części

text: Niedawno przeczytałem książkę Crockforda „Javascript: The Good Parts” i jedną z podstawowych przesłanek było to, że języki programowania mogą mieć złe zestawy funkcji, których programiści powinni unikać. Jestem Rubinistą i chociaż uwielbiam język, zawsze warto mieć perspektywę. A więc **co uważasz za najgorszą cechę (np. metody, klasy, praktyki) w Ruby?** Nie zamierzam tutaj wszczynać kłótni o zalety samego języka, jego szybkość i tak dalej. Raczej wolę dyskusję o tym, jakie funkcje uważasz za niebezpieczne / kłopotliwe / bolesne w użyciu, w oparciu o doświadczenia z przeszłości.


title: Bezpieczeństwo oparte na programowaniu czy bezpieczeństwo kierowane przez administrację w oprogramowaniu?

text: Istnieją przypadki, w których jako programista masz możliwość wymuszenia bardziej rygorystycznych funkcji bezpieczeństwa i ochrony w oprogramowaniu, chociaż można nimi zarządzać na poziomie środowiska (tj. zajmie się tym system operacyjny). Gdzie Twoim zdaniem wyznaczasz granicę i jakie elementy uwzględniasz w swojej decyzji? ## Konkretne przykłady ### Zarządzanie użytkownikami jest obowiązkiem systemu operacyjnego Nie jest to dokładnie funkcja bezpieczeństwa, ale w podobnym przypadku Google Chrome nie zezwalał na oddzielne profile. Wywoływany powód (choć teraz obsługuje wiele profili dla tego samego użytkownika systemu operacyjnego) był taki, że zarządzanie użytkownikami było obowiązkiem systemu operacyjnego. ### Wyłączanie pól formularza internetowego Powtarzające się żądanie, które jest adresowane online, ma na celu wyłączenie automatycznego uzupełniania pól formularza. Automatyczne uzupełnianie nie istniało w starych przeglądarkach i było mile widzianą funkcją w czasie, gdy zostało wprowadzone dla osób, które często musiały wypełniać formularze. Ale spowodowało to również pewne obawy dotyczące bezpieczeństwa, dlatego niektóre przeglądarki zaczęły implementować, oprócz (oczywiście potrzebnego) ustawienia w ich własnym panelu preferencji/dostosowania, atrybut „autocomplete” dla pól „form” lub „input”. Zostało to teraz wprowadzone do nadchodzącego standardu HTML5. W przypadku przeglądarek, które nie słuchają tego atrybutu, oferowane są dziwne hacki*, takie jak generowanie unikalnych identyfikatorów i nazw pól, aby uniknąć ich sugerowania w przyszłych formularzach (co wiąże się z kolejnym stadem problemów, takich jak zanieczyszczenie lokalnej pamięci podręcznej automatycznego wypełniania i nie zapobiega przechowywaniu w nim hasła, ale prawdopodobnie powiela jego wystąpienia). W tym konkretnym przypadku i w innych twierdzę, że jest to **ustawienie użytkownika** i że **żądaniem użytkownika** i **odpowiedzialnością użytkownika** jest włączenie lub wyłączenie automatycznego wypełniania (poprzez wyłączenie funkcja łącznie). A jeśli opiera się na wewnętrznej polityce i wymaganiach bezpieczeństwa w środowisku korporacyjnym, zastąp użytkownika administratorem w powyższym. Zakładam, że można kontrargumentować, że użytkownik może chcieć uzyskać dostęp do niekrytycznych aplikacji (lub witryn) z włączoną tą poręczną funkcją, a krytycznych aplikacji z tą funkcją wyłączoną. Ale wtedy myślę, że po to są strefy bezpieczeństwa (w niektórych przeglądarkach) lub znak, że potrzebujesz bezpieczniejszego (i dedykowanego) środowiska / konta, aby korzystać z tych aplikacji. * Oczywiście nie zaprzeczam pomysłowości ludzi, którzy byli **zmuszeni** znaleźć obejścia, tylko konieczność tych obejścia. * * * ## Pytania To było trochę rozwlekłe, więc myślę, że moje pytania są następujące: * Czy ogólnie uważasz, że jest to odpowiedzialność aplikacji (a więc dewelopera)? * Gdzie wytyczasz granicę, jeśli nie w „ogólnym” przypadku?


title: Co muszę zrobić, tworząc bibliotekę dla prostego programu, aby chronić innych przed brakiem bezpieczeństwa wątków?

text: Czy podczas tworzenia biblioteki dla prostego programu bardziej opłacalne jest zapewnienie bezpieczeństwa wątków, czy też istnieje sposób na wykrycie użycia programu w programie wielowątkowym i ASSERT() lub ustalenie w inny sposób (najlepiej w czasie kompilacji lub połączenia), że jest może stwarzać problemy. Pomocą związaną z tym pytaniem byłaby zautomatyzowana obsługa narzędzi do znajdowania potencjalnych problemów z bezpieczeństwem wątków, funkcjami języka programowania, które to wymuszają,


title: Czy wiedza o Swingu powinna być wymagana od programistów Java?

text: Swing jest integralną częścią Java API. Jest to również najpopularniejszy framework GUI dla Javy. Nadal zastanawiam się, czy każdy programista Java powinien nadal znać, a przynajmniej być dobrze zaznajomiony z Swingiem (być może z wyłączeniem programistów internetowych)? Istnieją alternatywy (np. SWT), ale nie są one szeroko stosowane (w porównaniu ze Swingiem). Co sądzisz o wymaganiu wiedzy o Swingu od programistów Java? Jeśli taka wiedza jest ważna, to w jakim stopniu? Czy podstawy wystarczą, czy nie? Powodem, dla którego się zastanawiam, jest to, że naprawdę nie lubię Swinga, ale zastanawiam się, czy nadal powinienem doskonalić w nim swoje umiejętności. Potrafię tworzyć w nim proste GUI, ale zdecydowanie nie powiedziałbym, że dobrze znam Swinga.


title: Gdzie zdobyć doświadczenie z Big Data?

text: Bardzo interesuje mnie tworzenie i poznawanie wysoce skalowalnych stron internetowych i aplikacji, które zajmują się Big Data. Na przykład wiele światowej klasy firm internetowych i startupów, takich jak Twitter, Facebook, Google itp., ma do czynienia z ogromnymi ilościami danych, a ich inżynierowie oprogramowania używają narzędzi, takich jak Hadoop/MapReduce, Cassandra/memcache oraz innych algorytmów i technik oraz narzędzi do tworzenia sens tych danych. Dla mnie jest to bardzo ciekawa i wymagająca dziedzina, o wiele bardziej ożywcza niż tworzenie kolejnego e-commerce czy portalu internetowego dla firmy handlowej. Oczywiście praca w typowej firmie programistycznej nie zapewni Ci doświadczenia z tym poziomem możliwości masowo rozproszonego przetwarzania danych, a bardzo niewiele osób ma dostęp do klastrów procesorów do uruchamiania Hadoop, DryadLinq itp. Chciałem zapytać, czy istnieją pewne obszary geograficzne w krajach, w których działają firmy zajmujące się takimi problemami Big Data - Dolina Krzemowa byłaby oczywista, czy inne? Nie wahaj się też wspomnieć o nieoczywistych startupach i firmach, które borykają się z tak trudnymi problemami. EDIT: Po prostu przeczytaj ten ostatni artykuł Matta Welsha z Harvardu na temat jego (urlopu) w Google i skali problemów, nad którymi pracuje (brzmi wyraźnie podekscytowany): Obliczanie na dużą skalę lub, jak Google wypaczył mój mózg EDIT: Znalazłem inny nowy link dotyczący zdobywania doświadczenia z danymi wielkoskalowymi w instytucjach rządowych Zwalczanie danych wielkoskalowych w instytucjach rządowych Dzięki,


title: Kiedy należy dokonać pierwszego zatwierdzenia do kontroli źródła?

text: Nigdy nie jestem pewien, kiedy projekt jest wystarczająco daleko, aby najpierw zatwierdzić kontrolę źródła. Zwykle odkładam zatwierdzanie, dopóki projekt nie zostanie ukończony, a od tego czasu głównie zatwierdzam funkcje. (Nie robiłem żadnych osobistych projektów na tyle dużych, by mieć do tego za duży core.) Mam wrażenie, że to nie jest najlepsza praktyka, chociaż nie jestem pewien, co może pójść nie tak. Załóżmy na przykład, że mam projekt, który składa się z jednego pliku kodu. Potrzeba około 10 linijek kodu wzorcowego i 100 linijek, aby projekt działał z ekstremalnie podstawową funkcjonalnością (1 lub 2 funkcje). Czy powinienem najpierw zaewidencjonować: 1. Pusty plik? 2. Kod wzorcowy? 3. Pierwsze cechy? 4. W innym momencie? Ponadto, jakie są powody, aby zameldować się w określonym momencie?


title: Ciągła dostawa TFS

text: Czy możliwe jest osiągnięcie Continuous Delivery przy użyciu TFS np.? Usługa Windows? Istnieje > 1000 postów na temat korzystania z msdeploy z TFS dla projektów WEB. Próbuję zrozumieć, dlaczego nie ma zasobów, takich jak blogi, artykuły, msdn lub najlepsze praktyki dotyczące usługi Continuous Delivery dla systemu Windows przy użyciu TFS. Nie jestem pewien, czy ciągnąć, aby osiągnąć następujące wyniki bez żadnych działających materiałów referencyjnych. To takie frustrujące. 1. Archiwizuj istniejącą bazę kodu na zdalnym serwerze dla usługi, jak również dla projektu internetowego, a nie na serwerze integracyjnym! 2. Jak zatrzymać usługi na serwerze zdalnym, a nie na serwerze integracyjnym 3. Skopiuj nowy kod bazowy na serwerze zdalnym 4. Uruchom usługi


title: Na granicy pracy i domu

text: Myślę, że wszyscy tam byliśmy: słyszałeś, jak ktoś mówi „hej, czy nie byłoby fajnie, gdyby platforma X miała funkcję Y?” Rozglądasz się (na SO!), ta funkcja naprawdę nie istnieje, chociaż prawdopodobnie byłaby przydatna w wielu kontekstach. Więc to dość ogólne. Twój umysł trochę błądzi. „Jak trudne by to było? Cóż, prawdopodobnie byłby to tylko fragment. I funkcja doraźna. I może opakowanie”. I bum, zanim się zorientujesz, spędziłeś kilkanaście godzin **swojego wolnego czasu** wdrażając FooFeature, który jest naprawdę schludny i ogólny. Taki rodzaj kodu, na który możesz nie mieć czasu, aby pluć i błyszczeć w pracy, który byłby trochę pospieszny i nie tak udokumentowany. Więc teraz zastanawiasz się "czy nie byłoby to przydatne dla innych?" Masz swojego bloga, może konto CodeProject, a twój kolega, który zapytał, czy FooFeature istnieje, mógłby przypadkowo natknąć się na ten wpis na blogu, gdyby istniał, zanim ci powiedział. Z drugiej strony umowa NDA. To trochę niejasne i ogólne. Nie zabrania ci kodowania w domu, ale jasne jest, że udostępnianie kodu firmy to duże NIE. Ale to nie jest kodeks firmy. Albo to jest? Czy będzie? Co więc robisz z kodem (to więcej niż tylko fragmentem), który napisałeś w wolnych chwilach z myślą o uniwersalności, ale o pomyśle wywodzącym się z pracy i który najprawdopodobniej zostanie wykorzystany w pracy? Czy można to opublikować?


title: Pułapki w Grails Framework

text: Jakie są niektóre z największych problemów/pułapek związanych z używaniem frameworka Grails? Uczę się teraz frameworka i bardzo mi się podoba, ale muszę wiedzieć, jakie główne problemy mogę napotkać podczas korzystania z niego i jak ich uniknąć.


title: Czy istnieje nazwa nowej konwencji interfejsu „wstrząśnij telefonem”?

text: Niektóre aplikacje mobilne wykorzystują fakt, że smartfony mają wrażliwość na ruch, aby zapewnić funkcję „potrząsania”. Na przykład uważam, że Urban Spoon ma aplikację, dzięki której można wyświetlić rekomendację dla pobliskiej restauracji; jeśli nie podoba ci się zalecenie, możesz potrząsnąć telefonem i natychmiast wymyśli inny. Czy istnieje **słowo** dla tego nowego wzorca/idiomu/konwencji interfejsu (lub jakkolwiek chcesz to nazwać)?


title: Czy udział w kursach z administracji systemem pomoże w zdobyciu pracy programisty?

text: Właśnie ukończyłem licencjat na informatyce z mniej renomowanej uczelni i mam problem ze znalezieniem pracy. Szukając sposobów na znalezienie pracy, natknąłem się na instytut, który uczy administracji systemem. Twierdzą, że po ukończeniu kursu będę w znacznie lepszej sytuacji niż „normalni” programiści Javy, a moja pensja wzrośnie „wykładniczo”. Nie kupuję tego twierdzenia, ale dodatkowo powtarzał, że ten kurs pomoże mi wybrać pracę w wybranym przeze mnie kraju, ponieważ w tej konkretnej dziedzinie dostępnych jest bardzo mniej osób. Zapytany, dlaczego pensja rośnie „wykładniczo”, wyciągnął analogię, w której powiedział, że „z tych samych powodów, dla których kardiologom płaci się więcej niż ortodontom”. Dzieje się tak, ponieważ profil pracy będzie utrzymywał ważne dane i zapewniał dostępność systemów, co jest bardzo krytyczne w dziedzinach takich jak opieka zdrowotna i bankowość (nie jestem pewien co do tego twierdzenia). Chodzi mi o to, że bardzo interesuje mnie programowanie. Czy kurs administracji systemami mi w ogóle pomoże? Czy któreś z jego twierdzeń odzwierciedla rzeczywistość?


title: Do repozytorium czy nie do repozytorium

text: Kiedy po raz pierwszy dowiedziałem się o projektowaniu opartym na domenach, zapoznałem się również z wzorcami repozytorium i jednostek pracy, które kiedyś wydawały się być na najwyższym poziomie dla fajnych dzieciaków, które rzucały zapytania SQL, takie jak jaskiniowcy, do baz danych. Im głębiej zagłębiałem się w ten temat, tym bardziej dowiadywałem się, że nie wydają się one już potrzebne ze względu na _ORMs_ takie jak **EF** i **NHibernate**, które implementują zarówno jednostkę pracy, jak i repozytoria w jednym API, zwanym sesja lub kontekst. Teraz nie jestem pewien, co robić. Do repozytorium czy nie do repozytorium. Naprawdę rozumiem argument, że takie nieszczelne abstrakcje tylko nadmiernie komplikują rzeczy, nie dodając absolutnie niczego, co może uprościć dostęp do danych, jednak nie wydaje mi się właściwe łączenie wszystkich możliwych aspektów mojej aplikacji np. z programem. **Struktura encji**. Zazwyczaj kieruję się kilkoma prostymi wskazówkami: 1. Warstwa domenowa jest sercem systemu, zawierając encje, usługi, repozytoria... 2. Warstwa infrastruktury zapewnia implementacje interfejsów domenowych koncernu infrastrukturalnego, m.in. plik, baza danych, protokoły.. 3. Warstwa aplikacji zawiera główny element składowy, który łączy wszystko i porządkuje wszystko. Moje rozwiązania zazwyczaj wyglądają tak: Domain.Module1 Domain.Module2 IModule2Repo IModule2Service Module2 Infrastructure.Persistence Repositories EntityFrameworkRepositoryBase MyApp Boostrapper -> wstrzykuj EntityFrameworkRepositoryBase do IRepository itp. Utrzymuję w czystości warstwę mojej domeny, używając również `IRepository<'T>` dotyczy domeny, która nie zależy od niczego innego, co mówi mi, jak uzyskać dostęp do danych. Kiedy teraz tworzyłbym konkretną implementację `IModule2Service`, która wymaga dostępu do danych, musiałbym wstrzyknąć `DbContext` i przez to połączyć go bezpośrednio z warstwą infrastruktury. ( _Wracając do projektu Visual Studio, może to skończyć się naprawdę trudne ze względu na zależności cykliczne!_ ) **Dodatkowo** Co może być alternatywą dla _depozytów_ i _pieprzonych prac_? CQRS? Jak abstrahować czysto infrastrukturalne ramy?


title: problem ze strukturą w tworzeniu relacyjnego DBMS

text: W celu uczenia się i zrozumienia, chcę obecnie spróbować stworzyć mały relacyjny `DBMS` z prostymi funkcjami, takimi jak (na razie) tylko sekwencyjne czytanie/zapisywanie i **CREATE TABLE** , **INSERT** , **SELECT* * , **AKTUALIZUJ** i **USUŃ**. Obecnie jestem w części projektu " _think_ " i utknąłem na drodze do przechowywania odczytanych danych w pamięci. Najpierw myślałem o odpowiednim umieszczeniu ich w strukturze, ale problem polega na tym, że wszystkie tabele są różne, wiem, że typ każdej kolumny nie stanowi problemu, ale nie jestem pewien, czy C zapewnia sposób na stworzenie w pełni dynamicznej struktury. Moim drugim i aktualnym pomysłem jest stworzenie prostej `tablicy znaków` o wymaganej długości i otrzymanie danych w kolejności za pomocą rzutowania. Ale nie jestem pewien, czy jest to dobry sposób na wykonanie tej części, więc chciałem zapytać o opinię i porady na ten temat. Z góry dziękuje za twoją pomoc. * * * nb: Mam nadzieję, że moje pytanie jest wystarczająco jasne i zrozumiałe, nadal brakuje mi praktyki w języku angielskim


title: Pytanie koncepcyjne dotyczące przenoszenia oprogramowania z komputera stacjonarnego na telefon komórkowy

text: Planuję stworzyć rozwiązanie webowe na desktop, moje zadanie podzieliłbym na trzy kroki 1. Projektowanie 2. Kodowanie 3. Zautomatyzowany przypadek użycia Zastanawiam się czy w przyszłości będę musiał przenieść moje rozwiązanie webowe jako natywne dla telefonu komórkowego aplikacja. Jak mam to zrobić? Czy wrócę ponownie do fazy projektowania, aby przeprojektować, czy po prostu przekoduję niektóre z już napisanych rzeczy, które mają być przeznaczone na komputery stacjonarne?


title: Standardowa nazwa semantyczna trzeciej tabeli w 3NF

text: Czy dla 3 tabel, które są w 3NF, relacji wiele-do-wielu, istnieje standardowa nazwa lub termin opisujący trzecią tabelę, tę, która łączy inne tabele? Zasadniczo szukam semantycznego sposobu na nazwanie trzeciej tabeli. **Przykład** Masz dwie tabele: _users_ i _widgets_. Użytkownik może mieć wiele widżetów, a widżet może być własnością wielu użytkowników. Jaka jest najbardziej semantyczna nazwa trzeciej tabeli? W przeszłości korzystałem z następujących elementów: * userWidgets * userWidgetAssn (skojarzenie) * userWidgetXref (odsyłacz) W moim przykładzie userWidgets jest prawdopodobnie moim najlepszym wyborem, ale nie zawsze działa tak czysto w zależności od nazw tabel. Czy istnieje standard branżowy?


title: Programowanie w Ruby/Rails Łatwiejsze i szybsze niż programowanie w PHP/CakePHP?

text: Jakie masz doświadczenie w tworzeniu aplikacji internetowych przy użyciu jednego z tych dwóch języków/frameworków? Z którymi Twoim zdaniem rozwija się wygodniej i szybciej?


title: Najlepszy sposób na wdrożenie projektu bazy danych dla zbioru encji

text: Powiedzmy, że mam taki scenariusz: mam wiele roszczeń do uzyskania pieniędzy od innego podmiotu i to roszczenie musi przejść przez dwie bramy. To roszczenie jest wysyłane z systemu pochodzenia i może być ewentualnie odrzucone na każdej bramie. Jeśli roszczenie zostanie odrzucone na którejkolwiek bramie, jedna lub więcej wiadomości zostanie odesłanych z powrotem do systemu źródłowego, które wskazują, dlaczego zostało odrzucone na tej bramie. Oto diagram: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/RTBvY.png) Zauważ, że niektóre atrybuty wiadomości o odrzuceniu z bramy nr 1 różnią się od nr 2 w moim rzeczywistym systemu, więc nie są tego samego rodzaju podmiotami. Teraz moim wymaganiem jest stworzenie systemu raportowania, który może wyświetlać różne agregacje tych danych, projektując dla nich układ bazy danych. Raportowanie musi być w stanie agregować według kosztu roszczenia, liczby roszczeń, a także wyświetlać raporty na poziomie komunikatu o odrzuceniu. Kolejnym wymaganiem jest możliwość sprawdzenia, czy roszczenie zostało ponownie przesłane w ramach procesu na podstawie identyfikatora reprezentującego cały proces roszczenia. Z mojej firmy wydaje się, że istnieją dwie drogi do stworzenia układu tabeli bazy danych dla tego systemu raportowania, wymienione tutaj: Mieć jedną tabelę, która wyświetla wszystkie atrybuty roszczenia i oba poziomy odrzucenia oraz umieszcza wszystkie niezbędne atrybuty tych podmiotów jako różne agregacje w tej tabeli (zdenormalizowane). Lub... Utwórz układ tabeli, w którym znajduje się tabela reprezentująca roszczenie, tabela reprezentująca odrzucenie w bramie 1 i tabela reprezentująca odrzucenie w bramie 2, przy czym tabela roszczenia jest elementem nadrzędnym drugiej dwa. Pamiętaj, że odrzucenia w obu bramkach #1 i #2 zawierają różne atrybuty. Jaka jest najlepsza droga do wyboru między tymi dwoma opcjami? Czy jest to sytuacja sytuacyjna, jak w przypadku, czy istnieje najlepsza opcja w zależności od innych wymagań, a jeśli tak, czy możesz wyjaśnić, jakie mogą być te wymagania?


title: Czy w systemie Android jest jakiś powód, aby skonfigurować dostawcę treści dla lokalnej bazy danych?

text: Mam aplikację dla systemu Android z niestandardowym dostawcą treści skonfigurowanym do asynchronicznego ładowania danych. Baza danych jest plikiem lokalnym, więc nie jestem pewien, czy w ogóle musiałem konfigurować dostawcę treści. Czasami po prostu muszę zrobić coś takiego, jak odzyskać nazwisko z krótkiej listy według identyfikatora. Czy można mieszać wzorzec dostawcy treści z prostymi bezpośrednimi wywołaniami bazy danych, tj. Otwórz, zapytaj, zamknij bloki kodu?


title: Programowanie funkcjonalne, JavaScript i UI - kilka pytań neofity

text: W dyskusji tutaj komentarze w przyjętej odpowiedzi sugerują, że podchodzę do danego kodu z perspektywy funkcjonalnej, która była dla mnie wówczas nowa. Wikipedia stwierdziła m.in., że FP „unika danych stanowych i mutowalnych”, do których zalicza się, zgodnie z dyskusją, globalne vars. Teraz, ponieważ jestem już dość daleko w moim projekcie, nie zamierzam uczyć się FP przed ukończeniem, ale: 1. Jak można uniknąć globalnych zmiennych, jeśli na przykład mam interfejs użytkownika, którego cała funkcjonalność zmieni się, jeśli przycisk myszy jest wciśnięty? Mam wiele takich rzeczy. 2. Dlaczego niektórzy doświadczeni programiści mocno zareagowali na implementację FP w JS? Kiedy przywołałem uwagi Crockforda, które wydawały mi się wspierające, ludzie jeszcze bardziej się wściekli. Czy istnieją mocne argumenty przeciwko używaniu fp w JS? Co stanowi „język funkcjonalny” i dlaczego JS „nie jest”?


title: Nauka programowania po 9-5 pracy

text: Obecnie pracuję jako administrator IT, ale myślę o niewielkiej zmianie kariery na programowanie. Chcę skoncentrować swój czas i wysiłek na nauce niektórych języków internetowych, ale czy jest to osiągalne podczas pracy na pełny etat, aby spodziewać się znacznych postępów po długim dniu pracy? Uwielbiam czytać, ale czasami jest to przeszkodą. Przeczytałem o niektórych zasobach, że nigdy nie zrobisz większych postępów, chyba że zrezygnujesz z pracy w godzinach 9-5 i nie poświęcisz sześciu miesięcy na zdobycie podstawowego zrozumienia.


title: Jak REST jest używany poza siecią?

text: Niedawno czytałem artykuł na Wikipedii dotyczący architektury zorientowanej na zasoby (ROA) i natknąłem się na artykuł, w którym stwierdzono, że chociaż REST jest technologią bardzo dobrze dopasowaną do aplikacji internetowych i usług internetowych, jest to jednak samodzielna technologia technologia, która może być wykorzystywana w aplikacjach innych niż web. To pierwszy raz, o którym słyszałem! Myślałem, że REST jest konkurentem SOAP, ale te dwa rozwiązania były stricte usługami internetowymi. Moje pytanie: czy ktoś może podać przykład wykorzystania REST w czymś, co nie jest aplikacją internetową? Jak klient Swing, narzędzie wiersza poleceń lub EJB.


title: Jaki efekt ma wykorzystanie pseudokodu i komentarzy, gdy inżynier oprogramowania projektuje oprogramowanie?

text: Z zawodu jestem programistą, więc w mojej klasie języka angielskiego ENC 1102, kiedy poproszono nas o stworzenie społeczności dyskursu, w której moglibyśmy odnieść się do umiejętności pisania, pomyślałem o pseudokodzie i komentarzach. Pytanie zatem brzmi: Jaki efekt ma wykorzystanie pseudokodu i komentarzy, gdy inżynier oprogramowania lub programista projektuje oprogramowanie? Chcę wiedzieć, jak pisanie pseudokodu i komentarzy wpłynęło na twój proces pracy. Czy to sprawia, że jest lepiej, szybciej, gorzej? Podziel się swoimi doświadczeniami i opiniami.


title: Wolisz zwięzłość czy czytelność kodu?

text: Często można używać skrótów językowych, aby uczynić kod bardziej zwięzłym. Na przykład operatory łączenia trójskładnikowego i null mogą zmniejszyć ilość kodu, ale prawdopodobnie ze szkodą dla czytelności: In C#: Person newGuy = new Person(); if (boss == null) { nowyGuy.Boss = GetDefaultBoss(); } else { nowyGuy.Boss = szef; } jest funkcjonalnie odpowiednikiem: Person newGuy = new Person(); newGuy.Boss = szef ?? GetDefaultBoss(); ale oczywiście o wiele bardziej gadatliwy. **Gdzie wyznaczasz granicę, jeśli chodzi o zwięzłość i czytelność?**


title: Czas Noda kontra Czas Jody?

text: W przewodniku użytkownika Noda Time sekcja uzasadnienia stwierdza: > publiczne API zostało w dużej mierze przepisane, zarówno w celu zapewnienia API, które jest > bardziej idiomatyczne dla .NET, jak i w celu poprawienia niektórych decyzji Joda Time > które Noda Time zespół postrzega jako „niefortunny”. (Niektóre z nich są po prostu > z powodu różnych celów; inne, które uważam za błędy.) Jakie są te decyzje, które są inne/lepsze? Nie liczyłoby to różnic tylko dla składni języka, ale obejmowałoby wszystko, co zrobiono, aby użytkownicy byli mniej skłonni do popełnienia błędu programistycznego (użyteczność biblioteki).


title: Jak stworzyć potencjalny produkt do wysyłki (PSP) na koniec sprintu?

text: Prowadzę zespół 4 programistów i 2 testerów i staram się przestrzegać zasady Scrum tworzenia PSP z każdym sprintem. Oznacza to, że muszę stworzyć potencjalną wersję ze wszystkimi historyjkami użytkownika, które zostały ukończone i przechowywać je na jakimś serwerze publikowania, aby PO mógł z nimi zrobić, jak chce. Mój problem polega na tym, jak technicznie stworzyć kompilację, gdy niektóre historie nie są gotowe pod koniec sprintu? Kod został zaewidencjonowany, ale nie przeszedł całkowicie testów. Jeśli tylko zaewidencjonuję kod, który jest Gotowy, czyli kod całkowicie-przetestowany-przetestowany, natrafiam na możliwość rozbieżnych baz kodu i scaleń, które mogą być katastrofalne. Na przykład programiści A i B pracują nad różnymi funkcjami, które modyfikują zestaw X. Dev A kończy kodowanie, wypycha zestaw X do testowania. Następnego dnia Dev B kończy kodowanie i wypycha zestaw X do testowania. Funkcja A powraca z błędami, funkcja B jest idealna. Ups, sprint się skończył. Jak stworzyć PSP z funkcją B, ale nie z A?


title: Zasoby dotyczące nauki programowania w kodzie maszynowym?

text: Jestem studentem, świeżo w programowaniu i kocham to, od Javy do C++ iw dół do C. Cofnąłem się do szkieletu i pomyślałem, aby przejść dalej do Assembly. Ale, ku mojemu zdziwieniu, wiele osób powiedziało, że nie jest tak szybki jak C i nie ma sensu. Zasugerowali naukę programowania jądra lub napisania kompilatora C. Moim marzeniem jest nauczyć się programować w systemie binarnym (kod maszynowy), a może programować goły metal (fizycznie programować mikrokontroler) lub pisać bios lub programy ładujące lub coś w tym rodzaju. Jedyną możliwą rzeczą, jaką usłyszałem po tak wielu badaniach, jest to, że edytor heksadecymalny jest najbardziej zbliżony do języka maszynowego, jaki mogłem znaleźć w tej epoce i epoce. Czy są inne rzeczy, o których nie wiem? Czy są jakieś zasoby do nauki programowania w kodzie maszynowym? Najlepiej na 8-bitowym mikrokontrolerze/mikroprocesorze. To pytanie jest podobne do mojego, ale najpierw interesuje mnie praktyczna nauka, a następnie zrozumienie teorii.


title: Migracja z jdbc do MyBatis — potrzebna rada

text: Pracuję nad aplikacją Java (ERP), która rozrosła się i będzie rosła przez następne kilka lat. Używaliśmy Spring-JDBC dla naszej warstwy DAO. Ale ilość kodu, który trzeba napisać, znacznie nas spowalnia, nie mówiąc już o wprowadzaniu głupich błędów w systemie. Więc teraz szukamy rozwiązania, które: * Zmniejszy ilość czasu, który musimy spędzić na warstwie DAO * Nie ma bardzo stromej krzywej uczenia się * Daje nam kontrolę nad naszymi zapytaniami, tak jak w przypadku JDBC. * Powinniśmy być w stanie przenieść nasz istniejący kod część po części, a nie wszystkie naraz. Pomyślałem, że MyBatis będzie dobrym wyborem, ale nie jestem pewien, czy spełni wszystkie nasze wymagania. W szczególności, czy byłby w stanie współpracować z naszym kodem Spring-JDBC bez powodowania problemów w zarządzaniu transakcjami, obsłudze współbieżności itp.? Edycja: Zapomniałem wspomnieć, że używamy Spring-AOP do zarządzania transakcjami, z czym wolelibyśmy kontynuować. Dziękuję!


title: Co zrobić, gdy główny programista wykonuje prawie zerową pracę?

text: Obecnie pracuję nad projektem z małym zespołem deweloperskim. Problem w tym, że główny programista „pracuje zdalnie” i praktycznie nie wykonuje żadnej pracy. Przegapiliśmy każdy termin, a przy tym tempie przeoczymy o wiele więcej. Główny programista jest świetnym mówcą i przekonał CEO, że wszystko jest w porządku. Nie przeszkadza mi, że za nic nie zarabia. Martwi mnie to, że krzywdzi każdego pracownika i niszczy firmę. Z naszego narzędzia do zarządzania projektami jasno wynika, że główny programista nie wykonał większości swoich zadań. Pomysł, by krytykować kod, a nie programistę (mój współpracownik jest miłym facetem, ale jego wydajność jest poniżej normy. Czy mam powiedzieć mojemu szefowi?) jest świetny, ale problemem nie jest jakość kodu. Problem polega na tym, że kod nie jest tworzony. Czuję, że powinienem powiedzieć prezesowi, co się dzieje, ale czuję też, że główny programista nie jest w porządku, aby za jego plecami mówić szefowi, że nie wykonuje pracy. Innym problemem jest to, że szef jest bardzo bezpośredni. Myślę, że zadzwoni do głównego programisty i powie: „Ten facet mówi, że nic nie robisz. Co się dzieje?” W rezultacie nic nie zostanie rozwiązane, a główny programista się wkurzy, co utrudni współpracę z nim.


title: Parsowanie wielu formatów plików/protokołów

text: Rozpoczynamy projekt, w którym będziemy musieli napisać parsery dla kilku formatów plików binarnych, z których każdy reprezentuje bardzo podobne dane (szereg wartości czasowych z różnych urządzeń pomiarowych). Ponieważ zaczynamy od zera, chciałbym zrobić to dobrze i widzę dwa możliwe podejścia: 1. napisać dedykowane, domowe parsery binarne dla każdego formatu osobno, lub 2. reprezentować formaty binarne za pomocą gramatyki, a następnie użyć niektórych standardowe algorytmy analizy/tokenizacji leksykalnej. Ilekroć szukam porady, jak zbudować parser, większość facetów opowiada się za tym drugim podejściem. Jednak nie mam dużego doświadczenia z formalnymi gramatykami i językami i obawiam się, że zanim uzyskamy wyniki, może pojawić się krzywa uczenia się. Mam więc w zasadzie następujące pytania: * Jaki jest problem z kodowaniem parserów „ręcznie”? * Czy istnieje praktyczny „limit rozmiaru” problemu, kiedy opłaca się inwestować w naukę „podejścia formalnego”? * Większość przykładów parsowania skupia się na plikach tekstowych. Jaki jest dobry sposób na określenie gramatyki dla parsera binarnego?


title: DVCS i różne wersje tego samego produktu

text: Załóżmy, że mamy aplikację w dwóch (lub więcej) różnych wersjach. Np. Wersje Professional i Lite. Jaki byłby najlepszy sposób na utrzymanie źródła pod kontrolą wersji (w szczególności DVCS). Założenie jest takie, że część lub większość kodu jest wspólna, ale wersja Professional zawiera również dodatkowy kod. Jaki byłby optymalny sposób wersjonowania kodu za pomocą systemu takiego jak git czy Mercurial?


title: Ponowne wymyślanie koła, dlaczego miałbym?

text: Więc mam ten problem, może to być moje OCD (mam OCD, to nie jest ciężkie ..... ale sprawia, że jestem bardzo ... powiedzmy konkretnie o pewnych rzeczach, programowanie jest jednym z nich) lub może to być fakt, że Ukończyłem studia i nadal czuję się "meh" w programowaniu. Czytanie To sprawiło, że pomyślałem "O to ja!" ale to nie jest mój główny problem. Moim dużym problemem jest .... za każdym razem, gdy używam języka wysokiego poziomu / interfejsu API / itp. Zawsze myślę sobie, że tak naprawdę nie "programuję". Wiem, że wiem... to brzmi głupio. Ale tak jakbym się czuł.... jeśli nie mogę wymyślić, jak to zrobić na najniższym poziomie, to tak naprawdę nie "rozumiem" tego. Robię to dla prawie każdej nowej technologii, której się uczę. Patrzę na najniższy poziom i staram się to zrozumieć. Czasami to robię… przez większość czasu nie, to znaczy, tak naprawdę programowałem dopiero od 4 lat (na studiach, jeśli to w ogóle nazwiesz programowaniem… Program naszej uczelni był „meh "). Na przykład robię trochę programowania wbudowanego (z Atmel AVR 8bits/Arduino stuff). I nie mogę się zmusić do korzystania z kompilatora C, mimo że jest to 8 milionów razy łatwiejsze niż używanie asemblera…to głupie, wiem… Każdy inny tak się czuje, myślę, że to tylko moje OCD czuję się w ten sposób… ale czy ktokolwiek inny czuł, że musi zejść na najniższy poziom języka, aby w ogóle być zadowolonym z używania go? Przepraszam za bardzo dziwne pytanie, ale myślę, że to naprawdę utrudnia mi zagłębienie się w język programowania i stworzenie własnej aplikacji. (to głupie wiem)


title: Rozwijanie tendencji do przekształcania kół w umiejętność, w przeciwieństwie do niechętnego uczenia się umiejętności znajdowania kół?

text: Jestem bardziej **wynalazcą felg na wysokim poziomie**. Zdecydowanie wolę korzystać z istniejących funkcji API wbudowanych w język i popularnych frameworków innych firm, o których wiem, że mogą rozwiązać problem, jednak gdy mam konkretny problem, który czuję, że jestem w stanie rozwiązać w rozsądnym czasie **Jestem bardzo niechętny do znalezienia cudzego rozwiązania**. > ## Oto kilka powodów, dla których wymyślam na nowo: > > 1. **Nauczenie się nowego API wymaga czasu** > 2. **Mogą istnieć ograniczenia API, o których nie wiem** > 3. * *Unikanie ponownego przerabiania nieznanego kodu** > Jestem w konflikcie między robieniem tego, co wiem, a przejściem na nową technikę, z którą nie czuję się komfortowo. Z jednej strony mam ochotę podążać za swoim instynktem i być naprawdę dobrym w rozwiązywaniu problemów, szczególnie tych, z którymi nigdy bym się nie rzuciła, gdybym tylko próbowała znaleźć odpowiedzi. Z drugiej strony czuję, że mogę tracić ważne umiejętności, takie jak oszczędność czasu poprzez znalezienie odpowiedniego frameworka i poszerzanie swojej wiedzy poprzez naukę korzystania z nowego frameworka. * * * Myślę, że moje pytanie sprowadza się do tego: Moje obecne podejście to trzymanie się wbudowanych API i API, które dobrze znam* i nie marnowanie czasu na szukanie na githubie rozwiązania problemu, który wiem, że potrafię rozwiązać sam w rozsądnym czasie. _Czy to rozsądna **równowaga** dla odnoszącego sukcesy programisty?_ *Oczywiście nadal będę rozglądał się za nowymi frameworkami, które oszczędzają czas i rozwiązują/uproszczają trudne problemy.


title: Czy Twoja firma ma standard kodowania?

text: Niedawno zobaczyłem, że Microsoft wydał dokument o standardach kodowania (All-In-One Code Framework Coding Standards) i dało mi to do myślenia... Firma, dla której pracuję, nie ma żadnych formalnych standardów kodowania. Jest tylko kilku programistów i byliśmy razem wystarczająco długo, aby ewoluować w podobne style i nigdy nie stanowiło to problemu. Czy firma, w której pracujesz, ma udokumentowane standardy kodowania? Jeśli nie, dlaczego nie? Czy posiadanie standardu robi różnicę? Czy warto pisać standard od zera, czy też przyjąć inny standard jako własny (np. uczynić standardy Microsoftu własnymi)?


title: zestawy liczb, które sumują się do określonej liczby?

text: Zapytano mnie o to w wywiadzie i nie jestem pewien, jaka jest odpowiedź ani jak podejść do problemu. > Znajdź parę liczb, które sumują się do zera (lub dowolnej innej liczby), a następnie znajdź > trzy (a następnie cztery) liczby, które sumują się do zera.


title: Internet czy komputer? (php vs c++?)

text: Muszę napisać prosty mechanizm transferu plików (to nie jest ftp). Po pierwsze, musi mieć GUI. Po drugie, nie może to być dropbox. Po trzecie, nie może używać żadnych płatnych bibliotek i, miejmy nadzieję, używa komponentów open source. Pytanie, które przyszło mi do głowy, brzmi: gdzie wszyscy się przemieszczają, z komputera do sieci lub z sieci na komputer? Czy bardziej przydatne byłoby doświadczenie w, powiedzmy, C++ niż w PHP (lub na odwrót)?


title: Idealne przenikanie

text: Trudno mi opisać ten problem słowami, dlatego zilustrowałem go filmem (45 sekund). Oto podgląd pytań, proszę spojrzeć na Vimeo: http://vimeo.com/epologee/perfect-crossfade ![Używając liniowego przenikania, wynikowy obraz będzie miał 'zapad' w przezroczystości. Jak mogę temu zapobiec?](http://i.stack.imgur.com/EkLXN.png) Problem z tworzeniem bezbłędnego przenikania lub rozpuszczania dwóch obrazów lub kształtów powracał do mnie w wielu dziedzinach na Ostatnia dekada. Najpierw w edycji wideo, potem w animacji Flash, a teraz w programowaniu iOS. Kiedy zaczynasz googlować, można znaleźć wiele obejść, ale naprawdę chcę rozwiązać ten problem bez hackowania. **Podsumowanie:** Jak nazywa się technika lub krzywa do zastosowania podczas przenikania dwóch półprzezroczystych map bitowych o tym samym kolorze, jeśli chcesz, aby wynikowa przezroczystość pasowała do oryginału jednej z nich? Czy istnieje funkcja (matematyczna) do obliczania niezbędnych wartości częściowej przezroczystości/alfa podczas zanikania? Czy istnieją języki programowania, które mają te funkcje jako ustawienia wstępne, podobne do funkcji „łatwość”, „łatwość” lub „łatwość” w ActionScript lub Cocoa? **Aktualizacja:** Oprócz filmu wykonałem przykładowy projekt (wymaga Xcode i iOS SDK) i umieściłem go na github. Pokazuje tę samą animację co wideo, ale tym razem z kwadratami: https://github.com/epologee/StackOverflow- Przykładowy kod


title: Rozkładanie kursów CS dla pierwszoroczniaków

text: Jestem studentem układającym slajd skierowany do studentów pierwszego roku, którzy próbują zrozumieć, jak ważne są różne zajęcia w programie CS. Czy można bezpiecznie powiedzieć, że ta lista jest dość dokładna? * Struktury danych: jak przechowywać rzeczy w programach * Dyskretna matematyka: jak myśleć logicznie * Bity i bajty: jak "mówić" językiem maszyny * Zaawansowane struktury danych: jak przechowywać rzeczy na więcej sposobów * Algorytmy: jak obliczać rzeczy wydajnie * Systemy operacyjne: jak zarządzać różnymi procesami/wątkami


title: Kiedy mówimy „zdrowie psychiczne”, odnosząc się do danych wejściowych użytkownika, czy mówimy o czystości danych wejściowych, czy też o zdrowym rozsądku?

text: Często słyszę, jak ludzie mówią, że „odkażają wkład”, co oznaczałoby, że są czyste. Rozumiem, że oznacza to „oczyść z potencjalnie szkodliwej zawartości”, gdzie funkcja odkażająca robiłaby coś w rodzaju ucieczki postaci. Ale potem słyszę takie rzeczy jak „zdrowe dane wejściowe”, co dla mnie oznacza, że dane wejściowe nie są ciągiem, w którym oczekiwano podwójnego, lub „Trzeci stycznia dziewiętnaście dziewięćdziesiąt pięć”, gdzie „1995/01/03” byłoby poprawne . To kwestia formatowania. Następnie mamy "funkcje zdrowego rozsądku", które obsługują dane wejściowe użytkownika, aby uczynić je użytecznymi przez backend oprogramowania. Czy może to odnosić się do obu typów walidacji danych wejściowych? Czy zajmuje się tylko formatowaniem (jak „zdrowe dane wejściowe”), czy z czystością danych wejściowych (takich jak „odczyszczone dane wejściowe”)? Czy są to dwie różne klasy operacji, czy też zdrowy rozsądek w tym przypadku odnosi się tylko do obu? Zawsze myślałem, że odnosi się to do odkażenia go (jeśli to faktycznie oznacza coś innego niż zdrowa rozsądek), ponieważ myślałem, że „zdrowie psychiczne” jest korzeniem „odkażania”. Ale właśnie to sprawdziłem i nie mogę znaleźć żadnej definicji „zdrowia psychicznego”, które miałoby coś wspólnego z czystością lub odkażaniem. Czy istnieją idiomy dla każdej z tych operacji, o których nie wiem, czy zawsze są to tylko „funkcje psychiczne”, które wykonują obie te rzeczy? Czy byłoby mylące widzieć funkcje „zdrowia psychicznego” i „bezpieczeństwa”?


title: Zorientowana obiektowo obsługa EDI w PHP

text: Obecnie rozpoczynam nowy podprojekt, w którym będę: 1. Pobrać informacje o zamówieniu z naszego komputera mainframe 2. Zapisać informacje o zamówieniu w bazie danych naszych aplikacji internetowych 3. Wysłać zamówienie jako EDI (albo D01b lub D93a) 4. Otrzymuj odpowiedź na zamówienie, porady dotyczące wysyłki i wiadomości o fakturach 5. Rób różne fajne rzeczy z uzyskanymi zestawami danych. Jednak zmagam się z moimi początkowymi projektami klasowymi. Informacje o zamówieniu zostaną pobrane z komputera mainframe, co spowoduje powstanie klasy "AOrder", to nie jest problem, nie jestem pewien, jak uformować ten lokalny obiekt w ciąg EDI. Czy powinienem utworzyć klasy EDIOrder/EDIOrderResponse/etc z pasującymi dekoratorami (EDIOrderD01BDecorator, EDIOrderD93ADecorator)? Czy potrzebuję obiektów budujących, czy mogę zrobić: // $myOrder jest instancją AOrder $myOrder->toEDIOrder(); $dekorator = nowy EDIOrderD01BDecorator($myOrder); $edi = $dekorator->getEDISString(); I to też będzie musiało działać w drugą stronę. Czy poniższy kod jest dobrym sposobem na rozwiązanie tego problemu, czy powinienem postępować inaczej? $ediString = $myEDIMessageBroker->fetch(); $ediOrderResponse = EDIOrderResponse::fromString($ediString); Po prostu nie jestem pewien, jak powinienem zaprojektować klasy i interakcje między nimi. Dzięki za przeczytanie i pomoc.


title: Co Bjarne Stroustrup miał na myśli, opisując C i C++?

text: Jest cytat Bjarne Stroustrup, który mówi: > C ułatwia strzelenie sobie w stopę; C++ sprawia, że jest to trudniejsze, ale kiedy > to robisz, rozwala ci całą nogę. Często natknąłem się na ten cytat, czytając dokumentację biblioteki i samouczki; szczególnie te, które zawijają funkcje C w klasach C++ lub są opakowaniami do bibliotek C. Ale co miał na myśli?


title: Co mogę zrobić, gdy ankieter nie zna odpowiedzi na własne pytanie?

text: Wczoraj miałem okropne doświadczenie w wywiadzie. Ankieter zapytał mnie o czysto wirtualną funkcję. Powiedziałem, że może mieć definicję w klasie bazowej lub nie, ale klasy pochodne powinny dostarczać definicji, chyba że chcą być również klasą abstrakcyjną. Ale ankieter ciągle pytał, że "czy czysty wirtualny może mieć definicję !!!???"... Odpowiedziałem, że tak. Znowu powiedział: „Czysta?” Powiedziałem tak. Jest dozwolone, klasy pochodne mogą jawnie wywoływać tę funkcję, jeśli chcą tego konkretnego zachowania. Wysłał mnie. Jestem pewien, że nie wie, że czysta funkcja wirtualna może mieć definicję. Jak radzić sobie z tego rodzaju ankieterami? Po zapytaniu 2 raz, czy powinienem skłamać, że nie może mieć definicji? :) A może powinienem trzymać się swoich słów i stracić szansę na pracę ?


title: W jakim wieku mógłbym rozsądnie uczyć moje dzieci programowania?

text: Gdyby moje dziecko było zainteresowane tym, co robię... W jakim wieku mógłbym rozsądnie nauczyć moje dziecko, czym jest programowanie? Jakie masz doświadczenia z uczeniem ich programowania, jeśli chcą? Czy są na ten temat świetne artykuły?


title: Jak rozliczać klienta za często przerywany czas

text: Uważam, że kiedy pracuję nad projektami rozliczanymi godzinowo (w szczególności tymi, które są zorientowane na badania/projektowanie/architekturę, a nie na proste kodowanie), łatwo mnie rozpraszają różne rzeczy (e-mail, napij się (utrata skupienia, ale natura się dzieje), link do strony, którą czytałem, błądzący umysł (łatwe, gdy praca wymaga dużo myślenia) itp.) Powoduje to bardzo fragmentaryczny czas, zbyt przyrostowy IMO, aby dokładnie śledzić z zegarem, czasem bardzo szarym. Często kończę naliczanie opłat tylko za ułamek czasu, który spędziłem, aby czuć się sprawiedliwie, ale czasami zajmuje to naprawdę dużo czasu, aby poświęcić 8 godzin dziennie. W przeciwieństwie do tego, kiedy pracowałem za pensję, nie martwiłem się, czy w każdej chwili aktywnie pracuję, po prostu wykonuję swoją pracę i nigdy nie miałem nic poza znakomitymi recenzjami/opiniami od poprzednich opłacanych pracodawców , więc myślę, że dobrze wykonuję tę pracę. Osobiście wierzę w cykl 80/20: 80% mojej pracy wykonuję podczas natchnionych 20% mojego czasu. Ale muszę oszukać pozostałe 80% czasu, aby uzyskać pierwsze 20%. Tak więc pytanie: jaką politykę rozliczania/ewidencjonowania czasu pracy mogę przyjąć, aby być uczciwym wobec moich godzinowych klientów bez konieczności odpisywania własnych mniej wydajnych 80%, które płatny pracodawca jest skłonny przeoczyć w świetle pełnego pakietu? Uwaga: To pytanie nie dotyczy tego, jak być bardziej produktywnym lub skoncentrowanym. Chodzi o to, jak obejść wszelkie istotne ograniczenia, które mam, w sposób sprawiedliwy zarówno dla mnie, jak i dla moich klientów. **Aktualizacja** : Małe wyjaśnienie (aby zapobiec słusznemu oburzeniu): Obecnie mam pół tuzina różnych grup projektów/klientów. To nie jest świetna sytuacja i pracuję nad zmniejszeniem jej do dwóch, ale taka jest moja obecna rzeczywistość. Bardzo łatwo jest wykręcić się w wątku związanym z innym projektem niż ten, który właśnie śledzę i nie zawsze jestem tego świadomy w tym czasie. [Nie chciałem, aby pytanie oznaczało, że nie grałem w gry lub wykonywałem osobiste telefony itp., więc dostosowałem powyższe sformułowania, aby były jaśniejsze. Większość czasu. Jestem tylko człowiekiem, a czasami umysł zmusza cię do przerwy! :-)]


title: Znak liczby całkowitej i kompilacja przez C

text: Piszę kompilator, który używa uświęconej tradycją strategii używania kompilatora C jako zaplecza i próbuję dowiedzieć się, jak dokładnie obsługiwać znak liczby całkowitej. Używam maszynowych liczb całkowitych jako domyślnych (tłumacząc na `intptr_t` i `uintptr_t` w wygenerowanym C), i chociaż dla siebie wolałbym, aby domyślna wartość była nieoznaczona, prawdopodobnie nie mam zbyt dużego wyboru, aby to zrobić została podpisana tylko dlatego, że to oczekiwanie jest tak szeroko zakorzenione. Definiuję wynik przepełnienia liczby całkowitej, który ma zostać zawinięty (przynajmniej domyślnie, może dodać opcję wyrzucenia wyjątku później), ale w C, przepełnienie liczby całkowitej ze znakiem jest zachowaniem niezdefiniowanym, więc nie mogę po prostu emitować kodu, który wykonuje arytmetyka liczb całkowitych ze znakiem. Wydaje mi się, że są dwie opcje: 1. Emituj liczby całkowite ze znakiem, ale konwertuj na unsigned dla wszystkich operacji arytmetycznych z wyjątkiem dzielenia i przesunięcia w prawo (są to jedyne, w których różnica ma znaczenie, a także jedyne, które nie mogą być przepełnione - **edit:** z wyjątkiem `INT_MIN` / -1; rozważałem to w tej samej kategorii co dzielenie przez zero, ale oczywiście jest to przepełnienie). 2. Emituj liczby całkowite bez znaku, ale konwertuj do znaku ze znakiem dla dzielenia (opierając się pokusie uczynienia dzielenia liczb ujemnych niezdefiniowanym zachowaniem), przesunięcia w prawo i porównania innego niż równość. 3. Mimo to emituj liczby całkowite ze znakiem, użyj `-fwrapv` podczas używania GCC jako backendu i miej nadzieję, że inne kompilatory C albo nie wykorzystają niezdefiniowanego przepełnienia ze znakiem, albo zapewnią przełącznik wyłączający takie optymalizacje. Czy trzecia opcja działa (np. czy są jakieś kompilatory C, w których nie można zrobić wrappingu ze znakiem overflow)? Jeśli nie, który z dwóch pierwszych prawdopodobnie będzie wiązał się z mniejszą ilością kodu i możliwością popełnienia błędu? Czy jest coś, czego mi brakuje?


title: Średnia wielkość wewnętrznego zespołu ds. tworzenia stron internetowych dla firm z USA?

text: Kiedy skończyłem szkołę, pomyślałem, że dostanie się do pracy w tworzeniu stron internetowych oznacza, że będę mógł pracować w grupie przynajmniej kilku programistów, a seniorzy mogą nauczyć tego młodego padawankę swoich sztuczek. Z mojego doświadczenia, kiedy zostaje zatrudniony jako junior web developer, zwykle mam bardzo ograniczony kontakt i współpracę z jednym lub dwoma innymi programistami (ponieważ rzadko pracujemy nad tymi samymi projektami), a czasami jestem jedynym, który to wie jak kodować. Znienawidziłem te pozycje „samotnego wilka” i wolałbym pracować w wysoce opartym na współpracy środowisku pełnym innych maniaków programowania. Większość z tych miejsc ma tendencję do zlecania prac technicznych na zewnątrz, a ja wolę komunikację twarzą w twarz z kolegami z mojego działu. Podoba mi się kultura małych firm, ale jednocześnie istnieje coś takiego, jak zbyt małe, do tego stopnia, że wewnętrznie wykonuje się niewiele pracy technicznej, więc nie mogę uzyskać porady eksperta. Ponieważ moje doświadczenie jest anegdotyczne, nie wydaje mi się, żebym miał pełny obraz wielkości i struktury firm tworzących strony internetowe. Więc moje powiązane pytania... Czy mój brak doświadczenia z dużymi wewnętrznymi zespołami wynika z faktu, że zatrudniają mnie głównie firmy konsultingowe, które pracują dla klientów? Czy firmy tworzące własne produkty mają zupełnie inną strukturę? Czego powinienem szukać w firmie, jeśli chcę dostać się do większego, wewnętrznego zespołu programistów?


title: Najlepsze praktyki w zakresie logiki pobierania/wysłania kontrolera

text: W projekcie ASP.NET MVC (Razor) mam żądanie Get, które ładuje dwie właściwości w modelu, w zależności od właściwości przekazanej do metody akcji. Jeśli więc parametr ma wartość, to dostarczana jest właściwość Group. Ale jeśli nie, właściwość kolekcji Groups jest dostarczana z danymi. W metodzie post action, kiedy przetwarzam dane, aby ponownie zapełnić widok, muszę zapewnić podobną logikę i mogę uciec od zwrócenia `Action(param)` (odpowiedź get) do wywołującego. Moje pytanie, w oparciu o doświadczenie, brzmi, czy jest to dobra praktyka? Widzę pewne wady, ale dodaje brak nadmiarowości kodu. A może istnieje lepsza alternatywa?


title: Jak uogólnić klasy, które mają identyczną funkcję plus pewną dodatkową funkcję?

text: Mam pewne problemy projektowe z moim projektem. Aby zilustrować mój problem, użyję następujących dwóch klas z mojego projektu. public class RAM_UserManagement{ private Mapa<int,User> userList; public User addUser(User user){//do rzeczy} public User deleteUser(User user){//do rzeczy} public User updateUser(User user){//do rzeczy} public Lista<Użytkownik> getAllUser(){// do rzeczy} public User getUserById(int userId){//do rzeczy} } public class RAM_ServiceManagment{ private Map<int,Service> serviceList; public Service addService(serwer usługi){//do rzeczy} public Service deleteService(serwer usługi){//do rzeczy} public Service updateService(serwer usługi){//do rzeczy} public List<Usługa> getAllSerivces(){// do stuff} public Service getServiceById(int id){//do stuff} public Service getServiceByStatus(ENUM_STATUS status){//do stuff} public Service getServiceByUserName(String Name){//do stuff} } charakter tych klas, obie robią dokładnie to samo z pewną dodatkową funkcjonalnością. Próbuję to uogólnić tworząc interfejs. To mam na myśli publiczny interfejs IStorage<T>{ public T add(T item); publiczne usuwanie T (pozycja T); publiczna aktualizacja T (pozycja T); public List<T> getAll();//Tu mam problemy.. } Tak więc operacja CUD w obu klasach jest w porządku do zaimplementowania, ale metoda R(Read) w obu klasach jest różna. W RAM_ServiceManagement mam dodatkowe getAll, getById, getStatus, getByName niż inne klasy. Jak mogę to uogólnić? czy w ogóle nie można tu zastosować uogólnienia? Naprawdę doceniam, jeśli możesz dać jakąś sugestię. Dziękuję


title: Jako programista, do czego byś użył osobistej Wiki?

text: Czy jacyś programiści mają osobistą wiki? Lokalnie lub online. Do czego używasz swojej wiki? lub do czego możesz go użyć? Myślałem o założeniu osobistej wiki jako miejsca do zapisywania dokumentacji i innych dokumentów dla moich osobistych projektów oraz różnych notatek itp., ale jak inaczej osobista (może prywatna) Wiki jest przydatna dla programisty/programisty? Jakie rzeczy umieściłbyś na osobistej Wiki?


title: Zestaw narzędzi do programowania dla ograniczonej umiejętności pisania?

text: Jest to kuzyn pytania Programowanie z rozpoznawaniem mowy do pisania zamiast klawiatury: Programuję w Visual Studio 2010 i uważam, że programowanie pochłania znacznie więcej niż pisanie tekstu. Przypisuję to (1) szerokiemu stosowaniu znaków interpunkcyjnych i innych znaków z dala od wiersza głównego oraz (2) szerokiemu stosowaniu poleceń z wieloma klawiszami, takich jak Ctrl+Shift+B. A więc pytanie w trzech etapach: 1. Jaki język programowania jest „najłatwiejszy” do napisania? PODSTAWOWY? COBOL? 2. Jaki edytor/IDE jest najłatwiejszy (z punktu widzenia pisania) do edycji/kompilacji/wykonywania (i być może debugowania)? 3. Czy istnieje połączone rozwiązanie, które jest wystarczająco wydajne, aby stworzyć, powiedzmy, aplikację internetową? Idealnie chciałbym usłyszeć o pomysłach na rozwiązania całkowicie pozbawione myszy, zgodne z (powiedzmy) jednoręczną klawiaturą akordową.


title: Jestem teraz gotowy do opublikowania mojej komercyjnej aplikacji na Androida/iPhone'a/Anything – jakich zastrzeżeń powinienem użyć, aby się chronić?

text: Napisałem już ostatni wiersz kodu i jestem gotowy do opublikowania mojej aplikacji w Android Market. Jakie zastrzeżenia powinienem dodać, aby chronić siebie jako programistę przed klientami, którzy kupili moją aplikację, aby zapobiec pozwaniu przez głupich ludzi? To może być trudne pytanie, ale jak programiści chronią się podczas publikowania swojego oprogramowania? Deweloperzy lub małe firmy (na przykład wszyscy ci programiści iPhone/Android), których nie stać na zatrudnienie małej armii prawników, co powinni zrobić? Jakikolwiek pełny tekst, którego mogę użyć?


title: OOP dla testów jednostkowych: dobre, złe i brzydkie

text: Niedawno przeczytałem przewodnik pdf Miško Hevery'ego dotyczący pisania testowalnego kodu, w którym stwierdza się, że należy ograniczyć instancje klas w konstruktorach. Rozumiem, że to właśnie powinieneś zrobić, ponieważ pozwala to łatwo kpić z obiektów, które są wysyłane jako parametry do Twojej klasy. Ale jeśli chodzi o pisanie rzeczywistego kodu, często kończę z takimi rzeczami (przykład jest w PHP przy użyciu Zend Framework, ale myślę, że to oczywiste): class Some_class { private $_data; prywatne $_opcje; prywatne $_locale; public function __construct($data, $options = null) { $this->_data = $data; if ($options != null) { $this->_options = $options; } $this->_init(); } private function _init() { if(isset($this->_options['locale'])) { $locale = $this->_options['locale']; if ($locale instanceof Zend_Locale) { $this->_locale = $locale; } elseif (Zend_Locale::isLocale($locale)) { $this->_locale = nowy Zend_Locale($locale); } else { $this->_locale = new Zend_Locale(); } } } } Zgodnie z moim rozumieniem przewodnika Miško Hevery'ego, nie powinienem inicjować Zend_Local w mojej klasie, ale przepchnąć go przez konstruktor (co można zrobić za pomocą tablicy options w moim przykładzie). Zastanawiam się, jaka byłaby najlepsza praktyka, aby uzyskać największą elastyczność w scalaniu tego kodu, a także, jeśli chcę odejść od Zend Framework. Z góry dziękuję


title: Jakie są dobre techniki, aby utrzymać swoje miejsce w kodzie?

text: Rozumiem, że używam _zakładek_ do zapamiętania jednego punktu w kodzie. Jak jednak można śledzić _przepływ_ kodu, który badają? Np.: wiele zakładek i kolejność ich tworzenia. Przykład: > 1. Zgłoszenie błędu: "Kolizje nie działają na rogach ścian" > > 1. Reprodukcja błędu sprowadza go do pewnych wielokątów, które > nie kolidują. > 2. Kod kolizji został napisany przez niedostępnego programistę. A więc > dochodzenie przebiega mniej więcej tak: > > > ![Schemat przepływu](http://i.stack.imgur.com/TBzUT.png) Podczas dochodzenia, zwłaszcza podczas przeglądania elementów niebędących kodem, takich jak Google, jeden można rozsądnie oczekiwać, że stracą swoje miejsce w kodzie ( _Czy zajrzałem już do tej ścieżki kodu?_ lub _Którą ścieżkę kodu badałem? Istnieje wiele, które prowadzą do tej funkcji_ , itp.). To samo dotyczy przerw, których nie da się uniknąć (Szef: _Potrzebuję [Długi, bezsensowny raport] TERAZ_ , itd.) Przydałoby się mieć zasób technik lub narzędzi zapewniających sposób na śledzenie swojego miejsca w kodzie. * * * _Edytuj_: Powyższy przykład ma służyć jako potencjalna ilustracja, a nie jako rzeczywisty problem, który wymaga odpowiedzi. Innym sposobem sformułowania tego pytania jest: w jaki sposób ucząc się nowego systemu, możesz śledzić postępy w nauce kodu? Nie chodzi o zrozumienie _dlaczego_ kod robi to, co robi (do czego powinny być komentarze), ale _jak_ to robi (czego można się nauczyć tylko czytając kod, a nie komentarze).


title: Metodologie/narzędzia do samodzielnego tworzenia

text: Załóżmy, że musisz samodzielnie opracować oprogramowanie średniej wielkości. Jak gdyby był to osobisty projekt, który chcesz zrealizować. Jakich metodologii/narzędzi użyłbyś, aby zdefiniować, co należy opracować, nauczyć się i mieć globalne wyobrażenie o tym, czym jest system, a także w jego szczegółach? Zasadniczo, aby być na bieżąco i nie zgubić się po drodze.


title: Jakie konwencje nazewnictwa używasz dla klas php?

text: Bardzo lubię używać `ClassNames` i `memberNames` jako konwencji, ale nie jestem pewien, jak nazwać plik zawierający klasę. Lubię tworzyć moje klasy zdefiniowane w pliku o dokładnie takiej samej nazwie jak klasa. Ale lubię też tworzyć pliki php z małymi literami. Więc jestem w konflikcie. Jeśli mam klasę o nazwie `ProductGroup`, czy powinna ona być zdefiniowana w `ProductGroup.php`, `productgroup.php` czy `product_group.php`? Wiem, że nie ma właściwej odpowiedzi, więc szukam tego, co jest najczęściej lub Twojej opinii, którego użyć.. Którego używasz?


title: Architektura klasy projektu internetowego

text: Myślę, że to dobre pytanie, ale nie jestem w 100% pewien. Zgłoś, jeśli jest zbyt niejasny. Pracowałem na wielu stronach internetowych, w których zwykłe klasy frameworka są nadpisywane. Ponieważ pracuję głównie w .net w dzisiejszych czasach, przykłady obejmują Page, Masterpage, UserControl, DbContext ect. Uważam, że może to dotyczyć każdego języka. Czasami widzę, dlaczego to się robi, nadpisuję DbContext frameworka encji, aby dołączyć trochę kodu rejestrującego. Dużo czasu jednak nie rozumiem, dlaczego te klasy bazowe zostały stworzone. Ponieważ odziedziczyłem większość stron, nie mogę zapytać dlaczego. Moje pytanie: Czy to dobry pomysł/praktyka podczas tworzenia nowej witryny, aby zastąpić wspólne klasy frameworka wymienione powyżej? Czy byłoby to uważane za bardziej w starym stylu?


title: Masz jakieś doświadczenia z „umysłem początkującego” w programowaniu w parach?

text: Artykuł „Promiscuous Pairing and Beginner’s Mind” (PDF) sugeruje, aby umieścić w parze kogoś, kto najmniej wie o konkretnym obszarze kodu. Sugeruje również, aby co 90 minut wymieniać się ** starszym członkiem pary. Nowicjusze nie tylko dowiedzą się o tym obszarze kodu, ale także będą myśleć inaczej niż ktoś, kto już zna ten obszar. Czy ktoś ma doświadczenie z tą strategią? Czy ma jakiś związek z rzeczywistością? Znalazłem inne pytania dotyczące tego, kiedy używać programowania w parach i czy przyjąć pracę, w której wymagane jest programowanie w parach, ale nie znalazłem żadnych, które dotyczą konkretnie rozwiązłego parowania i strategii „umysłu początkującego”. Jeśli nie znasz programowania w parach, możesz znaleźć interesujące artykuły na Wikipedii i c2.com.


title: Jak prawidłowo diagramować wyrażenia lambda lub przechodzenia przez nie w Eksploratorze architektury?

text: Badam fragment kodu w Eksploratorze architektury w Visual Studio 2010, aby zbadać relacje między metodami. Zauważyłem dziwne zachowanie. Weź następujący kod źródłowy. Generuje komunikat powitalny na podstawie szablonu i silnika szablonów, przy czym silnik szablonów jest metodą (rodzaj wzorca strategii maksymalnie uproszczonego do celów demonstracyjnych). public string GenerateHelloMessage(string personName) { return this.ApplyTemplate( this.DefaultTemplateEngine, this.GenerateLocalizedHelloTemplate(), personName); } private string GenerateLocalizedHelloTemplate() { return "Witaj {0}!"; } public string ApplyTemplate( Func<string, string, string> templateEngine, string template, string personName) { return templateEngine(template, personName); } ciąg publiczny DefaultTemplateEngine(szablon ciągu, ciąg personName) { return string.Format(template, personName); } Wykres wygenerowany z tego kodu jest następujący: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/khnYr.png) Zmień pierwszą metodę z tego: public string GenerateHelloMessage(string personName) { zwróć this.ApplyTemplate( this.DefaultTemplateEngine, this.GenerateLocalizedHelloTemplate(), personName); } do tego: public string GenerateHelloMessage(string personName) { return this.ApplyTemplate( (a, b) => this.DefaultTemplateEngine(a, b), this.GenerateLocalizedHelloTemplate(), personName); } i wykres staje się: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/bWuuh.png) Chociaż semantycznie identyczne, te dwie wersje kodu tworzą różne wykresy zależności, a Eksplorator architektury nie pokazuje żadnego śladu wyrażenia lambda (podczas gdy pokazuje je na przykład pokrycie kodu w Visual Studio, a analiza kodu wydaje się być w stanie zrozumieć, że łącze istnieje). Jak byłoby możliwe, bez zmiany kodu źródłowego, aby: * wymusić na Eksploratorze Architektury wyświetlanie wszystkiego, w tym wyrażeń lambda, * albo przemierzać wyrażenia lambda podczas rysowania przez nie zależności (a więc w tym przypadku rysowanie zależności z Od `GenerateHelloMessage` do `DefaultTemplateEngine` w drugim przykładzie)?


title: Czym jest O w Wielkim O?

text: Co to jest Big i O w notacji Big O? Przeczytałem definicje i nie mówi, co jest _O_ wymawiane jako 'o'. Na przykład - rozumiem, że _O_ (n) to złożoność algorytmu liniowego, gdzie n może być liczbą operacji. ale czym jest _O_?


title: "Test Joela" dla deweloperów sprzętu/oprogramowania B2B

text: Niedawno odkryłem test Joela i zastosowałem go do mojego zespołu. Jednak trudno mi było zastosować kilka punktów do mojej firmy, ponieważ opracowujemy małe chipy z algorytmem zarówno „przewodowym”, jak i programowalnym. > 5: Czy naprawiasz błędy przed napisaniem nowego kodu? Ponieważ nie możemy naprawić dostarczonego sprzętu/oprogramowania, nie możemy tolerować żadnego znanego błędu, a cały zespół starszych programistów tworzy narzędzia służące do ich śledzenia. Ten punkt powinien brzmieć na przykład „czy masz 2 różne implementacje dla każdego z Twoich produktów i czy testujesz je ze sobą?” > 12: Czy przeprowadzasz testy użyteczności korytarza? Nie rozwijamy interfejsu użytkownika. Ten punkt wydaje się nieistotny. Jak możemy dostosować ten test do rodzaju rozwoju, który prowadzimy?


title: Jak dobrzy są (lub muszą być) programiści po studiach/edukacji?

text: Ponieważ nie mam dużego doświadczenia praktycznego i nie studiuję bezpośrednio informatyki (raczej programowanie skoncentrowane na multimediach), naprawdę chciałbym wiedzieć, jak dobrzy (i może w jakim wieku) są ludzie, zanim podejmą pracę. Pochodząc z Niemiec, nie jest niczym niezwykłym, że niewiele lub nic naprawdę przydatnego (praktycznie) po zakończeniu nauki nie jest niczym niezwykłym. Po prostu udowadniasz, że generalnie potrafisz się opierać i uczyć się prawdziwych rzeczy po studiach. Czy to różni się w informatyce? Albo ujmijmy to w inne pytanie: Czy przeciętny pracownik informatyki po raz pierwszy jest w stanie zaprogramować poważne rzeczy?


title: Jaki jest najlepszy styl: pętla for z niewykorzystaną zmienną sterującą i kosztownym warunkiem zakończenia?

text: Który styl jest najlepszy, gdy masz pętlę for z nieużywaną zmienną kontrolną i wymagającym obliczeniowo warunkiem zakończenia? Liczba iteracji jest ważna, ale zmienna kontrolna (n) nie jest używana w pętli. //1 for(int n=0; n</*warunek zakończenia*/; n++) { //zrób coś } //2 int limit = //warunek zakończenia for(int n=0; n<limit; n++) { //zrób coś } //3 for(int n=/*warunek zakończenia*/; n>0; n--) { //zrób coś } Opcja 1 spowoduje, że warunek będzie oceniany przy każdej iteracji funkcji for pętla, która nie jest wydajna. Zwykle używam opcji 2, ponieważ jest wydajna i jednoznaczna. Opcja 3 jest wydajna i zwięzła.


title: Implementacja wzorca poleceń w aplikacji internetowej

text: Szukam zaimplementować wzorzec polecenia w aplikacji sieci web (asp.net c#)... Ponieważ polecenia pochodzą od klienta w formacie tekstowym, jaki jest najlepszy sposób przetłumaczenia ciągu na obiekt polecenia? Czy powinienem użyć refleksji? Obecnie po prostu zakładam, że polecenie, które przychodzi, pasuje do nazwy pliku kontrolki użytkownika. To trochę hack. Zamiast mieć instrukcję select case, która mówi if string = "Dashboard", a następnie wywołać Dashboard.Execute(), czy istnieje wzorzec do pracy z poleceniami, które pochodzą z ciągów?


title: Jakieś dobre przykłady wizualizacji danych z testów wydajnościowych?

text: Przeprowadzam kilka podstawowych testów wydajności w `C#` na prostych metodach, ale są też starsze fragmenty monolityczne napisane w `C#`, jak również w innych językach. Tak więc podczas testowania często kończę pracą z czarną skrzynką, która przyjmuje szereg parametrów. Potrafię napisać kod, aby wyciągnąć kilka przykładowych danych, ale zrozumienie tego (np. przedstawienie ich wizualnie jest wyzwaniem). Myślę, że większość ludzi nie będzie zawracać sobie głowy patrzeniem na garść danych lub kiepską grafikę. Lepiej opowiedzieć historię na pierwszy rzut oka. Potrafię rysować ładne wykresy 2d, powierzchnie, mapy cieplne, mapy cieplne powierzchni, co ty. Mam nadzieję, że grafika będzie tak użyteczna, że gdy wprawne oko spojrzy na nią, może powiedzieć: „Myślę, że mamy tam problem. Nie powinno być tak wolno, gdy zmienimy z 5 na 10 papierów”. lub „Ten kawałek działa o 20% dłużej niż w zeszłym miesiącu. Jaka funkcja teraz obniża wydajność?” Nie mam dużego doświadczenia w prezentowaniu złożonych danych w dobry sposób, ale wiem, że istnieją sprytne sztuczki. Dobre przykłady są pokazane tutaj: http://www.datavis.ca/gallery/timelines.php Marsz Napoleona jest świetnym wydarzeniem, ponieważ pakuje wielowymiarowe dane na dwuwymiarowej kartce papieru. Czy możesz zaproponować jakieś dobre przykłady wizualizacji danych z testów wydajności?


title: Czy można otagować tylko część git push?

text: Jestem bardzo nowy w git, ale w zeszłym tygodniu zainstalowałem go, skonfigurowałem bitbucket i wypchnąłem mój bieżący projekt do mojego pierwszego repozytorium bitbucket. Wszystko poszło dobrze i cieszę się, że git jest prostym, potężnym, ale darmowym sposobem na tworzenie kopii zapasowych mojego kodu źródłowego poza witryną, a także śledzenie moich zmian. Moim następnym krokiem jest śledzenie aktualnych numerów wersji. Zajmuję się tworzeniem w Visual Studio, gdzie numery wersji znajdują się w informacjach o zestawie projektu. Czytałem, że numery wersji są zwykle śledzone w git za pomocą tagów, więc postanowiłem oznaczyć moje zatwierdzenie bieżącym numerem wersji, na którym się znajduję. W tym momencie zdałem sobie sprawę, że projekt, który połączyłem z moim repozytorium bitbucket, zawiera dwa projekty, aplikację i zestaw usług internetowych. W tej chwili mają ten sam numer wersji, ale najprawdopodobniej w przyszłości będą miały różne numery wersji. Obecnie każdy z tych projektów znajduje się w swoim własnym folderze w katalogu głównym repozytorium. Czy istnieje sposób, aby oznaczyć jeden z tych katalogów jednym tagiem, a drugi katalog innym? A może powinienem cofnąć się i utworzyć dwa oddzielne repozytoria, jedno dla aplikacji, a drugie dla usług internetowych?


title: Optymalna liczba lat na pracę

text: Niektórzy programiści utrzymują swoją pracę za mało, jakby mieli problemy z zaangażowaniem. Niektórzy zbyt długo utrzymują pracę, jakby bali się opuścić swoją strefę bezpieczeństwa. Jaka jest optymalna liczba lat, przez które programista powinien utrzymać pracę?


title: Dlaczego Python i Ruby nie dokonują rozróżnienia między deklarowaniem a przypisywaniem wartości do zmiennych?

text: Dwa z najpopularniejszych dynamicznie typowanych języków skryptowych, Python i Ruby, nie rozróżniają składni między deklaracją zmiennej a przypisaniem jej wartości. To znaczy w obu językach zadeklarowanie zmiennej `n` i przypisanie jej wartości wyglądałoby tak: n = 10 A później przypisanie nowej wartości do zmiennej wyglądałoby tak samo. Stwarza to dwa główne problemy: 1. Literówka w nazwie zmiennej podczas zmiany jej wartości spowoduje utworzenie nowej zmiennej i spowoduje błędy. 2. Sprawia, że intencje kodu są mniej jasne. Trudno wiedzieć, gdzie zmienna jest deklarowana i używana po raz pierwszy, może sprawić, że kod będzie bardziej zagmatwany. Nie rozumiem, dlaczego te języki nie mają słowa kluczowego `var` do użycia w deklaracji, aby odróżnić deklarację od przypisania. Nie sprawia to, że język jest mniej dynamicznie pisany i nie widzę żadnych wad. Jaka jest zaleta braku konieczności jawnego definiowania zmiennej?