title: Skuteczna analiza projektu

text: Nasz zespół przeprojektowuje starsze oprogramowanie i odbywa się wiele spotkań projektowych. Wiele z nich jest mało efektownych i brakuje dobrej analizy proponowanego projektu. Czy istnieje jakiś formalny sposób podejścia do tego rodzaju dyskusji, aby uczynić je bardziej efektywnymi? Słyszałem na przykład o SWOT, ale afaik jest używany bardziej w projektach biznesowych.


title: Jak napisać junit test case dla programu?

text: Mam metodę, która ma zewnętrzne zależności w ramach metody. Proszę o pomoc w napisaniu junit test case dla poniższego programu. @Override public void methodToTest(String user){ //pobierz wartości z pliku właściwości. Klasa konfiguracyjna posiada statyczną metodę o nazwie //getProperty, która odczytuje wartości z pliku właściwości specyficznego dla środowiska. URL ciągu = Config.getProperty("serviceurl"); String username = Config.getProperty("serviceusername"); Hasło ciągu = Config.getProperty("hasło usługi"); //Połącz z usługą zewnętrzną. Usługa serwisowa = nowa usługa (url, nazwa użytkownika, hasło); //wywołaj metodę w usłudze. String returnValue = service.registerUser(user); if (returnValue.equals("niepowodzenie")){ wyrzuć nowy wyjątek("Nie można zarejestrować użytkownika"); } } **Uwaga:** 1. Metoda nadpisuje metodę nadklasy, więc nie mogę zmienić argumentów tak, aby zawierały adres URL, nazwę użytkownika i hasło. 2. Metoda łączy się również z usługą zewnętrzną. co jest specyficzne dla środowiska. Szczegóły środowiska są pobierane z pliku właściwości.


title: Jakie są najbardziej odpowiednie algorytmy do skrajnego zmniejszania obrazów przy jednoczesnym zachowaniu rozpoznawania?

text: Chcę utworzyć ikonę okna (maksymalnie 128x128, ikona w rogu okna w systemie Windows to 24x24, jak sądzę) z dużego obrazu (1024x768 i więcej). Wypróbowałem kilka algorytmów - najbliższy sąsiad, interpolacja dwusześcienna, ale wszystkie dają bardzo miękki i ledwo rozpoznawalny obraz. Czy do tego zadania potrzebna jest zmiana rozmiaru z uwzględnieniem zawartości?


title: Obsługa nieoczekiwanych funkcji podczas sprintu

text: Nasz zespół przyjmie scrum i techniki zwinne. Mamy produkt, który rozwijamy dla wielu klientów. Ci klienci dostarczyli nam niezbędnych wymagań, więc wszystko jest w porządku, aby przyjąć zwinną technikę. Ale w pewnym momencie (np. podczas sprintu) pojawia się nowy klient, który chce dostać demo produktu nieco innego niż ten, który mamy teraz. Mogą to być nowe funkcje lub drobne różnice w zachowaniu. I chce dostać to demo na przykład w ciągu tygodnia. Bardzo ważne jest, aby pokazać, że nasz produkt obsługuje te funkcje (ponieważ w przeciwnym razie będzie zwracał się do naszej konkurencji), więc musimy rozwijać te funkcje (może być częściowo) w ciągu tygodnia. Jak mamy radzić sobie z tego rodzaju funkcjami zwinnie? Przenieść je do bieżącego backlogu sprintu? Albo podzielić jedną drużynę na dwie i stworzyć kolejny sprint? A może jest inny sposób?


title: Jakie są najlepsze praktyki dotyczące zabezpieczania poświadczeń AWS (lub innych tajemnic) dla dużego zespołu?

text: Byłem _"tym facetem"_, który wcisnął klawisze aws do github. Fuj. W każdym razie, robię pewne badania, jak temu zapobiec w przyszłości, ponieważ to trzeci raz, kiedy widzę to zrobione (mój pierwszy!) i był to tylko ból głowy dla całej firmy. Każdy dostaje swoje własne klucze, które mają pełny dostęp, ponieważ musimy rozkręcić instancje, uzyskać dostęp do s3 itp. Większość ludzi przechowuje je w zmiennych środowiskowych, tak jak ja, i kiedy zatwierdziłem moje pliki z kropkami, pojawił się problem. lubię nie mieć ich w kodzie. Możemy wysyłać notatki i upewnić się, że ludzie wiedzą, że zdarzają się wypadki, więc jakie są najlepsze praktyki, aby zmniejszyć ryzyko? Myślałem o przechowywaniu ich chronionych hasłem, a kiedy je odszyfrujesz, trafiają do środowiska i być może zapewniają kilka git hooków, które wyszukują określone słowa kluczowe. Jakieś inne sugestie?


title: Czy istnieje tylko jedna klasa EventHandler na aplikację?

text: W grze, którą tworzę, miałem zamiar dodać `MovementEventHandler` ze zdarzeniami takimi jak "przed-postaciowym-ruchem" i "po-postaciowym-ruchem". Ale ta klasa zrobi dokładnie to samo, co przyszły `CurrencyChangeEventHandler`. Czy powinienem po prostu utworzyć `GameEventHandler`, który po prostu obsługuje dowolne nazwy zdarzeń? Jednym z kompromisów, jakie mogę sobie wyobrazić, są potencjalne kolizje w nazwach wydarzeń, ale można to łatwo rozwiązać, umieszczając nazwy wydarzeń w przestrzeni nazw (poprzedzając je czymś). Zaletą jest mniej obiektów wiszących wokół kontenera usług.


title: Najlepsze praktyki dotyczące uruchamiania nowej wersji oprogramowania

text: Przebudowałem aplikację internetową, aby zastąpić wersję, z której korzystamy od 3 do 4 lat. Mamy kilka tysięcy klientów i kilkuset aktywnych użytkowników dziennie. Funkcjonalność jest w zasadzie taka sama. Nowa wersja jest nieco szybsza z kilkoma funkcjami ulepszeń i jest wiele zakulisowych zmian, których klienci nigdy nie zobaczą. Interfejs użytkownika jest zupełnie inny, ale ostatecznie znacznie łatwiejszy w użyciu i nawigacji. Co zrobić, aby nasi klienci przestali używać starego systemu i zaczęli korzystać z nowego? Obecnie przygotowuję wideo, które będzie odtwarzane na stronie internetowej oraz w aplikacji. Film przejdzie przez strony i skupi się na kilku kluczowych zmianach. Myślałem również o stronie wprowadzającej, która wyświetli się po zalogowaniu użytkownika i wyjaśni niektóre funkcje.


title: Używanie Simple/Static Factory vs. bezpośrednie tworzenie instancji: new Thing() vs. factory.createThing() — jaka jest korzyść?

text: Oto dwa sposoby tworzenia instancji obiektu: **Opcja 1:** Rzecz rzecz = new Rzecz(); **Opcja 2:** _(Fabryka jest fabryką statyczną, ale może też być fabryką prostą)._ Thing thing = ThingFactory.createThing(); Gdzie: class ThingFactory(){ public static Rzecz createThing(){ return new Thing(); } } * * * Mówi się, że opcja 2 jest lepsza, ponieważ użycie fabryki oddziela kod klienta od konkretnej implementacji klasy, którą tworzy. **Jaka jednak będzie różnica, jeśli użyję `new Thing()` lub `factory.createThing()`?** Jedyna różnica między tymi dwiema opcjami polega na tym, że kod instancji jest przenoszony w inne miejsce. Jak wyjaśniłem powyżej, znam „akademickie” wyjaśnienie, dlaczego korzystanie z fabryki jest „lepsze”, ale tak naprawdę nie widzę praktycznych korzyści. W obu przypadkach klient dokładnie wie, czego chce: „Rzeczy”. **Jedyną różnicą jest dokładna linia kodu:`new Thing()` lub `factory.createThing()`.** * * * **Bardziej wyrafinowane fabryki, widzę ich zalety.** Na przykład użycie Wzorzec Abstract Factory, mógłbym stworzyć różne podklasy `Factory`, które tworzą instancje różnych konkretnych implementacji `Thing` i wstrzyknąć odpowiednią `Factory` do klienta w czasie wykonywania, bez martwienia się klienta o konkretną implementację, którą otrzyma. `BlueThingFactory` tworzy instancję `BlueThing`, `RedThingFactory` tworzy instancję `RedThing`, ale klientowi zależy tylko na tym, aby otrzymał `Rzecz`. Tak jest w przypadku bardziej wyrafinowanych fabryk. **Ale nie widzę korzyści z używania _prostej fabryki_, jak w opisanym przeze mnie przykładzie. _Wystarczy, że przenosi `nową Rzecz()` w inne miejsce._ Nie rozumiem korzyści z tego płynących.** * * * Proszę wyjaśnij mi rzeczywiste korzyści z używania prostej fabryki.


title: Czy można wprowadzać metody, które są wykorzystywane tylko podczas testów jednostkowych?

text: Ostatnio pracowałem TDD metodą fabryczną. Metoda polegała na stworzeniu zwykłego obiektu lub obiektu owiniętego w dekorator. Udekorowany obiekt może być jednego z kilku typów, z których wszystkie rozszerzają StrategyClass. W moim teście chciałem sprawdzić, czy klasa zwracanego obiektu jest zgodna z oczekiwaniami. To proste, gdy zwracany jest zwykły obiekt, ale co zrobić, gdy jest zapakowany w dekorator? Koduję w PHP, więc mogłem użyć `ext/Reflection`, aby znaleźć klasę opakowanego obiektu, ale wydawało mi się to zbyt skomplikowane i nieco sprzeczne z zasadami TDD. Zamiast tego zdecydowałem się wprowadzić metodę `getClassName()`, która zwracała nazwę klasy obiektu przy wywołaniu ze StrategyClass. Jednak wywołany z dekoratora zwróci wartość zwróconą tą samą metodą w dekorowanym obiekcie. Trochę kodu, aby uczynić to bardziej przejrzystym: interface StrategyInterface { public function getClassName(); } klasa abstrakcyjna StrategyClass implementuje StrategyInterface { funkcja publiczna getClassName() { return \get_class($this); } } klasa abstrakcyjna StrategyDecorator implementuje StrategyInterface { private $decorated; funkcja publiczna __construct(StrategyClass $dekorowane) { $to->dekorowane = $dekorowane; } funkcja publiczna getClassName() { return $this->decorated->getClassName(); } } Oraz test PHPUnit /** * @dataProvider providerForTestGetStrategy * @param array $arguments * @param string $expected */ public function testGetStrategy($arguments, $expected) { $this->assertEquals( __NAMESPACE__.'\\' .$expected, $this->object->getStrategy($arguments)->getClassName() ) } //poniżej kolejny test sprawdzający, czy używany jest właściwy dekorator Chodzi mi o to: czy wprowadzenie takich metod jest w porządku, które nie mają innego zastosowania niż ułatwienie testów jednostkowych? Jakoś nie wydaje mi się to w porządku.


title: Bezpieczeństwo typu Spray.io

text: Wczoraj przeczytałem tweeta dyskredytującego Jersey z JAX-RS z powodu błędów w czasie wykonywania. Spray.io zostało wspomniane w tweecie: > Niecałe 5 minut przy użyciu Jersey / JAX-RS i już błąd w czasie wykonywania z powodu > brakującej adnotacji. Dlatego lubię @sprayio: bezpieczeństwo typu. https://twitter.com/gbelrose/status/467295643053338626 W jaki sposób `spray.io` zapewnia bezpieczeństwo typu? Czy mógłbyś podać przykład?


title: Jak rozliczać czas pracy nad problemami z hostingiem?

text: Firma hostingowa mojego klienta zmieniła niektóre zasady bezpieczeństwa serwera WWW, co spowodowało, że strona nie działała poprawnie. Spędziłem 4 godziny na diagnozowaniu problemu i wysyłaniu e-maili do ich pomocy technicznej tam iz powrotem. Myślę o rozliczeniu za to mojego klienta, ale może to przynieść efekt odwrotny do zamierzonego, ponieważ nie zdarza się tak często, że muszę obejść problemy z hostingiem. Z drugiej strony nienawidzę pracować bez wynagrodzenia. Czy powinienem: 1. wystawić im rachunek za obejście problemów z hostingiem (wybrali firmę hostingową) 2. zagrozić, że następnym razem wystawią im rachunek i doradzić im zmianę firmy hostingowej 3. odpuścić i po prostu uwzględnić wszelkie potencjalne problemy z hostingiem w cenę przyszłych prac Jak to robisz?


title: Oddzielenie UI od logiki w modułach JavaScript

text: Dokonuję refaktoryzacji niektórych niestandardowych modułów JavaScript napisanych w celu obsługi naszej funkcjonalności mapowania. Chcę, aby były znacznie bardziej testowalne jednostkowo i mogły łatwiej podłączać i odłączać elementy. Moje pytanie dotyczy posiadania manipulacji interfejsem użytkownika i logiki biznesowej w tym samym module. Wiem, że posiadanie części UI sprawia, że testowanie jednostkowe jest trochę trudniejsze. Myślę, że również oddzielenie części interfejsu użytkownika umożliwiłoby innym osobom dodanie własnej warstwy interfejsu użytkownika, gdyby chcieli zmienić wygląd i styl, jednocześnie zachowując podstawową funkcjonalność. **Edycja** : Bardziej pracuję z modułami Dojo, ponieważ na tym opiera się API mapowania. Pomyślałem, że skoro Dojo jest z nim, użyjemy tego. Zauważyłem, że moduły Dojo nie nadają się do łatwego testowania (próbowałem użyć Doh i jest to najbardziej nieintuicyjny framework testowy, z jakim kiedykolwiek pracowałem). Zastanawiam się nad stworzeniem większej liczby modułów waniliowych JS i próbowałem używać tylko tego, czego absolutnie potrzebuję od Dojo. Właśnie tam wpadłem na pomysł, aby być może oddzielić warstwę interfejsu użytkownika od logiki również dla każdego modułu. Czy ktoś ma sugestie, jak można je rozdzielić?


title: Narzędzie "t-sql" do plików csv?

text: Czy istnieje narzędzie, które pozwala odpytywać pliki w oparciu o poniższe kryteria i je zmieniać? * data utworzenia * nazwy plików (np. typ plikuA_RRRRMMDD_data2.blah) * zawartość pliku Na przykład przepływ pracy może wyglądać następująco: * Pobierz wszystkie pliki utworzone między datą x a datą y, gdzie nazwa pliku zawiera z, a sam plik zawiera wartość x pod kolumną zzz. * Zaktualizuj ją, aby była inną wartością/inną kolumną.


title: Jak pisać testy kodu, który steruje Robotem i innymi funkcjami zewnętrznymi?

text: Mam trochę kodu, którego używam do robienia regularnych zrzutów ekranu - przydaje się do obliczenia, ile danego dnia spędzam na różnych zajęciach. Wygląda to tak: /** * Kod zmodyfikowany z kodu podanego w * http://whileonefork.blogspot.co.uk/2011/02/java-multi-monitor-screenshots.html po pytaniu SE * pod adresem * http: //stackoverflow.com/questions/10042086/screen-capture-in-java-not-capturing-whole-screen i * następnie zmodyfikowane przez przegląd kodu na * http://codereview.stackexchange.com/questions/10783/java -screengrab */ pakiet com.tmc.personal; import java.awt.*; import java.awt.image.*; importuj plik java.io.; import java.io.IOException; import javax.imageio.ImageIO; // DO ZROBIENIA: ulepszenie narzędzia do przechwytywania ekranu przez uniemożliwienie robienia zdjęć, gdy mysz się nie porusza... class ScreenCapture implements Runnable { private int minsBetweenScreenshots = 5; private String WorkingDirectory = ""; public ScreenCapture(String string, int i) { WorkingDirectory = string; minMiędzyScreenshots = ja; } private void tryWritingScreenshotToFile(int indexOfPicture) { try { Image scaledImg = takeScreenshot(); storeImageToFile(workingDirectory + „ScreenCapture” + indexOfPicture, scaledImg); } catch (IOException e1) { // pomiń, przejdź do następnego } catch (AWTException e) { // zdjęcie nie działa pomiń i przejdź dalej. } } private Obraz takeScreenshot() throws AWTException { Prostokąt allScreenBounds = getAllScreenBounds(); Robot robot = nowy Robot(); BufferedImage img = robot.createScreenCapture(allScreenBounds); zwróć obraz skali(img); } private void storeImageToFile(String nazwa pliku, Obraz scaledImg) wyrzuca IOException { ImageIO.write(toBufferedImage(scaledImg), "jpg", new File(nazwa pliku + ActivityLogger.getDateTime() + ".jpg")); } // kod z // http://www.java-forums.org/new-java/2790-how-save-image-jpg.html private BufferedImage toBufferedImage(Image src) { int w = src.getWidth(null ); int h = src.getHeight(null); typ int = BufferedImage.TYPE_INT_RGB; // inne opcje BufferedImage dest = new BufferedImage(w, h, type); Grafika2D g2 = dest.createGraphics(); g2.drawImage(źródło, 0, 0, null); g2.dysponować(); miejsce powrotu; } private Obraz scaleImage(BufferedImage img) { int scaledWidth = (int) (img.getWidth() * 0.5); int scaledHeight = (int) (img.getHeight() * 0.5); Obraz scaledImg = img.getScaledInstance(scaledWidth, scaledHeight, BufferedImage.SCALE_AREA_AVERAGING); zwróć scaledImg; } /** * Ok, więc wszystko, co musimy tutaj zrobić, to znaleźć ekran o najniższym x, ekran o najniższym * y, ekran o największej wartości szerokości X+ i ekran o najwyższej wartości * Y+ height * * @return Prostokąt, który zakrywa wszystkie ekrany, które mogą znajdować się w pobliżu... */ private Rectangle getAllScreenBounds() { Rectangle allScreenBounds = new Rectangle(); Środowisko Grafiki ge = Środowisko Grafiki.getLocalŚrodowisko Grafiki(); Ekrany Urządzenia Graficznego[] = ge.getScreenDevices(); int farx = 0; int fary = 0; for (GraphicsDevice screen : screens) { Prostokąt screenBounds = screen.getDefaultConfiguration().getBounds(); // znalezienie jednego rogu if (allScreenBounds.x > screenBounds.x) { allScreenBounds.x = screenBounds.x; } if (allScreenBounds.y > screenBounds.y) { allScreenBounds.y = screenBounds.y; } // znalezienie drugiego rogu if (farx < (screenBounds.x + screenBounds.width)) { farx = screenBounds.x + screenBounds.width; } if (fary < (screenBounds.y + screenBounds.height)) { fary = screenBounds.y + screenBounds.height; } allScreenBounds.width = farx - allScreenBounds.x; allScreenBounds.height = fary - allScreenBounds.y; } return allScreenBounds; } @Override public void run() { int indexOfPicture = 1000; while (prawda) { tryWritingScreenshotToFile(indexOfPicture++); ActivityLogger.waitForNextSampleTime(minsBetweenScreenshots); } } } Oczekiwanym zachowaniem klasy jest to, że co pięć minut wykonuje zrzut ekranu pełnoekranowego (łącznie z monitorami zewnętrznymi)... Ostatnio zakochałem się w Test Driven Development w innych projektach i wróciłem do ten stary kod. Ale szczerze mówiąc – nie mam pojęcia, od czego zacząć pisanie testów na to – wszystko jest tak ściśle powiązane ze światem zewnętrznym, że proste testy wydają się niemożliwe – czy w takich sytuacjach jest najlepszym podejściem?


title: Kim są zdeklarowani krytycy projektowania zorientowanego obiektowo?

text: Jasne, techniki zorientowane obiektowo są świetne i od dłuższego czasu pozostają. Znam tylko mniej niż garstkę krytyków zasad OO. Wygląda na to, że większość projektów i architektur nie-OO jest odrzucana, jednak nadal piszemy dużo dobrego oprogramowania w C i rozwiązujemy wiele zmian danych za pomocą awk/sed i niezliczonych innych przykładów. Właściwe narzędzie do właściwej pracy, tak? Mam trudności ze znalezieniem artykułów, prezentacji lub opublikowanych krytyki OO (nawet Fred Brooks ma błogosławieństwo ukrywania informacji). Czy są jacyś znani, opublikowani i/lub zdeklarowani krytycy OO?


title: Wyjaśnienie fragmentu kodu , operatora słowa kluczowego w , w c++ , użycie obiektów w klasach

text: class Vector { public: Vector(int s) :elem{new double[s]}, sz{s} { } double& operator[](int i) { return elem[i]; } //funkcja 2 int size() { return sz; } private: double∗ elem; wew sz; }; Fragment kodu z : program c++. język 4th edition , Bjarne IDE : Microsoft Visual Studio Professional 2013 Moje doświadczenie : Nowicjusz , nauczyłem się trochę wcześniej używając turbo c++. Zauważyłem, że podczas wpisywania function2 operator jest słowem kluczowym (pokazany na niebiesko) , ale kiedy cała function2 jest zadeklarowana , _operator_ zmienia kolor na biały , to znaczy nie pozostaje już słowem kluczowym. Jeśli spróbuję użyć innej nazwy niż "operator" , wyskakuje błąd , który mówi Error: tablica funkcji nie jest dozwolona Byłoby bardzo pomocne, gdyby ktoś mógł wyjaśnić, co dzieje się w function2, chcę to wszystko tam wiedzieć dotyczy operatora słowa kluczowego , dlaczego, jak i kiedy tego użyć. Oczywiście z perspektywy początkującego. Proszę powstrzymać się od zbyt skomplikowanych odpowiedzi , jestem kompletny _nowicjusz_ Próbowałem szukać w internecie , nie mogłem znaleźć nic innego poza przeciążeniem operatora , co nie jest moim pytaniem. double read_and_sum(int s) { Vector v(s); //wiersz 1 for (int i=0; i!=v.size(); ++i) cin>>v[i]; //wiersz 3 podwójna suma = 0; for (int i=0; i!=v.size(); ++i) sum+=v[i]; suma zwrotu; } Tutaj linia1 przekazuje argument "s" typu int potrzebny konstruktorowi klasy vector , w porządku. Ale w wierszu 3, w jaki sposób stwierdzenie "cin>>v[i]" może być poprawne? , ponieważ obiekt v nie jest zadeklarowany jako tablica obiektów. Nawet jeśli jest poprawny, gdzie idzie wartość...? W zasadzie to z mojej wiedzy , proszę o wyjaśnienie line3 w jak najprostszy sposób , a jednocześnie jak najbardziej wyczerpująco , abym mógł się uczyć. PS: Nie mów mi, że nie powinienem uczyć się C++, albo że nie powinienem używać tego IDE lub czegoś podobnego. Jeśli możesz, odpowiedz na pytanie, będę bardzo wdzięczny.


title: Projekt aplikacji internetowej do przetwarzania plików o wysokiej wydajności

text: Próbuję zaprojektować aplikację internetową z możliwością skalowania, ale nie mogę owinąć głowy wokół kilku pojęć. Chcę to dobrze zaprojektować, ale nie jestem doświadczonym programistą, mam więcej doświadczenia w inżynierii systemów. Podstawowa architektura wygląda tak: Serwer WWW -> Serwer przetwarzania plików -> Baza danych NoSQL -> Serwer wyszukiwania Główny scenariusz jest więc następujący: * Użytkownik przesyła plik przez stronę * Plik jest wysyłany do przetworzenia na serwer (skrypt Pythona) * Wyniki przetwarzania jest wysyłany do bazy danych NoSQL * Wyniki przetwarzane przez serwer wyszukiwania i zwracane użytkownikowi Możemy skalować frontendy WWW poprzez równoważenie obciążenia. Coś jak nginx+apache. Skalowaniem bazy danych zajmuje się Cassandra lub MongoDB. Skalowanie wyszukiwania zajmuje się klastrowaniem elasticsearch lub sphinx. Teraz chcę mieć możliwość dodania wielu serwerów przetwarzania plików w przypadku, gdy przesyłany plik jest zbyt duży. Więc muszę jakoś podzielić plik na kawałki i przetwarzać go jednocześnie na wielu węzłach, a jeśli węzeł przestanie działać podczas pracy, nie powinno to wpłynąć na nic i dane muszą zostać zapisane. Potrzebuję więc czegoś innego, co będzie przydzielać zadania moim serwerom przetwarzania plików, równoważyć obciążenie i kontrolować wykonywanie zadań. Jak projektować niestandardowe aplikacje do tego typu rzeczy? Czy powinienem używać kolejkowania wiadomości?


title: Ogólne/dynamiczne obiekty w JSF

text: Zaczynam uczyć się JSF i zastanawiałem się, jak mógłbym zaimplementować następujące rzeczy: Mam instancję Spring, która zawiera kilka ziaren do operacji logicznych i bazodanowych, na przykład mam fasolę Person z "name", "lastName" i „wiek” jako atrybuty z operacjami przechowywania wspomnianych danych w bazie danych MySQL. Teraz chcę dodać do projektu instancję JSF, z której mogę odczytać dowolny odpowiedni bean w instancji Spring i zrobić CRUD z właściwości ziarna. Wszystko to bez tworzenia nowej fasoli w JSF. W szczegółach w JSF chcę mieć następujące widoki: * Lista obiektów (lista) * Pokaż obiekt (pokaż) * Formularz do dodawania lub edycji obiektu (formularz) Jeśli przejdę do adresu URL: http: // host /person/list JSF powinien zrobić petycję dla ziarna Person do Springa i wywołać z niego metodę "getAll()" i "zrzucić" wynik w widoku "lista". Ten widok miałby logikę tworzenia tabeli iterującej po wynikach i właściwościach obiektu Person. Teraz, jeśli przejdę do adresu URL: http://host/pies/lista JSF powinien teraz złożyć petycję o fasolkę Dog do Spring i wywołać tę samą metodę i zrzucić wyniki do widoku "listy". Oczywiście wyświetlana tabela powinna być inna, ponieważ Dog i Person to klasy o różnych atrybutach. W adresie URL http://host/person/new JSF powinien tworzyć instancję nowego ziarna Person z Spring. przeczytaj jego atrybuty i zrzuć nowy obiekt do widoku „formularza”, który powinien iterować przez jego atrybuty i wyświetlać formularz z danymi wejściowymi dla „imię”, „nazwisko” i „wiek”. Po kliknięciu „Prześlij” JSF powinien wywołać metodę „save()” z fasoli Spring, która zapisze Persona z wprowadzonymi wartościami. Czy jest to możliwe w JSF? Jeśli nie, jakie są alternatywy, które zbliżają się do tego przepływu pracy? Jaka jest najlepsza strategia, którą można zastosować w przypadku tego rodzaju wdrożenia?


title: Plik danych w czasie rzeczywistym, jakie wymagania musiałbym zebrać z interfejsu systemu klienta?

text: Jak mam zaprojektować ten konkretny przykład aplikacji poniżej? Na przykład: mam klienta, który chciałby osadzić moje źródło danych w tym interfejsie GUI. Dane składają się z pól nazw i opisów. Jeśli pojawi się użytkownik i wyszuka konkretną nazwę produktów przy użyciu interfejsu klienta, wówczas parametr name zostanie przekazany do mojego pliku danych i zwróci wyszukiwanie tej nazwy zapytania z powrotem do interfejsu klienta z mojej bazy danych . Zakładam, że moje źródło danych w czasie rzeczywistym zostanie skonstruowane jako usługa API. Jakie wymagania musiałbym zebrać z interfejsu systemu klienta? Czy musiałbym poprosić ich o listę parametrów, których potrzebują do wysyłania zapytań za pośrednictwem mojego pliku danych?


title: Niejawny punkt końcowy OAuth2 a pliki cookie

text: Obecnie mam aplikację, która zasadniczo uruchamia dwie połówki interfejsu API - spokojny interfejs API dla aplikacji sieci Web i interfejs API synchronizacji dla klientów natywnych (w całym SSL). Aplikacja internetowa jest całkowicie oparta na javascript i i tak jest dość podobna do klientów natywnych - z wyjątkiem tego, że obecnie nie działa w trybie offline. Mam nadzieję, że scalę pofragmentowane interfejsy API w jeden spokojny interfejs API. Aplikacja sieci Web obecnie uwierzytelnia się, wysyłając plik cookie do klienta, podczas gdy klienci natywni pracują przy użyciu niestandardowej implementacji tokenu dostępu HMAC. Oczywiście scenariusz z kluczem publicznym/prywatnym dla aplikacji JavaScript jest trochę bezcelowy. Myślę, że najlepszym rozwiązaniem byłoby utworzenie punktu końcowego OAuth2 w interfejsie API (takim jak Instagram, na przykład http://instagram.com/developer/authentication/), który jest używany zarówno przez aplikacje natywne, jak i aplikację internetową. Moje pytanie dotyczy bezpieczeństwa, w jaki sposób niejawny przepływ OAuth2 jest porównywany (przechowywanie tokenu dostępu w magazynie lokalnym) z „bezpiecznymi” plikami cookie? Przypuszczalnie, chociaż SSL rozwiązuje ataki typu man in the middle, użytkownik mógłby teoretycznie pobrać token dostępu z lokalnej pamięci i skopiować go na inną maszynę?


title: Jeśli nauczyłeś się formalnych metod tworzenia oprogramowania, jak bardzo je uznałeś?

text: Jeśli zostałeś przeszkolony w używaniu metod formalnych (FM) do programowania: * Jak bardzo jest to przydatne? * Na czym polegało Twoje szkolenie FM (np. kurs, książka)? * Jakich narzędzi FM używasz? * Jakie korzyści w zakresie szybkości/jakości przyniosło ci to w porównaniu z nieużywaniem FM? * Jakie oprogramowanie tworzysz z FM? * **A jeśli nie korzystasz teraz bezpośrednio z FM, czy przynajmniej warto było się uczyć??** Jestem ciekaw, jak wiele doświadczeń/opinii na temat FM można znaleźć w tej społeczności; Zaczynam czytać i chcę wiedzieć więcej. ## Tło Programowanie i rozwój/inżynieria oprogramowania to jedne z najnowszych ludzkich umiejętności/zawodów na Ziemi, więc nic dziwnego, że dziedzina ta jest niedojrzała – co widać w głównych wynikach naszej dziedziny, jako kod, który jest zwykle spóźniony i podatny na błędy. Niedojrzałość branży uwidacznia się również w szerokim marginesie (co najmniej 10:1) produktywności pomiędzy przeciętnymi i najlepszymi koderami. Takie ponure fakty są dobrze opisane w literaturze i przedstawione w książkach takich jak Code Complete Steve'a McConnella. Użycie metod formalnych (FM) zostało zaproponowane przez główne osobistości w oprogramowaniu/CS (np. nieżyjący już E. Dijkstra) w celu rozwiązania (jednej z) podstawowych przyczyn błędów: braku matematycznego rygoru w programowaniu. Na przykład Dijkstra opowiadał się za studentami, którzy wspólnie opracowują program i jego dowód. FM wydaje się być znacznie bardziej rozpowszechnione w programach nauczania CS w Europie niż w USA. Jednak w ciągu ostatnich kilku lat nowe „lekkie” podejścia i narzędzia FM, takie jak Alloy, przyciągnęły pewną uwagę. Mimo to FM jest daleki od powszechnego użycia w przemyśle i mam nadzieję, że otrzymam tutaj informację zwrotną na temat tego, dlaczego. ## Aktualizacja Na dzień dzisiejszy (14.10.2010), z 6 odpowiedzi poniżej, nikt nie argumentował wyraźnie za użyciem FM w pracy „w świecie rzeczywistym”. Jestem naprawdę ciekawa, czy ktoś może i będzie chciał; a może FM naprawdę ilustruje podział między środowiskiem akademickim (FM to przyszłość!) a przemysłem (FM jest w większości bezużyteczne).


title: IPC w C pod Linuksem

text: Tworzę rozwiązanie do przesyłania wiadomości z następującą konfiguracją: wszystkie wiadomości są zapisywane w bazie danych, dwa lub więcej procesów czytnika będzie czytać z tej bazy danych i wysyłać dane do innych procesów, które wyślą je przez sieć. Moje podejście jest przedstawione poniżej. Poniżej znajdują się 4 procesy nadawcy z 4 fifo i 2 czytniki z 2 fifos reader0 ← odczyt danych z DB reader1 ← odczyt danych z DB _sending part_ network_handler0 ← network_handler_fifo0 ← reader0 network_handler1 ← network_handler_fifo1 ← czytnik1 network_handler2 ← fo network_hand czytnik0 obsługa_sieciowa3 ← czytnik_sieciowy_fifo3 ← czytnik1 _część odbiorcza_ obsługa_sieciowa0 → czytnik_fifo0 → czytnik0 → zapis do DB obsługa_sieciowa1 → czytnik_fifo1 → czytnik1 → zapis do DB obsługa_sieciowa2 → czytnik_fifo0 → czytnik0 → zapis do DB obsługa_sieciowa3 → czytnik_fifo1 → mam kilka problemów z zapisem do tego DB konfiguracji i pamiętaj, że liczba procesów może być większa niż w zależności od środowiska, więc mógłbym zrobić 20 czytników i 10 programów obsługi sieci lub tak, jak pokazano powyżej. 1. Rozmiar bufora to 64K, a rozmiar wiadomości to 200k, czy to jest wystarczająco małe, aby zapis/odczyt do/z fifo był atomowy? 2. Jak sprawić, by procesy były świadome siebie nawzajem, więc na przykład czytnik 0 pisze do network_handler_fifo0 i network_handler_fifo2, jak mogę sprawić, żeby zaczął pisać na innych fifo, jeśli obecne są pełne lub ich programy obsługi sieci są martwe 3. Myślałem o uogólnienie procesu pisania przez czytnik, aby na przykład zapisywał do wszystkich sieci fifo za pomocą mechanizmu blokującego i przestawał pisać na tej, w której jego proces nie działa, nie użyłem tego, ponieważ mechanizm blokujący może spowolnić działanie. BTW, każdy network_handler jest powiązaniem SCTP, więc network_handler0 to powiązanie 0, network_handler1 to powiązanie 1 i tak dalej. Każdy pomysł jest doceniany. Mam na myśli, nawet jeśli muszę zmienić powyższą konfigurację.


title: Jak radzić sobie z projektowaniem interfejsu użytkownika i obsługą odpowiednich funkcji w rozwoju Agile?

text: W procesie rozwoju Agile zwykle główny nacisk kładzie się na historyjki użytkownika, ale czasami pojedyncze wymaganie może obejmować kilka historyjek użytkownika. Na przykład, klient może zażądać strony wyszukiwania dla wszystkich użytkowników na forum i istnieje kilka działań, które mogą wystąpić na każdym użytkowniku, takie jak zablokowanie użytkownika, usunięcie użytkownika, zresetowanie hasła itp. Możemy podzielić tę funkcję na co najmniej 4 historyjki użytkownika: 1. Wyszukaj użytkowników 2. Zablokuj użytkownika 3. Usuń użytkownika 4. Zresetuj hasło W jaki sposób projektant interfejsu użytkownika zaimplementowałby taki interfejs użytkownika? Czy powinien pracować nad pierwszą historyjką użytkownika, a następnie zacząć dodawać więcej funkcji do interfejsu użytkownika? Myślę jednak, że ostateczny interfejs użytkownika będzie pomieszany! Jeśli zdecyduje się pracować nad całą funkcją (wyszukiwanie + akcje), co jeśli akcje mają niski priorytet i zostaną zaimplementowane kilka iteracji po wykonaniu funkcji wyszukiwania?


title: PHP - automatyczny formatowanie kodu?

text: Po prostu zastanawiam się, czy istnieje narzędzie/oprogramowanie (najlepiej darmowe) do automatycznego formatowania kodu w PHP dla partii plików (nie jeden po drugim, do którego mogę użyć IDE) Idealnie coś takiego, w którym mogę ustawić ustawienia i wykona automatyczne formatowanie dla wszystkich plików w tym folderze ... itd. http://beta.phpformatter.com/ to jest bardzo przydatne, ale problem polega na tym, że muszę to zrobić jeden po drugim, kopiując wklejanie. dlaczego szukam innego narzędzia...


title: Jaka jest różnica między programowaniem dla mikrokontrolerów a programowaniem dla systemów wbudowanych?

text: Jaka jest dokładnie różnica między systemem wbudowanym (takim jak Tegra, Raspberry lub podobny) a mikrokontrolerem? Rozumiem, że jest różnica, ale trudno mi to zrozumieć. Co ma zamiar powiedzieć: „czy jesteś w stanie tworzyć dla mikrokontrolerów”? Czy oznacza to po prostu programowanie w C/C++ dla systemu wbudowanego, czy coś więcej? Jaka jest różnica między programowaniem w C/C++ dla systemów wbudowanych a mikrokontrolerami? Jeśli często programuję dla ARM w C/C++, to czy mogę powiedzieć, że umiem programować mikrokontrolery, czy mogę aplikować o taką pracę?


title: Metoda delegata wywoływana prywatnie z samego delegata?

text: Ustanowiło się wzorce projektowe tak zakorzenione w mózgu, że gdy ktoś czasem robi coś nieoczekiwanego, jest to rewelacja. Mój kolega w projekcie iOS wywołał metodę delegata z samej klasy delegata. Oznacza to, że osoba delegująca w ogóle nie była zaangażowana w wywoływanie tej metody. Czy to łamie jakąś zasadę lub wzorzec projektowy? Z technicznego punktu widzenia metoda delegata jest taka sama jak każda inna metoda i jest dostępna w klasie do wywołania. Ale jesteśmy przyzwyczajeni do dzwonienia do nich tylko przez delegujących. Czy łamie jakąś obietnicę?


title: Dlaczego Facebook konwertuje kod PHP do C++?

text: Czytałem, że Facebook zaczął od PHP, a następnie, aby przyspieszyć, teraz kompiluje PHP jako kod C++. Jeśli tak jest, dlaczego nie: 1. Po prostu programuj w c++? Z pewnością muszą wystąpić NIEKTÓRE błędy/błędy po naciśnięciu magicznego przycisku kompilatora, który przenosi PHP do kodu c++, prawda? 2. Jeśli ten imponujący konwerter działa tak dobrze, po co w ogóle trzymać się PHP? Dlaczego nie użyć czegoś takiego jak Ruby lub Python? Uwaga – wybrałem te dwa losowo, ale głównie dlatego, że prawie każdy mówi, że kodowanie w tych językach to „radość”. Dlaczego więc nie napisać w super świetnym języku, a następnie nacisnąć magiczny przycisk kompilacji c++?


title: Pomóż mi zrozumieć frazę z „współbieżności Java w praktyce”

text: Na dwunastej stronie "Współczesności Javy w praktyce" znajduje się fraza > "Dobra specyfikacja definiuje niezmienniki ograniczające stan obiektu oraz > post-warunki opisujące efekt jego działania". Mniej więcej rozumiem frazę aż do słowa „post”`, wtedy staje się to śmieciem. Czy możesz pomóc, proszę?


title: Na jakim etapie rozwoju należy pisać komentarze?

text: Jestem studentem na stażu w większej firmie, pisząc aplikacje dla małych firm w C#. Zauważyłem, że nie komentuję swojego kodu podczas jego pisania. Raczej komentuję swój kod, gdy jestem na etapie debugowania. Gdy wyszukuję błędy, natrafię na blok, który sprawia, że myślę „hmm… to może kogoś zmylić w przyszłości. Lepiej to skomentuję” i dodam odpowiednie komentarze. Wszystkie moje komentarze są robione w ten sposób. Czy to odpowiedni sposób komentowania? Czy komentarze powinny być pisane tak, jak pisany jest kod? Czy to naprawdę ma znaczenie, kiedy komentarze są pisane, o ile odpowiednio wyjaśniają, dlaczego ten blok jest używany?


title: Jaka jest najlepsza praktyka dla asynchronicznych interfejsów API, które zwracają futures w Scali?

text: Rozpocząłem projekt, aby napisać asynchroniczny sterownik PostgreSQL w Scali i aby być asynchronicznym, muszę akceptować wywołania zwrotne i używać futures, ale akceptacja wywołania zwrotnego **i** przyszłość sprawia, że kod jest uciążliwy, ponieważ zawsze musisz wysłać callback, nawet jeśli jest bezużyteczny. Oto test: "wstaw wiersz do bazy danych" in { withHandler { (handler, future) => future.get(5, TimeUnit.SECONDS) handler.sendQuery( this.create ){ query => }.get( 5 , TimeUnit.SECONDS ) handler.sendQuery( this.insert ){ query => }.get( 5, TimeUnit.SECONDS ).rowsAffected === 1 } } Wysyłanie pustego wywołania zwrotnego jest okropne, ale nie mogłem znaleźć sposobu na uczynić to opcjonalnym lub coś w tym stylu, więc w tej chwili nie mam zbyt wielu pomysłów na to, jak powinien wyglądać ten zewnętrzny interfejs API. Może to być coś takiego: handler.sendQuery( this.create ).addListener { query => println(query) } Ale znowu, nie jestem pewien, jak ludzie organizują API w tym zakresie. Dobrze byłoby też podać przykłady w innych projektach.


title: Czy przypadkowo utworzyłem mediatora w moim MVC?

text: Obecnie pracuję nad moim pierwszym dużym projektem. Jest to aplikacja typu frontend na Facebooku, która od ostatniego wtorku obejmuje około 6000-8000 LOC. Mówię to, ponieważ używam MVC, architektury, której nigdy sztywno nie egzekwowałem w żadnym z moich hobbystycznych projektów. Przeczytałem część książki PureMVC, ale nie do końca zrozumiałem koncepcję Pośrednika. Ponieważ nie rozumiałem i nie widziałem potrzeby, mój projekt nie używał jeszcze jednego mediatora. Wczoraj wróciłem do tablicy projektowej z powodu pewnych zmian wymagań i zauważyłem, że mogę przenieść wszystkie elementy interfejsu użytkownika z widoku do jego własnej klasy. Widok zasadniczo zarządzał tylko okresem istnienia interfejsu użytkownika i wszystkimi zdarzeniami z interfejsu użytkownika lub modelu. Technicznie rzecz biorąc, widok stał się teraz „pośrednikiem” między modelem a interfejsem użytkownika. Dlatego dzisiaj zdałem sobie sprawę, że mogę po prostu przenieść wszystkie moje elementy interfejsu użytkownika z powrotem do widoku i utworzyć klasę mediatora, która obsługuje wszystkie zdarzenia z widoku i modelu. Czy moje zrozumienie jest poprawne w myśleniu, że przekazałem widok w obecnym stanie (obsługa zdarzeń z modelu i interfejsu użytkownika) do mediatora i że klasa interfejsu użytkownika jest tym, co _powinna_ być widokiem?


title: Dlaczego nie ma już języków makr?

text: W tej odpowiedzi na moje poprzednie pytanie dotyczące przydatności języków skryptowych jako powłok, DigitalRoss identyfikuje różnicę między językami makr a językami „przeanalizowanymi” pod względem traktowania ciągów jako główny powód, dla którego języki skryptowe _nie_ nadają się do celów powłoki. Języki makr obejmują na przykład nroff i m4. Jakie decyzje projektowe (lub kompromisy) są potrzebne do stworzenia języka programowania makr? I dlaczego większość języków głównego nurtu jest analizowana, a nie makro? To bardzo podobne pytanie (i przyjęta odpowiedź) dość dobrze wyjaśnia, dlaczego analizowane języki maszynowe, na przykład C, cierpią z powodu używania makr. Uważam, że moje pytanie dotyczy różnych powodów: 1. Języki makro lub te pracujące na poziomie tekstowym nie są całkowicie porażkami. Prawdopodobnie obejmują one `bash`, `Tcl` i inne języki powłoki. I działają w określonej niszy, takiej jak muszle, jak wyjaśniono w moich linkach powyżej. Nawet `m4` odniósł dość długi czas sukcesu, a niektóre języki szablonów internetowych można uznać za języki makr. 2. Jest całkiem możliwe, że makra i przeanalizowane typowanie nie pasują do siebie i dlatego makra „łamią” wspólne języki. W odpowiedzi na pytanie, do którego prowadzi link, makro takie jak „#define TWO 1+1” byłoby objęte wspólnymi zasadami języka, a nie sprzeczne z zasadami języka hosta. A kwestie takie jak „makra nie są wpisane” i „kod się nie kompiluje” nie są istotne w kontekście języka zaprojektowanego jako nieopisanego i interpretowanego z niewielką troską o wydajność. 3. Pytanie o decyzje projektowe potrzebne do stworzenia języka makr dotyczy projektu hobbystycznego, nad którym aktualnie pracuję nad zaprojektowaniem nowej powłoki. Wzięcie poprzedniego pytania w kontekst wyjaśniłoby różnicę między dodawaniem makr do analizowanego języka a moim celem. Mam nadzieję, że z wyjaśnienia wynika, że pytanie, do którego prowadzi link, nie obejmuje tego pytania, które składa się z dwóch części: 1. Jeśli chcę stworzyć język makr (na przykład dla powłoki lub szablonu internetowego), jakie ograniczenia i kompromisy (i wytyczne, jeśli istnieją) należy wykonać? 2. (Prawdopodobnie można odpowiedzieć za pomocą linku lub odniesienia) Dlaczego żadnemu językowi makro nie udało się stać się głównym nurtem, z wyjątkiem określonych nisz? Co sprawia, że języki typowane odnoszą sukcesy w dużych programach, podczas gdy języki "ciągowe" odnoszą sukcesy w powłokach i środowiskach typu jednowierszowego?


title: Poproś o informacje od programistów iPhone'a / PHP

text: ostatnio wynająłem freelancera do opracowania aplikacji na iPhone'a dla mojej strony internetowej, ta aplikacja będzie pobierać informacje z DB strony, normalnie powinienem dać mu dostęp do DB, aby uzyskać potrzebne informacje. Pytanie brzmi, jak pozwolić mu bezpiecznie zabrać potrzebne informacje, tj. zapobiec niebezpieczeństwu włamania lub uzyskania dostępu do bazy danych witryny lub dokonania na niej pewnych modyfikacji... Co mogę zrobić ?


title: Wzorce dla ciągłej integracji i DVCS

text: Obecnie używamy Subversion i TeamCity, zamierzamy przejść do korzystania z Mercurial (w szczególności Kiln, ponieważ jesteśmy użytkownikami FogBugz). Oczywiście spowoduje to zmiany - miejmy nadzieję, ulepszenia - w naszych wzorcach programistycznych (nas dwoje!), ale jedynym problemem, z którym się zmagam, jest to, jak ustrukturyzować rzeczy, abyśmy nadal czerpali korzyści z ciągłej integracji / naszego serwera CI ( że istnieją i pozostaną korzyści jest wiadome, o czym dyskusja nie wchodzi w zakres _tego_ pytania). Z SVN zobowiązujemy się do ograniczonej liczby centralnych repozytoriów - efektywnie jedno na projekt (mniej więcej jedno rozwiązanie Visual Studio), więc łatwo jest uruchomić kompilację i uzyskać pewność, że wszystkie pliki zostały zatwierdzone i że nie ma zbłąkane zależności itp. Ale jeśli zamierzamy właściwie wykorzystać mercurial, będziemy chcieli mieć więcej instancji repozytorium - gdzie spodziewałbym się, że zmiany będą generalnie płynąć w kierunku ostatecznego "żywego" repozytorium. Problem, z którym się zmagam, polega na tym, że repozytorium na żywo wydaje mi się zbyt „spóźnione”, aby uruchomić moje kompilacje CI OTOH, jedna kompilacja CI na projekt na programistę jest prawdopodobnie przesadna (i powoduje inne problemy). Myślę, że live jest za późno, ponieważ – biorąc pod uwagę, że możemy/powinniśmy mieć więcej repozytoriów (klonów) – live powinno być możliwe do wdrożenia, podczas gdy chcemy budować/uruchamiać testy (jednostka przy zatwierdzeniu, integracja w zaplanowanych odstępach czasu) na zatwierdzeniach deweloperskich. Trochę łowię, ale to dlatego, że jedną z rzeczy, które daje centralne repozytorium subversion (ja, z naszą konfiguracją!) jest dużo jasności co do tego, co budować i kiedy. * * * n.b. Nie pytam o mechanikę korzystania z mercurial z ciągłą integracją - mam przyjemność z pracy nad osobistym projektem, jego wzorcami i strukturami oraz praktyką/przepływem pracy, który staram się ogarnąć.


Joel Spolsky powiedział w jednym ze swoich słynnych postów: > Najgorszy strategiczny błąd, jaki może popełnić każda firma programistyczna: > Przepisz kod od zera. Chad Fowler napisał: > Widziałeś filmy, wpisy na blogu i szum i zdecydowałeś > zamierzasz ponownie zaimplementować swój produkt w Railsach (lub Javie, lub .NET, lub > Erlang, itp. .). >> Uważaj. To dłuższa, trudniejsza i bardziej podatna na niepowodzenia ścieżka, niż się spodziewasz. Czy kiedykolwiek brałeś udział w BIG Rewrite? Interesuje mnie twoje doświadczenie w tym tragicznym temacie, aw szczególności każda duża przeróbka, która została pomyślnie ukończona (jeśli w ogóle).


title: Dostęp do SAP R/3 z Javy

text: Co muszę zrobić, aby napisać interfejs Java dla SAP R/3. Nie mam doświadczenia z SAP, a odpowiedzi są bardzo powolne, więc proszę tutaj o twoje doświadczenie z nimi. Czy każdy może za darmo stworzyć oprogramowanie korzystające z SAP? Czy musimy licencjonować Java Connector? Czy musimy zostać partnerami SAP? Ile to kosztuje? Dzięki za wszystkie informacje, które masz.


title: Jaka jest dobra strategia tworzenia aplikacji działających w konsoli i jako API?

text: Dość często tworzę skrypty, które są używane głównie jako aplikacje konsolowe, ale później są używane w innych skryptach, usługach internetowych i innych rzeczach, w których bardzo wygodnie jest po prostu importować skrypt i bezpośrednio wywoływać metody, zamiast używać standardowego wyjścia Process i parsing. Pytanie brzmi teraz, jaka jest dobra strategia projektowa do tworzenia takich skryptów? Mam tutaj przykład w pythonie: def main(): # do stuff print("Znalazłem tu kilka wyników:") for foo in bar: print("result: %s" % foo) if __name__ == "__main__"( ): main() to można łatwo przepisać na coś takiego: def main(): wynik = jakaś_funkcja() print("Znalazłem tu kilka wyników:") for foo w wyniku: print("wynik: %s" % foo) def jakaś_funkcja(): # zrób pasek powrotu rzeczy if __name__ == "__main__"(): main() Ale w większości moich przypadków nie jest to takie proste. Ale jak poradzić sobie z tym problemem, gdy program wykonuje dość dużo danych wyjściowych, takich jak różne analizy lub kilka kroków lub wartość zwracana przez funkcję API, byłaby czymś w rodzaju listy dict listy krotek (lub nawet bardziej skomplikowanych struktur) ? Czy dobrze byłoby zamknąć każdy krok w jednej metodzie i uruchamiać je jeden po drugim? Jakie wzorce projektowe można wykorzystać do pisania dobrych programów, które można łatwo ponownie wykorzystać jako interfejsy API?


title: Definiowanie własności i znajdowanie podstawienia funkcji kopiowania pythona w cythonie

text: Chcę zcytować kod w Pythonie, aby przyspieszyć kod. Poniżej możesz zobaczyć moją próbę uczynienia mojej klasy Pythona zrozumiałą dla cython: import numpy as np cimport numpy as np ctypedef np.double_t DTYPE_T cpdef double std_G,v_c std_G=4.3e-9 # const Newtona w Mpc (km/s )^2 M_sol^{-1} v_c = 299792.458 #km/s cdef extern z "math.h": double log(double) nogil double sqrt(double) nogil cdef extern od "gsl/gsl_math.h": ctypedef struct gsl_function: double (* function) (double x, void * params) void * params cdef extern z "gsl/gsl_integration.h": ctypedef struct gsl_integration_workspace gsl_integration_workspace * gsl_integration_workspace_alloc(size_t n) void gsl_integration_integration_workspace * gsl_function * f, double a, double b, double epsabs, double epsrel, size_t limit, gsl_integration_workspace * workspace, double *res ult, double *abserr) cdef double do_callback(double x, void* params): return (<ComovingDistMemoization>params).eval(x) cdef class ComovingDistMemoization(object): cdef list _memotable cdef cosmolgy def __cinit__(self, cosmology, memotable = Brak): jeśli memotable to None: self._memotable = [] self._memotable = memotable self.cosmology = cosmology def __call__(self, double z): jeśli z in self._memotable: return self._memotable[z] def eval (z): return 1./sqrt(self.cosmology.hubble2(z)) cdef gsl_integration_workspace* w =gsl_integration_workspace_alloc(1000) cdef gsl_function F F.function = &do_callback F.params = <void*>self cdef podwójny wynik = 3 , error = 5 cdef double y, err, dist gsl_i ntegration_qags (&F, 0, z, 0, 1e-7, 1000, w, &result, &error) y, err = wynik, błąd gsl_integration_workspace_free(w) dist = self.cosmology.v_c * y #aby uzyskać właściwe jednostki, tj. wpisz długość hubble'a self._memotable[z] = dist zwraca dist cdef class cosmology(object): cdef comovingdist cdef public double omega_m, omega_l, h, w, omega_r, G, v_c cdef double H0, hubble_length def __init__(self, omega_m = 0,3, omega_l = 0,7, h = 0,7, w = -1, omega_r = 0., G = std_G): self.omega_m = omega_m self.omega_l = omega_l self.omega_r = omega_r self.h = h self.w = w self.G = G self.v_c = v_c self.comovingdist = ComovingDistMemoization(self) def __copy__(self): return cosmology(omega_m = self.omega_m, omega_l = self.omega_l, h = self.h, w = se lf.w, omega_r = self.omega_r, G = self.G) właściwość H0: def __get__(self): return 100*self.h #km/s/MPC def hubble2(self, double z): cdef double inv_a inv_a = 1.+z return (self.omega_r*inv_a**4 + self.omega_m*inv_a**3 + \ self.omega_l*(inv_a**(3*(1+self.w)))) + (1 - self.omega_m - self.omega_l - self.omega_r)*inv_a**2)*self.H0**2 właściwość hubble_length: def __get__(self): return self.v_c / self.H0 def rho_crit(self, double z) : return 3.*self.hubble2(z)/(8*np.pi*self.G) def angulardist(self, double z, double z2 = None): jeśli z2 jest None: return self.comovingdist(z) / (1+z) return (self.comovingdist(z2) - self.comovingdist(z)) / (1+z2) Jednak jedno z miejsc, które powoduje błąd i nie udało mi się do tej pory znaleźć żadnego podstawienia i moje śledztwo po prostu r do tego stopnia, że funkcja `__copy__(self)` nie jest obsługiwana przez cython. Przeczytałem, że za pomocą `pickle.Pickler` można podać podstawienie dla **wystąpienia** klasy, ale nie wiem, jak powinno to utworzyć kopię klasy wewnątrz klasy? Aktualizacja: Czy jest to właściwy sposób na zastąpienie `__copy__` następującym fragmentem kodu: def __reduce__(self): return (self.__class__, (), self.__getstate__()) def __getstate__(self): return (self. omega_m, self.omega_l, self.omega_r, self.h, self.w, self.G, self.v_c) def __setstate__(self, data): (self.omega_m, self.omega_l, self.omega_r, self.h , self.w, self.G, self.v_c) = data Moje drugie pytanie dotyczy `właściwości`, czy zdefiniowałem właściwość w cythonie, czy też muszę mieć również funkcję `__set__`? Moje ostatnie pytanie, w tym momencie kod zostaje skompilowany bez komunikatu o błędzie, ale kiedy wywołuję instancję klasy `cosmology` w Pythonie, wszystkie zwracają zero. Zastanawiam się, czy sposób, w jaki wywołałem na przykład klasę `cosmology` w klasie `ComovingDistMemoization` i odwrotnie spowodował problem i nie mogę przekazywać informacji między nimi?


title: pomyłka między SVN a kopią zapasową kodu według miesiąca/daty/godziny za każdym razem, gdy dokonuję większej lub ważnej aktualizacji kodu

text: Pracuję jednocześnie nad dwoma różnymi projektami, w których za każdym razem, gdy wprowadzane są zmiany, używamy 1. Tortoise SVN dla projektu A 2. Kopie zapasowe dla projektu B (robi to ja w moim systemie) Uważam, że SVN jest dobry do utrzymywania najnowszych serwer kodu i aktualizować go w razie potrzeby. W przypadku Projektu A zdarza mi się wprowadzać wiele zmian w projekcie A i radzę nie wprowadzać zmian raz za razem, ale tylko poważną zmianę za jednym razem. Ale ponieważ nie jestem sam w projekcie A, mam tendencję do tworzenia kopii zapasowych kodu według folderu za każdym razem, gdy dokonuję ważnej zmiany, więc mogę wrócić i wrócić, jeśli wystąpi jakiś konflikt. Ale co mam zrobić w przypadku projektu B? gdzie najbardziej jestem w projekcie (na razie). Czy powinny to być kopie zapasowe SVN czy folderów? Powodem, dla którego robię kopie zapasowe folderów dla projektu B, jest to, że czasami kompilacja przekazana klientowi kończy się niepowodzeniem/błędami, więc zamiast kazać mu czekać na naprawę, po prostu idę i otwieram projekt, kompiluję ostatnią działającą kompilację i udostępniam plik wykonywalny mogą kontynuować swoją pracę i nie czekać, aż to naprawię (może to potrwać długo). Współpracuję z Delphi przy obu projektach.


title: Framework zarządzania treścią MVC z panelem administracyjnym

text: Ostatnio rozwijam swój własny system zarządzania treścią MVC przy użyciu PHP i, przynajmniej w moim umyśle, trochę utknąłem w projektowaniu systemu. Uważam, że dotyczy to również budowania systemu zarządzania treścią z istniejącym frameworkiem MVC. To będzie trochę trudne do wyjaśnienia, więc z góry przepraszam za długi dylemat. **Małe wprowadzenie do systemu:** Obecnie moje trasy wyglądają trochę tak (zapisane jako JSON): { "/admin/:controller/:action/:params":"", "/admin/:controller/ :params":"AdminController", "/admin":"AdminController", "/:page?/:subpage?":"IndexController" } Trasy są kluczami, domyślne kontrolery są wartościami. Jeśli nie ma domyślnego kontrolera, router przechodzi do następnej reguły. Zrobiłem to, aby oddzielić front end strony od panelu administracyjnego. Na razie wszystkie kontrolery znajdują się w jednym katalogu, chociaż ma to się zmienić. Zwracają szablon, który został wypełniony danymi z odpowiedniego modelu, lub po prostu modyfikują żądanie, z którym zostały utworzone. **Problem:** Mój problem polega na tym, jak zaimplementować oddzielne kontrolery, które dotyczą tego samego modelu dla frontendu i backendu w sposób modułowy. Na przykład mam stronę w panelu administracyjnym, która pozwala administratorowi wprowadzić pewne prywatne informacje, które mają być dostępne tylko z interfejsu użytkownika za pomocą nazwy użytkownika i hasła. Wyobraź sobie, że jest to obsługiwane przez `InfoController` w zapleczu, do edycji prywatnych informacji, dopasowanych do trasy `/admin/info`. A gdybym chciał utworzyć trasę dla frontendu, aby uzyskać dostęp do prywatnych informacji, o tej samej nazwie, co w panelu administracyjnym (`/info`)? Myślę, że problem nabiera większego sensu w kontekście rozwiązań, które rozważałem. **Rozwiązania, które rozważałem:** 1. Moją pierwszą myślą było dodanie do wszystkich kontrolerów związanych z administratorami `Admin` \- czyli `AdminInfoController` i `InfoController` \- ale jestem zainteresowany posiadaniem systemu modułowego gdzie wszystkie trasy, kontrolery i widoki (oraz CSS/JavaScript w razie potrzeby) odnoszące się do modelu `Info` byłyby we własnej strukturze katalogów (coś w rodzaju `/modules/info`). 2. Mając na uwadze pragnienie modularności, pomyślałem o dopasowaniu tras trochę w stylu `/:module/:controller/:action`, ale to sugerowałoby, że panel administracyjny sam w sobie jest modułem, który potrzebuje dostępu do wszystkich moduły, z których może korzystać front end. Czy to miałoby sens? 3. Projekt, o którym myślałem najbardziej, to admin i frontend jako dwie wyróżniające się, podstawowe koncepcje frameworka. Współdzielą moduły zawierające kontrolery i widoki dla obu. Ostatecznie szukam informacji na temat najlepszego podejścia tutaj, wszelkich alternatyw i tego, czy całkowicie nad tym myślę. Czuję się trochę tak, jakbym doprowadził się do szaleństwa, dążąc do idealnego projektu systemu, który jest zgodny ze wzorcem MVC (czy jest to właściwa rzecz dla takiego systemu?). Dzięki za przeczytanie, mam nadzieję, że miało to sens.


title: Jak monitorujesz, nad czym Ty i Twój zespół pracujecie na co dzień?

text: Zmagam się z tym, jak śledzić, co ja i ludzie z mojego zespołu faktycznie robią każdego dnia. Otrzymuję dobry ogólny obraz, przeglądając wypełnione karty co tydzień, a stand-upy trochę pomagają, ale czuję, że nie mam dobrego opanowania codziennej pracy mojego zespołu. Karty będą w toku przez wiele dni bez aktualizacji podczas codziennego stand-upu, a niektórzy inżynierowie z mojego zespołu nie są zbyt komunikatywni. Myślałem o zaimplementowaniu pewnego rodzaju codziennych zapisów, które wszyscy wypełniają (poprzez listę mailingową lub udostępniony dokument google), ale wydaje się to dość nieporęczne i ręczne. Monitorowanie aktywności GitHub wykonuje dobrą robotę, ale może być nieco przytłaczające z powodu liczby e-maili wysyłanych codziennie. Myślałem o zbudowaniu dla tego systemu trawienia, ale nie mam wolnego czasu. Jakie strategie wdrożyłeś, aby być na bieżąco z tym, co Twój zespół robi na co dzień, aby móc mierzyć pracę nad zadaniami „w toku”?


title: Co oznacza aplikacja HTML5?

text: Ponieważ HTML5 jest nadal tylko językiem znaczników, co należy rozumieć, gdy ludzie mówią „aplikacja HTML5”? Proszę wytłumacz.


title: Jak uniknąć powielania między moim narzędziem do śledzenia problemów a dokumentami specyfikacji projektu?

text: Kiedyś pracowałem w profesjonalnej firmie konsultingowej i pracowaliśmy na wielu różnych warunkach kontraktowych. Kiedy mogliśmy uzyskać projekt czasu i materiałów, uruchomiliśmy go za pomocą SCRUM i śledziliśmy zaległości w naszym systemie śledzenia problemów. Jednak przez większość czasu musieliśmy dostarczać w ramach umowy o stałej cenie. Wymagało to dokumentu specyfikacji jako załącznika do umowy. Dlatego zawsze kończyliśmy na importowaniu elementów roboczych (lub, co gorsza, ręcznym wprowadzaniu) ze specyfikacji. Zlecenia zmian zajęły dużo czasu, aby upewnić się, że wszystko jest zsynchronizowane, zwłaszcza pod koniec projektu. Czy istnieje metodologia lub narzędzie programowe **które utrzymuje ten proces w stanie suchym**? Przeszukałem trochę i najwyraźniej nie używam właściwych terminów. Większość mojej profesjonalnej sieci nie zajmuje się stałą ceną. Byłbym otwarty na: 1. Przełączanie mojego narzędzia do śledzenia błędów lub kupowanie wtyczek (obecnie przy użyciu FogBugz). 2. Podążanie za inną metodologią rozwoju 3. Napisanie oprogramowania do zarządzania specyfikacjami i aktualizacją narzędzia do śledzenia błędów i specyfikacji (ale brzmi to jak dużo pracy z wątpliwą korzyścią) Na koniec, czy naprawdę warto to rozwiązać? W niektórych projektach kosztowało nas to sporo, ale w innych nie miało to na nas wpływu.


title: Czy mogę udostępniać dane między dwoma użytkownikami w aplikacji ASP.NET?

text: Mam problem z funkcją `Roles.IsUserInRole`. Sprawdzenie, czy zalogowany użytkownik jest w określonej roli, zajmuje cholernie dużo czasu (wpisz 3-9 sekund). Szukałem rozwiązania i doszedłem do tego, ale nie jestem pewien, czy w pełni to zrozumiałem. To, co otrzymałem z powyższego, tworzona jest nowa klasa pochodna. Wewnątrz tej klasy znajduje się lista, która pobiera jednocześnie wszystkich użytkowników. Następnym razem, gdy sprawdzisz `IsUserInRole`, nie użyjesz rzeczywistej metody IsUserInRole, ale raczej użyjesz tej, którą zastąpiłeś w swojej klasie. Czy to poprawny opis? Czy jestem na dobrej drodze? **Moje pytanie brzmi, czy dane mogą być udostępniane między dwoma różnymi użytkownikami w aplikacji ASP.NET?** Jeśli tak, to czy udostępnione dane będą istnieć tylko wtedy, gdy jest zalogowany co najmniej jeden użytkownik. Jeśli wszyscy użytkownicy się wylogują, te udostępnione dane jest zniszczony? Chodzi mi o to, że te dane będą tworzone tylko raz przy każdym logowaniu użytkownika. Dla wszystkich kolejnych użytkowników mogą korzystać z tych danych i sprawdzać swoje role na liście? Potrzebuję szczegółowej odpowiedzi. Moja aplikacja ma użytkowników i różne role. Używamy ról ASP.NET.


title: Czym jest historia i pojęcie adnotacji w kodzie?

text: C# i Java mają atrybut kodu i adnotację kodu. Nie znam się na innych językach, ale wiem, że funkcja adnotacji w kodzie służy do rozszerzania samego języka. Wiedziałem, co to jest, ale chcę wiedzieć, jak się rozwijało z biegiem czasu. Chcę poznać jego historię. Jak to wymagało i jak to zostało wdrożone. Czy jest to możliwe do zaimplementowania tego rodzaju koncepcji w LISP, Smalltalk lub C++? A czy istnieje ogólny termin, który można nazwać pojęciem adnotacji?


title: Jak ważny jest rozmiar indeksu podczas wyszukiwania?

text: Moja firma niedawno zaczęła używać Apache Solr do przeszukiwania swoich danych. Gdy nauczymy się go używać, przeszliśmy ścieżką indeksowania wielu pól, aby uzyskać potrzebne wyniki. Większość z nich jest albo N-gramowana, albo Edge-N-Grammed (N-gramowana, ale tylko od krawędzi; na początek - z wyszukiwaniem). Gramowanie z natury zajmuje dużo miejsca, a wyszukiwanie zajmuje więcej czasu. Przestrzeń jest tania, ale czas nie. Czas indeksowania nie jest zbyt ważny, ponieważ import delta (pobieraj tylko zmiany od ostatniego indeksu) jest niezwykle szybki i płacisz karę tylko za pierwszy import. Nie byliśmy w stanie określić, jaki wpływ ma rozmiar indeksu na czasy zapytań. Oczywiście wyszukiwanie większego indeksu trwa dłużej, ale czas dodany przez n-gramowanie pola jest trudny do przewidzenia. Jak ustalasz, czy pole jest warte gramowania? Czy potrafisz przewidzieć, ile czasu zajmie zapytanie, gdy gramujesz pole?


title: Jak możemy uniknąć tworzenia duplikatów lub sprzecznych funkcji podczas pracy w zwinnym zespole?

text: Pracuję w zespole, w którym każdy członek pracuje nad historyjką użytkownika. Jak możemy uniknąć tworzenia duplikatów lub sprzecznych funkcji? Na przykład, jeśli moja historyjka użytkownika wymaga stworzenia klasy A, a członek mojego zespołu potrzebuje tej samej funkcjonalności i tworzy podobną klasę (może z nieco inną nazwą), jak powinniśmy zaplanować naszą pracę, aby oboje poruszali się płynnie?


title: Najlepsze praktyki podczas tworzenia/modelowania baz danych?

text: Na Uniwersytecie nauczyłem się kilku kroków modelowania bazy danych: 1. Modeluj problem za pomocą _Extended Entity-Relationship Model_. 2. Wyodrębnij zależności funkcjonalne 3. Zastosuj kilka algorytmów, aby znormalizować bazę danych ( _3NF_ lub _Boyce-Codd_ ) 4. Utwórz bazę danych, którą studiuję **Informatyka** i odkąd ukończyłem ten kurs, zastanawiam się, czy zawsze musisz wykonać te kroki podczas tworzenia ~~złożonej~~ bazy danych dla określonego problemu. Na przykład, czy programiści **PHP** / **.NET** / .. zawsze to robią? czy są jakieś narzędzia, które upraszczają ten proces, być może używając innego sposobu przedstawienia problemu zamiast _EERM_?


title: Czy ludzie, którzy otrzymują wynagrodzenie za pisanie kodu, ale uzyskują niskie wyniki w „matrycy kompetencji programisty”, mają etyczny obowiązek znalezienia innego rodzaju pracy?

text: Ludzie radzą mi „znaleźć pracę, robiąc coś, w czym jesteś dobry”, ale prawda jest taka, że nie wierzę, że jestem dobry w czymkolwiek innym niż pisanie kodu. Nie sądzę jednak, że potrafię zaprojektować lub skonstruować program. Nie zrozum mnie źle, nie jestem typem programisty, który nie potrafi napisać programu do buzzów fizz; Bardziej przypominam programistę, który nie może wiele zrobić poza wykonaniem swojej pracy. Nie chodzi o to, że mam postawę „zrób minimum”; po prostu boleśnie zdaję sobie sprawę z moich ograniczeń jako programisty. Na przykład zaimplementowanie algorytmu szybkiego sortowania jest czymś, co mógłbym zrobić tylko opierając się na zapamiętywaniu pamięci (to znaczy, jeśli kiedykolwiek znajdę motywację, aby spędzić sporą część mojego dnia, próbując zapisać cały algorytm w pamięci, a nie po prostu iść jak "umm, rozumiem, to ma sens, widzę logikę..."). Jeśli chodzi o konstruowanie i projektowanie aplikacji, czuję się równie bezradny. Ponieważ na początku nie widzę właściwej odpowiedzi, po prostu osądzam, którego dziewięć razy na dziesięć później żałuję. Wciąż udaje mi się uzyskać awanse i pochwały od współpracowników, więc inni niekoniecznie podzielają moje zdanie. Jednak obiektywnie rzecz biorąc, po prostu nie mam ani zdolności uczenia się, ani czystej mocy mózgu, aby realistycznie aspirować do bycia kimś więcej niż „nieco ponadprzeciętnym” programistą. Zastanawiam się, czy rzeczywiście mam etyczny obowiązek zrobić miejsce dla bardziej utalentowanych ludzi i znaleźć sobie inną pracę, nawet jeśli jestem całkiem pewien, że nie znalazłbym innej roli, do której mam lepsze kwalifikacje. Moje pytanie brzmi więc: „Czy przeciętni programiści mają miejsce w zespole?”


title: Jak zaktualizować wiersz w bazie danych bez identyfikatora?

text: Mam tabelę o następującej strukturze : Col1 | Kol2 | Kol3 A | B | C A | C | B E | D | C Klucz podstawowy to (Col1,Col2,Col3). Pobieram dane w innym projekcie i wyświetlam je w widoku z siatką. Gdy użytkownik edytuje wiersz w siatce, na przykład: A,B,C -> A,B,E, otrzymuję (A,B,E) i próbuję zaktualizować bazę danych. Ale nie wiem, który wiersz należy zaktualizować, jeśli nie mam oryginału (A,B,C). Jaki jest właściwy sposób rozwiązania tego problemu? Czy powinienem utworzyć tymczasowy identyfikator w moim drugim projekcie? Nie sądzę, aby tworzenie konkretnego identyfikatora w bazie danych było dobrym pomysłem.


title: Dlaczego skróty takie jak x += y są uważane za dobrą praktykę?

text: Nie mam pojęcia, jak się to właściwie nazywa, ale widzę je cały czas. Implementacja Pythona to coś w rodzaju: `x += 5` jako skrócona notacja dla `x = x + 5`. Ale dlaczego uważa się to za dobrą praktykę? Natknąłem się na to w prawie każdej książce lub samouczku programowania, który czytałem dla Pythona, C, R i tak dalej. Rozumiem, że jest to wygodne, oszczędzając 3 naciśnięcia klawiszy, w tym spacje. Ale zawsze wydają mi się wpadać w pułapkę, kiedy czytam kod, a przynajmniej moim zdaniem sprawiają, że jest on _mniej_ czytelny, a nie bardziej. Czy brakuje mi jasnego i oczywistego powodu, dla którego są one używane wszędzie?


title: Jak uniknąć rozpraszania się podczas programowania i być na bieżąco?

text: Ludzie zawsze potrzebują koncentracji podczas pracy, ale czuję, że programowanie wymaga jeszcze wyższego poziomu. Ogólnie rzecz biorąc, moim największym problemem jest rozpraszanie się przez kanały z artykułami, ale przywiązuję również dużą wagę do bycia na bieżąco. 1. Jakie są zalecane nawyki lub wskazówki, aby uniknąć rozpraszania się podczas długich sesji programowania? 2. Jak być na bieżąco z technologiami bez inwestowania dużej ilości czasu na czytanie i przeglądanie? Z góry dziękuję.


title: Jak pozostajesz skoncentrowany w pracy?

text: Czasami rzeczy, które muszę zrobić w swojej pracy, są interesujące i wciągające. Czasami nie są. Czasami tak naprawdę nie są. Czy masz jakieś konkretne strategie lub sztuczki, aby radzić sobie z tymi nudnymi problemami, kiedy twój mózg woli robić coś innego niż to, co powinieneś robić, zwłaszcza gdy Internet i jego nieograniczone możliwości interesującego Slacka kuszą?


title: Wzorce projektowe i wiele języków programowania

text: Mam tu na myśli wzorce projektowe zawarte w książce GOF. Po pierwsze, jak to widzę, jest kilka osobliwości projektowania wzorców i znajomości wielu języków, na przykład w Javie naprawdę potrzebujesz singletona, ale w Pythonie możesz się bez niego obejść piszesz moduł, widziałem gdzieś wiki próbując pisać wszystkie wzorce GOF dla JavaScript i wszystkie wpisy były puste, myślę, że wykonanie tej adaptacji może być zniechęcającym zadaniem. Jeśli jest ktoś, kto używa wzorców projektowych i programuje wiele języków wspierających paradygmat OOP i może dać mi wskazówkę, jak mam podejść do wzorców projektowych. Podejście, które może mi pomóc we wszystkich używanych przeze mnie językach (Java, JavaScript, Python, Ruby): Czy mogę napisać dobrą aplikację bez dokładnej znajomości wzorców projektowych GOF, czy mogę potrzebować tylko niektórych z nich, które mogą być kluczowe, a jeśli tak, to który , czy istnieją alternatywy dla GOF dla określonych języków i czy programista lub zespół powinien stworzyć własny zestaw wzorców projektowych?


title: Jaki jest cel konsoli w edytorze tekstu Sublime?

text: Chcę wiedzieć, jaki cel rozwiązuje konsola w wysublimowanym tekście 2. Jest to wywoływane przez naciśnięcie Ctrl+Shift+` Czy jest to rodzaj debuggera, czy po prostu pomaga instalować pakiety.


title: Zrozumienie liczb binarnych w kategoriach obiektów świata rzeczywistego

text: Kiedy reprezentuję liczbę w systemie dziesiętnym, mam intuicyjną wiedzę na temat jej znaczenia. Weźmy na przykład liczbę '10': rozumiem, że to oznacza 10 jabłek lub 10 osób... tzn. umiem liczyć w prawdziwym świecie. Ale jak tylko liczba zostanie przekonwertowana na jakikolwiek inny system, to zrozumienie przestaje obowiązywać. Na przykład 10 po przekonwertowaniu na binarne będzie 1010… teraz co to oznacza? Czy istnieje sposób na zrozumienie tej liczby 1010 pod kątem liczenia obiektów w świecie rzeczywistym?


title: Użytkownicy wtórni Joomla

text: ## Tło Mam aplikację opartą na joomla. Moi klienci rejestrują się i rejestrują jako użytkownicy na stronie. Moi klienci (klienci pierwotni) mają wtedy własną przestrzeń w witrynie, którą mogą następnie skonfigurować dla własnych klientów (klient drugorzędny). ## Pytanie/Problem Problem, jaki mam, polega na tym, że muszę oznaczyć każdego klienta drugorzędnego jako klienta głównego. Pomyślałem o stworzeniu nowego komponentu i stworzeniu oddzielnej tabeli, która obejmuje wszystkich drugorzędnych klientów. Problem polega na tym, że tracę wtedy całe uwierzytelnianie, obsługę sesji i logowanie/wylogowanie, które oferuje główny komponent joomla _users. Następnie pomyślałem o tym, aby po prostu mieć wszystkich użytkowników w tabeli core _users i dodać klienta głównego powiązanego z każdym klientem drugorzędnym do pola we wtyczce profilu. To działałoby w większości przypadków, ale oznacza to, że klienci główni nie mogą utworzyć klienta pomocniczego z nazwą użytkownika, która już istnieje w tabeli _users. Nie sądziłem, że to będzie problem, ale kilku moich głównych klientów (obecnie tylko użytkownicy testowi) zostało zdezorientowanych przez witrynę, która powiedziała im, że nazwa użytkownika jest niedostępna, ponieważ widzą tylko nazwy swoich własnych klientów drugorzędnych. Jakieś pomysły na zmiany architektoniczne, które mógłbym wprowadzić, aby rozwiązać ten problem?


title: Architektury trwałości (i innych systemów wewnętrznych). Interfejsy, kompozycja, czyste dziedziczenie czy centralizacja?

text: Załóżmy, że musisz zaimplementować trwałość, myślę, że generalnie jesteś ograniczony do czterech opcji (popraw mnie, jeśli się mylę, proszę) Każda klasa trwałości: 1. Powinna zaimplementować interfejs (IPersistent) 2. Zawiera 'persistent- obiekt „me”, który jest wyspecjalizowanym obiektem (lub klasą), który jest przeznaczony tylko do użytku z klasą, która go zawiera. 3. Dziedzicz z Persistent (klasa bazowa) Lub możesz stworzyć gigantyczną klasę (lub pakiet) o nazwie Database i stworzyć tam swoją logikę trwałości. Jakie są zalety i problemy, które mogą wynikać z każdego z nich? W małej (5kloc) i algorytmicznie (lub organizacyjnie) prostej aplikacji jaka jest prawdopodobnie najlepsza opcja?


title: Dlaczego Java definiuje jednorodne metody w klasach Matcher i Pattern?

text: Zastanawiam się, dlaczego java definiuje jednorodne metody w dwóch odrębnych klasach: java.util.regex.Pattern i java.util.regex.Matcher. Na przykład metoda `split` zdefiniowana w klasie `Pattern` i metoda `replaceAll` zdefiniowana w klasie `Matcher`. Myślę, że te dwie metody są jednorodne, dlaczego nie są zdefiniowane w tej samej klasie? Czy źle to zrozumiałem? Przez "homogeniczne" mam na myśli: metody `split` i `replaceAll` są narzędziami dla String, dlaczego nie są zdefiniowane w klasie?


title: Porady architektoniczne dotyczące konwersji aplikacji biz ze starej szkoły do nowej?

text: Mam aplikację biznesową WinForms, która ewoluowała w ciągu ostatnich kilku lat. To formularze nad danymi z wieloma niestandardowymi doświadczeniami interfejsu użytkownika dostosowanymi do firmy, więc nie sądzę, że jest to kandydat do przeniesienia na coś takiego jak SharePoint lub przepisania w LightSwitch (przynajmniej nie bez znacznych inwestycji). Kiedy zacząłem go w 2009 roku, byłem nowy w tego typu programowaniu (pochodząc z programowania na niższym poziomie, a moja wiedza na temat RDBMS była tylko nieco większa niż ta, którą zdobyłem w szkole). Tak więc, kiedy zostałem skonfrontowany z modelem biznesowym, który operuje na ścisłym miesięcznym cyklu rozliczeniowym, podjąłem niefortunną decyzję o stworzeniu osobnej bazy danych dla każdego okresu rozliczeniowego. Poza tym, kiedy zaczynałem, znałem DataSets, potem uczyłem się Linq2Sql, a potem EntityFramework. Ekrany są ich mieszanką. Teraz, po kilku latach samodzielnego rozwijania tego, mam w końcu mały zespół. Docelowo chcę mieć interfejs sieciowy (dla zdalnego dostępu do bardziej prostych ekranów z siatkami danych) _i_ grubego klienta (dla wysoce spersonalizowanych interfejsów). **Moje pytanie:** czy możesz mi udzielić kilku ogólnych porad dotyczących architektury, które pomogą mi sformułować plan bitwy, aby przejść do jednej bazy danych i jednocześnie położyć podwaliny pod moje przyszłe cele? Oto zrzut ekranu pokazujący, jak starszy ekran używa DataSets, a nowszy ekran używa EF (myślę, że może to uczynić bardziej realnym dla kogoś czytającego pytanie - jestem gotów dodać dowolną ilość szczegółów, jeśli ktoś jest chętny do pomocy ). ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/q2vPb.png)


title: Czy moim obowiązkiem jest kodowanie błędów w całkowicie oddzielnej witrynie i domenie podczas przekierowywania lub wykonywania pojedynczego logowania?

text: Jeśli moja aplikacja jest odpowiedzialna za przekierowanie/wykonanie pojedynczego logowania do miejsca docelowego zarządzanego przez stronę trzecią, ogólnie rzecz biorąc, gdzie powinienem postawić granicę obsługi błędów podczas tego procesu? Jeśli błąd wystąpi na końcu drugiej aplikacji, czy mój interesariusz może oczekiwać, że aplikacja, z którą pracuję, będzie współodpowiedzialna za obsługę tych scenariuszy? Uwagi: * Zamierzam ograniczyć rozwiązania do tych, które wiążą się tylko z jednym żądaniem — znam podejście „zrób xmlhttprequest i zobacz, jak się to sprawdzi, zanim zrobisz cokolwiek innego”. * Mówię o aplikacji na poziomie korporacyjnym z dość przyzwoitym ruchem klientów.


title: Jak ustrukturyzować kod i kompilacje w celu ciągłego dostarczania wielu aplikacji w małym zespole?

text: **Tło:** 3–5 programistów obsługujących (i tworzących nowe) aplikacje wewnętrzne dla firmy niebędącej oprogramowaniem. Używamy TFS, chociaż nie sądzę, żeby miało to duże znaczenie dla mojego pytania. Chcę mieć możliwość opracowania potoku wdrażania i zastosowania technik ciągłej integracji/wdrażania. Oto jak teraz wygląda nasze drzewo źródłowe. Korzystamy z jednego projektu zespołowego TFS. $/MAIN/src/ $/MAIN/src/ApplicationA/VSSOlution.sln $/MAIN/src/ApplicationA/ApplicationAProject1.csproj $/MAIN/src/ApplicationA/ApplicationAProject2.csproj $/MAIN/src/ApplicationB/... $/MAIN/src/ApplicationC $/MAIN/src/SharedInfrastructureA $/MAIN/src/SharedInfrastructureB **Mój cel (dosyć typowy potok promocyjny)** w stanie zbudować tę aplikację i automatycznie wdrożyć tę zmianę na serwerze DEV. * Być może będę musiał również zbudować zależności na komponentach infrastruktury współużytkowanej. * Często mam też jakieś skrypty lub zmiany w bazie danych. 2. Jeśli testy programistyczne zakończą się pomyślnie, chcę ręcznie uruchamiać, ale zautomatyzowane wdrożenie tej kompilacji na serwerze STAGING, gdzie użytkownicy końcowi będą sprawdzać nowe funkcje. 3. Po zatwierdzeniu przez użytkowników końcowych chcę ręcznie uruchamiać automatyczne wdrażanie w środowisku produkcyjnym **Pytanie:** Jak najlepiej zastosować techniki ciągłego wdrażania w środowisku wielu aplikacji? Wiele porad, które widzę, dotyczy tylko jednej aplikacji, jak najlepiej zastosować je do wielu aplikacji? * Czy w kroku 1 mam po prostu skonfigurować oddzielny Team Build dla każdej aplikacji? * Jakie jest najlepsze podejście do wykonania kroków 2 i 3 promowania najnowszej wersji w nowych środowiskach? * Widzę, że działa to dobrze z aplikacjami internetowymi, ale co ze zmianami w bazie danych


title: Pisać czy nie pisać: Frameworki

text: Dzisiaj z przyjaciółmi zaczęliśmy dyskutować o frameworkach. Niektórzy z nas mocno wierzą, że w 99,9% przypadków napisanie nowego frameworka to zły pomysł. Uważamy, że prawdopodobnie niektóre z milionów frameworków powinny pasować do naszego problemu, a jeśli nie, wystarczy trochę hacka, API lub konfiguracji. Jeśli nie, uważamy, że najlepszym rozwiązaniem będzie współtworzenie jakiegoś frameworka, sugerowanie funkcji lub czegoś podobnego. 0,1% to sytuacja, w której żaden z frameworków nie pasuje do naszego przypadku. Ale niektórzy z nas twierdzą, że lepiej mieć „wewnętrzną strukturę korporacyjną” (na przykład), ponieważ szybciej naprawia się problemy, tworzy 100% dopasowanie do aplikacji, ze względu na czynnik „uczenia się” (gdy poprawiasz Twoje umiejętności budowania frameworka) itp. Myślę, że wychodzenie na zewnątrz frameworków kodowania, takich jak nie ma jutra, nie jest właściwą drogą. Widziałem wiele małych zespołów budujących swoje własne frameworki tylko po to, by rozpowszechniać słowo: „zbudowaliśmy nasz własny framework, rządzimy, bracie”. Ogólnie rzecz biorąc, framework jest gówniany, bez żadnej dokumentacji i działa tylko dla własnych aplikacji. Opinie to opinie, devowie to devowie, bez zamiaru wszczynania jakiejkolwiek płomiennej wojny, pytam: Co o tym myślisz? Jakie parametry bierzesz pod uwagę podczas budowania ram? Co myślisz o tym wszystkim?


title: HTML5/Javascript + usługi sieciowe

text: Jeśli programowanie aplikacji internetowych przy użyciu **ASP.NET MVC** lub **Ruby on Rails** powoduje, że aplikacja korzysta z **MVC design pattern** , to jeśli tworzę aplikację używając tylko **HTML5/Javascript + backend webservices ** (jak reszta WCF), to za jakim wzorcem projektowym będzie podążać moja aplikacja?


title: Jaki poziom szczegółowości użyć w opisach elementów interfejsu?

text: Wydobywam interfejsy z niektórych klas w .NET i nie jestem do końca pewien, jakiego poziomu szczegółowości opisu użyć dla niektórych elementów interfejsu (właściwości, metody). Przykład: interface ISomeInterface { /// <summary> /// Sprawdza, czy obiekt jest wypisany. /// </summary> /// <returns> /// Zwraca true, jeśli obiekt jest wypisany lub jeśli blokowanie obiektu nie jest włączone, /// w przeciwnym razie zwraca false. /// </returns> bool IsObjectCheckedOut(); } class SomeImplementation : ISomeInterface { public bool IsObjectCheckedOut() { // Implementacja metody, która zwraca true w przypadku wyewidencjonowania obiektu, // lub gdy blokowanie obiektu nie jest włączone } } Omawiana część to `<returns >...</returns>` w opisie `IsObjectCheckedOut` w interfejsie. Czy można umieszczać takie szczegóły dotyczące zwracanej wartości w samym interfejsie, ponieważ kod, który będzie działał z interfejsem, powinien dokładnie wiedzieć, co ta metoda zrobi? Wszystkie obecne implementacje metody właśnie to zrobią. Ale czy można w ten sposób ograniczyć możliwe inne/przyszłe implementacje według opisu? A może nie powinno to być uwzględnione w opisie interfejsu, ponieważ nie ma sposobu, aby faktycznie zapewnić, że inne/przyszłe implementacje zrobią dokładnie to? Czy w takich okolicznościach lepiej mówić o interfejsie jak najogólniej? Obecnie skłaniam się ku tej drugiej opcji.


title: Czy istnieje wzorzec projektowy dla przykutych obserwatorów?

text: Kilka razy znalazłem się w sytuacji, w której chcę dodać funkcjonalność do istniejącej relacji `Observer`-`Observable`. Na przykład, powiedzmy, że mam klasę `Observable` o nazwie `PriceFeed`, której instancje są tworzone przez różne `PriceSources`. „Obserwatorzy” w tej sprawie są powiadamiani za każdym razem, gdy bazowy „PriceSource” aktualizuje „PriceFeed” o nową cenę. Teraz chcę dodać funkcję, która pozwala na ustawienie (tymczasowego) nadpisania w „PriceFeed”. Parametr „PriceSource” powinien nadal aktualizować ceny w „PriceFeed”, ale tak długo, jak ustawione jest zastąpienie, za każdym razem, gdy klient pyta „PriceFeed” o jego bieżącą wartość, powinien otrzymać zastąpienie. Sposób, w jaki to zrobiłem, polegał na wprowadzeniu nowego „OverrideablePriceFeed”, który sam jest zarówno „Observer”, jak i „Observable”, i który ozdabia rzeczywisty „PriceFeed”. Jego implementacja `.getPrice()` pochodzi bezpośrednio z Łańcucha Odpowiedzialności, ale co z obsługą zdarzeń obserwowalnych? Gdy zastąpienie jest ustawione lub wyczyszczone, powinno wysłać własne zdarzenie do „Obserwatorów”, a także przekazywać zdarzenia z bazowego „PriceFeed”. Myślę o tym jako o obserwatorze w łańcuchu i byłem ciekawy, czy istnieje bardziej dokładny opis podobnego wzorca.


title: Czy brak „parzystości bitowej” między serwerem WWW a serwerem DB może mieć wpływ na wydajność?

text: Miałem dziś spotkanie z dostawcą oprogramowania na temat zalecanej infrastruktury do wdrażania określonej aplikacji. Aplikacja potrzebuje dwóch serwerów: serwera aplikacji dla stron WWW serwera (.NET, Windows) oraz bazy danych (SQL Server). Sprzedawca twierdził, że te dwa serwery muszą mieć „parzystość bitową”. Rozumieli przez to, że jeśli serwer aplikacji był 32-bitowy, SQL Server powinien być 32-bitowy lub jeśli aplikacja jest 64-bitowa, SQL Server jest 64-bitowy. W przeciwnym razie wydajność będzie miała negatywny wpływ. Wydaje mi się to niedorzeczne. Serwery są niezależne i komunikują się tylko przez sieć. Protokoły sieciowe nie mają nic wspólnego z „bitowością” procesora na żadnym serwerze. Czy jestem w błędzie? Czy istnieje powód, dla którego niezgodność faktycznie może negatywnie wpłynąć na wydajność? UWAGA: Wiem, że niektóre aplikacje mogą działać szybciej lub wolniej w wersji 32-bitowej vs. 64-bitowej. Ale sprzedawca twierdził, że _niezgodność_ między serwerem WWW a serwerem DB powoduje problem. To jest stwierdzenie, które kwestionuję.


title: Strategia znajdowania wąskiego gardła w sieci

text: Nasze przedsiębiorstwo ma pewien problem, gdy liczba napływających zapytań przekracza określoną wartość. Aby uprościć sprawę, mamy N witryn, które korzystają między innymi z lokalnego serwisu internetowego. Ta usługa jest obsługiwana przez usługi IIS i jest aplikacją .NET 4.0 (C#) wykonywaną w farmie. Jest zorientowany na REST, zbudowany wokół OpenRasta. Jak już wspomniano, testując ją za pomocą JMeter, stwierdziliśmy, że poza pewną ilością żądań spada wydajność usługi. W każdym razie ta usługa jest, między innymi, klientem innych 3 różnych usług sieciowych, a także klientem serwera DB, więc nie jest jasne, co _naprawdę_ jest przyczyną tego nagłego rozpadu. Z kolei te 3 inne usługi sieciowe są również zainstalowane w naszej farmie, a także klienci innych serwerów DB (i prawdopodobnie usług, które są poza kontrolą mojego zespołu). Jaką strategię proponujesz, aby spróbować zlokalizować wąskie gardła? Czy masz jakieś ogólne sugestie?


title: Jak mogę zaimplementować Paxos, aby opracować projekt konsensusu w systemach rozproszonych?

text: Muszę zaimplementować algorytm Paxos, aby poeksperymentować z konsensusem w asynchronicznym systemie rozproszonym. Poniżej znajduje się plik PDF związany z Paxos: http://www.cs.utexas.edu/users/lorenzo/corsi/cs380d/past/03F/notes/paxos- simple.pdf Nie rozumiem, gdzie mogę rozpocząć implementację? Jestem programistą Java, ale mój nauczyciel zasugerował mi użycie Parsec (http://pcl.cs.ucla.edu/projects/parsec/) , który wymaga ode mnie kodowania w C. Ale innym problemem jest to, że Parsec nie obsługuje GUI wdrożenie oparte. Chciałbym zobaczyć moją implementację z GUI. Czy istnieje język symulacji oparty na Java do symulacji zdarzeń dyskretnych, gdzie mogę wdrożyć algorytm Paxos do konsensusu? Jeśli nie, to czy jest jakiś inny język symulacji oparty na GUI w C, aby wdrożyć Paxos?


title: Argumenty za dostosowaniem się do PSR-2

text: Staram się przekonać wiodącego programistę projektu open-source, w którym współtworzę, do zgodności ze standardami PSR (w szczególności PSR-2) stworzonymi przez PHP Framework Interop Group. Chętnie przyjmuje PSR-0 i PSR-1, ale jest przeciwny PSR-2. Jego argumentem jest to, że PSR-2 jest zbyt niespójny: otwieranie nawiasów klamrowych dla klas i metod MUSI znajdować się w następnym wierszu, ale otwieranie nawiasów klamrowych dla struktur kontrolnych MUSI znajdować się w tym samym wierszu. Uważam, że różnica między klasami/metodami z jednej strony a strukturami kontrolnymi z drugiej nie jest niespójnością, w rzeczywistości są to różne rzeczy. Uważam też, że spójność między różnymi projektami jest o wiele ważniejsza niż traktowanie klas/metod i struktur kontrolnych tak, jakby były tożsame, i że spójność między projektami powinna przeważać nad osobistymi preferencjami… ale nie mogę go przekonać. Czy są jeszcze jakieś argumenty, którymi mogę spróbować przekonać go do używania PSR-2 zamiast oddzielnego, jeszcze innego standardu kodowania?


title: Wiele warunków w funkcji korzystającej z PSR

text: Staram się używać konwencji PSR we wszystkich moich projektach, ale dzisiaj przeglądam kod mojego współpracownika i nie zgadzam się. if ($cond == 1 AND $cond == 2) { // to-do } Dla mnie poprawne to: if (($cond == 1) AND ($cond == 2)) { // to -do } **Jakie jest poprawne użycie PSR?**


title: Czy lepiej ślepo dopasować się do wymagań projektu, czy dopasować się do ducha wymagań projektu?

text: Wiesz, o co proszą. Wiesz, czego naprawdę chcą. Jednak technicznie sposób, w jaki to napisali, jest z papierkiem lakmusowym wymagań, które nie pasują do tego, czego chcą, ponieważ nie rozumieją, o co proszą. Czy częścią naszej pracy powinno być dopasowanie się do ducha wymagań, czy łączenie śmiesznych wymagań z przeczuciem, że wymagania zmienią się, gdy zobaczą ostateczny wynik? Uważam, że bardziej etyczne jest określenie, czego naprawdę chce użytkownik i znalezienie rozwiązania z wymaganiami jako wytycznymi, ale często stwierdzam, że inni zbytnio tracą cierpliwość i chcą po prostu dać im to, o co technicznie proszą.


title: Jakie jest dobre podejście do dodawania kodu debugowania do aplikacji, gdy chcesz uzyskać więcej informacji o problemach?

text: Kiedy nasza aplikacja nie działa tak, jak tego oczekujemy (np. zgłasza wyjątki itp.), zwykle wstawiam dużo kodu debugowania w określonych punktach aplikacji, aby uzyskać lepszy wgląd w to, co dokładnie się dzieje, co wartości dla niektórych obiektów są, aby lepiej prześledzić, skąd ten błąd jest wyzwalany. Następnie wysyłam nowego instalatora do użytkowników, którzy mają problem, a jeśli problem wystąpi ponownie, przeglądam logi i widzę, co mówią. Ale nie chcę, aby cały ten kod debugowania znajdował się w kodzie produkcyjnym, ponieważ spowodowałoby to utworzenie naprawdę dużych plików debugowania z informacjami, które nie zawsze są istotne. Inny problem polega na tym, że zmienia się nasza baza kodu i następnym razem ten sam kod debugowania może zostać umieszczony w różnych częściach aplikacji. **Pytania** Czy istnieje sposób na scalenie tego kodu debugowania z kodem produkcyjnym tylko wtedy, gdy jest to potrzebne i czy pojawia się we właściwych punktach aplikacji? Czy można to zrobić za pomocą systemu kontroli wersji, takiego jak git, aby wystarczyło „scalanie git”? PS Aplikacja o której teraz mówię to .NET napisana w C#.


title: Co byś zrobił, gdyby Twój klient wymagał, abyś nie używał programowania obiektowego?

text: Piszę program do symulacji aktywności mrówek w siatce (PDF). Mrówka może się poruszać, podnosić i upuszczać. Problem polega na tym, że o ile działanie mrówek i pozycje każdej mrówki można łatwo śledzić za pomocą atrybutów klas (a możemy łatwo stworzyć wiele instancji takich mrówek), mój klient powiedział, że skoro ma doświadczenie w programowaniu funkcjonalnym, chciałby, aby symulacja wykonywana za pomocą programowania funkcjonalnego. Żeby było jasne, oryginalne słowa od klienta to tylko „bez klasy”, ale nie „programowanie funkcjonalne”. Zakładam więc, że nie chodzi mu o programowanie funkcjonalne i mogę to zrobić bezwzględnie. Dodatkowo nie mam doświadczenia w programowaniu funkcjonalnym. Uważam jednak, że warto skoncentrować się na tym pytaniu, które dotyczy w szczególności wymagania programowania funkcjonalnego, niż po prostu „zrób to imperatywnie”. Jak poradziłbyś sobie z tą sytuacją? Czy próbowałbyś przekonać klienta, że korzystanie z programowania obiektowego jest znacznie czystsze, spróbować zastosować się do tego, czego wymaga i dać mu kod niskiej jakości, czy zrobić coś innego?


title: Aktualizacja podmiotu za pośrednictwem usługi

text: Dzielę moje oprogramowanie na trzy główne warstwy (może _poziomy_ byłyby lepszym określeniem): * Prezentacja ('Widoki') * Logika biznesowa ('Usługi' i 'Repozytoria') * Dostęp do danych ('Jednostki' (np. ActiveRecords) ) ## Co mam teraz? W Prezentacji do wyświetlania danych używam dostępu tylko do odczytu do encji zwróconych z repozytoriów lub usług. $banks = $banksRegistryService->getBanksRepository()->getBanksByCity( $city ); $banksViewModel = new PaginatedList( $banks ); // jakiś sposób na wyświetlanie banków; // przykład, kod nieprawdziwy Uważam, że to podejście jest dość wydajne pod względem wydajności i łatwości obsługi kodu i nadal jest bezpieczne, o ile wszystkie operacje zapisu (tworzenie, aktualizacja, usuwanie) są wykonywane przez `Service`: namespace Service\BankRegistry; skorzystaj z Usługi\Usługi Abstrakcyjnej Bazy Danych; skorzystaj z Usługi\IBankRegistryService; użyj Model\Rejestr Bankowy\Bank; class Service extends AbstractDatabaseService implementuje IBankRegistryService { /** * Rejestruje nowy bank * * @param string $name Nazwa banku * @param string $bik Kod identyfikacyjny banku * @param string $correspondent_account Konto korespondencyjne banku * * @return Bank */ public function registerBank( $name, $bik, $correspondent_account ) { $bank = new Bank(); $bank -> setName( $name ) -> setBik( $bik ) -> setCorrespondentAccount( $corespondent_account ); if( null === $this->getBanksRepository()->getDefaultBank() ) $this->setDefaultBank( $bank ); $this->getEntityManager()->persist( $bank ); zwróć $bank; } /** * Ustawia domyślny bank systemu $bank * * @param Bank $bank * @return IBankRegistryService */ funkcja public setDefaultBank( Bank $bank ) { $default_bank = $this->getBanksRepository()->getDefaultBank(); if( null !== $default_bank ) $default_bank->setDefault( false ); $bank->setDefault(prawda); zwróć $to; } } ## Gdzie utknąłem? Walczę o **jak zaktualizować** niektóre pola w encji `Bank`. **Złe rozwiązanie #1** : Tworzenie serii seterów w `Service` dla każdego setera w `Bank`; - wydaje się być dość zbędny, zwiększa **złożoność** interfejsu `Service` i proporcjonalnie zmniejsza jego **prostota** \- coś, czego należy unikać, jeśli zależy Ci na utrzymaniu kodu. Staram się przestrzegać zasad **KISS** i **DRY**. **Złe rozwiązanie #2** : Modyfikowanie `Banku` bezpośrednio przez jego natywne ustawiacze; - naprawdę źle. Jeśli kiedykolwiek będziesz musiał przenieść modyfikację do `Serwisu`, będzie to uciążliwe. Logika biznesowa powinna pozostać w warstwie Logiki biznesowej. **Plus** , istnieją plany rejestrowania wszystkich działań, a być może nawet w przyszłości będą wymagać uprawnień użytkownika (być może poprzez dekoratory), więc **wszystkie modyfikacje powinny być dokonywane tylko za pośrednictwem `Service`**. **Możliwe dobre rozwiązanie** : Tworzenie metody `updateBank( Bank $bank, $array_of_fields_to_update)`; - sprawia, że interfejs jest tak prosty, jak to tylko możliwe, ale jest problem: **nie należy** próbować ręcznie ustawiać flagi `isDefault` na Banku, operacja ta powinna być wykonana za pomocą metody `setDefaultBank`. Jeszcze gorzej, gdy masz **relacje**, których nie chcesz bezpośrednio modyfikować. Oczywiście możesz po prostu ograniczyć pola, które można modyfikować tą metodą, ale **jak powiedzieć użytkownikowi metody**, co może, a czego nie może modyfikować? Wyjątki?


title: Najlepsza górna granica i najlepsza dolna granica algorytmu

text: Uczę się do egzaminu końcowego i nie zadałem sobie pytania na wcześniejszym teście. Pytanie prosi nas o znalezienie minimalnej wartości w nieposortowanej tablicy liczb całkowitych. Musimy zapewnić najlepszą górną granicę i najlepszą dolną granicę, jaką możesz, dla problemu w najgorszym przypadku. Po pierwsze, w takim przykładzie górna i dolna granica są takie same (stąd możemy mówić w kategoriach Big-Theta). W najgorszym przypadku musielibyśmy przejść przez całą listę, ponieważ minimalna wartość byłaby na końcu listy. Dlatego odpowiedzią jest Big-Theta(n). Czy to poprawne i dobre wyjaśnienie?


title: Analiza usług indeksowania Google

text: Jest więcej niż kilka pytań, które nasuwają się na myśl, gdy ktoś myśli o usługach indeksowania Google. Jeff Atwood napisał o nich w The Elephant in the Room: Google Monoculture and Trouble In the House of Google. Mam dwa pytania: * Jak Google indeksuje dynamiczne witryny internetowe? Ta witryna zawiera strony dynamiczne, „PYTANIA”, „TAGI”, „UŻYTKOWNICY”, „ZNACZKI”, „BEZ ODPOWIEDZI”, „ZAPYTAJ PYTANIE”. Treść tych stron jest generowana dynamicznie, dlatego uzyskujemy dostęp do treści dynamicznych, a nie fizycznych plików na serwerze. Ale w jaki sposób Google pokazuje każde pytanie dotyczące witryny lub innych dynamicznych witryn? * Co Google indeksuje i przechowuje na swoich serwerach? Czy kopiuje całą stronę na swój serwer, czy tylko tytuł, metatagi i treść?


title: Jaki jest rzekomy wzrost wydajności dynamicznego pisania?

text: Często słyszałem twierdzenie, że języki dynamicznie typowane są bardziej produktywne niż języki typowane statycznie. Jakie są powody tego twierdzenia? Czy nie jest to po prostu oprzyrządowanie z nowoczesnymi koncepcjami, takimi jak konwencja nad konfiguracją, użycie programowania funkcjonalnego, zaawansowane modele programowania i użycie spójnych abstrakcji? Trzeba przyznać, że jest mniej bałaganu, ponieważ (na przykład w Javie) często nadmiarowe deklaracje typów nie są potrzebne, ale można również pominąć większość deklaracji typów w statycznie typowanych językach, które używają wnioskowania o typach, nie tracąc innych zalet statycznego typowania. A wszystko to jest również dostępne dla nowoczesnych języków statycznie typowanych, takich jak Scala. A więc: co można powiedzieć o produktywności dzięki dynamicznemu typowaniu, które tak naprawdę jest zaletą samego modelu typu? Wyjaśnienie: bardziej interesują mnie duże/średnie projekty niż szybkie hacki. :-)


title: Najbardziej wydajny sposób tworzenia migawek systemu Windows (bez maszyny wirtualnej)

text: Ponieważ oprogramowanie, które piszę, korzysta z instrumentów I/O, nie mogę używać maszyn wirtualnych do testowania mojego oprogramowania w różnych konfiguracjach. Dlatego szukam najlepszego sposobu na robienie migawek w różnych stanach i szybkie ich przywracanie do testów. Jakich narzędzi używasz? W tej chwili widzę: * Przywracanie systemu Windows * Clonezilla (nie zakochana w tym, czasami mi się nie udała) * Acronis TrueImage Jakie są twoje rady?


title: Czy wstawianie/usuwanie losowych znaków w ciągu znaków liczy się jako kryptografia?

text: Tworzę grę na iOS. Wszyscy programiści muszą określić, czy ich aplikacja korzysta z kryptografii, czy nie. Moja gra zapisuje pliki w folderze Dokumenty. Są to pliki .plist reprezentujące słowniki. Są zakodowane w bazie 64. Z tego co wiem, kodowanie to nie szyfrowanie. Więc jest nam dobrze. Jednak _wartości_ wewnątrz słownika (po zdekodowaniu) są nieco skomplikowane. Załóżmy, że Twój wynik to „250”. W słowniku wartością jest ciąg taki jak: @2@5@0@ Aby gra mogła odczytać Twój wynik, usuwa znaki `@` (a podczas zapisywania gry wstawia je z powrotem). To tylko przykład. Czy to się liczy jako kryptografia? **UWAGA** : Nie pytam o zasady Apple. Wspomniałem o tym dla kontekstu.


title: Jak promować projekt open-source?

text: Przede wszystkim przepraszam, jeśli to niewłaściwa sekcja sieci do opublikowania tego pytania. Jeśli tak, przenieś go w bardziej odpowiednie miejsce... Pytanie: Chciałbym poznać Twoje pomysły dotyczące sposobów uruchamiania i prowadzenia projektów open source. Mam projekt systemu zarządzania treścią o otwartym kodzie źródłowym i tutaj pojawiają się pytania: Jak mam się zachowywać? Czy mam najpierw wymyślić realną edycję pre-alpha z działającymi front-endami i back-endami, a następnie publicznie ogłosić projekt? Czy powinienem ogłosić to od razu od zera? Jako programista wiem, że należy używać systemu wersjonowania, takiego jak Git lub SVN, co robię, bez problemu. A zasługą testów jednostkowych jest też coś do zapamiętania, czego, szczerze mówiąc, w ogóle mnie nie interesuje... Zarządzanie projektami - w najlepszym razie jestem w tym początkujący. Techniki kodowania i doświadczenia, takie jak programowanie Agile, to coś, co chcę zbadać... Krótko mówiąc, każdy pomysł dla programisty, który jest nowy w świecie open-source, jest mile widziany.


title: Gdzie mogę wyświetlić mój projekt Opensource?

text: > **Możliwy duplikat:** > Jak mogę się dowiedzieć o nowej (open-source) bibliotece, którą > opracowałem? Mój najnowszy projekt, oparty na JVM procesor MIDI/API o nazwie Mjdj MIDI Morph, gościł na Github (tu i tutaj). Teraz muszę go trochę zainteresować, nawet jeśli jest to zainteresowanie negatywne (abym mógł to poprawić). Sprawdziłem listę open source w Google i skończyłem z takimi rzeczami jak ta strona w Wikipedii, co jasno pokazuje, że nie chcą twojego projektu, jeśli jest nowy. Gdzie powinienem wymienić mój projekt? Gdzie mam zgłosić swoje adresy URL bez słów kluczowych i omawiania tego na forach i targach?


title: Udostępniłem kod open source, z którego mogą korzystać inni programiści. Jak mam im o tym powiadomić?

text: Mam mały projekt (<1k, ale powiedzmy, że jest <5k linii). Zrobiłem to open source i umieściłem na githubie. Zrobiłem to raz wcześniej i nie dostałem ani jednego pobrania ani forka, ale to było bardzo specyficzne i ten mały projekt jest bardzo przydatny dla innych programistów. Jest to open source (powiedzmy LGPL, GPL, domena publiczna lub gdzieś pomiędzy nimi). Co mogę zrobić poza pozwoleniem na gnicie na moim komputerze/online, gdy tylko ja z niego korzystam? Zachowam to jak najbardziej ogólne i nie będę łączyć moich rzeczy.


title: Jak sprawić, by mój projekt open source był znany?

text: Mam prosty projekt, który pozwala nagrywać głos i wykonywać związane z nim polecenia. Myślę, że może to być ciekawy i użyteczny projekt. Nie wiem, jak to ogłosić. Napisałem już artykuł i opublikowałem go w hackernews, ale nie był zbyt popularny. Co mogę zrobić, aby mój projekt był znany?


title: Jak mogę się dowiedzieć o nowej (open-source) bibliotece, którą opracowałem?

text: Kończę osobisty projekt, w którym zaimplementowałem bibliotekę, z której, jak sądzę, inni mogą chcieć korzystać. Bez wchodzenia w szczegóły, biblioteka zapewnia wieloplatformowy interfejs do parsowania określonego typu pliku, w którym żaden wcześniej nie istniał (przynajmniej w tym języku). Projekt sam w sobie był zabawny i satysfakcjonujący, ale myślę, że szkoda by było, gdyby inni deweloperzy nigdy nie brali go pod uwagę z powodu ignorancji. Jak mogę odpowiednio rozpowszechniać informacje o tej bibliotece? Mój obecny plan to: * Hostowanie strony internetowej ze źródłem, dokumentacją, wykorzystaniem i/lub przykładami * Odpowiadanie na pytania SO z pytaniem "gdzie jest to narzędzie?" * Skontaktuj się z kilkoma kluczowymi członkami pokrewnej dziedziny i poinformuj ich o tym. Czy uważasz, że te kroki są rozsądne? Co jeszcze możesz zrobić sam?


title: Zwracanie uwagi na mój projekt open source

text: > **Możliwy duplikat:** > Jak promować projekt open-source? W wolnym czasie wykonałem sporo pracy nad projektem, który był głównie dla mojego własnego doświadczenia edukacyjnego i jestem bardzo zadowolony z wyników. Wykorzystałem github jako zarządzanie kontrolą źródła, więc kod jest już w pewnym sensie publiczny. Kod, o którym mowa, to biblioteka, która jest dość wyspecjalizowana w swojej aplikacji i dość dobrze skomentowana i zrozumiała. Prawdopodobnie byłby to dobry zasób dla studentów poznających używane algorytmy. To, czego naprawdę szukam, to najlepszy sposób na sprawdzenie, czy jest publiczność dla tego, co zrobiłem. To nic wielkiego, jeśli nie ma, ale jeśli są, chciałbym, aby ludzie dowiedzieli się o moim kodzie i znaleźli go, jeśli szukają czegoś podobnego. Jak najlepiej wykonać to zadanie? Mam bloga i zamierzam tam wprowadzić kod, ale publiczność jest na razie dość mała – głównie współpracownicy i znajomi. Nie jestem też pewien, czy odwiedzać wyspecjalizowane witryny i reklamować się, zwłaszcza, że tak naprawdę nie jestem częścią społeczności skupionej wokół tego typu bibliotek. Wszelkie przemyślenia i pomysły byłyby bardzo mile widziane! Dziękuję za przeczytanie. **Edytuj:** Nie jestem pewien, czy powinienem opublikować link do projektu, o którym mowa na github, czy powstrzymać się. Nie jest moją intencją, aby to pytanie wyszło jako reklama. Poza tym niesamowite jest to, że zawsze znajduję dobre linki _po_ opublikowaniu mojego pytania. http://producticoss.com/ wydaje się być dobrym wyborem.


title: Gremlin - czy muszę znać Javę/Groovy?

text: To jest fragment strony Github projektu. > _Gremlin dostarcza Groovy'emu cukier składniowy związany z przechodzeniem przez wykres. Groovy > zapewnia dynamiczną składnię języka dla Javy. Zrozum, że wszystko, co > możesz zrobić w Javie lub Groovy, może być zrobione w Gremlinie._ Dokumentacja ciągle odnosi się do Groovy & Java. Muszę się tego nauczyć, ale nie jestem członkiem rodziny Java — i prawdopodobnie nigdy nie będę. Czy nadal mogę nauczyć się Gremlina? Czy ktoś może wskazać mi jakieś dokumenty/artykuły wyjaśniające Gremlin bez zakładania znajomości Groovy'ego lub Javy?


title: Czy musisz znać CIL, aby stworzyć kompilator dla .NET?

text: Załóżmy, że chcemy stworzyć prosty język .NET lub nieco trudniejszy kompilator dla istniejącego języka .NET. Czy absolutnie **musisz** znać CIL (Common Intermediate Language), aby zaimplementować kompilator? I czy musisz ręcznie przetłumaczyć składnię swojego języka na CIL? A może istnieje inny (bardziej preferowany) sposób? Jeśli nie, jaki jest najlepszy sposób na naukę CIL, a zwłaszcza na nauczenie się tłumaczenia kodu wysokiego poziomu na CIL?