title: Jak zorganizować projekt oparty na frameworku w Git

text: Ok, więc mam coś, co wydaje się skomplikowaną sytuacją i zastanawiam się, jak najlepiej to zorganizować. Mam ograniczone doświadczenie z Git, więc może brakować systemu. Mam framework opracowany wewnętrznie. Ten framework jest używany przez moje ProjectX, ProjectY i ProjectZ. Jeśli zaktualizuję podstawowe komponenty platformy (znajdujące się w /core i /resources), chcę, aby zostały zaktualizowane dla wszystkich moich projektów. Jednak chcę mieć możliwość aktualizowania niestandardowych składników każdego projektu i śledzenia ich również w Git (cała zawartość niestandardowa znajduje się w /app). Myślę więc, że na naszym centralnym serwerze powinniśmy mieć repozytorium Git tylko dla podstawowego frameworka. Będzie on zawierał: core/* resources/* .htaccess index.php Wtedy każdy z naszych projektów będzie miał swoje własne repozytorium na serwerze zawierającym folder app/. Czy to działałoby jednak lokalnie z Git? Czy możemy ściągnąć zawartość dwóch repozytoriów do jednego folderu? Możemy mieć `/home/brandon/projects/ProjectX`. Po prostu szukam informacji, jak to zorganizować. Ponadto, w jaki sposób byśmy przeszli do środowisk live/testowych? Czy SSH do środowiska produkcyjnego i ściąganie z centralnego repozytorium byłoby dobrym rozwiązaniem?


title: jaki jest najbardziej wydajny przepływ pracy emacs dla kompilacji i interaktywnych cykli wykonywania (C++/makefile)

text: Staram się nie wysyłać wiadomości krzyżowych, ale jedyną odpowiedzią, jaką otrzymałem podczas wymiany stosu, było opublikowanie tutaj... Jaka jest preferowana praktyka dla cyklu uruchamiania kompilacji w emacs? Wcześniej używałem kompilacji alt-x (zmapowanej do F12) z poleceniem make jako poleceniem kompilacji. W Makefile miałem wpis, który uruchamiał skompilowany program. Działało to dobrze, gdy moje programy nie były interaktywne, ale bufor kompilacji nie jest interaktywny. Oczywiście mógłbym otworzyć powłokę i uruchomić plik wykonywalny, ale chciałbym maksymalnie zautomatyzować cykl kompilacji i zakładam, że musi to być standardowa praktyka i zgaduję, że moje wykonanie z -makefile metoda jest kluge... C-u F12 działa, ale zastanawiam się, czy jest to najlepsze podejście do zrobienia tego (a jeśli tak, to jak mogę powiązać F12, aby był równoważny kompilacji C-u alt-x zamiast tylko alt- x skompilować?).


title: Czy metodologia tworzenia oprogramowania Waterfall jest nadal opłacalna?

text: Z mojego doświadczenia wynika, że model Waterfall okazał się zbyt mało elastyczny i nie reaguje na zmiany wymagań, aby można go było uznać za opłacalną metodę we współczesnym świecie tworzenia oprogramowania. Wzrost i udokumentowane osiągnięcia w zakresie bardziej zwinnych, iteracyjnych metod wydają się wskazywać, że nie ma powodu, dla którego ktokolwiek miałby podążać za procesem sztywnych bloków, który zakłada niewielkie lub żadne zmiany od początku projektu do dostarczenia produktu. Czy metodologia rozwoju kaskadowego jest nadal opłacalna w dostarczaniu systemów oprogramowania pod względem czasu, kosztów i jakości?


title: jak nazywa się ten wzór?

text: Często widzę to we frameworkach. Masz klasę mistrzowską, do której rejestrują się inne klasy. Klasa główna następnie decyduje, do której z zarejestrowanych klas delegować żądanie. Przykładem przekazanym w klasie może być coś takiego. Procesor interfejsu publicznego { public boolean canHandle(Object objectToHandle); public void handle(Object objectToHandle); } public class EvenNumberProcessor extends Procesor { public boolean canHandle(Object objectToHandle) { if (!isNumeric(objectToHandle)){ return false } return isEven(objectToHandle); } public void handle(objectToHandle) { //Opcjonalnie wywołaj canHandleAgain, aby upewnić się, że wywołująca klasa wypełnia kontrakt doSomething(); } } public class OddNumberProcessor extends Processor { public boolean canHandle(Object objectToHandle) { if (!isNumeric(objectToHandle)){ return false } return isOdd(objectToHandle); } public void handle(objectToHandle) { //Opcjonalnie wywołaj canHandleAgain, aby upewnić się, że wywołująca klasa wypełnia kontrakt doSomething(); } } //Może opcjonalnie zaimplementować interfejs procesora public class processorDelegator { private Lista procesorów; public void addProcessor(procesor procesora) { processors.add(procesor); } public void process(Object objectToProcess) { //Wyszukaj odpowiedni procesor, przechowując listę tego, co może on przetworzyć //Lub zapytaj każdy z nich, aby sprawdzić, czy może przetworzyć obiekt. selectedProcessor=chooseProcessor(objectToProcess); selectedProcessor.handle(objectToProcess); } } Zauważ, że istnieje kilka odmian, które widzę na ten temat. W jednym wariancie podklasy dostarczają listę rzeczy, które mogą przetwarzać, które rozumie `ProcessorDelegator`. Inną odmianą, która jest wymieniona powyżej w fałszywym kodzie, jest to, że każda z nich jest kolejno odpytywana. Jest to podobne do łańcucha poleceń, ale nie sądzę, aby było to to samo, co łańcuch poleceń oznacza, że procesor musi przejść do innych procesorów. Inna odmiana polega na tym, że sam `ProcessorDelegator` implementuje interfejs, co oznacza, że można uzyskać drzewa `ProcessorDelegator`, które specjalizują się dalej. W powyższym przykładzie możesz mieć delegatora procesora liczbowego, który deleguje do parzystego/nieparzystego procesora i delegatora procesora ciągów, który deleguje do różnych ciągów. Moje pytanie brzmi, czy ten wzór ma nazwę?


title: Udostępnianie bazy danych podczas pracy na lokalnych kopiach?

text: Przyjaciel i ja pracujemy nad aplikacją internetową. Używamy git, więc każdy z nas ma lokalną kopię aplikacji. Ale problemem jest baza danych. Chcemy móc zobaczyć najnowsze zmiany wprowadzone przez drugą osobę. Z tego co rozumiem, mamy dwie opcje: * Hostuj bazę danych na serwerze * Dodaj plik .sql do każdego commita, który wykonujemy. W przypadku pierwszej opcji możemy narazić nasz system na pewne ryzyko (czego się boję). W przypadku drugiej opcji dodajemy niepotrzebną pracę do naszych codziennych zadań (importowanie pliku .sql, a następnie tworzenie pliku .sql). Jestem w tym nowy - więc wszelkie sugestie są mile widziane!


title: Cukier składniowy w PHP z funkcjami statycznymi

text: Dylemat, przed którym stoję, brzmi: czy powinienem używać klas statycznych dla komponentów aplikacji, aby uzyskać ładniejszy interfejs API? Przykład - "normalny" sposób: // przykładowa klasa komponentu Cache{ funkcja abstrakcyjna get($k); zestaw funkcji abstrakcyjnych ($k, $v); } klasa APCCache extends Cache{ ... } klasa application{ function __construct() $this->cache = new APCCache(); } function any(){ $this->cache->add('blabla'); print $this->cache->get('blablabla'); } } Zwróć uwagę, jak brzydkie jest `this->cache->...`. Ale robi się o wiele bardziej brzydkie, gdy próbujesz rozszerzyć aplikację za pomocą wtyczek, ponieważ wtedy musisz przekazać instancję aplikacji do jej wtyczek, a otrzymasz `$this->application->cache->...` Z funkcjami statycznymi : interface CacheAdapter{ funkcja abstrakcyjna get($k); zestaw funkcji abstrakcyjnych ($k, $v); } class Cache{ public static $ad; funkcja public setAdapter(CacheAdapter $a){ static::$ad = $ad; } public static funkcja get($k){ return static::$ad->get($k); } ... } klasa APCCache implementuje CacheAdapter{ ... } klasa application{ function __construct(){ cache::setAdapter(new APCCache); } function niezależnie() cache::add('blabla', 5); cache wydruku::get('blabla'); } } Tutaj wygląda to ładniej, ponieważ po prostu wszędzie wywołujesz `cache::get()`. Wadą jest to, że łatwo tracę możliwość rozszerzenia tej klasy. Ale dodałem metodę setAdapter, aby klasa była do pewnego stopnia rozszerzalna. Liczę na to, że nigdy nie będę musiał przepisywać, aby zastąpić wrapper pamięci podręcznej, i że nie będę musiał uruchamiać wielu instancji aplikacji jednocześnie (jest to w zasadzie witryna - i nikt nie pracuje z dwoma witrynami na tym samym czasie) Więc robię to źle?


title: Czego powinienem się nauczyć, czego przegapiłem, nie chodząc do szkoły?

text: Jestem inżynierem oprogramowania na lokalnym uniwersytecie i czuję, że jestem w stanie kompetentnie wykonywać swoją pracę, ale ostatnio interesuje mnie „uzupełnianie” braków w mojej wiedzy. Podejrzewam, że nauczyłbym się tego w szkole; na przykład nie mam dużej wiedzy na temat algorytmów sortowania (coś, co moim zdaniem jest dość powszechne na studiach). Więc ** jakiej wiedzy _prawdopodobnie_ mi brakuje, nie chodząc na studia**, którą mogłabym studiować samodzielnie? Dodatkowe punkty za wystawienie zasobów, które mogą skierować mnie na właściwe tory! Trochę tła: programowałem w **PHP** , **Java** i **Ruby** (bardziej poważnie w Javie i Ruby niż w PHP); Mam pewne doświadczenie z **C/C++** , chociaż moje obciążenie pracą tak naprawdę nie nadaje się do tych języków; Pracuję głównie (ostatnio) w sieci, używając frameworków takich jak **CakePHP** i **Rails**. Jestem zaznajomiony z **SQL** (choć prawdopodobnie nie z częścią teorii). Uwaga: Uczelnia, dla której pracuję, nie ma zajęć technicznych, więc uczęszczanie na kursy na koszt uczelni to świetny pomysł, ale nie jest to dla mnie możliwe. :)


title: Ile powinna kosztować licencja pływająca?

text: Licencjonowanie ruchome to podejście do licencjonowania oprogramowania, w którym ograniczona liczba licencji na aplikację oprogramowania jest z czasem współużytkowana przez większą liczbę użytkowników. Miło dla firm, aby obniżyć koszty. Ma też aspekt deweloperski. Widziałem wiele przykładów cen dla wielu programów. O ile zrozumiałem, nie ma standardu ustalania cen. Jako programista, celem jest również maksymalizacja zysku. Jakie kryteria powinienem wziąć pod uwagę, ustalając cenę licencji sieciowej?


title: jaki rodzaj relacji będzie istniał między członkiem a klasami sieci P2P na diagramie klas?

text: Mam klasę członkowską, która przechowuje adres IP i porty używane na tym członku. Inna klasa P2P przechowuje listę wszystkich członków aktualnie w sieci i zapewnia funkcję dołączania i opuszczania. Jaki rodzaj relacji będzie istniał między nimi na diagramie klas?


title: Jak mam kontrolować wersje mojego projektu na GitHub

text: Staram się spędzać jak najwięcej czasu na GitHubie w dzisiejszych czasach _(nawet ja jestem jedyną osobą w zespole w pracy)_, aby naprawdę poczuć, jak to będzie w przypadku aplikacji korporacyjnej w prawdziwym świecie. Mam jedno pytanie dotyczące kontrolowania **wersji**. Powiedzmy, że rozpoczęliśmy projekt. Następnie członkowie zespołu utworzyli kilka oddziałów i tam się rozwijają. Gdy jesteśmy gotowi do produkcji, połączyliśmy wszystkie gałęzie z gałęzią `master`. Na koniec uruchamiamy wersję `1.0`. Teraz dostępna jest wersja `1.0` i mamy zgłoszone pewne problemy dla tej wersji tego oprogramowania. Chcielibyśmy rozpocząć programowanie dla wersji `1.1`, aby naprawić te problemy, które wprowadziliśmy w pośpiechu projektu. Teraz pytanie brzmi: **Jak mamy kontrolować tutaj wersjonowanie?** Czy powinniśmy stworzyć nową gałąź dla `v1.0` i zachować tam wersję `1.0` oprogramowania i rozwijać się na niektórych gałęziach (czy nie ), połączyłeś je z `master`, uruchomiłeś wersję `1.1`? Czy istnieje konwencja na takie sytuacje?


title: Bump numer wersji w tworzeniu oprogramowania komercyjnego?

text: Kto jest odpowiedzialny za podbijanie numeru wersji w tworzeniu oprogramowania komercyjnego? Jak skonfigurować zasady do tego? 1) dla małego zespołu 2) dla średniego zespołu Ważne jest, aby nie zapomnieć o zmianie numeru wersji, który sam opisuje ten plik wyjściowy. Takich jak AssemblyInfo.cs / resource.rc / AndroidManifest.xml


title: Analiza amortyzowana? (Gwarancje wydajności w najgorszym przypadku)

text: Co to jest analiza amortyzowana? I w jaki sposób może mi to pomóc w osiągnięciu _gwarancji wydajności w najgorszym przypadku_ w moich programach? Czytałem, że następujące techniki mogą pomóc programiście osiągnąć _Gwarancje wydajności najgorszego przypadku_ (tj. własnymi słowami: gwarancja, że czas działania programu nie przekroczy czasu działania w najgorszym rzucie): * Algorytmy losowe (np. quicksort algorytm jest kwadratowy w najgorszym przypadku, ale losowe uporządkowanie danych wejściowych daje probabilistyczną gwarancję, że jego czas działania jest liniowy) * Sekwencje operacji (nasza analiza musi uwzględniać zarówno dane, jak i kolejność operacji wykonywanych przez klienta) * ** Amortyzowane Analiza** (innym sposobem zapewnienia gwarancji wydajności jest amortyzacja kosztu poprzez śledzenie całkowitego kosztu wszystkich operacji podzielonego przez liczbę operacji. W tym ustawieniu możemy zezwolić na niektóre kosztowne operacje przy zachowaniu średniej niski koszt operacji, innymi słowy rozkładamy koszt kilku kosztownych operacji, przypisując jego część do każdej z dużej liczby niedrogich operacji) autor wspomniał o użyciu _zmiany rozmiaru struktury danych tablicy dla Stack_ jako jednego z przykładów, jak uzyskać amortyzowaną analizę, ale nadal nie rozumiem, czym jest amortyzowana analiza i jak można ją faktycznie ** zaimplementować** (struktura danych? algorytm?) w celu uzyskania najgorszych gwarancji wydajności


title: Ile uwagi mogę oczekiwać od społeczności open source jako nowicjusz?

text: Kilka dni temu zacząłem pracować w projekcie open source. Projekt pochodził ze znanej organizacji i mają wiele projektów, ale niestety odkryłem, że nikt nie pracuje aktywnie w projekcie, który wybrałem w tej chwili (chociaż kilka osób zapisało się na listę dyskusyjną programistów dla tego projektu). Zdecydowałem się jednak tam pracować, ponieważ projekt wydaje się stosunkowo łatwy i jest dla mnie dobrym punktem wyjścia, ponieważ wcześniej nie pracowałem w dużym projekcie. Przywitał mnie lider zespołu projektu. Znalazłem dwa błędy i wysłałem łatki. Zapytałem ich również, jakiego rodzaju wkładu potrzebują ode mnie w tym projekcie. Ale minęły trzy dni i nikt nie odpowiedział. Chcę więcej pracować, ale tracę zapał, bo myślę, że nie zwracam na siebie należytej uwagi. Czy to normalny scenariusz? Czy naprawdę nie zwracam na siebie należytej uwagi? Ile pomocy i uwagi mogę oczekiwać od społeczności?


title: Poszukiwanie świadomości bytów w algorytmie przestrzeni 3D i strukturze danych

text: Próbuję zrobić jakiś ogromny system AI tylko dla zabawy i doszedłem do tego problemu. Jak mogę powiadomić jednostki AI o sobie nawzajem bez zmuszania procesora do wykonywania zbędnej i kosztownej pracy? Każda istota ma strefę świadomości przestrzennej i musi wiedzieć, co jest w środku, kiedy musi zdecydować, co zrobić. Pierwsze myśli, dla każdego bytu sprawdź, czy inne byty są w zasięgu pierwszego. Ok, więc to była pierwsza próba i tak, to jest zbędne i kosztowne. Pracujemy ze sztuczną inteligencją w czasie rzeczywistym ponad 10000 podmiotów, więc nie jest to rozwiązanie. Po drugie spróbuj obliczyć jakąś siatkę nad strefą świadomości każdej jednostki i sprawdź, czy w tych strefach znajdują się jednostki (pracujemy z jednostkami 3D ze współrzędnymi położenia zmiennoprzecinkowego x,y,z) testując każdy punkt w siatce za pomocą indeksowanych według- koordynować elementy. Cóż, nie podoba mi się to, bo też jest kosztowne, ale nie jako pierwsze. Po trzecie, utwórz kilka połączonych list nad indeksowanymi pozycjami x i y obiektów, więc gdy szukamy odstępu między pozycjami x,y i z,w (ten odstęp definiuje kwadrat nad strefą świadomości przestrzennej) nad wielopołączoną listą , nie będziemy mieć „pustek”. Powoduje to problem ze znalezieniem najbliższej wartości bliskości, jeśli jej nie ma na pozycji, w której rozpoczynamy wyszukiwanie. Nie jestem przekonany do żadnego pomysłu, więc szukam jakiegoś oświecenia. Czy macie jakieś lepsze pomysły?


title: Czym jest automatyzacja rozwoju?

text: Kiedy ktoś mówi o „Automatyzacji rozwoju”, co to właściwie jest? Jakie są frameworki do automatyzacji rozwoju? Szef poprosił mnie o opracowanie strategii wdrożenia takiego w firmie, ale nie znalazłem zbyt wielu informacji na ten temat. Google wydaje się myśleć, że mam na myśli automatyzację testów, co nie jest prawdą.


title: Kiedy należy stosować parametry „out”?

text: W Objective-C istnieje kilka metod, takich jak `initWithContentsOfFile:encoding:error:`, gdzie przekazuje się odwołanie do obiektu `NSError` dla parametru `error:`. W tym przykładzie wartość przekazanego obiektu `NSError` może się zmienić w zależności od tego, co dzieje się w czasie wykonywania, gdy metoda jest wywoływana i czy treść metody została pomyślnie wykonana w określony sposób. W pewnym sensie myślę o tym obiekcie `NSError` jako o drugiej wartości zwracanej z metody i różni się on tylko od obiektu `anObject` w instrukcji `return anObject;` tym, że po wywołaniu tej instrukcji wykonanie pozostawia metoda. Więc moje pytanie brzmi: **nie tylko w kontekście obsługi błędów w Objective-C, ale ogólnie, kiedy należy użyć parametru „out” zamiast zwracania tej wartości w instrukcji return?**


title: Filozofia stojąca za niezdefiniowanym zachowaniem

text: Specyfikacje C\C++ pomijają dużą liczbę zachowań, które kompilatory mogą zaimplementować na swój własny sposób. Jest wiele pytań, które zawsze pojawiają się tutaj na ten sam temat i mamy kilka świetnych postów na ten temat: * http://stackoverflow.com/questions/367633/what-are-all-the-common-undefined-behaviour -that-a-c-programmer-should-know-abo * http://stackoverflow.com/questions/4105120/what-is-undefined-behavior * http://stackoverflow.com/questions/4176328/undefined-behavior-and -sequence-points Moje pytanie nie dotyczy tego, czym jest niezdefiniowane zachowanie, czy jest naprawdę złe. Znam niebezpieczeństwa i większość istotnych niezdefiniowanych cytatów dotyczących zachowań ze standardu, więc proszę powstrzymaj się od publikowania odpowiedzi na temat tego, jak źle jest. To pytanie dotyczy filozofii stojącej za pominięciem tak wielu zachowań otwartych dla implementacji kompilatora. Przeczytałem doskonały wpis na blogu, w którym stwierdza się, że głównym powodem jest wydajność. Zastanawiałem się, czy wydajność jest jedynym kryterium pozwalającym na to, czy są jakieś inne czynniki, które wpływają na decyzję o pozostawieniu rzeczy otwartych na implementację kompilatora? Jeśli masz jakieś przykłady, które możesz przytoczyć na temat tego, w jaki sposób określone niezdefiniowane zachowanie zapewnia wystarczająco dużo miejsca na optymalizację kompilatora, wymień je. Jeśli znasz inne czynniki niż wydajność, potwierdź swoją odpowiedź wystarczająco szczegółowo. Jeśli nie rozumiesz pytania lub nie masz wystarczających dowodów/źródeł na poparcie swojej odpowiedzi, nie publikuj odpowiedzi o charakterze spekulacyjnym.


title: Pisanie nowego języka programowania - kiedy i jak załadować struktury danych?

text: Jestem w trakcie pisania własnego języka programowania, który do tej pory radzi sobie świetnie pod względem tego, co zamierzałem osiągnąć. Jednak teraz chciałbym załadować niektóre istniejące struktury danych i/lub obiekty. Mój problem polega na tym, że nie bardzo wiem, od czego zacząć. Czy po uruchomieniu kompilatora splatam te dodatki, aby były one częścią zakresu aplikacji? Jeśli zrobię je w jakiejś podstawowej bibliotece, moim zmartwieniem jest to, w jaki sposób rozprowadzam bibliotekę oprócz kompilatora - czy też są one częścią _z_ kompilatora? Rozumiem, że prawdopodobnie istnieje kilka prawdopodobnych sposobów podejścia do tego, ale mam problem z ustaleniem kierunku. Jeśli to pomaga, język jest na szczycie rdzenia .NET (tj. kompiluje się do kodu CLR). Każda pomoc lub sugestie są bardzo mile widziane!


title: Zastosuj WCF dla dużych projektów

text: Mamy duży projekt, który składa się z blisko 20 modułów. Chcemy używać WCF dla warstwy biznesowej. Pomyśleliśmy o trzech sposobach wdrożenia naszego projektu WCF: 1. Użyj tylko jednej umowy dotyczącej danych i jednej umowy operacyjnej. Wyślij ClassName, MethodName do operacji i utwórz klasę przez odbicie, a następnie wywołaj metodę po stronie WCF. 2. Umieść wszystkie moduły w jednej aplikacji wcf i utwórz ich kontrakty danych, kontrakty operacyjne. 3. Utwórz osobną aplikację wcf dla każdego modułu i hostuj je osobno. Korzystamy z usług internetowych, ponieważ potrzebujemy warstwy biznesowej wywołań w java i c#. Który z nich jest najlepszy? Potrzebuję twoich pomysłów.


title: Czy robienie dwóch rzeczy na jednej linii zawsze jest złą praktyką?

text: int *itPin = szpilki; for(int i = 0; i < licznik; i++) { KonfigurujGpifPinAsGpioOutput(itPins); itPins++; } Mam wrażenie, że robienie dwóch rzeczy w jednej linii to zła praktyka. Dlatego rozwijam iterator poza jedyną instrukcją, używając go. Czuję jednak, że ślepo przestrzegam zasady. * Czy ten kod jest mniej podatny na błędy, niż gdy `++` znajduje się wewnątrz wywołania funkcji? * Czemu? * Czy ta zasada ma zastosowanie do takich ultra-prostych przypadków, czy ma sens tylko w przypadku bardziej złożonych struktur programu?


Odkąd wszedłem do świata programowania, byłem bombardowany wskazówkami typu „plik powinien mieć tylko x linii”, co jest sprawiedliwe, ponieważ nowi programiści mają tendencję do umieszczania wszystkiego w jednym pliku. Ale ponieważ programowałem profesjonalnie od ponad roku, w większości przeszkadzał mi mały rozmiar plików, a nie ich duży rozmiar. Jedną z największych przeszkód, jakie mam, jest tasowanie między 10-20 różnymi plikami podczas badania, jak coś działa, gdy niektóre z tych plików zawierają tylko kilka linii. Myślę więc, że moje pytanie brzmi: skąd mam wiedzieć, że podzieliłem program na zbyt małe części?


title: Czy powinienem zaimplementować interfejs bezpośrednio, czy zlecić to superklasie?

text: Czy istnieje różnica między public class A extends AbstractB implementuje C {...} kontra... public class A extends AbstractB {...} AbstractB implementuje C {...} Rozumiem, że w obu przypadkach klasa A się skończy zgodnie z interfejsem. W drugim przypadku `AbstractB` może zapewnić implementację metod interfejsu w `C`. Czy to jedyna różnica? **Jeśli NIE chcę dostarczać implementacji dla żadnej z metod interfejsu w** `AbstractB`, **jakiego stylu powinienem użyć**? Czy używanie jednego lub drugiego ma jakiś ukryty cel „dokumentacyjny”?


title: Dlaczego Java jest uważana za bardziej przenośną niż inne języki, takie jak C++?

text: Czym różni się „napisanie konkretnego środowiska JRE dla każdej platformy” dla programistów Java od „napisania kompilatora C++ dla każdej platformy” dla C++?


title: Wykorzystanie pirackiego/złamanego oprogramowania do rozwoju

text: Zastrzeżenie: W żadnym wypadku nie akceptuję używania pirackiego oprogramowania. Czy kiedykolwiek byłeś świadkiem wykorzystywania pirackiego oprogramowania do celów programistycznych? Może firma nie miała wystarczająco dużo pieniędzy, aby kupić oprogramowanie i nie było darmowej alternatywy? Być może firma chciała wypróbować coś przed zakupem, a na ten produkt nie było licencji próbnych. Niezależnie od okoliczności, czy pracowałeś w firmie, w której używanie pirackiego/złamanego oprogramowania było akceptowane? Czy były z tym jakieś konsekwencje?


title: Licencja open source z wymogiem linku zwrotnego

text: Opracowuję bibliotekę Javascript i myślę o udostępnieniu jej na licencji open source (np. GPL, BSD, MIT) — ale to wymaga, aby strony korzystające z oprogramowania odsyłały do mojej witryny. Czy wiesz o takich licencjach? A jak sformułowali część dotyczącą atrybucji tekstu licencji? Czy myślisz, że ta licencja BSD zrobiłaby to, co myślisz, że chcę? (Przypuszczam, że nie :-)) > [...] 3\. Każda witryna, która rozpowszechnia tę pracę, musi zawierać widoczny link > `rel=follow` do _my-website.example.com_ , dostępny za pośrednictwem linków `rel=follow` > z każdej strony, na której oprogramowanie jest rozpowszechniane. > (Na przykład możesz mieć link do swojej strony głównej, a ze swojej strony głównej do sekcji O nas, która może zawierać link do sekcji Podziękowania) Zdaję sobie sprawę, że niektóre firmy nie chciałyby korzystać z biblioteki z powodu problemy prawne z interpretacją niestandardowych licencji (patrz odpowiedź: http://programmers.stackexchange.com/a/156859/54906). — Po pół roku, a może kilku latach, licencjonuję pracę na zwykłej GPL + MIT (oprócz oryginalnej licencji).


title: Jak działa szyfrowanie wiadomości e-mail?

text: Przeglądałem YouTube, oglądając filmy na temat szyfrowania wiadomości e-mail i wszyscy wydają się wyjaśniać to z innej perspektywy. Niektórzy robią to do egzaminu CompTIA, podczas gdy inni dostarczają tylko elementarz. Oto, co zrozumiałem: ![szyfrowanie wiadomości e-mail](http://i.stack.imgur.com/2Ooj8.png) **Krok1** : Tworzysz wiadomość e-mail, którą chcesz wysłać. Bez szyfrowania będzie to prosty tekst ASCII, który będzie widoczny dla każdego po drodze. **Krok 2** : Generujesz podpis cyfrowy, aby mieć pewność, że nikt nie będzie mógł ponownie przesłać Twojego e-maila i twierdzić, że to Ty. _Podpis cyfrowy_ jest generowany przy użyciu **_klucza prywatnego nadawcy_**, który zwykle jest skrótem hasła, a następnie jest łączony z oryginalną wiadomością w jeden długi ciąg skrótu. Te podpisy są _tylko jednorazowe_, a dla każdego e-maila obliczany jest nowy. **Krok 3** : Szyfrujesz treść swojego e-maila przy użyciu **_Klucza publicznego odbiorcy_**, aby jedyną osobą, która może go odczytać, jest zamierzony odbiorca przy użyciu swojego **_klucza prywatnego_** **Krok 4** : Kiedy naciśniesz wyślij wiadomość e-mail, teraz przesyłany jest bełkot do wszystkich oprócz zamierzonego odbiorcy, który będzie odszyfrowywać, używa swojego **_klucza prywatnego_** I można to zrobić na różne sposoby, np. PEM, PGP itp. Popraw mnie gdzie się mylę lub udoskonalę w razie potrzeby.


title: Co mogę zrobić z urllib?

text: Rozumiem, że może pobierać zasoby internetowe, ale nie do końca doceniam, co to oznacza. Robiłem wyzwania na pythonchallenge.com i przeszedłem obok tego, który wymaga urllib, aby pobrać stronę i przeczytać źródło, ale nie widzę jeszcze, jak to jest przydatne. A przykładom brakuje różnorodności. Co jeszcze może zrobić lub jak mogę to wykorzystać na swoją korzyść? (Oprócz budowania przeglądarki internetowej...)


title: Czy styl węzła <html> jest zgodny ze standardami?

text: Pracuję nad motywem strony internetowej. Chcę użyć powtarzającego się tła w węźle `<html>`, aby inne tło nakładało się na węzeł `<body>`. W przeciwnym razie dodałbym pierwsze tło do węzła `<body>`, a drugie tło na zagnieżdżonym `<div>` o 100% szerokości/wysokości wewnątrz niego. Wybieram wzór powtarzający się w całej przeglądarce, który będzie widoczny bez względu na to, jak zmieni się rozmiar przeglądarki. Zobacz moje przykłady. Pożądane: <html> <!-- background: url("...") powtórz; szerokość: 100%; wzrost: 100%; --> <treść> <!-- tło: url("...") powtórz-x; szerokość: 100%; wzrost: 100%; --> Nie zezwala na to specyfikacja? Nie jest to dobry pomysł ze względu na dziwactwa przeglądarki? Obejście: <html> <!-- szerokość: 100%; wzrost: 100%; --> <treść> <!-- tło: url("...") powtórz; szerokość: 100%; wzrost: 100%; --> <div> <!-- background: url("...") repeat-x; szerokość: 100%; wzrost: 100%; --> Działa w FF5 i IE7/8/9. Ale czy istnieje specyfikacja, która mówi, aby nie dodawać stylu do węzła `<html>`? Czy jest jakaś konkretna przeglądarka, na którą powinienem uważać, taka jak IE6, która spowoduje, że powróci do alternatywy, jeśli spróbuję tego? **EDIT:** Używam poprawnej deklaracji `<!DOCTYPE html...>` (XHTML 1.0 Tansitional). Szerokość/wysokość w węźle `html` jest głównie dla jasności intencji mojego wzoru tła. (Dzięki @veryfoolish) **EDYTUJ 2:** Wiem, że CSS3 obsługuje wiele środowisk na węzeł, a komentarz @merryprankster pokazuje mi, jak symulować to za pomocą CSS 2.1 (dzięki!), Ale naprawdę muszę wiedzieć, czy HTML/CSS zgodnie z specyfikacja ogranicza wszystko, co „wizualne” w węźle `<html>`, który w praktyce jest zwykle używany jako niewidoczne pole otaczające znacznik `<body>`. Czy istnieje powód, dla którego nikt nie korzysta z gwarantowanego istnienia węzła `<html>`, stosując do niego style CSS (nie tylko właściwości kaskadowe, takie jak `font-size`)?


title: Jak ułatwić przeglądy kodu w małym zespole dla oprogramowania wbudowanego?

text: **Krótkie pytanie** Czy istnieje opłacalne narzędzie/przepływ pracy, który ułatwia przeglądy kodu w małym zespole? Mówiąc dokładniej, mały zespół, który polega na przeglądach kodu po zatwierdzeniu. **Tło** Nasz zespół składa się obecnie z 3 inżynierów oprogramowania w pełnym wymiarze godzin i 1 w niepełnym wymiarze godzin, z planami zatrudnienia większej liczby w najbliższej przyszłości. Ze względu na wielkość naszego zespołu i ilość projektów, z którymi wszyscy musimy żonglować, przepływ pracy przed zatwierdzeniem, którego używają główne narzędzia (takie jak tablica recenzji i współpracownik kodu), nie jest w tej chwili dostępny dla nas. Najlepsze, co możemy w tej chwili zrobić, to przeprowadzać przeglądy po zatwierdzeniu przed głównymi wydaniami lub gdy pozwala na to czas. Prawie wszystkie nasze projekty są hostowane na RepositoryHosting.com (które _bardzo_ polecam) i zawierają mieszankę repozytoriów SVN i GIT. **Aktualne przemyślenia** Ponieważ nie mogę teraz znaleźć narzędzia odpowiadającego naszym potrzebom, zwracam się do TRAC, który jest wbudowany w stronę naszego repozytorium. W tej chwili używamy TRAC do składania zgłoszeń i śledzenia kamieni milowych, więc wydaje mi się, że jest to naturalne dopasowanie również do wyników przeglądu kodu. Kierunek, w którym teraz zmierzam, to użycie arkusza kalkulacyjnego do rejestrowania wszystkich błędów i komentarzy. Zrób trochę magii makr, aby uzyskać to w formacie, w którym mogę użyć metody importowania biletów TRAC i użyć systemu zgłoszeń TRAC do automatycznego tworzenia elementów akcji / raportów o błędach. Generowanie auto ticketów jest niemal koniecznością, dodawanie błędów i komentarzy pojedynczo z web-gui jest naprawdę bolesne. _Pytanie dodatkowe_ Jeśli ten przepływ pracy ma sens, czy istnieje dobry/standardowy szablon do wykorzystania jako dziennik przeglądu kodu?


title: Przekazywanie parametrów w tym samym obiekcie co odpowiedzi

text: Mam szereg operacji, które należy wykonać szeregowo na tym samym zestawie danych. W miarę postępu operacji późniejsze operacje wymagają informacji z poprzednich operacji. Tak więc początkowy obiekt został przekazany do śnieżki pierwszej metody podczas zbierania wyników i metadanych. Na początku przekazywałem zarówno prośbę, jak i odpowiedź, ale kilka razy wciągnęło mnie to w kąt. Więc teraz zamierzam mieć tylko jeden obiekt parametrów, który zawiera wszystkie dane początkowe, zapamiętuje wartości pośrednie i dostarcza wyniki końcowe, wszystko w jednym obiekcie, który jest przekazywany do wielu metod void. Moje pytania: Czy to jest wzór? A może to zła forma? Mój wymyślony przykład znajduje się poniżej. class Program { statyczny void Main() { var MyObj = new RequestResponseInfo(); MyObj.InitalValue = "fo"; foobar.DoStuff(MyObj); Console.WriteLine(MyObj.FinalAnswer); Konsola.KluczOdczytu(); } } public static class foobar { public static void DoStuff(RequestResponseInfo myObj) { DoSomething_A(myObj); ZróbCoś_B(mójObiekt); mojObiekt.OstatecznaOdpowiedź = mojObiekt.A + mojObiekt.B; } private static void DoSomething_A(RequestResponseInfo myObj) { myObj.A = myObj.InitalValue + "ob"; } private static void DoCoś_B(RequestResponseInfo myObj) { myObj.B = "ar"; } } public class RequestResponseInfo { public string InitalValue { get; ustawić; } ciąg publiczny A { get; ustawić; } ciąg publiczny B { get; ustawić; } ciąg publiczny FinalAnswer { get; ustawić; } }


title: Rejestrowanie interakcji systemu jako użytkownik a jako flaga

text: Kiedy prowadzisz witrynę, która ma CRM z funkcją rejestrowania, która rejestruje interakcje użytkowników (ktoś zmieniający nazwę, adres lub uprawnienia użytkownika itp.), czy lepiej jest rejestrować interakcje systemowe (zadania automatyczne itp.) jako fałszywy użytkownik skonfigurowany jako stała albo w obiekcie „users”, albo jako część ustawień aplikacji, dzięki czemu możesz wykonać `applicationscope.SystemUser` lub `UserObject.getSystemUser()`. Po rozmowie w pracy, niektórzy koledzy uważają, że nadużyciem bazy danych użytkowników jest posiadanie tam fałszywego użytkownika reprezentującego system i uważają, że lepiej jest zmienić bazę danych, aby tabele, na które ma wpływ taka zmiana, zawierały `isSystem` flaga, która zostanie ustawiona na 1, jeśli system dokona zmian.


title: Używanie wzorca poleceń do sekwencji zadań

text: Mam 'sekwencję zadań' do wykonania na pliku zip. Można to uprościć do następujących kroków: 1. Sprawdź, czy plik jest plikiem ZIP i jest ważny 2. Rozpakuj plik 3. Sprawdź, czy zawartość jest zgodna z oczekiwaniami 4. Przekształć zawartość w produkt Obecnie używam wzorca polecenia i wygląda trochę jak ten interfejs Polecenie { public function execute($data); } class ValidateFile implementuje Polecenie { public function execute($filePath) { //... } } class UnzipFile implementuje Polecenie { public function execute($filePath) { //... } } class ValidateContents implementuje Polecenie { public function execute( $unzippedFilePath) { //... } } class ProductGenerator implementuje Command { public function execute($unzippedFilePath) { //... } } Teraz każde z tych poleceń execute zwraca ciąg znaków, który jest z kolei (przez obiekt wywołujący polecenie ) przekazywane do następnego polecenia w łańcuchu (zdefiniowanym przez konfigurację). Mam tutaj dwa problemy: 1. Każde polecenie wymaga własnych zależności, tj. unzip potrzebuje dostępu do ZipArchive, klasy, która obsługuje rozpakowywanie plików zip. Jak wstrzyknąć zależności każdego polecenia? Cieszę się, że mogę to obejść, tworząc instancje wszystkich poleceń za pomocą DIC i podłączając je do „Invokera”, który akceptuje utworzone obiekty typu Command, uruchamia je po kolei, jednak nie wydaje się to właściwe. 2. (Większy problem) Jak utrwalać więcej niż ciąg znaków między poleceniami? Widziałem miejscami ludzi przekazujących obiekt „kontekstu” z jednego polecenia do drugiego, jednak wydaje się to nieco brudne, ponieważ polecenie byłoby zależne od nieopisanego interfejsu (zasadniczo otaczają tablicę asocjacyjną). To ma sens, że musi być bez typu, tak jakbyś miał utrzymywać interfejs między poleceniami, wtedy kontekst nie może zaimplementować żadnych konkretnych metod, ponieważ zniechęciłoby to do jego abstrakcji. Byłbym wdzięczny za każdą radę, jak poradzić sobie z obydwoma tymi problemami. Edycja: Innym problemem, który mam, jest to, że każde z tych poleceń jest faktycznie połączone ze stanem ścieżki pliku, która jest do niego przekazywana, są one dość specyficzne dla danej sprawy, ale wątpię, czy można to obejść.


title: Kontrola wersji projektu internetowego

text: My (2 programistów) opracowujemy aplikację cakephp działającą na zdalnym serwerze. W NetBeans oboje mamy projekt skonfigurowany jako "aplikacja PHP ze zdalnego serwera". Problem polega na tym, że za każdym razem, gdy jeden z nas modyfikuje którykolwiek z plików, są one natychmiast aktualizowane na serwerze, ale nie w IDE drugiego dewelopera. Mamy skonfigurowane git + bitbucket, ale to nadal wygląda na mylące. Widzę więc dwa możliwe sposoby na zrobienie tego i proszę dać mi znać, jeśli się mylę. Pierwsza: 1.) Cały czas rozwijamy projekt jako "aplikację PHP ze zdalnego serwera" 2.) Gdy jeden z nas skończy ze swoją częścią, wypycha ją do repozytorium 3.) Drugi pobiera i wysyła swoje zatwierdzenia dla inny do pobrania Ale w ten sposób jest to bardzo mylące w środku sprintu, ponieważ drugi programista wprowadził zmiany w skrypcie i widzisz, jak system działa w zależności od tych zmian, ale tak naprawdę nie możesz zobaczyć, co dokładnie zostało zmienione . Druga: 1.) Programuj osobno na localhost 2.) Push i pobierz zmiany 3.) Prześlij projekt na serwer W ten sposób tracimy korzystanie z serwera podczas programowania. I może to sprawić wiele problemów z debugowaniem po aktualizacji zmian na serwerze. Pytania brzmią: czy oba widoki są poprawne i musimy wybrać jeden, czy też pomijamy/nie wiemy czegoś, co mogłoby nam pomóc w procesie. Wszelka pomoc, wskazówki lub sugestie są mile widziane.


title: Wzorce do integracji z powolną usługą zewnętrzną

text: Miałem nadzieję, że ktoś dostarczy kilka wzorców/technik/pomysłów, aby zwiększyć wydajność w następującym scenariuszu. Integruję się z zewnętrznym systemem zamówień poprzez SOAP. System zewnętrzny może być powolny i niestety nic nie można zmienić na tym końcu. Wszystkie produkty są pobierane z tego zewnętrznego źródła, a zamówienie jest składane w zewnętrznym systemie dopiero po zapłaceniu, więc funkcjonalność koszyka zostanie zaimplementowana lokalnie. Gdy produkt zostanie dodany do koszyka, sprawdzi zewnętrzne źródło, czy jest wystarczająca ilość towaru, a następnie doda go lokalnie do koszyka, a użytkownik pozostanie na tej samej stronie (np. nie będzie przekierowywał do ekranu podsumowania koszyka) . Sprawdza również pozostałe produkty w koszyku, aby upewnić się, że jest ich wystarczająca ilość, więc w zależności od liczby posiadanych produktów może być wiele połączeń z zewnętrznym źródłem. Myślę, że mogę sprawdzić poziomy zapasów innych produktów w koszyku tylko wtedy, gdy przejdą do ekranu podsumowania kasy i kolejnych ekranów kasy, ale uważam, że nie jest to najlepsze wrażenia użytkownika. W celach informacyjnych witryna lokalna będzie korzystać z ASP.NET MVC3. Wszelkie sugestie? Dziękuję


title: Jestem uczniem szkoły średniej i chcę zostać twórcą gier. Mam kilka pytań

text: Od najmłodszych lat zawsze chciałem zostać programistą. Bycie częścią gry to moje marzenie. Oto moje pytania: 1) W przyszłym roku pójdę na uniwersytet i planuję wyjechać do Wiednia na studia. Czy informatyka jest najlepszym sposobem na zdobycie tego, czego chcę, czy jest inny sposób na naukę programowania na uniwersytecie? 2) Ze względu na cały czas spędzony na egzaminach uniwersyteckich nie mogę teraz nauczyć się żadnych języków programowania. Czy trudno będzie mi nauczyć się języków od podstaw? Jeśli tak, to jak będzie to trudne? Z góry dziękuję!


title: Jakiego standardu użyć dla RESTful JSON API

text: Obecnie czytam książkę RESTful Web APIs autorstwa Leonarda Richardsona, Mike'a Amundsena i Sama Ruby'ego, która opisuje wzorzec Collection+JSON, i przeszukując sieć podczas eksploracji informacji w książce, natknąłem się na JSON API. Teraz zastanawiam się co wybrać? A czy jest jeszcze wiele prób i standaryzacji, jak powinien wyglądać RESTful JSON API? Więc rozejrzałem się i odkryłem, że wielcy gracze, tacy jak github, wymyślają tam własne! (Github+JSON) Inni po prostu używają zwykłego starego, bez standardowego formatowania JSON. Więc co z tym jest? Czy ludzie faktycznie używają Collection+JSON, czy jest to tak samo ustandaryzowane jak Github+JSON w praktycznym świecie? A co z API JSON? Na co postawili inni? Co robią inni w tej sprawie?


title: Sprawdzanie zgodności licencji Open Source

text: Czy jest dostępne narzędzie do sprawdzania, czy różne kombinacje licencji open source są ze sobą kompatybilne? Planuję zbudować różne narzędzia, które wykorzystują licencję Apache do dystrybucji, ponieważ licencja Apache wydaje się zapewniać dobrą równowagę między byciem permisywnym a wykonalnością prawną. Jednak chciałbym dołączyć komponenty z innych projektów open source do mojej bazy kodu lub udostępnić adaptery, aby umożliwić użytkownikowi końcowemu zintegrowanie takich komponentów z moją bazą kodu. Na przykład chcę dołączyć do pakietu bogaty edytor HTML, taki jak CKEditor lub TinyMCE, ale czy to naruszałoby licencję któregoś z projektów? Jestem prawie pewien, że gdybym użył kodu na GPL, zmusiłoby mnie to do uczynienia mojego projektu również GPL, a naprawdę nie chcę tego robić. Ale co z MPL, LGPL itp.? Wolałbym podejmować takie decyzje czysto techniczne, ale jeśli robisz open source, głupio byłoby ignorować życzenia innych projektów open source. Próbowałem szukać narzędzi, które pomogą zdecydować, czy licencja X jest zgodna z licencją Y, jeśli tak, w jakim kierunku są one zgodne (X może zawierać Y bez problemu, ale jeśli Y zawiera X, mogą wystąpić problemy itp.), i jakie będą konsekwencje dla warunków licencyjnych, jeśli dołączysz kod z alternatywnymi warunkami licencyjnymi. Wszystko, co udało mi się do tej pory znaleźć, to listy i wykresy, które są nastawione na porównywanie innych licencji z GPL. Jeśli istnieje narzędzie, które pomoże w kwestiach licencyjnych, byłbym wdzięczny za wskazanie we właściwym kierunku.


title: Zmniejszenie liczby plików php używanych w projekcie

text: Tworzę aplikację, w której posiadam klasę zawierającą różne metody. Problem polega na tym, że muszę wywołać większość metod przesyłania formularzy. Z tego powodu muszę tworzyć nowy plik przy każdym przesłanym formularzu. Na każdym pliku muszę utworzyć instancję tej samej klasy, a następnie wywołać odpowiednią metodę. Czy istnieje lepszy sposób na wywoływanie metod w takiej sytuacji, aby nie musiałem tworzyć wielu plików o podobnej funkcjonalności w php? Na pewno nie chcę używać żadnego frameworka.


title: Jak zaszyfrować dane za pomocą klucza prywatnego?

text: Rozumiem, że w asymetrycznych systemach kryptograficznych: 1. Klucz publiczny jest zwykle używany do szyfrowania danych i tylko klucz prywatny może być używany do odszyfrowania tych danych. 2. Wyprowadzenie klucza publicznego z klucza prywatnego jest trywialne (patrz to pytanie SO). Po pierwsze, czy to prawda? Moim celem jest dostarczenie do mojej aplikacji danych, które _trudno_ jest odszyfrować i _nie można_ zmienić, dlatego chcę mieć możliwość szyfrowania danych przy użyciu klucza prywatnego (który tylko ja mam) i zezwolić mojej aplikacji na odszyfrowanie tych danych w czasie wykonywania (ukrywanie klucza publicznego tak bardzo, jak to możliwe). Rozumiem, że nie jest to niezawodne, jednak chcę zatrzymać przypadkowe ponowne wykorzystywanie danych dostarczonych z moją aplikacją. Czy ktoś może zaproponować algorytm (najlepiej część openssl), który można wykorzystać do osiągnięcia mojego celu? Patrząc na przykład na `RSA_private_encypt`, widać, że zaszyfrowane dane mają rozmiar `RSA_size()` (coś jak 128 bajtów), ponieważ ta funkcja jest używana do generowania podpisów, a nie zaszyfrowanych danych. Czy istnieje prywatny algorytm szyfrowania, który generuje dane równe rozmiarowi danych w postaci zwykłego tekstu?


title: Odtwarzanie plików ze skryptu powłoki lub javy?

text: Mam aplikację java, która pobiera plik, który jest tworzony przez proces uruchomiony na terminalu. Proces zaczynam od małego skryptu powłoki. Następnie uruchom aplikację Java i odczyta plik utworzony przez proces. Za każdym razem, gdy ten system zostanie uruchomiony, utworzony plik należy usunąć, aby proces utworzył go przy użyciu tej samej nazwy. Nie mam kontroli nad procesem tworzenia pliku, więc nie mogę nadpisać ani dołączyć do pliku. Moje pytanie brzmi, w jakiej części plik powinien zostać usunięty? W aplikacji Java czy w małym skrypcie powłoki, który napisałem? Przepraszam, jeśli inne aspekty systemu wydają się źle zaprojektowane, ale jak powiedziałem, mam nad tym niewielką kontrolę.


title: Czy dostawca typu może naśladować klasę anonimową?

text: Pracuję nad budowaniem strony internetowej przy użyciu szablonu F# MVC 5 i zauważyłem, że twórca szablonu używa formalnie zadeklarowanych typów dla wartości domyślnych trasy. W VB.Net i C# jest to zwykle wykonywane za pomocą klas anonimowych, ale te nie istnieją w F#. Moim obecnym rozwiązaniem jest użycie obiektu Expando, takiego jak: [<RequireQualifiedAccess>] module RouteConfig = let private createDefaults (propValuePairs : seq<string * obj>) : obj = let defaults = ExpandoObject() :> IDictionary<string,obj> propValuePairs |> Seq.iter (fun (klucz,wartość) -> defaults.Add(klucz,wartość) ) box defaults /// utwórz parę, pakując drugi element let inline private (=>) (key : string) value = key, box value let RegisterWebApi = Action<_> (fun (config: HttpConfiguration) -> // Skonfiguruj routing config.MapHttpAttributeRoutes() config.Routes.MapHttpRoute( "DefaultApi", // Nazwa trasy "api/{kontroler}/{id}", // URL z parametrami createDefaults [ "kontroler" => "{kontroler}"; "id" => RouteParameter.Optional] ) |> Ignoruj // Skonfiguruj serializację config.Formatters.XmlFormatter.UseXmlSerializer <- true config.Formatters.JsonFormatter.SerializerSettings.ContractResolver <- Newtonsoft.Json.Serialization.CamelCasePropertyNames() //Contract AdditionalResolver Ustawienia Web API ) pozwalają RegisterRoutes(routes:RouteCollection) = route.IgnoreRoute("{resource}.axd/{*pathInfo}") route.MapRoute( "Default", // Nazwa trasy "{controller}/{action}/ {id}", // URL z parametrami createDefaults [ "controller" => "Home" ; "action" => "Index"; "id" => UrlParameter.Optional; ] ) |> Ignoruj Zastanawiam się głównie czy dostawcy typów mogą zrobić coś takiego w czasie kompilacji zamiast ru nczas.


title: Jak mogę przejść od tworzenia baz danych do programowania/inżynierii oprogramowania?

text: Szukam porady na temat najlepszej ścieżki przejścia kariery od tworzenia baz danych do inżynierii oprogramowania. Trochę tła: Mam licencjat z matematyki w jednej z lepszych szkół inżynierii/informatyki w NA. Miałem szczęście, że wziąłem udział w kilku kursach informatyki, które dały mi trochę podstaw w teorii CS (programowanie Java, podstawowe algorytmy, struktury danych). Od ukończenia studiów pracuję jako programista baz danych (obecnie 6 lat), w szczególności w hurtowniach danych, wykonując wiele kodowania PL/SQL dla back-endowego przetwarzania ETL i czasami front-endowych aplikacji webowych/bazowych. Od jakiegoś czasu stwierdzam, że jestem o wiele bardziej zainteresowany pracą związaną z tworzeniem aplikacji opartych na bazach danych, a teraz chcę rozszerzyć i zastosować tę pasję do bardziej tradycyjnych obszarów tworzenia oprogramowania. Przeprowadziłem badania online, aby znaleźć kilka pierwszych kroków, aby nadrobić zaległości w teorii i zacząć ćwiczyć kodowanie. 1. Przestudiuj następujące teksty. * Kod: ukryty język sprzętu i oprogramowania komputerowego * Język programowania C * Struktura i interpretacja programów komputerowych 2. Jednocześnie pracuj z samouczkami programowania w Pythonie i szukaj rozwiązania tylu wyzwań i problemów online przy użyciu Pythona. 3. Gdy osiągniesz komfortowy poziom zrozumienia Pythona, zacznij uczestniczyć w projektach open source, wykorzystując istniejącą wiedzę o HTML, CSS, JavaScript, AJAX, mySQL w połączeniu z Pythonem. 4. Kilka miesięcy później rozpocznij poważne studia nad algorytmami poprzez kurs Wprowadzenie do algorytmów (Cormen) i kurs MIT 6.006. Muszę odświeżyć trochę dyskretnej matematyki, ale myślę, że wcześniejsze zapoznanie się z zaawansowaną matematyką i podstawowymi algorytmami na studiach licencjackich przyda się. Więc w tej chwili mógłbym skorzystać z kilku wskazówek dotyczących: 1. Czy powyższy plan nauki wygląda dobrze? Jakieś inne lektury, koncepcje, praktyki do rozważenia, aby zoptymalizować mój czas i możliwości? 2. Mam dylemat, że chcę jak najszybciej odejść z obecnej pracy, ponieważ nie zyskuję niczego, co pomogłoby mi w rozwoju oprogramowania (nie wspominając o tym, jak nudne, nie wymagające wyzwań) mieć praktyczne doświadczenie w CV, aby ubiegać się o stanowiska programistyczne. Co robić? Idealnie chciałbym uzyskać stanowisko, na którym mógłbym wykorzystać moje doświadczenie w bazach danych/hurtowniach danych, takie jak inżynieria usług danych (na przykład Amazon ma kilka stanowisk w tym zakresie) i przejść stamtąd, ale nawet te potrzebują trochę doświadczenia zawodowego w java/ c++. Jeśli w następnych miesiącach wezmę na boku drobne prace związane z open source, jak daleko może to doprowadzić do tego, że będę brany pod uwagę na stanowiska deweloperskie? Jakieś inne ścieżki, które powinienem rozważyć?


title: Czy programiści/programiści stają się towarem w świecie IT?

text: Pracuję w dziale IT jako programista aplikacji internetowych dla dużej firmy. Niedawno, gdy siedziałem przy biurku współpracownika (jest architektem), zobaczyłem wykres zatytułowany „Prawdopodobne przyszłe role w IT w 2015 roku”. Zasadniczo był to wykres przedstawiający role w IT, które będą miały większe znaczenie w przyszłości i role, które stracą na znaczeniu. Nie wiem, skąd się wziął, ale był to wydruk od naszego wiceprezesa ds. IT. Chyba dostał to z jakiegoś magazynu. W każdym razie byłem zaskoczony, widząc, że programiści/programiści znaleźli się na liście o zmniejszonej ważności. Przewidywano, że role na tej liście będą mniej ważne i uznane za odpowiedzialne za eksternalizację, co w zasadzie oznacza offshoring. Na tej liście znalazły się również role, takie jak kierownicy rozwoju i administratorzy systemu. W grupie o zwiększonym znaczeniu znalazły się takie role jak Analitycy Biznesowi, Kierownicy Projektów, Inżynier Rozwiązań Chmurowych oraz Architekci Techniczni. Wydało mi się to dziwne i zaskakujące. Mogę powiedzieć, że nie mam wątpliwości, że architekci są bardzo ważni dla organizacji. Zwłaszcza ci, którzy nadal kodują. Są niezbędne. Ale analitycy biznesowi i kierownicy projektów? W mojej firmie zawsze uważałem, że licencjat i menedżerowie są pośrednikami i mają tendencję do „wchodzenia w drogę”. Prawdziwa praca jest faktycznie wykonywana przez programistów. Programiści w mojej firmie to nie tylko zgraja programistów, którzy nie mają umiejętności obsługi ludzi. Pracujemy bezpośrednio z interesariuszami w biznesie i rozwiązujemy ich problemy oraz sprawiamy, że firma działa wydajniej. BA i PM mogą zajmować się sprawami w szerszym ujęciu i bardziej długoterminowo, ale faktyczne wykonanie i rozwiązywanie problemów jest wykonywane przez programistów. Byłem więc naprawdę zaskoczony, gdy okazało się, że nasze role znalazły się na liście o mniejszym znaczeniu. Jestem również zaskoczony, że nasz wiceprezes nie dostrzega tego, ponieważ zawsze wydawał się doceniać wysiłki deweloperów i doceniać wartość, jaką wnosimy. Moim zdaniem niezastąpieni są programiści, którzy potrafią kodować, ale mają też umiejętności organizacyjne i komunikacyjne, aby zrozumieć problemy, z jakimi boryka się firma. To oni sprawiają, że koła się toczą. Zdaję sobie sprawę, że istnieją pewne rodzaje działań rozwojowych, które można offshore. A na dzisiejszym rynku jest to strasznie tanie, ale są pewne rzeczy, których po prostu nie można przekazać komuś, kto znajduje się w innej strefie czasowej i ma barierę językową/kulturową. Wiem o tym, ponieważ moja firma już tego próbowała i po prostu nie wyszło. Niemniej jednak w zasadzie wzbudziło to we mnie zaniepokojenie. Czy programiści/deweloperzy stają się towarem, czy też będą towarem? W dzisiejszych czasach wiele osób potrafi kodować. Oczywiście najlepsi programiści zawsze będą mieli pracę, ale co z „dobrymi” programistami, takimi jak reszta z nas? Czy przyszłe działy IT będą składać się tylko z grona najcięższych pracowników, takich jak PM, BA, wiceprezesi, menedżerowie produktu i tak dalej, i uzewnętrznić wszystkich ludzi, którzy faktycznie wykonują tę pracę? To po prostu nie ma dla mnie sensu. Przeczytałem ten artykuł w techrepublic, który mówi, że wkraczamy w dekadę deweloperów. http://www.techrepublic.com/blog/hiner/were-entering-the-decade-of-the-developer/6020 Istnieją jednak inne oznaki, że deweloperzy będą tracić na znaczeniu. Byłbym wdzięczny za kilka przemyśleń na ten temat.


title: Czy kierownicy projektu budują strukturę aplikacji (z pustymi metodami), a następnie przekazują ją innym w celu ukończenia aplikacji w rzeczywistym projekcie?

text: Mam bardzo małe doświadczenie w pracy przy dużym projekcie. Ale pracowałem około 3 miesięcy w małym outsourcerze (firmie, która koduje dla większej zagranicznej firmy zajmującej się tworzeniem stron internetowych). Oto, co widziałem. Zagraniczna firma wykonała całą analizę użytkowników i wszystkie projekty baz danych. Następnie grupa Project Managerów w tej zagranicznej firmie zaczyna budować strukturę Aplikacji. Oznacza to, że budują wszystkie podstawowe klasy, które są szkieletem aplikacji. Na przykład we frameworku otrzymali wiele **niedokończonych (pustych)** metod, takich jak: int calNoOfCustomer(...){ // wykonaj obliczenia tutaj } Moja mała firma zaczyna wtedy wypełniać szczegóły pustych metod, ale nie zbudował całej konstrukcji. Myślę, że lubi pracę w szkole informatycznej. Nauczyciel buduje strukturę i puste metody i prosi uczniów o ich uzupełnienie. Więc chcę cię zapytać, czy to jest sposób, w jaki firma zajmująca się tworzeniem stron internetowych postępuje w dużym projekcie w świecie rzeczywistym? Czy kierownicy projektu budują strukturę aplikacji (z pustymi metodami), a następnie przekazują ją innym programistom w celu ukończenia aplikacji w rzeczywistym świecie Big Project?


title: Czy w CV piszesz języki obce?

text: Każdy programista ma swój podstawowy język, z którym pracuje przez większość czasu i dlatego jest bardzo zaznajomiony. Ale są też języki, które w pewnym sensie znasz, w tym sensie, że znałeś je naprawdę dobrze w przeszłości, ale nie używałeś ich od jakiegoś czasu, lub że używasz ich rzadko i dlatego nie jesteś w nich tak pochłonięty jak ty są w Twoim podstawowym języku. Zdecydowanie możesz zmusić się do produktywności z tymi językami, ale może być konieczne ponowne zapoznanie się, sprawdzenie kilku reguł składni i tym podobne. Moje pytanie brzmi – czy napiszesz te języki w swoim CV jako języki, które „znasz”?


title: Jakie są najczęstsze przyczyny braku zgodności w przód?

text: Niektóre firmy, takie jak Blizzard, tworzą oprogramowanie, które nadal działa dobrze w przyszłych wersjach systemu Windows i nowszych wersjach ich innych zależności oprogramowania. Inne firmy (w większości te, które nie są hardkorowymi producentami oprogramowania) czasami piszą oprogramowanie, które psuje się wraz z wydaniem nowego systemu operacyjnego lub innej zależności oprogramowania. Co wiedzą hardkorowi producenci oprogramowania, czego nie wiedzą inni? Jakie są główne przyczyny problemów ze zgodnością w przód?


title: Jakiego wzorca projektowego używasz do obsługi wdzięcznego powrotu na stare platformy?

text: Powiedzmy, że muszę dodać cień za pudełkiem. Niektóre stare platformy nie obsługują cieni, więc muszę to sfałszować, umieszczając obraz za pudełkiem. Oto pseudokod tego, jak obecnie radzę sobie z tą rezerwą: if (dropShadowsAreSupported) { box.addDropShadow("czarny"); } else { box.putImageBehindIt("gaussianBlur.png"); } Czy to właściwy sposób na poradzenie sobie z tym? Wydaje mi się to zbyt amatorskie. Czy istnieje lepszy wzorzec projektowy? W moim obecnym projekcie jest mnóstwo miejsc, w których muszę zmienić styl interfejsu użytkownika dla różnych wersji systemu operacyjnego. To nie tylko jedno jeśli-jeszcze.


title: Czy programiści GUI mają nadmierną przewagę nad innymi?

text: Menedżerom i klientom łatwo jest docenić to, co widzą. Widziałem wielu programistów GUI, którzy są przeciętnymi programistami z minimalną znajomością zasad projektowania lub innych idiomów programowania. Jednak te niedociągnięcia często pozostają niezauważone, szczególnie przez kierownictwo i klientów, jeśli programista może stworzyć imponująco wyglądający interfejs użytkownika. Do tego stopnia, że wielu znanych mi programistów GUI spędza godziny na upiększaniu GUI kosztem pisania złego, niemożliwego do utrzymania kodu. Z drugiej strony programiści średniego poziomu, którzy opracowują interfejsy API, funkcje biznesowe lub kod bazy danych (SQL itp.) są w niekorzystnej sytuacji, ponieważ nie ma nic namacalnego do zaprezentowania. Być może recenzent kodu lub architekt może docenić elegancję, dobry projekt, skalowalność itp. kodu, ale to nic nie znaczy dla świata zewnętrznego. Twój kod może działać przez lata bez łamania, może być bardzo łatwy w utrzymaniu i mieć dobrą wydajność, ale nigdy nie wywołuje „wow”, jak robi to zgrabnie wyglądający GUI. Moim zdaniem, konsekwencją tego jest (i wiem, że będę mocno za to krytykowany), że jest mniej motywacji dla programisty GUI do pisania dobrego, czystego kodu. **EDYTUJ** : Muszę tutaj wyjaśnić, że przez programistę GUI nie mam na myśli pełnoprawnego projektanta web/GUI, ale programistę front-end, np. programistę java-swing. Czy reszta społeczności się zgadza?


title: sortowanie przy użyciu niestandardowej definicji „>” i „<” w python

text: załóżmy, że mam niestandardową funkcję, taką jak def większy(a, b): if (a % b) % 2 == 0: return 1 return 0 Określa, jak porównywać dwie liczby i określać, która jest większa. W tym przypadku, jeśli funkcja zwraca 1 a > b else, a < b. Czy mogę użyć wbudowanej funkcji `<wbudowana funkcja sortowana> lub` do utworzenia posortowanej tablicy liczb w odniesieniu do tej definicji?


title: Z komputera do sieci — jak radzić sobie z interaktywnymi przepływami pracy

text: Latem tego roku rozpoczynam nowy projekt, polegający na opracowaniu internetowej wersji autorskiego desktopowego ERP. Głównym celem mojej firmy jest możliwość zaproponowania internetowej wersji swojego ERP, ze wszystkimi jej zaletami (mobilność, możliwość sprzedaży wersji SaaS, nowoczesny wygląd i komponenty...), **bez utraty funkcjonalności biznesowej* *. Rozumiem przez to, że my, programiści, nie możemy przerobić biznesowej strony aplikacji. Głównym celem jest możliwość przełożenia tych samych procesów na aplikację internetową. Warstwa biznesowa starszej wersji nie jest bezpośrednio wielokrotnego użytku, ponieważ jest naprawdę zależna od GUI. Te procesy biznesowe zostały przepisane jako diagramy UML, które posłużą nam jako wsparcie w rozwoju nowej aplikacji. Problem, który napotykam, polega na tym, że nie wiem, jak radzić sobie z procesem, który wymaga interakcji użytkownika. Na przykład: Podczas walidacji zamówienia sprzedaży, proces walidacji sprawdza wszystkie zawarte w nim produkty, weryfikując, czy są dostępne zapasy, a następnie wykonuje różne operacje. W przypadku braku magazynu, użytkownik jest pytany, czy chce anulować zamówienie, usunąć ten produkt lub wybrać inny odpowiednik. Działa jak „alert” lub „potwierdzenie” JavaScript: bieżący „wątek” (tj. proces sprawdzania poprawności) jest wstrzymany, czekając na interakcję użytkownika. Po wyborze użytkownika kończy pracę z bieżącym produktem, a następnie zatwierdza następny i tak dalej. Jak radzić sobie z tego rodzaju procesami w aplikacji internetowej? Czy istnieje jakiś framework, wzorzec projektowy lub coś innego, co pozwala na pisanie tego rodzaju procesów biznesowych, które można tak uruchomić i utrzymać? Rozwiązaniem może być podzielenie tych procesów biznesowych na mniejsze. W moim przykładzie mielibyśmy 2 podprocesy: pierwszy sprawdza wszystkie produkty i oznacza te problematyczne. Następnie użytkownik ma ekran, na którym decyduje, co zrobić z oflagowanymi produktami, i weryfikuje. W tej chwili mamy pewność, że wszystkie produkty są w porządku, możemy rozpocząć drugi podproces, aby wykonać pozostałe operacje. Problem polega na tym, że nawet jeśli w tym przykładzie jest to dość proste, może być naprawdę bardziej skomplikowane. Niektóre procesy mają wiele interakcji użytkowników, takich jak ta, a następnie można je podzielić na 10 podczęści. Jak już wcześniej precyzowałem, nie chcemy modyfikować ani przemyśleć procesu biznesowego, aby mieć pewność, że nic nie stracimy ani nie wprowadzimy nowych błędów biznesowych. Czy ktoś ma na ten temat doświadczenie? Czy znasz jakiś sposób radzenia sobie z tego rodzaju zmianami typu desktop-to-web? * * * **EDYTUJ 15/07/14** Było pewne nieporozumienie w związku z tym postem, na pewno związane z moją słabą ekspresją i słownictwem w języku angielskim. Podsumowując problem: otrzymałem kilka biznesowych przepływów pracy opisanych w diagramach UML. Pochodzą z ogromnego 30-letniego CAMM (ERP zarządzania produkcją). Projekt polega na przebudowaniu tej aplikacji w środowisku sieciowym **Java**. Najważniejsze jest to, że niektóre z tych przepływów pracy są zależne od użytkownika, ponieważ w środku przetwarzania wymagają interakcji użytkownika. Ponieważ aplikacje internetowe są oparte na architekturze klient-serwer, nie wiem, jak je przenieść. Przepracowanie/przemyślenie tych przepływów pracy nie wchodzi w grę, ponieważ byłoby to zbyt czasochłonne. Potrzebuję sposobu na symulację aplikacji komputerowej w aplikacji internetowej, takiej jak Wt, ale dla Javy (nie mówię o interfejsie użytkownika, ale o tworzeniu przepływów pracy) lub zdefiniowaniu reguł, aby te przepływy pracy zależne od użytkownika były kompatybilne z siecią WWW .


title: Czy domyślne obiekty VB są typem singletona?

text: Czy domyślne obiekty obsługiwane przez słowo kluczowe `My` w VB.net są rodzajem singletona? Jeśli nie, jaka jest różnica? Ponownie, czy ta funkcja „domyślnego obiektu” jest czymś przydatnym? Jeśli tak, to dlaczego nie jest zaimplementowany w innych językach, takich jak C#?


title: Czy NoSQL jest lepszym wyborem podczas pracy z OOP?

text: To może być głupie pytanie, ale czytałem trochę o bazach danych NoSQL w ciągu ostatnich kilku dni i próbuję zrozumieć, kiedy naprawdę nam pomagają. Zdałem sobie jednak sprawę, że wydaje się, że bazy danych NoSQL są bliższe OOP niż RDBMS. Mówię tak, ponieważ zwykle, gdy mamy do czynienia z OOAD, nie dostajemy z góry gotowej wersji modelu. Model zmienia się wiele razy, zanim przejdzie do rzeczywistości. Pytałem o to nawet tutaj na Programrs.SE. Jednak w przypadku NoSQL wydaje się to najbardziej naturalne, ponieważ baza danych również może się zmieniać bez większych problemów. Ponadto, przy pierwszej próbie z tego rodzaju technologią stworzyłem jedną bazę danych MongoDB, a dane były zapisywane jak POJO, więc wydawało się to znacznie bardziej zbliżone do projektowania zorientowanego obiektowo. W takim ustawieniu NoSQL jest naprawdę dobrym pomysłem podczas pracy z OOP, czy jest to po prostu dobry pomysł w przypadkach, gdy potrzebujemy skalować bazę danych, aby była dostępna dla wielu użytkowników i tak dalej?


title: serwer Pythona do zarządzania usługami

text: szukam struktury do budowy serwera WWW. Ten serwer będzie używany do zarządzania usługami internetowymi. ogromna ilość klientów może być w stanie połączyć się głównie z ustawionymi danymi, które zapełnią bazę danych noSQL. pracujemy z pythonem i oczywiście chcielibyśmy framework python. spojrzałem na butelkę, gevent, twisted i tornado ale ciężko wybrać. Jakieś opinie lub propozycje?


title: Skopiuj i wklej kod testowy: jak bardzo jest zły?

text: Moja obecna praca to głównie pisanie kodu testowego GUI dla różnych aplikacji, nad którymi pracujemy. Jednak uważam, że mam tendencję do kopiowania i wklejania dużej ilości kodu w ramach testów. Powodem tego jest to, że obszary, które testuję, wydają się być na tyle podobne, że wymagają powtórzeń, ale _nie do końca podobne_, aby zawrzeć kod w metodach lub obiektach. Uważam, że kiedy próbuję bardziej intensywnie korzystać z klas lub metod, testy stają się bardziej kłopotliwe w utrzymaniu, a czasami wręcz trudne do napisania. Zamiast tego zwykle kopiuję duży fragment kodu testowego z jednej sekcji i wklejam go do innej, a także wprowadzam drobne zmiany, których potrzebuję. Nie używam bardziej ustrukturyzowanych sposobów kodowania, takich jak używanie większej liczby zasad lub funkcji OO. Czy inni programiści czują się w ten sposób podczas pisania kodu testowego? Oczywiście chcę przestrzegać zasad DRY i YAGNI, ale uważam, że kod testowy (zautomatyzowany kod testowy do testowania GUI i tak) może sprawić, że te zasady będą trudne do przestrzegania. Czy po prostu potrzebuję więcej praktyki kodowania i lepszego ogólnego systemu robienia rzeczy? EDYCJA: Narzędzie, którego używam, to SilkTest, który jest w zastrzeżonym języku o nazwie 4Test. Testy te dotyczą głównie aplikacji komputerowych Windows, ale testowałem również aplikacje internetowe przy użyciu tej konfiguracji.


title: Dlaczego Java nie obsługuje dziedziczenia prywatnego/chronionego, takiego jak C++?

text: Podczas dziedziczenia klasy w C++ użytkownik może określić specyfikator dostępu, np. class Base { public int mem1; chronione w mem2; }; class Derived1 : **private** Base { // mem1 będzie tutaj prywatny. // mem2 będzie tutaj prywatny. }; class Derived2 : **protected** Base { // mem1 będzie tutaj chroniony. // mem2 będzie tutaj chroniony. }; class Derived2 : **public** Base { // mem1 będzie tutaj publiczny. // mem2 będzie tutaj chroniony. }; Ale to samo nie jest możliwe w Javie, tj. extends w javie jest zawsze jak „publiczne” dziedziczenie w C++. Czy ktoś mógłby wyjaśnić przyczynę tego?


title: Sposób opisania skali oprogramowania w CV

text: Piszę swoje CV i mam problem z wyjaśnieniem oprogramowania dla przedsiębiorstw, które stworzyłem w mojej poprzedniej pracy. Teraz myślę o napisaniu następujących 4 rzeczy dla każdego oprogramowania. * Abstrakcyjne wyjaśnienie, do czego służy oprogramowanie * Ile sprzedano oprogramowanie * O tym, ile danych zwykle obsługuje oprogramowanie * O tym, ile tabel DB ma oprogramowanie Czy są w nich jakieś nieodpowiednie? Czy coś, co powinienem dodać?


title: Czy systemy DVCS mogą wymusić określony przepływ pracy?

text: Tak więc mam w pracy tę małą debatę, w której niektórzy z moich kolegów (którzy są faktycznie odpowiedzialni za administrowanie naszą instancją Perforce) mówią, że przepływy pracy są ściśle procesem i że narzędzia, których używamy (w tym przypadku kontrola wersji systemu) nie mają na to żadnego wpływu. Innymi słowy, chodzi o to, że przepływy pracy (i ich wykonanie) są niezależne od narzędzi. Uważam, że DVCS lepiej zachęcają ludzi w bardziej elastyczny i dobrze zdefiniowany sposób, ze względu na nieodłączne rozgałęzienia występujące w tle (anonimowe gałęzie) i że można wymusić przepływy pracy za pomocą ustalonego modelu wdrażania (np. żądania poprzez zarządzanie repozytorium, role dyktatora/porucznika z ich maszynami skonfigurowanymi jako serwery itp.) Myślę, że w CVCS musisz wymusić przepływy pracy poprzez polityki i policję, ponieważ jest tylko jeden sposób udostępniania kodu, podczas gdy w DVCS po prostu idziesz z przepływem opartym na infrastrukturze/uprawnieniach, które zostały dla Ciebie skonfigurowane. Nawet jeśli przedstawiłem wcześniejsze argumenty, nadal nie jestem w stanie ich w pełni przekonać. Czy mówię coś w niewłaściwy sposób? Jeśli nie, jakie inne argumenty lub przykłady byłyby Twoim zdaniem przydatne, aby ich przekonać? **Edytuj** : główny przepływ pracy, na którym się skupialiśmy, ponieważ ma to sens dla obu stron, to przepływ pracy Dyktator/Porucznik: ![Przepływ pracy Dyktator/Porucznik](http://i.stack.imgur.com/DFDWg .png) Moim argumentem przemawiającym za tym konkretnym przepływem pracy jest to, że w CVCS nie ma potoku (ponieważ istnieje tylko udostępnianie pracy w sposób scentralizowany), podczas gdy w DVCS istnieje rzeczywisty potok w zależności od tego, jak wdrażasz uprawnienia do odczytu/zapisu. Ich argumentem jest to, że ten przepływ pracy można wykonać poprzez gałęzie i chociaż robią to w niektórych projektach (ze względu na politykę/policing), w innych zabraniają programistom tworzenia gałęzi.


title: Kiedy używanie stdio jest lepsze niż fstream?

text: Pracuję na ugruntowanej, osadzonej bazie kodu C++. Używamy zastrzeżonego API do naszego systemu plików. W celu lepszej integracji z zewnętrznymi bibliotekami C, jesteśmy obecnie w trakcie implementacji większości `stdio.h` i `fcntl.h`. Złożyłem coś, co wydawało mi się niekontrowersyjną propozycją, że powinniśmy również zaimplementować klasę fstream i zachęcić nowy kod C++ do używania jej zamiast nowego (w naszej bazie kodu) API w stylu C. Mamy już dostępne części `stdout` `iostream`, chociaż nie są one powszechnie używane. Mając do wyboru użycie `stdio` i `fstream`, jakie są dobre powody, aby wybrać `stdio` do tworzenia oprogramowania wbudowanego w C++?


title: Jak mogę zorganizować osobiste repozytoria git?

text: Jestem w trakcie zakładania konta GitHub z planem udostępnienia pary bibliotek, które opracowałem w ramach niektórych ostatnich projektów iOS, bezpłatnie dla innych deweloperów iOS. Obecnie nie mam kopii zapasowej poza witryną dla większości mojego kodu, więc początkowo myślałem, że prześlę wszystkie moje osobiste projekty lub przynajmniej wszystkie moje projekty iOS do prywatnego repozytorium hostowanego na GitHub . Mam jednak _dużo_ projektów, z których wiele ma dość niską wartość (tj. zostało zaadaptowanych z książek i napisanych z myślą o uczeniu się). GitHub nie tylko pobiera opłaty przez prywatne repozytorium, ale wydaje się, że nie ma żadnego sposobu na hierarchiczne organizowanie repozytoriów. Czy brakuje mi czegoś, co pozwoliłoby mi korzystać z repozytorium git z hierarchią i pobierać elementy tak, jak ich potrzebuję / pracować z nimi, tak jak obecnie robię z SVN? Czy GitHub (lub konkurencja, jak BitBucket) ma jakieś funkcje organizacji projektu, których mi brakuje? Jeśli to się nie powiedzie, jaki jest ogólnie przyjęty „sposób git” na radzenie sobie z tą sytuacją (odrzuć projekty, które nie są przeznaczone do wydania, przechowuj je w trybie offline, jakoś je połącz, itd., itd.)? O ile wiem, mam następujące opcje: 1. Umieść biblioteki na GitHub, kontynuuj hostowanie własnego SVN dla wszystkich innych projektów, użyj rozwiązania innego niż VCS do tworzenia kopii zapasowych poza siedzibą (blech), 2. Umieść biblioteki i oprogramowanie, planuję wydać na GitHub (odpowiednio jako publiczną i prywatną), nadal hostować własny SVN dla projektów, na których nie zależy mi tak bardzo i prawdopodobnie odwiedzę ponownie, aby odświeżyć pamięć o tym, jak wdrożyć XYZ, zdecydować, że jestem chce je odpisać, jeśli mój dom się zawali (podwójny błąd), 3. Włóż wszystko na [GitHub i/lub BitBucket], zajmij się posiadaniem absurdalnej liczby repozytoriów, wyszukując to, czego potrzebuję / utrzymując pewien zestaw wskaźników offline do mojego Konto [GitHub i/lub BitBucket] (potrójny błąd)


title: Ograniczyć liczbę użytkowników w aplikacji internetowej?

text: Zostałem poproszony o przyjrzenie się konwersji naszego tradycyjnego oprogramowania klient-serwer do wersji internetowej (przy użyciu PHP). Jednym z pierwszych pytań kierowanych przez kierownictwo było to, w jaki sposób ograniczylibyśmy liczbę jednoczesnych użytkowników, obecnie obsługiwanych przez naszego menedżera licencji, z którym łączy się każdy klient podczas uruchamiania naszych aplikacji. Moje inicjały myśli: * Sprawdź liczbę otwartych sesji na serwerze (tylko z poprawnymi użytkownikami, którzy się zalogowali). * Logowanie każdego logowania/wylogowania do tabeli DB i liczenie ich. Czy istnieje standardowy/najlepszy sposób na ograniczenie liczby jednoczesnych użytkowników, którzy mogą logować się do aplikacji internetowej?


title: Dobre praktyki dla zespołu deweloperskiego w dużych projektach

text: Odkąd zacząłem uczyć się C kilka lat temu, nigdy nie byłem częścią zespołu, który pracował nad projektem. Jestem bardzo zainteresowany, aby dowiedzieć się, jakie są najlepsze praktyki dotyczące pisania dużych projektów w C. Jedną z rzeczy, które chcę wiedzieć, jest to, kiedy (nie jak) podzielić mój projekt na różne pliki źródłowe? Moje wcześniejsze doświadczenie dotyczy pisania duetu nagłówek-źródło (funkcje zdefiniowane w nagłówku są zapisywane w źródle). Chcę wiedzieć, jakie są najlepsze praktyki dotyczące dzielenia projektu i kilka wskazówek dotyczących ważnych rzeczy podczas pisania projektu jako część zespołu?


title: Jak wytłumaczyć zwinne narzędzie procesowe (takie jak Scrum lub Kanban) (tradycyjnemu) kierownikowi projektu?

text: Jestem pewien, że wiele osób zaangażowanych w projekty programistyczne wymyśliło to pytanie, ale nie mogłem znaleźć satysfakcjonującej odpowiedzi. * Jak wytłumaczyć menedżerowi przyzwyczajonemu do posiadania ogromnego wykresu Gantta, alokacji zasobów, ścieżek krytycznych (itd.) korzyści płynące z używania narzędzia do procesów zwinnych, takiego jak Scrum lub Kanban? Typowym problemem jest wyjaśnienie, dlaczego testowanie czasami trwa dłużej niż samo kodowanie...


title: Jak powinniśmy radzić sobie z dodatkowymi funkcjami kosmetycznymi w sprintach Scrum?

text: Czytałem dokumenty Scrum i mówi, że zadania w Sprincie powinny być „potencjalnie nadające się do wysyłki”. Jestem zdezorientowany tym, co to oznacza. Załóżmy, że celem Sprintu 1 był „formularz rejestracyjny użytkownika”. Ile szczegółów muszę dodać, aby coś było gotowe do wysyłki? Na przykład: 1. Mogę pokazać prosty formularz z polami bez żadnych fantazyjnych stylizacji i oznaczyć je jako gotowe 2. Mogę po prostu wykonać walidację po stronie klienta jako oznaczoną jako zrobione, ale strona serwera jest również opcją lub obiema 3. Mogę również dodać kilka fajnych podpowiedzi jQuery, najechanie kursorem, captcha, kolory, etykiety dla formularza 4. Potem jest cała masa stylów na temat tego, jak wyświetlać komunikaty o błędach na ekranie, które mogę robić bez końca w jednym temacie. Jak więc to podzielić i kiedy mogę to uznać za gotowe do wysyłki. Czy też muszę napisać każdą najmniejszą możliwą rzecz, taką jak wyświetlanie błędów, wyskakujące okienko lub tekst w polu świetlnym jako podzadania i umieścić je jako sprint. Prowadziłoby to do tysięcy zadań dla całego projektu. Mam na myśli to, że jeśli niektóre działają dla Internet Explorera, a niektóre dla Firefoksa, to znowu muszę je podzielić jako zadania. Trzeba na nie poświęcić czas, a gdy kierownik zapyta mnie, co robiłeś w tym czasie, nie będę miał żadnych zadań do opowiedzenia, ale w rzeczywistości wszystkie są częścią rejestracji użytkownika


Między innymi reaktywne rozszerzenia platformy .NET upraszczają zarządzanie współbieżnością. Z tego, co słyszałem, .NET 4.5 uprości zarządzanie współbieżnością za pomocą takich rzeczy jak słowo kluczowe `await`. Moje pytanie: * Czy .NET 4.5 sprawi, że rozszerzenia reaktywne staną się przestarzałe? * Czy też oczekuje się, że Microsoft przedstawi dodatki .NET 4.5 jako alternatywny sposób podejścia do programowania asynchronicznego i współbieżnego?


title: Skąd wiesz, kiedy podzielić metodę obiektową na 2 lub więcej innych metod?

text: Wiem, że to bardzo podstawowe pytanie, ale czasami mam trudności z ustaleniem, kiedy podzielić metodę pojedynczego obiektu na wiele metod. Na przykład, próbuję ustawić ACL używając Zend_Acl i Zend_Auth, jak pokazano w tym samouczku: http://devzone.zend.com/article/1665. Zastanawiam się jednak, czy metoda My_Plugin_Auth::preDispatch() powinna wywoływać wywołania metody o nazwie authentication() i metody o nazwie authorize(), zamiast umieszczać wszystko w preDispatch(). Myślałem, że to sprawi, że kod będzie bardziej czytelny i zamknie logikę w mniejszych częściach, ale nie jestem pewien, czy to wystarczający powód.


title: Jak znaleźć użytkowników testowych mojego rozszerzenia do Chrome za pomocą zaplecza Google App Engine?

text: Jestem nowy w tworzeniu rozszerzeń Chrome i użyłem Stack Overflow, aby zadać wiele pytań i uzyskać świetne odpowiedzi. W końcu skończyłem wersję beta i wrzuciłem ją do sklepu Chrome tylko dla użytkowników testowych. Teraz nie jestem pewien, gdzie znaleźć użytkowników testowych, więc postanowiłem zapytać tutaj. Czy istnieje osobne forum, na którym użytkownicy publikują swoje aplikacje lub rozszerzenia do sprawdzenia?


title: Sklep z aplikacjami na iPhone'a – dodawanie reklam do bezpłatnej aplikacji

text: Mam w sklepie darmową aplikację. Rozważam aktualizację. Dodałoby kilka dodatkowych opcji, ale także reklamy. Jestem ciekaw, czy ktoś jeszcze to zrobił, a jeśli tak, jaka była reakcja. Czy to wkurzyło Twoich użytkowników?


title: Jaka jest najlepsza praktyka zapisywania stref czasowych w bazie danych?

text: Chcemy rozpocząć zbieranie stref czasowych dla każdego z naszych adresów w bazie danych. Jaka jest najlepsza praktyka przechowywania stref czasowych? Jak byś się zajął pozyskiwaniem stref czasowych dla istniejących rekordów adresowych? Korzystam z serwera Microsoft SQL, .net mvc, C#. Wszelkie sugestie byłyby bardzo mile widziane.


title: Wyewidencjonowywanie i kompilowanie repozytorium. Jakie jest prawidłowe podejście do rozpoczęcia procesu kompilacji?

text: Piszę skrypt Bash, który automatycznie aktualizuje repozytorium zawierające kod źródłowy, a następnie je kompiluje. Trochę utknąłem w części dotyczącej tego, jak rozpocząć samą kompilację, tj. czy powinienem `wykasować` wszystkie pliki w repozytorium i poszukać funkcji `main` (lub jej odpowiednika), a następnie skompilować ten plik. Lub jeśli powinienem pozwolić użytkownikowi określić, który plik w repozytorium zawiera funkcję `main` (lub ewentualnie `make`file) w pliku konfiguracyjnym. Ta opcja wymaga więcej pracy i wglądu od użytkownika, ale obawiam się, że pierwsza opcja może spowodować duże opóźnienia przez niepotrzebne skanowanie wszystkich plików w repozytorium. Jakie byłoby najlepsze podejście do rozwiązania tego problemu?


title: Zidentyfikuj architekturę zorientowaną na usługi

text: Jak mogę stwierdzić, czy system jest zbudowany na architekturze zorientowanej na usługi, czytając jego kod źródłowy?


title: Korzystanie z pełnych bibliotek GPL w modelach oprogramowania jako usługi (SaaS)

text: Przeszukałem już witrynę, ale mogłem znaleźć tylko odpowiedzi dotyczące używania bibliotek GPL w oprogramowaniu, które ludzie zamierzali sprzedawać/dystrybuować. W tym przypadku odpowiedź brzmi, że muszą również udostępnić kod źródłowy. A co z SaaS? Oznacza to, że będę tworzyć aplikację, z której klienci będą płacić miesięczną opłatę za korzystanie przez Internet i nie będą niczego pobierać ani nie uzyskiwać dostępu do kodu. Pytania: 1. Czy w takim przypadku mogę korzystać z pełnych bibliotek GPL bez konieczności udostępniania mojego kodu źródłowego? 2. Czy istnieją jakieś inne ograniczenia/wymagania GPL, o których powinienem wiedzieć, nawet jeśli mój model jest w SaaS?


title: Idąc naprzód w świecie programowania

text: Zostałem zatrudniony na niedawnym stanowisku, na którym mój tytuł zawodowy nie odzwierciedla adekwatnie tego, co wiążą się z moimi obecnymi obowiązkami. Obawiam się, że ta klasyfikacja wpłynie na mnie w dalszej karierze, ponieważ w tytule stanowiska nie ma określenia „programista”. Jak ważny jest tytuł zawodowy w utrzymaniu kariery w porównaniu z doświadczeniem i wiedzą, którą otrzymuję podczas pracy? Czy powinno to być coś, co powinno być powodem do niepokoju, czy proste wyjaśnienie wystarczy przy przejściu do innego miejsca pracy w przyszłości?


title: Czy ktoś może wyjaśnić koncepcję zapamiętywania Haskella?

text: (uwaga, stawiam tutaj pytanie, ponieważ dotyczy ono mechaniki pojęciowej, a nie problemu z kodowaniem) Pracowałem nad małym programem, który używał ciągu liczb Fibonacciego w swoim równaniu, ale zauważyłem, że jeśli przekroczyłem pewną liczbę, boleśnie spowolniło, trochę googlując Natknąłem się na technikę w Haskell znaną jako `Memoization`, pokazali kod działający w ten sposób: -- Tradycyjna implementacja fibonacciego, zawiesza się po około 30 slow_fib :: Int - > Liczba całkowita slow_fib 0 = 0 slow_fib 1 = 1 slow_fib n = slow_fib (n-2) + slow_fib (n-1) -- Zapamiętany wariant jest prawie natychmiastowy nawet po 10000 memoized_fib :: Int -> Integer memoized_fib = (mapa fib [0 ..] !!) gdzie fib 0 = 0 fib 1 = 1 fib n = memoized_fib (n-2) + memoized_fib (n-1) Więc moje pytanie do was brzmi, jak lub raczej dlaczego to działa? Czy to dlatego, że w jakiś sposób udaje mu się przejść przez większość listy, zanim obliczenia nadrobią zaległości? Ale jeśli haskell jest leniwy, tak naprawdę nie ma żadnych obliczeń, które muszą nadrobić… Więc jak to działa?


title: Jaka jest dobra praktyczna zasada tworzenia pisania technicznego, która nie dezorientuje ludzi?

text: Czasem jestem takim frajerem, że nawet nerdy mnie nie rozumieją, a raczej czasem nie potrafię wyrazić rzeczy w zrozumiały i wystarczająco prosty sposób… a czasem potrafię, ale naprawdę nie mogę powiedzieć, dopóki później. Lubię szczegóły techniczne, lubię o nich pisać, ale czasami nie mogę się zatrzymać ani powiedzieć, kiedy jest to zbyt techniczne lub zbyt abstrakcyjne, by je zrozumieć. Często wrzucam zbyt wiele szczegółów do rzeczy, myśląc, że pomoże to w zrozumieniu jakiejś koncepcji, ale czasami przynosi to odwrotny skutek. To wszystko są skrajne przypadki, nie jestem taki zły w pisaniu (mam nadzieję), ale jaka byłaby dobra zasada, aby wiedzieć, kiedy prawdopodobnie wywołasz zawroty głowy podczas czytania twoich rzeczy?, jak testujesz Twoje analogie?, szukam jednej lub więcej praktycznych zasad, aby wiedzieć, czy dobrze piszę wyjaśnienia techniczne, wiedząc, do czego się odwoływać, a do czego nie, itp. **Jaka jest Twoja złota zasada pisania o rzeczach technicznych do technicznych ludzie, którzy niekoniecznie są zaznajomieni z tym, co piszesz, ale też nie są nowicjuszami w Twojej okolicy?, gdzie jest linia?**


title: najlepsze praktyki przy testowaniu jednostkowym dla oprogramowania wbudowanego

text: Poszukuję kilku najlepszych strategii dotyczących testów jednostkowych kodu napisanych dla systemów wbudowanych. Przez system wbudowany mam na myśli kod, taki jak sterowniki urządzeń, programy obsługi ISR itp., rzeczy, które są bardzo zbliżone do metalu. Większość testów jednostkowych nie jest możliwa bez przetestowania na sprzęcie za pomocą ICE. Czasami do wbudowanej jednostki trzeba również podłączyć inne bodźce, takie jak przełączniki mechaniczne, silniki krokowe i żarówki. Zwykle odbywa się to w sposób ręczny, automatyzacja byłaby świetna, ale trudna i droga do osiągnięcia. **Aktualizacja** Natknąłem się na framework testowy C, który wydaje się być całkiem skuteczny w testowaniu projektów wbudowanych. Wykorzystuje idee prześmiewczego sprzętu. Sprawdź Unity, CMock i być może Ceedling.


title: Czy bardziej wydajne jest jednokrotne wysyłanie zapytań dla wszystkich ustawień, czy wysyłanie zapytań za każdym razem, gdy ustawienie jest potrzebne?

text: Dla mojego skryptu bloga mam skonfigurowaną grupę użytkowników i system uprawnień. Każdy użytkownik jest przypisany do grupy użytkowników i mam długą listę ustawień uprawnień. Oba są przechowywane w bazie danych MySQL. Obecnie wykonuję około 10 zapytań o uprawnienia dla każdej strony, dla różnych funkcji zarządzania treścią. W połączeniu z kolejnymi około 20 zapytaniami do ogólnego użytku na blogu, liczba zapytań rośnie. Czy wydajniej byłoby zamiast tego wykonać jedno zapytanie na początku skryptu, aby pobrać wszystkie ustawienia uprawnień do tablicy, a następnie wszystkie funkcje porównywać wartości w tablicy zamiast sprawdzać bazę danych?


title: Rozwój oparty na testach: Aby utworzyć test, gdy zgłoszenie jest zgłoszone lub gdy zgłoszenie zostało odebrane przez kogoś?

text: Ostatnio pracowałem nad projektem tworzenia stron internetowych w zespole składającym się z mniej niż pięciu osób. Wszystko idzie dobrze, ale teraz zdecydowaliśmy się na rozwój oparty na testach. Do tej pory nauczyłem się, że jednym z ostatecznych celów jest to, aby podczas testowania oprogramowania wszystko zostało zaliczone. Jednak nasza obecna sytuacja jest taka, że mamy więcej otwartych problemów/historii niż to, co możemy obsłużyć w ciągu jednej lub dwóch iteracji i jesteśmy trochę zdezorientowani, jak właściwie radzić sobie z rozwojem opartym na testach w tej sytuacji. Jedno, co możemy zrobić, to to, że kiedy każdy z nas wybierze historię, ta osoba napisze do niej test. Każdy z nas będzie pracował w cyklu czerwony-zielony-refaktoryzacja. Inną rzeczą, którą możemy zrobić, jest stworzenie przypadków testowych dla wszystkich otwartych problemów. Wtedy każdy z nas może to podnieść i pracować nad wyeliminowaniem czerwonego za ten problem. Fajnie wygląda pierwsze podejście, ponieważ możemy zapewnić, że to, co zrobiliśmy, będzie zielone. Jednak to drugie podejście jest tym, o czym myślałem, że wygląda bardziej realistycznie, ponieważ odzwierciedla niedoskonały stan twojego oprogramowania. Nie jestem do końca pewien, jak jest zarządzany w prawdziwym świecie ani jaka powinna być najlepsza praktyka w tym zakresie. Opinie wszystkich są mile widziane.


title: Czy błędy wdrażania powinny stanowić awarię kompilacji?

text: Ze względu na złożoność produktu nasze oprogramowanie wykorzystuje własne, pisemne oprogramowanie wdrożeniowe. W ramach naszego obecnego procesu budowania QA (nie dev) (przy użyciu większej ilości oprogramowania wewnętrznego) kompilujemy kod, łatamy bazy danych, wdrażamy oprogramowanie i przeprowadzamy test dymny, a w niektórych przypadkach zautomatyzowane testy interfejsu użytkownika, przed kompilacją jest „zaliczony”. Przechodzimy do TFS2010 i pozbywamy się wewnętrznego procesu budowania i wolałbym nie dodawać tego procesu do kompilacji TFS. Jakich procesów używasz, aby zapewnić pomyślne wdrożenie i zgłaszanie błędów zespołowi programistycznemu? Czy kompilacja powinna być klasyfikowana jako awaria w przypadku błędów wdrażania/zasłony dymnej lub niepowodzeń automatycznego testu interfejsu użytkownika? TFS kończy proces kompilacji, gdy pliki są umieszczane w folderze upuszczania, a następnie oznacza, że kompilacja jest OK. Jeśli mam użyć tego samego rozwiązania, co teraz, albo kompilacja TFS musi zostać rozszerzona, aby wykonać wszystkie te zadania przed oznaczeniem kompilacji jako udanej, albo musimy mieć mechanizm oznaczania kompilacji jako nieudanej po wcześniejszym sukcesie .


title: Jakie dane powinienem zbierać dla witryny/aplikacji internetowej?

text: Mam stronę internetową, która umożliwia użytkownikom rejestrację kont, logowanie i odnawianie rocznej składki członkowskiej. Mogą również aktualizować swój profil osobisty, swój profil osobisty, przeglądać listę swoich pracowników, dokonywać płatności zbiorczych dla swoich pracowników, przeglądać rachunki i faktury itp. Dla osób niebędących członkami jest to zwykła strona internetowa z wieloma stronami, ale dla członków, ma sporo obszarów tylko dla członków, a więcej będzie w przyszłości (takich jak fora). Zawiera również stronę z ofertami pracy, rejestracje na kursy itp. **Jakie są przydatne „metryki”, które mogę zebrać, aby przekazać mi sensowne informacje o witrynie, którymi mogę się podzielić z moimi klientami.** Naprawdę nie wiem dużo o zbieraniu danych o tego typu rzeczach i chciałbym się nauczyć. Mam już pulpit nawigacyjny, na którym administratorzy mogą przeglądać/eksportować rejestracje w tym tygodniu i rejestracje tygodniowo z ostatnich 30 tygodni. Udało mi się pokazać im, że liczba rejestracji wzrosła po wysłaniu e-maila o nowym systemie. Myślę, że dodam również statystyki dotyczące tego, jak często użytkownicy aktualizują swoje profile i ilu użytkowników aktualizowało swój profil tego dnia/tygodnia. Dziękuję


title: Kto był pierwszym inżynierem oprogramowania?

text: Dosyć dobrze wiadomo, kto był pierwszym programistą, ale kto był lub był pierwszym inżynierem oprogramowania? Przez inżyniera oprogramowania mam na myśli kogoś, kto używa sformalizowanych specyfikacji i metod, aby dostarczać oprogramowanie, a nie tylko zadanie programowania wsadowego. Kiedy po raz pierwszy użyto tego terminu?


title: Najlepsze praktyki dotyczące nazw pakietów podczas przenoszenia biblioteki

text: Jaki jest sugerowany sposób (szczególnie w świecie open-source) nazwy pakietu podczas przenoszenia biblioteki. Powiedzmy, że przenoszę czyjąś bibliotekę, w której użyto struktury odwrotnej nazwy domeny dla nazwy pakietu, więc tam nazwa pakietu biblioteki była czymś w rodzaju `com.therename.thelib`. Co powinienem zrobić, jeśli zdecyduję się przenieść go do nowego języka? Czy powinienem zachować nazwę domeny w stanie nienaruszonym, nawet jeśli nie mieli na to wpływu? A może powinienem zmienić go na coś takiego jak `com.myname.thelib`?


title: Czy powinienem używać języka, w którym czuję się najbardziej komfortowo, czy firmowego „standardu”

text: Zamierzam opracować witrynę intranetową dla mojej konkretnej fabryki, a standardem naszej firmy do tworzenia stron internetowych jest IIS \+ ASP.Net \+ VB.Net \+ Microsoft SQL Server (zauważ, że mamy około 10+ zakładów) . Strona intranetowa będzie używana tylko przez mój zakład i tylko ja będę ją wspierać. Jestem znacznie bardziej biegły w konfiguracji LAMP, a programowanie i rozwiązywanie problemów mogę znacznie szybciej za pomocą PHP niż ASP.Net. Mimo że „standardem” firmy jest ASP.Net/VB.Net, większość tego, co firma robi jako całość, to kupowanie oprogramowania stron trzecich (które zwykle jest oparte na Javie) i bardzo, mam na myśli bardzo niewiele osób w firma zna nawet VB6, nie mówiąc już o ASP.Net/VB.Net. Biorąc to pod uwagę, **czy lepiej jest naruszyć standardy firmy i przejść z konfiguracją, którą mogę lepiej obsługiwać, czy lepiej wybrać konfigurację, którą firma może obsługiwać lepiej, jeśli kiedykolwiek odejdę, nawet jeśli nie jeden obecnie w firmie i tak może wspierać swój własny standard?** Kilka dodatkowych czynników do rozważenia w moim osobistym przypadku: * Znowu, to jest tylko dla mojego zakładu i tylko ja będę go wspierał, chyba że odejdę firma, a wtedy mój zastępca będzie ją wspierał. Nie ktoś już w firmie. * Firma i tak niewiele rozwija w swoim standardzie. * Prawie żadna z istniejących oprogramowania firm nie korzysta ze swojego standardu. * Jeśli wybiorę standard firmowy, to muszę korzystać z wersji Express Microsoft SQL i systemu operacyjnego Windows 7. Z moich odczytów wynika, że wersja Express jest w porządku do użytku biznesowego, ale rozmiar bazy danych jest ograniczony.


title: Czy styl kodowania może powodować lub wpływać na fragmentację pamięci?

text: Jak mówi tytuł, chciałbym wiedzieć, czy styl kodowania może spowodować lub wpłynąć na fragmentację pamięci w aplikacji natywnej, w szczególności napisanej przy użyciu C++. Jeśli tak, chciałbym wiedzieć jak. Przykładem tego, co rozumiem przez styl kodowania, jest użycie `std::string` do reprezentowania łańcuchów (nawet statycznych) i wykonywania na nich operacji zamiast używania Biblioteki C (takich jak `strcmp`, `strlen` i tak dalej ), który może działać zarówno na ciągach dynamicznych, jak i na ciągach statycznych (ten ostatni punkt jest korzystny, ponieważ nie wymaga dodatkowej alokacji, aby uzyskać dostęp do funkcji ciągów, co nie ma miejsca w przypadku `std::string`). „Wybiegające w przyszłość” podejście, które mam w przypadku C++, polega na tym, że nie używam CRT, ponieważ byłoby to w pewnym sensie krokiem wstecz. Jednak taki styl skutkuje bardziej dynamicznymi alokacjami, a zwłaszcza w przypadku długo działającej aplikacji, takiej jak serwer, powoduje to spekulacje, że fragmentacja pamięci może stać się problemem.


title: 12-czynnikowa konfiguracja aplikacji i Java

text: Czytałem manifest aplikacji 12-czynnikowej. Manifest zaleca przechowywanie danych konfiguracyjnych aplikacji w zmiennych środowiskowych. Czy to oznacza, że właściwości takie jak nazwa użytkownika/hasło DB, adres URL zasobów powinny być przechowywane jako część zmiennych Java Env, a nie jako pliki właściwości? Czy to bezpieczny sposób przechowywania informacji? Wydaje mi się, że jest to dość niezgrabny sposób przechowywania informacji. Jedną z opcji, o której mogę pomyśleć, jest posiadanie oddzielnej usługi konfiguracyjnej działającej w środowisku i użycie właściwości env, aby połączyć się z usługą konfiguracyjną, a następnie wysłać zapytanie do usługi konfiguracyjnej w celu uzyskania dalszych szczegółowych danych konfiguracyjnych.


title: Jak podejść do złej prośby klienta?

text: Załóżmy, że zakodowałeś jakąś nową funkcję. Teraz klient przychodzi do ciebie i prosi o zmianę, która sprawi, że ta nowa funkcja będzie mniej przyjazna dla użytkownika i po prostu niewłaściwa. Czy powinieneś po prostu zaakceptować prośbę o zmianę, czy możesz wpłynąć na klienta, że jego prośba jest niewłaściwa?


title: Jaki był historyczny wpływ lotu 501 Ariane 5?

text: Rozpad rakiety Ariane 5 37 sekund po wystrzeleniu w dziewiczy rejs (Lot 501) jest powszechnie określany jako jeden z najdroższych błędów oprogramowania w historii1: > Wyprodukowanie Ariane zajęło Europejskiej Agencji Kosmicznej 10 lat i 7 miliardów dolarów > 5, gigantyczna rakieta zdolna wyrzucić na orbitę parę trzytonowych satelitów przy każdym wystrzeleniu i mająca na celu zapewnienie Europie przytłaczającej dominacji w komercyjnym biznesie kosmicznym. > > Wystarczyło, by eksplodować rakieta w mniej niż minutę w swój dziewiczy rejs > w czerwcu ubiegłego roku, rozrzucając ognisty gruz po bagnach namorzynowych > Gujany Francuskiej, mały program komputerowy próbował wepchnąć 64-bitową liczbę do > 16 -bitowa przestrzeń. >> Jeden błąd, jedna awaria. Ze wszystkich nieostrożnych linijek kodu zapisanych w annałach informatyki, ta może być najbardziej dewastująco skuteczna. > Z wywiadów z ekspertami od rakiet i analizy przygotowanej dla kosmicznej agencji > wyłania się wyraźna droga od błędu arytmetycznego do całkowitego zniszczenia. Jakie główne zmiany spowodowała awaria Flight 501 i późniejsze dochodzenia zainspirowały do badań systemów krytycznych dla bezpieczeństwa i testowania oprogramowania? Nie szukam wyjaśnienia samego błędu, ale wyjaśnienia historycznego wpływu błędu, w kategoriach badań, które były inspirowane lub były bezpośrednio związane z dochodzeniem(ami) niepowodzenia. Na przykład niniejszy artykuł stwierdza: > Wykorzystaliśmy analizę statyczną do: > > * sprawdzenia inicjalizacji zmiennych, > * dostarczenia wyczerpującej listy potencjalnych konfliktów dostępu do danych dla > zmiennych współdzielonych, > * wyczerpującej listy potencjalnych błędów w czasie wykonywania z Semantyka Ady. > > > **Zgodnie z naszą wiedzą jest to pierwszy przypadek, w którym do walidacji programów przemysłowych stosowane są techniki analizy statycznej oparte na logice >> i nie oparte na logice.** Podobnie, niniejszy artykuł (pdf) zauważa: zostały wykorzystane do > analizy statycznej wbudowanego oprogramowania ADA wyrzutni Ariane 5 i > ARD. Analizator programu statycznego ma na celu automatyczne wykrywanie > ostateczności, potencjalności, niemożliwości lub niedostępności > błędów w czasie wykonywania, takich jak przepełnienia skalarne i zmiennoprzecinkowe, błędy indeksu tablicy, > dzielenia przez zero i powiązane wyjątki arytmetyczne, niezainicjowane > zmienne , wyścigi danych na wspólnych strukturach danych itp. Analizator był w stanie > automatycznie wykryć błąd lotu Ariane 501. **Analiza statyczna > wbudowanego oprogramowania krytycznego dla bezpieczeństwa (takiego jak oprogramowanie awioniki) jest bardzo > obiecująca**. Chciałbym dokładnie wyjaśnić wpływ tego pojedynczego wydarzenia na podejścia i narzędzia do testowania oprogramowania. 1 Liczba 7 miliardów dolarów prawdopodobnie odnosi się do całkowitego kosztu projektu Ariane 5, Wikipedia informuje, że awaria spowodowała straty w wysokości ponad 370 milionów dolarów. Wciąż dość kosztowna porażka, ale nie zbliża się do wartości 7 miliardów dolarów.


title: Testowanie, że atrybut nie istnieje, nie może zakończyć się niepowodzeniem podczas pisania testów przed kodem

text: Zostałem nauczony podążania za wzorcem Red->Green->Refactor podczas wykonywania TDD. Zdarzały się jednak sytuacje, w których ten wzór nie miał zastosowania. Na przykład test, aby upewnić się, że metoda akcji kontrolera (ASP.NET MVC) nie ma atrybutu Authorize. Ponieważ test testuje brak atrybutu, zostanie on przekazany za pierwszym razem, chyba że atrybut Authorize zostanie dodany tylko po to, aby test zakończył się niepowodzeniem. To, co do tej pory zrobiłem, testując brak wspomnianego atrybutu Authorize, to napisać dla niego test, a następnie dodać atrybut Authorize tylko po to, aby upewnić się, że test rzeczywiście działa, a następnie natychmiast usunąć atrybut Authorize. Czy robię coś złego, czy po prostu tak jest; niektóre testy zakończą się pomyślnie, chyba że celowo dodamy kod powodujący niepowodzenie, a następnie usuniemy ten konkretny kod?


title: Algorytm tworzenia gry TicTacToe AI

text: Jakich algorytmów mogę użyć do stworzenia sztucznej inteligencji do gry TicTacToe. Korzystałem już z przycinania alfa-beta i modelowania predykcyjnego. Jakie inne dobre algorytmy mogę wykorzystać do stworzenia tej sztucznej inteligencji. Chcę ćwiczyć nowy język, to świetny sposób na naukę nowego języka. Dziękuję


title: Inicjowanie przetwarzania w sposób RESTful

text: Załóżmy, że masz zasób, na którym możesz wykonywać normalne operacje PUT/POST/GET. Reprezentuje BLOB danych, a metody pobierają reprezentacje danych, niezależnie od tego, czy są to metadane dotyczące obiektu BLOB, czy samego obiektu BLOB. Zasób to coś, co może zostać przetworzone przez serwer na żądanie. W tym przypadku plik, który można wielokrotnie analizować. Jak zainicjować to przetwarzanie? To trochę jak RPC. Czy istnieją wokół tego najlepsze praktyki? Czytałem to: RESTFul: akcje zmieniające stan, ale tak naprawdę nie odpowiada to na pytanie. (Pierwszy raz na programistach. To jest właściwe miejsce na tego rodzaju pytania, prawda?)


title: Luźne pisanie nie jest stosowane do obiektów

text:
Mam bardzo małe doświadczenie w pracy z klasami i obiektem. Pracuję w luźno pisanym języku PHP. Pracowałem z obiektem SimpleXML i napotkałem problem, w którym próbowałem wykonać matematykę z elementem tego obiektu, takim jak `$results->ProductDetail->{'Net'.$i};` Jeśli powtórzyłem tę wartość, Dostałbym `0.53`, ale kiedy próbowałem z nim zrobić matematykę, został przekonwertowany na `0` Czy istnieje powód, dla którego luźno pisany język nie rozpoznałby tego jako zmiennoprzecinkowego i nie potraktował go jako takiego? Dlaczego „echo” miałoby traktować to jako ciąg znaków, ale matematyka go nie konwertuje? Przykład: $xml='<?xml version="1.0" kodowanie="UTF-8" ?>'; $xml.='<Test> <Item> <Cena>0,53</Cena> </Item> </Test>'; $result=simplexml_load_string($xml); var_dump($result->Item->Cena); echo '
'; echo $wynik->Przedmiot->Cena; echo '
'; echo 1+$result->Przedmiot->Cena; echo '
'; echo 1+(float)$result->Item->Price; Dane wyjściowe: object(SimpleXMLElement)#4 (1) { [0]=> string(4) "0.53" } 0.53 1 1.53 Brak wersji obiektu: $no='.53'; echo 1+$nie; Wyjście: 1.53 ================================ Uwaga dodatkowa: PHP `strpos()` nie konwertuje poprawnie liczby całkowitej igłę `$i` w ciąg. $x=101; $i=1; if(strpos($x,"$i")===FALSE){echo $i." brakuje";} i $x=101; $i=1; if(strpos($x,$i)===FALSE){echo $i." missing";} dają różne wyniki. Nie chcę zostać hejterem php, ale zaczynam tracić to uczucie miłości.


title: Jak współpracować nad funkcjami za pomocą github

text: github zachęca do 1 rozwidlenia na użytkownika, dzięki czemu użytkownik może pracować niezależnie nad funkcją, a następnie poprosić o zaakceptowanie tej funkcji do głównego repozytorium za pomocą pull request. Co jednak, jeśli 2 programistów będzie musiało współpracować przy tej funkcji? Jaki jest idealny przepływ pracy? Widziałem kilka opcji: 1. Obaj programiści rozwidlają oryginalne repozytorium. Każdy programista ściąga/przesuwa zmiany między swoimi repozytoriami. Wydaje się, że jest to dużo pracy (drobne mikrooperacje), a także powoduje opóźnienie między zmianami, więc zwiększa okno konfliktów. 2. Rozwidla się programista 1 z głównego repozytorium, programista 2 rozgałęzia się od programisty 1. To samo, co głównie #1, ale miejmy nadzieję, że nieco uprości życie programisty 2? 3. Programista 1 daje programiście 2 uprawnienia do własnego rozwidlenia, więc obaj pracują z tego samego centralnego repozytorium. Nie jestem pewien, czy to jest idealne. Jestem też ciekawa, gdzie w tym rozgrywce wchodzą gałęzie. Oczywiście istniałaby gałąź dla samej funkcji, ale ta gałąź nie może istnieć w jednym miejscu, musiałaby istnieć na wielu rozwidleniach i być zsynchronizowana. Zasadniczo po prostu bardzo zdezorientowany tym przepływem pracy, chciałby uzyskać podejście, w jaki sposób można to najlepiej osiągnąć.