title: Funkcje niestandardowe w REST API

text: Patrząc na dwa z naszych podmiotów `Firma` i `Adres`. Firma ma „adres rozliczeniowy” i „adres profilu”. Nie jestem pewien, jak zaimplementować funkcję ustawiania adresu rozliczeniowego w porównaniu z profilem. Oto opcje, które widzę: 1. Utwórz nowy adres używając `POST` do `/address`. Zaktualizuj obiekt firmy w `/company` o `profileAddress = {/* nowy identyfikator adresu */}` 2. Wykonaj `/company/:id?function=updateBillingAddress&{/* pozostałe parametry przejdź tutaj */} ` 3. Wykonaj `/updateBillingAddress?company={companyId}&{/* pozostałe parametry tutaj */}` 4. Wykonaj `/company/:id?billingAddress={ /* tutaj dane adresowe */ }` Metoda wymaga dwóch wywołań i większej odpowiedzialności ze strony programisty łączącego się z API. Jednak nie jestem pewien, czy dwie drugie metody mają odpowiednią strukturę. Ten ostatni wydaje się być w porządku, zapewnia elastyczność aktualizacji bez ponoszenia odpowiedzialności za zarządzanie wskaźnikami lub wykonywanie dwóch połączeń.. wciąż niepewny. Czy ktoś widział wcześniej stosowanie metod 2 lub 3. Czy można ich używać? Dlaczego? Dlaczego nie? Którego sugerowałbyś użyć i dlaczego?


title: Czy wskaźnik Head(początkowy) listy podwójnie połączonych wskazuje wcześniej na węzeł końcowy(ostatni)?

text: Mam na myśli jedno pytanie, że w przypadku okrągłej podwójnie połączonej listy, główny wskaźnik podwójnie połączonej listy również logicznie wskazuje na następny wskaźnik węzła końcowego połączonej listy, a następny wskaźnik ogona również wskazuje poprzedni wskaźnik głowy . Proszę o odpowiedź na to pytanie, jestem trochę zdezorientowany.


title: Zaprojektuj aplikację do wysyłania wiadomości, zaznaczając na mapie kółko, do którego chcesz wysłać wiadomość?

text: > Zaprojektuj aplikację do wysyłania wiadomości, zaznaczając na mapie kółko, w którym > chcesz wysłać wiadomość ? To pytanie zadał mi ankieter. > Mając mapę świata, wybierz kraj, do którego chcesz wysłać wiadomość, > zaznaczając obszar kółkiem, a następnie wyślij wiadomość do wszystkich > osób w tym obszarze. Wizualny link do pytania : Zaprojektuj tę aplikację > **Podejście, które mu powiedziałem** : > > Najpierw zbuduj całe dane osoby (kontakty, informacje o miejscu i inne). > Następnie, w miejscu zaznaczonym na mapie, po prostu zbuduj klaster tego kraju za pomocą > Hadoop i wyślij wiadomość do wszystkich kontaktów danej osoby > w tym klastrze. proszę pomóż mi lepiej zrozumieć ten problem i czy istnieje lepsze podejście do problemu (wszystkie back-end i front-end).


title: Kiedy należy używać kompozycji zamiast przepisywać funkcjonalność?

text: Powiedzmy, że mam klasę A, która ma metody m1,m2,m3,m4,m5....m100. Tworzę inną prostszą klasę B i wymagam tylko m2,m3 i m5 w B. Czy powinienem idealnie używać kompozycji i umieścić odwołanie A wewnątrz B i po prostu delegować funkcjonalność? czy powinienem po prostu ponownie napisać[copy=paste] te 2-3 metody z klasy A ?


title: Dlaczego SVG przegrał z Flashem?

text: Jest dużo szumu wokół, że HTML5/Canvas w końcu stanie się zabójcą flasha. Ale po kilku badaniach dowiaduję się, że HTML5/Canvas to tylko grafika bitmapowa. Prawdziwym konkurentem Flasha jest tak naprawdę SVG. SVG został wydany kilka lat temu. Moje pytanie brzmi, dlaczego SVG nie okazał się zabójcą flasha?


title: Które metodologie tworzenia oprogramowania można uznać za fundamenty

text: Piszę mały artykuł badawczy, który dotyczy metodologii tworzenia oprogramowania. Przeglądałem wszystkie dostępne metodologie i zastanawiałem się, czy ze wszystkich metodologii są takie, które zapewniły podstawy dla innych? Na przykład, patrząc na następujące metodologie: Agile, Prototyping, Cleanroom, Iterative, RAD, RUP, Spiral, Waterfall, XP, Lean, Scrum, V-Model, TDD. Czy możemy powiedzieć, że: prototypowanie, iteracja, spirala i wodospad są „podstawą” dla innych? A może nie ma czegoś takiego jak „podstawy” i czy każda metodologia ma swoją własną, niepowtarzalną historię? Oczywiście chciałbym opisać wszystkie metodologie w moim artykule badawczym, ale po prostu nie mam na to czasu i dlatego chciałbym wiedzieć, które metodologie można uznać za reprezentatywne.


title: Kiedy powinienem wydać/ogłosić moją bibliotekę open source?

text: Rozwijam bibliotekę `python` do inspekcji baz danych. Kiedy jest dobry czas, aby to ogłosić/wypuścić? Oczywistą odpowiedzią jest to, że kiedy jest gotowy do użycia. Chciałbym jednak uzyskać informację zwrotną na temat API, co byłoby przydatne i działać zgodnie z zasadą `release early`. Jakieś rady na temat tego, co powinienem rozważyć przed zwolnieniem?


title: Jakie jest znaczenie terminu kontekst w programowaniu?

text: Przeglądałem niektóre dokumenty celu C... i otrzymałem to: > UIGraphicsBeginImageContext: Tworzy kontekst graficzny oparty na mapie bitowej i > czyni go bieżącym kontekstem. Również ten sam termin jest używany w Robotlegs : > (http://www.adobe.com/devnet/actionscript/articles/intro-robotlegs-pt1.html) > Kontekst: Kontekst to mechanizm ładowania początkowego, który inicjuje zależność > wstrzykiwanie i różne podstawowe narzędzia, z których korzysta Robotlegs. Słownikowe znaczenie kontekstu, jak wygooglowałem, nie wydaje się pasować do sposobu, w jaki jest on używany w programowaniu: > kontekst /ˈkäntekst/ Rzeczownik Okoliczności, które tworzą tło dla zdarzenia, stwierdzenia lub pomysłu, i pod jakimi warunkami może być w pełni zrozumianym > i ocenionym. > > Części czegoś pisanego lub mówionego, które bezpośrednio poprzedzają i następują po > słowie lub fragmencie i wyjaśniają jego znaczenie. Każdy może rzucić trochę światła pls! V.


title: Jak korzystać z zewnętrznej porównywarki plików w MS TFS

text: Nie podoba mi się program ms diff, który jest zintegrowany z Visual Studio 2008 TFS Edition. Czy można zmienić tę porównywarkę plików na zewnętrzną (np. Beyond Compare)?


title: Dlaczego warto korzystać z REST z PHP?

text: Tworzę aplikację na Androida, potrzebuję uzyskać informacje z zewnętrznej bazy danych w mysql i czytam o Rest.. REST używa czasowników HTTP GET, POST, PUT, DELETE, aby odpowiednio pobrać, wstawić, zaktualizować, usunąć zasoby na serwerze . Np. GET with url: controller/customer/{id} Ale dlaczego nie użyć prostego PHP ? czy naprawdę konieczne jest korzystanie z REST? nie rozumiem, dlaczego muszę używać Rest, jeśli prosty PHP zrobi to samo. Reszta z php to RESTFul?


title: Jak wbudować komunikaty debugowania do swoich programów/skryptów?

text: Ogólne, wysokopoziomowe pytanie dla osób, które regularnie pracują z kodem. Przekształciłem stary, przestarzały kod JavaScript na rozszerzenie Chrome i aby pomóc mi to zrozumieć, napisałem krótki kod, który pomoże (patrz poniżej). Regularnie umieszczam w kodzie komunikaty takie jak `dbmsg('Rozpocznij funkcję loadDefaults()');` lub `dbmsg('Ustawienia zapisane w pamięci');` i wiadomość jest wysyłana do konsoli. Ilekroć potrzebuję debugować coś, w czym standardowe komunikaty konsoli nie pomagają, po prostu włączam debugowanie. Myślę, że ta metoda jest dość prosta i może być przeniesiona na inne języki. **Jakie inne sposoby włączasz debugowanie do swoich programów?** Jestem samoukiem, więc nie znam standardowych praktyk, ale bardziej interesują mnie unikalne sposoby, które odkryłeś, aby wykonywać tego rodzaju rzecz. /** Narzędzia debugowania * * Ustaw debugMode na 1, aby wyświetlić komunikaty o błędach, 0, aby ukryć komunikaty. */ var debugMode = 1; function dbmsg(wiadomość) { if (debugMode == 1 ) { var date = new Date(); var czas = date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds(); console.log('DBM - ' + czas + ': ' + wiadomość); if ( chrome.runtime.lastError ) { console.log('DBM lastError - ' + chrome.runtime.lastError); } } else if ( debugMode == 0 ) { return; } } if ( debugMode == 1 ) { console.log('Tryb debugowania jest obecnie WŁĄCZONY. Każda wiadomość debugowania jest poprzedzona "DBM" i godziną wygenerowania wiadomości.'); // Nasłuchuj zmian w pamięci chrome.storage.onChanged.addListener(function(changes, namespace) { for (klucz w zmianach) { var storageChange = changes[key]; dbmsg('Klucz pamięci "%s" w przestrzeni nazw "% s" zmieniono. ' + 'Stara wartość to "%s", nowa wartość to "%s".', klucz, przestrzeń nazw, storageChange.oldValue, storageChange.newValue); } }); }


title: DTOs mają znaczenie w akcji ASP.NET MVC JSON?

text: Niedawno natknąłem się na wewnętrzny projekt, w którym używali DTO w całym rozwiązaniu, a kiedy zasiadłem do wdrożenia nowego kontrolera MVC z punktem końcowym JSON REST, zdecydowałem się użyć konwencji obiektów anonimowych zamiast deklarować dyskretną klasę DTO wyłącznie dla celu tego punktu końcowego interfejsu API. public JsonResult GetSomeSuch() { // .. do pracy return Json(new { PropA = domainObj1.PropA, PropB = domainObj2.PropB }); } .. w przeciwieństwie do konwencji zespołowej, .. public JsonResult GetSomeSuch() { // do pracy .. return Json(new SomeSuchDTO2 { PropA = domainObj1.PropA, PropB = domainObj2.PropB } } // w innym pliku wyłączone w jakimś innym projekcie i folderze public class SomeSuchDTO2 { public int PropA { get; set; } public string PropB { get; set; } } Odkładając na bok, że powinienem był tutaj użyć DTO tylko dlatego, że była to już konwencja zespołu, konwencje zespołu najlepsze praktyki, dopóki konwencje zespołu nie zmienią się przez kierownictwo zespołu, którego jeszcze nie byłem częścią. Nie przejmuję się aspektami dynamiki społecznej/zespołu i spójności tak bardzo, jak techniczną wartością szczegółów w szczególności w momencie, w którym działanie w C# zostaje zserializowany do JavaScript, ponieważ od tego czasu przeniosłem się z tej firmy.Konwencja zespołu polegała na zwracaniu tylko DTO, a DTOs były zarządzane w całkowicie di fferent project (spośród około 50 projektów w rozwiązaniu) czułem, że w tym przypadku utrwalanie tego wzorca jest nadmierne i trudne do utrzymania. Co więcej, wierzę, że DRY musi korelować z YAGNI; Refaktoryzuj tylko wtedy, gdy powtarzasz tę samą rzecz dwa razy, jako taki, refaktoryzowałbyś tylko, aby użyć DTO, jeśli ta sama struktura obiektu zwracanego odzwierciedlająca ten sam kontekst jest w rzeczywistości potrzebna gdzie indziej, nie tylko prawdopodobnie, ale w rzeczywistości, ale ponieważ jest to serializowana do JavaScript, gdzie i tak zostanie wykorzystany, i tak naprawdę nie ma sensu. Przypuszczam, że można argumentować za DTO jako dokumentacją specyfikacji, ale kiedy deklarowanie ich i wyszukiwanie ich w specjalnym folderze w projekcie staje się bardziej uciążliwe dla konserwacji, argumentuję, że są bardziej odpowiednie miejsca i środki do dokumentowania Interfejs; w rzeczywistości deklaracja anonimowego obiektu wydaje się być wystarczającą dokumentacją. Powinienem również dodać, że w naszym przypadku wszystko było wewnętrzne, był to samodzielny projekt, więc to nie było tak, że było to zewnętrzne API. Zastanawiałem się, czy istnieją inne punkty widzenia, których nie wziąłem pod uwagę, dlaczego powinienem używać DTO, coś rozsądnie przekonującego?


title: Semantyczne nazwy klas CSS

text:
Zawsze czytam artykuły, które sugerują, aby nie używać prezentacyjnych nazw klas CSS. Obecnie pracuję nad małym projektem strony internetowej. Stopka na tej stronie wygląda tak: ![Footer](http://i.stack.imgur.com/FTdZl.jpg) Chociaż jest to dość proste, nie jestem do końca pewien, jak nazywać nazwy klas. W tej chwili używam tego systemu siatek, który używa nazw klas, takich jak „jedna czwarta”, „połowa” i tak dalej. Najłatwiej byłoby wtedy użyć struktury HTML takiej jak ta:

Adres
 Lorem Ipsum
 Lorem Ipsum

Adres
 Lorem Ipsum
 Lorem Ipsum
<!- - -->

  Ale z kilku powodów będę musiał użyć cichych klas SASS zamiast używać klas takich jak "one-quarter" bezpośrednio w mojej strukturze HTML: .classname { @extend %grid__item; @extend %one-quarter; // ... } Nie wiem, jak nazwać różne kolumny w stopce. „footer_ _left” / „footer_ _right” są bardzo prezentacyjne, podobnie jak „footer_ _address” (treść może ulec zmianie w przyszłości) / „footer_ _nav”. Czy są jakieś najlepsze praktyki lub ogólnie artykuł o nazewnictwie klas CSS? I zdaję sobie sprawę, że to głównie osobista opinia, ale nadal chciałbym usłyszeć od innych, jak sobie z tym radzą.


title: Jak sobie poradzić, gdy jeden użytkownik usunie obiekt, a drugi otworzył go w trybie edycji w aplikacji internetowej?

text: Zajmuję się tworzeniem aplikacji internetowej typu CRUD. Jest to system zarządzania projektami posiadający projekty, kamienie milowe, zadania, pracowników itp. Każdy pracownik posiada własne konto do logowania i przeglądania systemu. Pojawiają się tu problemy: 1. Jeśli jeden użytkownik usunie zadanie, podczas gdy drugi ma je otwarte w tym samym czasie, drugi użytkownik otrzyma wyjątek z pustym wskaźnikiem, jeśli spróbuje edytować i zapisać, ponieważ obiekt nie istnieje. 2. Ten sam problem w nieco innej sytuacji. Jeden użytkownik ma otwarte okno zadań. Drugi użytkownik usuwa jednego pracownika. Pierwszy użytkownik próbuje przypisać zadanie do usuniętego pracownika (ponieważ jest już na liście w polu rozwijanym) i otrzymuje wyjątek zerowego wskaźnika. 3. Jeśli ktoś usunie obiekt, a inny użytkownik spróbuje go otworzyć w tym samym czasie (będzie to wyjątek zerowego wskaźnika przy próbie zdobycia elementu) próbuję zostawić szczegóły techniczne projektu, ponieważ to zależy od tego. Ale jeśli to pomaga, używam frameworka Vaadin opartego na Javie. Baza danych to MySQL. Myślałem o dwóch możliwych rozwiązaniach, ale nie jestem ich pewien: 1. Przechwyć wyjątek zerowego wskaźnika i wydrukuj ogólne ostrzeżenie na ekranie („Brak niektórych obiektów ...). Ale nie byłoby jasne dla użytkowników, co dokładnie się stało 2. Sprawdź każde zatwierdzenie obiektu i jeśli został usunięty, złap wyjątek i podaj bardziej szczegółowe wyjaśnienie.Ale to nie pomoże w trzeciej sytuacji.Naprawdę szukam jakichkolwiek wskazówek, porad lub wskazówek, których możesz udzielić jak właściwie radzić sobie w takich sytuacjach. Z góry dziękuję!


title: Najlepszy sposób na organizowanie zapytań SQL przechowywanych w kodzie? (a może powinieneś?)

text: Jestem pewien, że nie jestem jedyną osobą, która denerwuje się, gdy widzą stronę kodu zaśmieconą zapytaniami SQL. ActiveRecord i inne wzorce ORM pomagają złagodzić znaczną ilość SQL używanego w projekcie, ale w wielu przypadkach złożonych zapytań, użycie SQL jest pozornie nieuniknione. Szukam opinii na temat tego, jak powinny być zorganizowane zapytania SQL z resztą kodu (lub zewnętrznie do niego), aby nie było rozproszone po całym miejscu? Jednym z oczywistych pomysłów jest użycie widoków, ale często widoki mogą być źródłem problemów z wydajnością, gdy mamy do czynienia z wieloma dużymi indeksowanymi tabelami itp. **EDYTUJ 1 – zakładam, że masz już to rozdzielone na warstwę modelu**


title: Dobre książki lub samouczki dotyczące projektów budowlanych bez IDE?

text: Chociaż z pewnością nie mam złudzeń, że budowanie oprogramowania bez IDE jest możliwe, tak naprawdę nie wiem zbyt wiele na temat robienia tego dobrze. Używam narzędzi graficznych, takich jak Visual Studio lub Code::Blocks, tak długo, że jestem bez nich całkiem zagubiony. A to naprawdę śmierdzi, kiedy chcę zmienić środowisko lub język. Tak naprawdę nie mogłem nic zrobić w D, dopóki ktoś nie stworzył wtyczki Visual Studio, a teraz, gdy próbuję zrobić więcej na Macu, nie mogę ponownie użyć D, ponieważ wtyczki XCode nie działają. Mam dość zagubienia się, gdy widzę plik .make i nie mam pojęcia, co mam zrobić z folderem pełnym plików źródłowych. Ludzie nie mogą kompilować ich jeden po drugim za pomocą konsoli, a następnie łączyć je jeden po drugim. Spędzałbyś więcej czasu na wpisywanie nazw plików niż kodu. Więc jakie są narzędzia automatyzacji i produktywności użytkowników bez IDE? Jak zarządzasz projektem, kiedy piszesz cały kod w emacsie, vimie, nano lub czymkolwiek? Chciałbym, żeby była książka lub przewodnik online, który wyjaśnia niektóre z tego.


title: Jak usprawnić przepływ pracy projektantów i deweloperów?

text: Pracuję w małym startupie z dwoma front-end developerami i jednym projektantem. Obecnie proces rozpoczyna się od wysłania przez projektanta pliku png z całym projektem strony i zasobami w razie potrzeby. Moim zadaniem jako front-end developera jest przekonwertowanie go na stronę HTML/CSS. Mój przepływ pracy wygląda obecnie tak: 1. Rozłóż poszczególne części za pomocą elementów html. 2. Stylizuj każdy element bardzo z grubsza (pływaki, minimalne czcionki i dopełnienie), abym mógł go zmodyfikować za pomocą inspekcji. 3. Za pomocą Narzędzi dla programistów Chrome (sprawdź) dodaj/zmień atrybuty css podczas aktualizacji pliku css. 4. Odśwież stronę po X zmian. 5. Użyj Pixel Perfect, aby bardziej dopracować projekt. 6. Usiądź z projektantem, aby dokonać ostatnich poprawek. Wnioskowanie o dopełnieniach, marginesach, rozmiarach czcionek za pomocą prób i błędów zajmuje dużo czasu i wydaje mi się, że proces może stać się bardziej wydajny, ale nie jestem pewien, jak go poprawić. Korzystanie z plików PSD nie jest opcją, ponieważ kupowanie programu Photoshop dla każdego programisty nie jest obecnie rozważane. Przewodnik projektowania nie jest również dostępny, ponieważ projektowanie wciąż ewoluuje i wprowadzane są nowe funkcje. Świetne będą pomysły na ulepszenie powyższego procesu i podzielenie się, jak ten proces wygląda w Twojej firmie.


title: Algorytm do wybierania rozsądnych wartości min/maks dla jednej wartości

text: Robię uproszczone IDE w przeglądarce dla bardzo specyficznego dla domeny kodowania. Ponieważ tak bardzo podobają mi się przemyślenia Breta Victora na temat programowania uczącego się, że pomyślałem, że dorzucę kilka liczb, które można przeciągać, ala Tangle.js (kliknij tutaj, aby zobaczyć, o czym mówię). Moja implementacja jest znacznie prostszą kontrolką wprowadzania danych za pomocą suwaka, ale idea jest taka sama. Pojawia się jednak jedna kwestia. Suwak przeciągania wymaga wartości min, max i kroku. Ponieważ wartości są wprowadzane przez użytkownika, nie mogę ich na stałe zakodować. Obecnie robię `{min: currentValue/10, max: currentValue*5}` ale jest to tak uproszczone, że nie ma sensu w dużej klasie przypadków. To, czego chciałbym, to algorytm (który wyobrażam sobie, że byłby tylko prostym obliczeniem), który podałby wartość liczby, aby dobrze zgadywał wartości minimalne, maksymalne i krokowe. (Lub dowolne 2 z tych od momentu uzyskania trzeciego byłoby trywialne). np. fn(15) -> {min: 0, max: 35, krok: 1} fn(1.478) -> {min: -2, max: 5, krok: .2} fn(-7034) -> {min: -35000, max: -500, krok: 100} Oczywiście nie musi i nie może być idealne, ale zastanawiam się, czy ktoś ma pomysł na algorytm lub coś matematycznego, co ma tu sens.


title: Wzajemne wykluczanie w sieci - wzorzec?

text: Chcę wykonać następujące czynności: Mam kilka komputerów. Na każdym komputerze uruchomi się program. Nie ma scentralizowanego serwera. Program może wybrać według zdefiniowanych kryteriów, aby podać dane określone dla innego komputera. Robiąc to, drugi komputer nie powinien robić tego samego. (Rodzaj synchronizacji dwukierunkowej) Zróbmy przykład. (C1 .. Cn to programy działające na różnych komputerach) C1 wysyła zaktualizowane dane C2. Gdy przetwarzanie jest aktywne, C2 nie powinien prosić C1 o aktualizację czegoś innego. Pomysł był następujący: C1 wysyła wiadomość do C2: PauseExecution() C1 wysyła do C2 elementy do przetworzenia (aktualizuje niektóre dane na C2) C1 wysyła wiadomość do C2: ResumeExecution(). C2 wysyła wiadomość do C1: PauseExecution() C2 wysyła do C1 elementy do przetworzenia (aktualizuje niektóre dane na C1) C2 wysyła wiadomość do C1: ResumeExecution(). Ale teraz pojawia się największy problem. Jeśli C1 wyśle wiadomość do C2 do pauzy, a C22 wyśle w tym samym czasie wiadomość do C1 do pauzy, oba zostaną zablokowane. Nie ma scentralizowanego serwera / pamięci współdzielonej do przechowywania semafora. Czy istnieje inny wzorzec, którego można użyć, aby n komputerów się nie blokowało? Więc to pytanie dotyczy wykluczenia algorytmicznego. A może istnieje inne obejście tego problemu, jeśli nie można użyć semafora ani muteksu?


title: Przypadki użycia w odniesieniu do dalszych systemów

text: Przypadki użycia są przeznaczone przede wszystkim do interakcji między użytkownikiem a systemem. Może być używany do interakcji między systemem a innym systemem. Aktorzy to przede wszystkim role. Łatwo jest udokumentować przypadki użycia dla aplikacji typu front-end, takich jak portal, w którym można zdefiniować wszystkie działania i role wykonujące działanie. Jeśli jednak system jest systemem zarządzania zamówieniami lub zaopatrywania, który z systemów niższego rzędu, w jaki sposób można udokumentować przypadki użycia? Na przykład: Aplikacja do zarządzania zamówieniami może odpowiadać za przetwarzanie zamówień typu nowa instalacja , zmiana usługi , anulowanie , zmiana harmonogramu , wstrzymanie , ponowne uruchomienie itp. Transakcje te mogą być wywoływane z różnych źródeł różnymi sposobami (wywołanie usługi , wpis umieszczony w db które sondy aplikacji OM , kolejność umieszczona w kolejce jms - zakładam jednak, że nie mają one związku z przypadkiem użycia). Po otrzymaniu zamówienia aplikacja do zarządzania zamówieniami może wymagać interakcji z różnymi aplikacjami (sprawdzanie zdolności kredytowej , wysyłka , udostępnianie , aktywacja , rozliczenia itp.) w zależności od typu zamówienia. **EDYCJA: DODANO WIĘCEJ INFORMACJI** Mam aplikację, która odbiera dane z aplikacji nadrzędnej. Moja aplikacja wykorzystuje usługi sieciowe udostępniane przez wiele innych aplikacji w celu wykonania zadania. Dane przepływają przez wiele aplikacji, zanim dotrą do nadrzędnego systemu, który wysyła wiadomości do mojej aplikacji. Czynności, które wykonuje moja aplikacja, to instalowanie, odłączanie, zawieszanie, przywracanie itp. przy użyciu wielu usług, z których korzysta. Kiedy czytam posty o posiadaniu systemu jako aktorów, głównym celem wydaje się być właściwe rozgraniczenie i zdefiniowanie interfejsów. W powyższym scenariuszu, zakładając, że system nadrzędny to A, moja aplikacja to B, a aplikacje używane przez moją aplikację to C, D i E. 1) Moja aplikacja wykonuje instalację, rozłączanie, ponowne uruchamianie i zawieszanie. Czy to są działania? 2) Czy głównym aktorem będzie system wysyłający wiadomości do mojej aplikacji? Nie mogę myśleć o tym jako o roli, a także nie ma interakcji między aplikacją nadrzędną a moją aplikacją po punkcie, w którym moja aplikacja otrzymuje wiadomość. 3) Jak mogę zdefiniować aplikacje zewnętrzne, z których korzysta moja aplikacja? jako aktor czy działalność? czy nie muszę się tym przejmować na diagramie przypadków użycia? Kiedy podejmujesz interakcję między użytkownikiem a systemem do zakupu produktu - wymienisz szereg interakcji między Tobą a oprogramowaniem. Nie określono jednak, jakie oprogramowanie wykonuje wewnętrznie. Tutaj w moim przypadku, ponieważ jest to system downstream, system upstream wysyła tylko jedną wiadomość i nie ma serii interakcji. Dlatego nie wiem, jak mam zdefiniować scenariusze.


title: Raporty z linii frontu: VS Lab Management

text: Zajmuję się teraz Lab Management w naszym środowisku testowym do testów ręcznych i automatycznych. Dopiero zaczynam proces łączenia różnych serwerów w celu hostowania/obsługi go, a następnie będę robił kilka fikcyjnych projektów i pracował nad tym procesem. Obecnie do tworzenia maszyn wirtualnych używamy System Center Virtual Machine Manager (SCVMM) i budujemy na nich systemy. Nasz przepływ pracy dla testów ręcznych wygląda mniej więcej tak: 1. Buduj maszyny wirtualne z obsługiwaną platformą (OS, oprogramowanie Pre-req itp.) 2. Zainstaluj najnowszą kompilację lub dowolną kompilację zauważoną w błędzie, który próbujemy do odtworzenia 3. Zrób migawkę VM 4. Przetestuj lub odtwórz 5. Zrób migawkę, gdy pojawi się błąd 6. Utwórz błąd w TFS, zostaje przypisany do Dev 7. Dev zwykle prosi o zobaczenie maszyny wirtualnej, loguje się i robi to, czego potrzebuje 8. Podczas gdy Dev pracuje nad poprawką, piszemy automatyzację, aby wykonać repro (za pomocą wewnętrznych narzędzi - to trochę słaby punkt) lub przejść do innego ponownego testowania błędów lub czegoś podobnego 9. Dokumentuj wszystko, co ważne, o czym zespół może potrzebować w przyszłości na naszej wiki 10. Gdy otrzymamy poprawkę, w zasadzie wracamy do migawki utworzonej w kroku 5 i uruchamiamy automatyzację (jeśli została ukończona - czasami może to zająć trochę czasu, który nie jest dostępny) Zastanawiałem się, czy ktoś inny korzystał z zarządzania laboratorium lub obecnie używa go w środowisku produkcyjnym. Chciałbym zapytać tych ludzi: Strona testowa: * Jakie namacalne korzyści widzieliście z korzystania z zarządzania laboratorium? Co jest łatwiejsze? Co jest trudniejsze? (w porównaniu do tego, co robiłeś wcześniej) * Biorąc pod uwagę to, czego używamy teraz, gdzie widzisz słabe punkty, że zarządzanie laboratorium może znacząco pomóc? * Jak wypada automatyzacja pisania w porównaniu z innymi używanymi przez Ciebie metodami? Strona deweloperów: * Czy błędy utworzone za pomocą zarządzania laboratorium zapewniają wszystko, czego potrzebujesz? Marketing dotyczący zarządzania laboratorium pokazuje wiele informacji generowanych automatycznie i możliwość przeskoczenia do migawki wydaje się pomagać, ale nie widzę, jak można łatwo przejść przez cokolwiek w debuggerze bez ściągnięcia bazy kodu i posiadanie konfiguracji środowiska deweloperskiego na maszynie wirtualnej (mało prawdopodobne, że w naszym przypadku baza kodu jest dość duża).


title: Mylące zależności projektowe

text: Mam projekt dla mojej głównej aplikacji i kilka projektów dla modułów, które są używane przez tę aplikację. Poniżej sprowadzę go do projektu głównego i jednego projektu modułowego. Oba projekty współdzielą pewne zależności, ale projekt modułu jest również zależnością projektu głównego. Pomyślałem, że najlepiej byłoby stworzyć rodzica pom, który zawiera wszystkie współdzielone zależności. Dodatkowo chciałem stworzyć agregację projektu jak opisano na http://maven.apache.org/guides/introduction/introduction-to-the-pom.html, aby zbudować wszystko w jednym kroku. Ale musiałbym też zadeklarować projekt modułu jako zależność projektu głównego. Nie sądzę, żeby to było dobre podejście i jestem zdezorientowany, ponieważ projekty są cytowane w wielu miejscach. Czy masz jakieś rozwiązania na stworzenie czystej struktury?


title: Element sprintu trwa dłużej niż oczekuje się, że zostanie ukończony. Co powinniśmy zrobić?

text: Co powinniśmy zrobić, jeśli element w scrumie trwa dłużej niż oczekiwano? Pytam o to, ponieważ zauważyłem elementy, które programiści mają trudności z ukończeniem, ponieważ jest to znacznie trudniejsze niż początkowo sądzono. Czy w takiej sytuacji * należy usunąć przedmiot ze sprintu z powrotem do katalogu produktów, aby dotrzymać harmonogramu sprintu? * przejdź do łatwiejszego elementu sprintu i pozostaw problematyczny sprint do końca osi czasu * uzasadnij podczas przeglądu sprintu, dlaczego element nie może zostać ukończony w bieżącym sprincie dla interesariuszy? Jak możemy uniknąć takiej sytuacji w przyszłości? Czy to z powodu braku planowania z góry, czy też nie staraliśmy się rozbić elementu sprintu na mniejsze elementy?


title: Jak prawidłowo przeprowadzić spotkanie programistyczne?

text: Jestem Product Managerem, mam pod sobą około 10 programistów, projektantów UX i marketerów. Marketerzy badają wymagania dotyczące funkcji, projektanci UX dostarczają makiety interfejsu użytkownika, a programiści piszą kod. Teraz chcemy przeprowadzić nasze comiesięczne spotkanie (sprint) dotyczące rozwoju funkcji w bardziej ustrukturyzowany sposób (wcześniej priorytet funkcji jest ustalany w sposób nieco doraźny, chcemy to zmienić). Cele spotkania to 1. Ustalenie priorytetu (pilne, ważne, normalne, nieważne) każdej funkcji 2. Upewnienie się, że wszyscy wiedzą, co zrobić, aby nadchodzący kamień milowy został zakończony po zakończeniu spotkania. Ale biorąc pod uwagę, że w zespole mamy 10 osób i zazwyczaj mamy do omówienia ponad 50 funkcji, obawiam się, że całe spotkanie przeciągnie się długo. Ponadto w drugim kroku musiałbym dać każdemu czas na sprawdzenie swojego harmonogramu, ponieważ nie każdy jest w pełni dostępny do pracy nad funkcjami (niektórzy musieliby naprawić błędy, zapewnić wsparcie techniczne itp.), więc jeśli ich zapytam aby to zrobić na spotkaniu, nastąpi chwila ciszy i zakłóci przebieg spotkania. Czy istnieje jakaś dobrze ustalona procedura spotkania, która pasuje do mojej powyższej sytuacji?


title: Dwie biblioteki łączące się z bazą danych, prowadzące do zapachu kodu?

text: W obecnej firmie, w której pracuję, istnieje bardzo duża biblioteka Utilities. Został napisany kilka lat temu (na długo zanim dołączyłem) i z czasem urósł ergonomicznie, aby teraz robić wszystko: * Wysyłanie e-maili * Eksportowanie plików w różnych formatach, tj. CSV, rozdzielane tabulatorami * Odbieranie danych od dostawców zewnętrznych, tj. Bloomberg, Facset * Wysyłanie plików do stron SFTP * Ogólne połączenie z bazą danych Lista jest długa i jest naprawdę brzydka. Oryginalny programista użył go tutaj w każdej aplikacji, którą napisał dla wygody i dodał do niej w razie potrzeby. Sama biblioteka narzędzi zawiera odniesienia do zewnętrznych interfejsów API, które umożliwiają odbieranie niektórych danych z Bloomberg/Factset. Korzystanie z zewnętrznych interfejsów API oznacza, że każdy projekt, który chce odwoływać się do dużej biblioteki narzędziowej, musi również posiadać interfejsy API Bloomberga i Facset API. Lista zaczyna również rosnąć i staje się bardzo niemożliwa do utrzymania i niepotrzebna, aby wszystkie te pliki DLL innych firm towarzyszyły temu dużemu projektowi Utilities, ale są wymagane do ich skompilowania. Chcę przepisać całą tę bibliotekę do bibliotek łatwiejszych w zarządzaniu. tj.: * NazwaFirmy.E-mail * NazwaFirmy.FileExporter * NazwaFirmy.Bloomberg Każdy projekt będzie odwoływał się tylko do projektów niezbędnych do wykonania swojej pracy. tj. odwoływać się do CompanyName.Email, aby wysyłać wiadomości e-mail. Nie mam z tym problemów, ale komplikacja, z którą się spotykam, polega na tym, że niektóre nowe biblioteki będą wymagały własnego połączenia z bazą danych i zapytań. Poniższy przykład to: [HolidayChecker] [HolidayChecker.DAL] Przechowujemy listę dni świątecznych w bazie danych. Chciałbym, żeby projekt HolidayChecker wystawił metodę (m.in.) sprawdzenia, czy dana data jest dniem świątecznym. interfejs publiczny IHolidayChecker { bool IsHoliday(DateTime dateToCheck); } public class HolidayChecker : IHolidayChecker { public bool IsHoliday(DateTime dateToCheck) { //Baza danych zapytań dla logiki daty... } } Wiele aplikacji będzie wtedy odwoływać się do tego projektu HolidayCheck i używać metody IsHoliday. Te aplikacje będą miały również własne połączenia i zapytania do bazy danych, aby wykonywać własne zadania. [GenericApplication (References HolidayChecker)] [GenericApplication.BusinessLogic] [GenericApplication.DAL] Jeśli zarówno aplikacja, jak i projekt HolidayCheck, uzyskują dostęp do bazy danych i wysyłają zapytanie o dane, jest to bardzo odczuwalne jako zapach kodu. Czy ktoś zdaje sobie sprawę z bardziej uporządkowanego sposobu osiągnięcia tego? Czy jest tam? Czy to jest coś, z czym będę musiała po prostu żyć? # EDIT: Myśląc o tym z dnia na dzień, nie sądzę, że jest to złe jak pierwsza myśl. Projekty takie jak ELMAH są samodzielne, które również łączą się z bazą danych i wykonują własne zapytania. Jak zauważył @Allan, to tylko kwestia prawidłowego zaprojektowania mojego projektu dla HolidayCheck.


title: Jak pracować z dużymi korzeniami kruszywa?

text: Uczę się DDD, a mimo to mam więcej pytań niż odpowiedzi. Rozważmy model katalogu zawierającego ogromną liczbę plików. Oto jak to widzę: Directory to Aggregate root. Ta jednostka powinna mieć logikę walidacji polegającą na sprawdzaniu unikalności nazwy pliku, gdy jest dodawana lub po prostu zmieniana. A encja File zawiera logikę „SetName”, powiadamiając katalog za pośrednictwem zdarzenia domeny o zmianach nazwy. Ale jak w takim razie powinien działać katalog? Nie zawsze jest możliwe załadowanie wszystkich plików do pamięci. Czy w takim przypadku repozytorium plików powinno mieć logikę adhoc do sprawdzania unikalności nazwy? Przypuszczam, że to realna decyzja. Co jednak, jeśli niektóre pliki zostały już dodane lub zmieniono ich nazwy w ramach bieżącej, jeszcze niezatwierdzonej transakcji? (nic tego nie zabrania. Granice transakcji są ustalane zewnętrznie w odniesieniu do logiki biznesowej). Prawdopodobnie repozytorium powinno uwzględniać zarówno stany w pamięci, jak i stany utrwalone (scalenie tych stanów może być nietrywialnym zadaniem). Tak więc, gdy zagregowany korzeń ze wszystkimi jego dziećmi zmieści się w pamięci - wszystko jest w porządku. A jak tylko nie możesz zmaterializować wszystkich istot, pojawiają się kłopoty. Chciałbym wiedzieć, jakie są podejścia do takich sytuacji. Może nie ma żadnego problemu i to tylko z powodu mojego niezrozumienia tematu.


title: Testy jednostkowe - aplikacja połączona z bazą danych

text: Jakie byłoby najlepsze podejście do testowania jednostkowego modelu, który integruje się z aplikacją ściśle powiązaną z bazą danych? Konkretnym scenariuszem jest tutaj koszyk - chciałbym móc przetestować dodawanie, usuwanie i pobieranie towarów z koszyka, logikę cen itp. Moim zdaniem wszystko to wymaga dostępu do bazy danych, chociaż przeczytałem kilka razy, że należy unikać dostępu do bazy danych.


title: Gra strategiczna, jak obliczyć akcje równoległe?

text: Buduję grę strategiczną, w której wiele jednostek (5 - 20) walczy ze sobą. Mam logikę gry, która oblicza wszystkie akcje wykonane w każdej turze i wysyła ją do silnika gry w celu animacji. Oto możliwe akcje: * wykonaj atak * przyjmij obrażenia * wykonaj ruch * wykonaj chybienie * wykonaj usunięcie siebie (umieranie) ## Jak mogę znaleźć akcje, które mogę wykonywać równolegle, a jakie nie? Oto moje ograniczenia: * jednostki mogą wykonywać tylko jedną akcję na raz. * każda akcja może mieć inny czas, nawet jeśli jest to ta sama akcja * Jednostka może wykonać akcję `atak`, tylko jeśli druga jednostka wykonuje akcję `otrzymując obrażenia` lub `usuwając siebie` * po wykonaniu przez jednostkę akcji: ` usuwając siebie`, nie może wykonać żadnej innej akcji. **Edytuj:** Oto sytuacje, które mogą się zdarzyć: * jedna jednostka jest atakowana przez wiele jednostek jednocześnie * jedna jednostka otrzymuje obrażenia, podczas gdy żadna jednostka nie atakuje * wszystkie jednostki poruszają się w tym samym czasie * wszystkie jednostki wykonują pudło jednocześnie To pytanie nie dotyczy projektowania gier, ale programowego rozwiązania, w jaki sposób mogę znaleźć te równoległe kafelki akcji? * * * Odpowiedz na **FrustratedWithFormsDesign** , odpowiedz Cześć stary, skierowałeś to w zupełnie innym kierunku, więc chcę Ci odpowiedzieć tutaj, aby wyjaśnić sprawę. To pytanie nie dotyczy tego, jak sprawić, by jednostki poruszały się równolegle. Uważam też, że twoja sugestia nie jest dobrym pomysłem. To, co zrobiłeś ze swoją własną grą, to właściwie właściwy kierunek. Mądrze będzie też pracować w MVC i rozdzielić logikę widoku i gry. Aby zaimplementować silnik gry, użyłbym wątku gry, który będzie wysyłał zdarzenia tickowe w oparciu o wybraną liczbę klatek na sekundę. Tylko widoki powinny nasłuchiwać tego wątku i implementować logikę widoku opartą na nim. W mojej grze używam frameworka **Adobe Air** z natywną obsługą Javy i Objective-C dla telefonów komórkowych, ale głównie jest to **Air**. Tak więc wszystkie moje animacje słuchają onEnterFrameEvent, w twoim przykładzie byłoby to zaznaczenie i zaimplementowano ich logikę animacji. Moja logika gry wykorzystuje innego pracownika (implementacje wątków powietrznych, bardziej przypomina proces) do generowania wszystkich akcji w danej turze. A potem przesyła go do silnika gry, aby go animować. Nie pytam, jak zaimplementować animacje, jest to obsługiwane przez **Air** apis, a tutaj nie ma licznika. Pomyśl o tych problemach: > jednostka a atakuje jednostkę b, podczas gdy jednostka b atakuje jednostkę c, gdy jednostka c jest w ruchu. To rozwiąże bałagan na ekranie. Chcę, żeby to było: > jednostka a atakuje jednostkę b, jednostka b czeka, aż a zakończy atak, aby rozpocząć > atakuje jednostkę c, podczas gdy jednostka c jest w ruchu. Po zakończeniu ataku na jednostkę b > jednostka b atakuje jednostkę c. Tak więc dane wejściowe, które otrzymałem, to: * A atak * B otrzymanie obrażeń * B atak * C otrzymanie obrażeń * C ruch A wynikiem były dwa zestawy animacji * Atak, C ruch, B odebranie obrażeń * B atak, C przyjęcie uszkodzenie To był bardzo prosty przykład na to, jak chciałbym porównać moje działania. Mam nadzieję, że teraz jest jaśniej.


title: Czy nadmierne wykorzystanie delegatów to zła rzecz?

text:
Dobry dzień. Powiedziano mi, że dobrą praktyką przy pisaniu metod jest uczynienie metody odpowiedzialnej tylko za zrobienie jednej rzeczy. Teraz, kiedy patrzę wstecz na to, miało dla mnie sens. Jest kilka powodów, dla których lubię kodować w taki sposób - dla mnie są to: 1. Kod jest zarządzalny 2. Kod jest bardziej czytelny dla człowieka 3. Lepsze zrozumienie tego, co robi metoda jest utrzymywane Ale tutaj pojawia się problem, który mnie niepokoi . Czasami wykonanie zadania wymaga wykonania więcej niż 1 akcji. Wiele kodu programistów, z którym codziennie patrzę, robi od 7 do 8 rzeczy na metodę, gdzie można go podzielić i przypisać do delegata, który uruchamia metody sekwencyjnie. Pracując nad dużymi projektami, jakie będą konsekwencje używania wielu delegatów do sekwencyjnego uruchamiania metod? Czy powinienem obawiać się używania wielu delegatów w moim kodzie? Przykład — prywatny delegat void Factory(); Fabryka fabryczna = null; protected void Page_Load(object sender, EventArgs e) { spróbuj { factory += SetCatalogClientProxy; fabryka += SetHelper; fabryka += GetAccessToken; //fabryka += GetCatalog; fabryka += GetToken; fabryka.Wywołaj(); } catch (Wyjątek ex) { AddToResult(ex.Message + NEWLINE + ex.StackTrace.Replace(" at ", " at " + NEWLINE).Replace(" in ", " in " + NEWLINE)); } } #region Metody procesu testowego private void SetCatalogClientProxy() { directory = new JAM.CatalogClientProxy(); AddToResult("CatalogClientProxy pomyślnie zainicjowany"); } private void SetHelper() { helper = new JAM.HelperClass(); AddToResult("HelperClass pomyślnie zainicjowany"); } private void GetAccessToken() { accessToken = JAM.CatalogClientProxy._accessToken; if (string.IsNullOrEmpty(accessToken)) { katalog.GetACSClaim(); accessToken = JAM.CatalogClientProxy._accessToken; } AddToResult("Pobrano Accesstoken." + NEWLINE + accessToken); } private void GetCatalog() { Catalog.CallCatalogService("fullcatalog", utcTime, country, "2", false); AddToResult(helper.Catalog(baseUrl, utcTime, strona, kraj, accessToken)); } private void GetToken() { var Fulfillment = new JAM.FulfillmentServiceProxy(Guid.NewGuid().ToString()); ClassImport.FulfillmentInfo wynik = Fulfillment.GetToken("ABC-11111", "123456", "ZA", "123456", "123456", JAM.CatalogClientProxy._accessToken); if (result != null) { var output = "Produkty" + NEWLINE; foreach (var p in result.Products) { output += " " + p.ProductName + "
"; foreach (var l in p.Links) { output += " " + l.Uri + "
"; } } DodajDoWyniku(wyjście); } else { AddToResult("Nie znaleziono produktów"); } } #endregion #region Logowanie do strony private void AddToResult(string text) { result.InnerHtml += String.Concat("[", DateTime.Now.ToString(), "] ", text , NOWA LINIA); } #endregion To jest z jednej z moich stron testowych. Jest tu tylko 1 delegat, ale w innych projektach, nad którymi pracuję, czasami mam 5 lub 6 delegatów skonfigurowanych w podobny sposób, aby wykonywać metody sekwencyjnie, gdzie staram się zachować metody po 1 akcji każda.


title: Identyfikator zewnętrzny dla każdej tabeli relacyjnej

text: Czy powinienem dodać identyfikator zewnętrzny dla **każdej** tabeli? Na przykład jeśli mam te tabele : Klient ======================================== Id Name Płeć --------------------------------------- 1 Jan M 2 Doe M ---- ----------------------------------- KlientZakup =============== =========================================================== ========== Id ExternalId CustomerId TotalQty ------------------------------------ --------------------------- 1 PO0313-0001 1 10 ------ -------------------------------------------------- ------------------ W tym przykładzie rozumiem, że ExternalId jest wymagany w tabeli CustomerPurchase (do drukowania itp.). Ale nie widzę powodu, dla którego stół klienta również miałby go potrzebować. FYI, powód, dla którego o to zapytałem, ponieważ mój przyjaciel powiedział, że SAP używa identyfikatorów zewnętrznych w swoich tabelach. Czy powinienem używać ExternalId w każdej tabeli? Czy brakuje mi innych zastosowań ExternalId oprócz bardziej przyjaznej dla oka identyfikacji użytkownika? Dziękuję!


title: Czy argumenty powinny być zawsze przekazywane do akcji w kontrolerze MVC?

text: Mam kilka kontrolerów, które przyjmują „witrynę” jako parametr w swoich akcjach, na przykład: [AuthoriseSite] public ActionResult Index(string site) { var model = gvmFactory.CreateAnIndexViewModel(site); return Widok("Indeks", model); } Przekazywałem witrynę jako parametr, ale mogłem również obliczyć ją z profilu członkostwa użytkownika, więc mój kod mógłby wyglądać tak: [AuthoriseSite] public ActionResult Index() { string site = UserProfileService.GetUsersSite(); var model = gvmFactory.CreateAnIndexViewModel(nazwa witryny); return Widok("Indeks", model); } Parametr witryny może się różnić w zależności od roli, jaką pełni użytkownik. Użytkownicy, którzy są administratorami, mogą wybierać wiele różnych witryn, podczas gdy osoby niebędące administratorami mogą używać tylko tej, do której należą. **Moje pytanie brzmi, która jest lepsza praktyka?** Preferuję pierwsze, bardziej przypomina MVC, chociaż może to być po prostu zawsze to robiłem. Druga ma pewne zalety, ponieważ nie można dostosowywać adresów URL, aby osoby niebędące administratorami mogły zobaczyć witryny, których nie powinny. Jednak filtr [AuthoriseSite] zapobiega temu.


title: Ile kosztuje używanie (vec col) lub (vector arg1 & args)?

text: Pracuję nad kilkoma ćwiczeniami Lisp przy użyciu Clojure. Gdybym miał przekonwertować listy Lisp na wektory Clojure, rozwiązanie niektórych problemów byłoby prostsze, więc oto moje pytanie: Czy używanie `vec` lub `vector` kosztuje dużo czasu i/lub przetwarzania? Czy użycie którejś z funkcji powoduje zmianę stanu meta, czy też wartości są konwertowane i przenoszone do wektora?


title: Czy warto wykonywać jakąś pracę na kredyt?

text: Nie wiem, jak to zatytułować, ponieważ nie chodzi tylko o to. Załóżmy jednak, że istnieje oprogramowanie takie jak .NET BCL i zauważasz miejsca, w których możesz znacznie przyspieszyć. Nie jest to świetny przykład, ale wyobraź sobie, że stworzyłeś kilka typów, takich jak `List<T>` itp. znacznie szybciej, tj. 10x do 200x dla każdej operacji osobno. Załóżmy, że powiedziałeś o tym firmie Microsoft i zapytałeś, czy rozważy dodanie twoich zmian. Co byś zrobił, gdyby dali ci tylko jedną z tych opcji z tej listy: 1. Doda kod, nie dostaniesz kredytu ani pieniędzy. 2. Doda kod i da ci kredyt, bez pieniędzy. 3. Nie dodadzą kodu, ale spróbują wprowadzić te same zmiany, które pokazałeś lub wyjaśniłeś, lub użyj kodu jako „inspiracji”, ale nie kredytu lub pieniędzy. 4. Nic nie zrobią, a ty po prostu opublikujesz swój kod jako własną bibliotekę. Biorąc pod uwagę, że byłoby to coś, co mógłbyś wykorzystać w swoim CV, czy wziąłbyś pod uwagę którekolwiek z nich? Bo jeśli mówisz, że pomogłeś Microsoftowi zoptymalizować/ulepszyć X, Y, Z 100x itd., powinno to pomóc w znalezieniu pracy, prawda? Mam na myśli nie tylko coś, czego nie można znaleźć w prawie żadnym innym CV. Jeśli oferują pierwsze lub trzecie miejsce, co to mówi o firmie? Czy w takim razie powinieneś wybrać numer 4? Mam na myśli, że #4 jest w porządku, ale jeśli .NET ma 10 milionów użytkowników, możesz dotrzeć do kilku tysięcy, publikując swoje rzeczy jako strona trzecia, ponieważ myślę, że większość ludzi nie pobiera dodatkowych bibliotek. Również ta rzecz, którą opisuję, nie jest pracą na pełny etat, ale bardziej jak „po drodze” wysiłek, aby zwiększyć swoją wartość, ponieważ i tak wykonałeś pracę. Więc to nie tak, że robisz to dla nich. A może myślisz, że firmy mogą traktować tego rodzaju rzeczy jako wrogie lub obraźliwe, ponieważ zasadniczo pokazałeś ich inżynierom oprogramowania, że nie mogą pisać wydajnego oprogramowania ze wszystkimi stopniami inżynierskimi, których możesz nie mieć. Można śmiało założyć, że nie próbują tracić na wydajności platformy .NET. Powodem, dla którego o to pytam, jest to, że niektóre firmy wydają się bardzo niechętne udzielaniu kredytu tam, gdzie jest należny. Ale kredyt jest darmowy, więc dlaczego mieliby się opierać? Jeśli wystarczy wpisać gdzieś swoje imię, dlaczego mieliby odmówić? Jakieś pomysły na ten temat?


title: Jak radzić sobie z "programowaniem"?

text: (Odśwież, wcześniej opublikowałem to w złej sekcji, przepraszam) Więc jestem pewien, że wszyscy wpadli na tę osobę w takim czy innym momencie, ktoś złapie wiatr twojego projektu lub pomysłu i początkowo wykazuje pewne zainteresowanie. Zaczynasz mówić o niektórych swoich metodach i zwykle w tym czasie wtrącają się, mówiąc, jak powinieneś zamiast tego użyć metody X, lub po prostu użyć biblioteki Y. Ale nie jako przyjazna sugestia, ale graniczące z przykazaniem. Często powtarzając w kółko tę samą radę, jak nadgorliwa papuga. Osobiście lubię odkrywać koło na nowo, kiedy się uczę, a nawet dla zabawy, nawet jeśli okaże się to gorsze niż to, co zostało zrobione wcześniej. Ale ta osoba najwyraźniej nie może pojąć odtworzenia ŻADNEJ użyteczności do takich celów, ani być może spróbować czegoś, co nie jest ściśle zgodne z tradycyjnymi praktykami OOP i nie zadowoli się niczym poza poczuciem perfekcji, a tym samym naturalnie spłynie mi z całej siły swoją krytykę. . Na domiar złego, w końcu zaczynają usprawiedliwiać swoją radę (opóźnienie), wymieniając wszystkie niewiarygodnie złożone rzeczy, które zakodowali w pojedynkę (zwykle w stylu „zaufaj mi, stworzyłem/używałem programu X przez długi czas , bla bla bla"). Teraz daleko mi do bycia mistrzem programowania, prawdopodobnie nie jestem nawet aż tak dobry i jako taki cenię radę i krytykę, ale myślę, że rada/krytyka ma swój czas i miejsce. Istnieje również duża różnica między byciem pomocnym a byciem narcyzem. W przeszłości prawdopodobnie użyłbym nieco silniejszego zwolnienia w stylu George'a Carlina, ale nie sądzę, że palenie mostów jest już najlepszym podejściem. Może jestem tylko dupkiem, ale czy masz jakieś rady, jak radzić sobie z tego rodzaju słowną chłostą?


title: Co jest przeciwieństwem spójności?

text: Rozmawiałem z moim architektem o pewnych obawach związanych z konkretnym podejściem, które może skutkować bardzo niskim poziomem spójności w zestawie klas. Jednak nie mogłem wymyślić słowa, które oznaczałoby niski poziom spójności. Powiedziałem coś w stylu "Oczywiście, chcemy, aby klasy spójne nie... hm... nie klasy spójne" Jakie jest prawidłowe słowo, którego powinienem użyć?


title: W jaki sposób programy na ogół uzyskują informacje z systemu operacyjnego?

text: W wielu językach istnieją biblioteki, wbudowane w sam język lub zbudowane oddzielnie poza językiem, które umożliwiają pobieranie informacji z systemu operacyjnego na pewnym poziomie. Przykładami są metadane dotyczące pliku, aktualne wykorzystanie pamięci i sama wersja systemu operacyjnego. Jak ogólnie uzyskuje się dostęp do tych informacji? W tej chwili jedynym sposobem, w jaki mogę to zobaczyć, jest wykonywanie funkcji wiersza poleceń i parsowanie odpowiedzi. Na przykład, aby wyświetlić listę plików w bieżącym katalogu w systemie Linux, aplikacja wykonałaby 'ls' w określonym katalogu, a następnie przeanalizowała dane wyjściowe w celu uzyskania wymaganego formatu. Czy to jedyny sposób? Ten przykład zakłada, że nie używasz żadnych bibliotek, które oczywiście zrobią to za Ciebie (a może budujesz bibliotekę w tym celu).


title: Oddzielanie front endu od back endu - Tomcat

text: Obecnie pracuję z firmą, która używa Java / Tomcat / Spring do zaplecza naszych aplikacji internetowych. Jako front-end developer coraz mocniej czuję, że back-end powinien być oddzielnym projektem od front-endu, z kilku powodów: 1) **Budowanie projektu** \- wiele nowoczesnych projektów buduje się za pomocą grunt i inne narzędzia front-endowe. Cele kompilacji front-endu (konkatenacja, minifikacja, testy front-endowe, wstępne przetwarzanie CSS) są zupełnie inne niż cele back-endowe (kompilacja kodu java, przekazywanie testów back-endowych, wdrażanie na serwer ciągłej integracji) 2) **Wdrożenie :** Kiedy zatwierdzam plik javascript lub html do naszego repozytorium git, nie ma sensu, aby nasze narzędzie do ciągłego wdrażania przebudowało i ponownie wdrożyło cały projekt, ale nie ma możliwości odróżnienia zatwierdzenia front-endowego i zatwierdzenie zaplecza. Więc **jak zrestrukturyzowałbyś projekt**, który wcześniej został automatycznie wdrożony z jednego pliku wojennego, żyjącego w jednym repozytorium git, aby utworzyć osobny backend i frontend? Czy rzeczywiście mogę to zrobić, biorąc pod uwagę, że używamy frameworka Spring? W tej chwili moje pliki znajdują się w mieszance katalogu `/webapp/WEB-INF` (dla stron html / szablonów prędkości) i katalogu `/webapp/resources` dla wszystkiego innego (js, css, obrazy). Jestem trochę zdezorientowany, jak powinienem się do tego zabrać, gdy tomcat instaluje ogromną ilość plików również w katalogu `/target`? Jeśli zachowam oddzielne repozytorium git dla plików frontonu, czy nie zostanie ono wymazane, jeśli ponownie wdrożę projekt zaplecza? (Pierwotnie pochodzę z Apaczów, gdzie wydawało się to takie proste i przyjemne...)


title: Czy metryki powstrzymywania defektów można łatwo zastosować na poziomie organizacyjnym, gdy istnieje tylko spójna struktura procesu organizacyjnego?

text: Metryki powstrzymywania defektów, takie jak całkowita skuteczność powstrzymywania defektów (TDCE) i efektywność powstrzymywania faz (PCE), mogą być wykorzystane do uzyskania dobrego wskaźnika jakości procesu. TDCE przechwytuje defekty, które są uchwycone w pewnym momencie między wymaganiami a wydaniem produktu w terenie, wskazując ogólną skuteczność całego procesu w celu znalezienia i usunięcia defektów. PCE dostarcza więcej szczegółów na temat każdej fazy cyklu życia oprogramowania oraz sposobu działania technik wykrywania i usuwania defektów. Stosowanie tych wskaźników ma sens na poziomie, na którym masz dobrze zdefiniowany proces i metodologię rozwoju produktu, często projekt. Jednak niektóre organizacje zapewniają ramy procesu, które są dostosowane na poziomie projektu. Te ramy procesu obejmowałyby niezbędne wytyczne dotyczące spełnienia certyfikatów (ISO9001, CMMI), praktyki dotyczące stosowania znanych dobrych technik (metody zwinne, Lean, Six Sigma) oraz wymagania ze względów prawnych lub regulacyjnych. Jednak szczegółowe informacje o tym, jak zebrać wymagania, zaprojektować system, wyprodukować oprogramowanie, przeprowadzić testy i wydać, są pozostawione zespołom ds. rozwoju produktu. Czy istnieje skuteczny sposób na zastosowanie metryk powstrzymywania defektów na poziomie organizacyjnym, gdy na poziomie organizacyjnym istnieje tylko struktura procesu? Jeśli nie, jakie mogą być pomysły na metryki, które można wydestylować z każdego projektu (każdy przy użyciu dostosowanego procesu, który pasuje do struktury procesu organizacyjnego), które przechwytują metryki powstrzymywania defektów w celu omówienia zdolności procesu do znajdowania i usuwania defektów? Ostatecznym celem takiej metryki byłaby konsolidacja praktyk ograniczania defektów w dużej liczbie realizowanych projektów i raportowanie do kierownictwa. Docelowymi odbiorcami będą osoby pełniące role, takie jak główny inżynier oprogramowania i główny inżynier (wszystkich dyscyplin inżynieryjnych) w organizacji. Chociaż dostępne byłyby dane specyficzne dla projektu, chodzi o stworzenie czegoś, co mierzy ogólną skuteczność wszystkich dostosowanych procesów we wszystkich trwających projektach. Podejrzewam, że te dane będą również prezentowane w ramach audytów CMMI, ISO lub podobnych w celu wykazania jakości procesu.


title: Które kody stanu HTTP są naprawdę w porządku?

text: Piszę aplikację, która ma zgłosić użytkownikowi (programistom), gdy ich witryna _nie powiedzie się_. A co mam na myśli przez _fails_, która nie działa lub musi zgłosić problem deweloperom. Rozumiem, że kod statusu 2XX oznacza „Sukces” według wiki. Ale czy to naprawdę robi? Miałem kiedyś dostęp do mojej witryny i zwróciłem 204 „Brak treści”, co jest dla mnie niefunkcjonalne. Tak więc pytanie brzmi, jaka jest lista zwracanych kodów statusu, czy należy uznać, że „strona jest funkcjonalna”?


title: Jak ocenić CLR/C++ vs natywny C++?

text: Jak mam przejść do oceny wydajności lub czasu wykonania C++ z CLR w porównaniu z natywnym C++? Moim osobistym nastawieniem jest to, że wierzę, że C++ z CLR jest wolniejszy, ponieważ musi działać na maszynie wirtualnej. Przyznam też, że nigdy tak naprawdę nie byłem fanem Visual C++ ze względu na dodaną składnię, więc chciałem wiedzieć, jak ocenić wydajność dwóch podejść i określić, które jest udowodnione szybciej, zamiast polegać tylko na moim uprzedzenia.


title: Co powinien zawierać MainWindow WPF

text: Tworzę aplikację WPF zgodnie z modelem MVVM. Widziałem kilka podejść do zastosowania MVVM. Martwię się o mój MainWindow.xaml. W niektórych samouczkach widziałem, że MainWindow obsługuje tylko ContentControl i na pierwszej stronie głównej aplikacji. Tworzę aplikację typu wizard. Istnieje wiele widoków z przyciskami Dalej i Wstecz. Jest jeden widok WelcomeView, który będzie pierwszym widokiem. Więc moje pytanie brzmi, jakie podejście powinienem zastosować. Moje okno powinno zawierać ContentControl wskazujący na MainView lub skopiuję i wkleję wszystkie elementy interfejsu użytkownika z WelcomeView do mojego MainWindow i pozbędę się WelcomeView. Co jest bardziej odpowiednie? Jakie są plusy i minusy każdego podejścia?


title: Prowadzenie kursu wprowadzającego do programowania w C++: Czy uczę rzutowania w stylu C?

text: Obecnie przeprojektowuję kurs pierwszego semestru studiów magisterskich na temat Wprowadzenia do programowania w C++. Zwróć uwagę na przecinek; kurs jest wprowadzeniem do programowania, a C++ jest po prostu naczyniem używanym do jego nauczania. Zauważ, że w tej chwili nie mam żadnej władzy decyzyjnej w kwestii wyboru języka, więc argumenty o tym, czy C++ jest dobrym językiem wprowadzającym, są dyskusyjne. Przez ostatnie 3 lata prowadziłem te zajęcia jako wprowadzenie do kursu C++, tak jak wcześniej nauczano. Jednak zdałem sobie sprawę, że nauczanie takich rzeczy jak wskaźniki, łańcuchy i tablice w stylu C itp. na początku kursu wyrządza uczniom krzywdę, którzy najprawdopodobniej będą programować w innych językach. W tym semestrze prowadzę z referencjami, inteligentnymi wskaźnikami, ciągami C++ i wektorami, a pod koniec kursu zajmuję się tylko surowymi wskaźnikami, ciągami C i tablicami C jako „zaawansowanym C++”. Celem jest nauczenie najpierw koncepcji programowania, a nie zawiłości C/C++. Jednak jestem zawieszony na castingu. Opierając się na moim poprzednim stwierdzeniu, wydaje się logiczne, aby zrzucić rzutowania w stylu C do końca semestru (jeśli w ogóle, ponieważ Stroustrap wskazał, że należy ich unikać) i wprowadzić `static_cast` na początku, `dynamic_cast` kiedy dochodzimy do polimorfizmu i `reinterpret_cast` kiedy mamy do czynienia z surowymi wskaźnikami. Jednak biorąc pod uwagę, że większość języków wywodzących się z języka C, takich jak C# i Java, wykonuje rzutowanie przy użyciu składni podobnej do rzutowania w stylu C, czy przygotowuję uczniów, aby byli zdezorientowani, gdy próbują pracować w innym języku? (Chociaż operator `as` w C# robi mniej więcej to samo, co `dynamic_cast` w C++.)


title: Monit, potwierdzenie i alert JavaScript uważane za „staromodne”

text: Ostatnio zajmuję się tworzeniem internetowego systemu zarządzania siłownią. Ich poprzednia aplikacja została opracowana w języku Visual Basic. W przypadku nowej aplikacji, wszystkie skrypty front-endowe używają jQuery, serwer pracuje na PHP i MySQL... wiesz, typowy stos oparty na linuksie el-cheapo. Tak czy inaczej, zastanawiałem się, dlaczego okienka dialogowe JavaScript, potwierdzenia i komunikaty ostrzegawcze są obecnie tak słabo wykorzystywane. Istnieje wiele wtyczek jQuery dla okien modalnych i komunikatów ostrzegawczych, które próbują naśladować coś, co język już oferuje, a każda przeglądarka jest zmuszona do poprawnej obsługi. Korzystanie z rozwiązań ręcznych lub opartych na wtyczkach jest w porządku w przypadku złożonych formularzy i specjalnych potrzeb, ale jeśli potrzebujesz tylko poprosić o pojedynczą wartość lub potwierdzić usunięcie rekordu, po co dodawać takie narzuty do swojej aplikacji internetowej? Co więcej, iOS i Android oferują ładnie dostosowane okna dialogowe wiadomości, gdy używasz monitu, potwierdzenia i alertu.


title: Dlaczego nazywa się to „Dokumentem tutaj”?

text: (Daj mi znać, jeśli jest to niewłaściwe SE) Dlaczego dokument tutaj (lub Heredoc) tak się nazywa? Wikipedia nie miała nic do powiedzenia na ten konkretny temat. Znalazłem dokumentację unixową opisującą "Oto dokument", czy to oryginalna forma?


title: Termin dla obiektu biznesowego specyficznego dla domeny?

text: To pytanie może być trochę niejasne. Widziałem akronim odnoszący się do obiektu biznesowego w systemie oprogramowania. Zwykle wspomina się o tym przy omawianiu takich wzorców projektowych, jak wzorzec DAO Java EE.


title: Szacunki projektowe dla nierealnych zadań

text: Jestem programistą w dużej firmie IT, która skupia się na świadczeniu usług klientom (mam tu na myśli dział rozwoju to <20 osób, a nie duża część organizacji). Rozwiązuję różne zadania związane z bieżącymi problemami i jak dotąd wszystko jest w porządku, ale kierownictwo w jakiś sposób wpadło na pomysł, aby zaimplementować aplikację, która powiela większość funkcji nagradzanych w branży produktów, takich jak Visio firmy MS czy AutoCad firmy Autodesk. Chcą to zrobić korzystając z dostępnych zasobów, które opisałem powyżej. Moja pierwsza odpowiedź brzmiała „to niemożliwe nawet w twoich najśmielszych fantazjach”, ponieważ projekt takiej miary jest wykonywany przez dziesiątki zespołów programistów/architektów/testerów, kosztuje miliony dolarów, a okres tworzenia od zera to co najmniej 1,5- 2 lata. Uważają to, ale mają mało kontrargumentów, np. nie mamy żadnych terminów na ten projekt (prawodawstwo dotyczące obszaru tematycznego nie jest jeszcze gotowe i może nie zostać przyjęte w ciągu najbliższych kilku lat) ani szczegółowej specyfikacji, więc każdą zaimplementowaną funkcjonalność można uznać za drobne wydanie, które zostanie dostarczone do klienta i przetestowane „w terenie”. I oczywiście nie potrzebujemy kopii Autocad 1:1, tylko „kilka głównych funkcji, takich jak 10% funkcjonalności całego produktu”. Te argumenty wcale nie pomagają w szacowaniu, wręcz przeciwnie, oznacza to, że będziemy mieć wiele niepewnych zmian wymagań, takich jak „spójrz na tę funkcję AutoCad i zaimplementuj ją” oraz testowanie przez klientów, a nie profesjonalny dział QA (politycznie poprawny synonim idiotyzmu). Jakieś pomysły, jak uzasadnić i oszacować takie zadanie? Choć niektóre liczby byłyby pomocne, ale wszystkie koszty rozwoju/szczegóły dużych projektów są niedostępne, mogę operować tylko tak niejednoznacznymi faktami, jak średnia znana płaca, powiedzmy o Microsoft SDE i oś czasu wydań MS Office, czyli mówiąc o Visio.


title: Warunki zaliczenia testu jednostkowego, a także warunki niezaliczenia?

text: Czy testy jednostkowe powinny testować wszystkie przypadki, a także wszystkie przypadki zakończone niepowodzeniem? Na przykład wyobraź sobie, że mam test `Widget_CannotActiveWidgetIfStateIsCancelled`. I powiedzmy, że jest 25 możliwych stanów. Czy mogę przetestować tylko to, że nie mogę aktywować widżetu, gdy Stan == Anulowany, czy też muszę również przetestować, czy MOGĘ aktywować go w każdym z pozostałych 24 stanów?


title: Kiedy używać zaawansowanego protokołu kolejkowania wiadomości, takiego jak RabbitMQ?

text: Czy ktoś może mi wyjaśnić, w jakich przypadkach powinienem rozważyć użycie AMQP, takich jak np. KrólikMQ? Jakie są plusy i minusy?


title: Ciemne motywy w IDE z wieloma monitorami

text: Pojawiło się wiele postów o programistach, którzy preferują ciemny schemat kolorów w swoim IDE. Większość motywów na studiostyl.es to ciemne motywy. Kiedy miałem jeden monitor, podobało mi się używanie ciemnego motywu, ponieważ było to łatwiejsze dla oczu. Ale teraz, kiedy używam wielu monitorów, uważam, że ciemne motywy naprawdę ranią moje oczy. Przez większość czasu mam otwarte IDE na jednym monitorze, a przeglądarkę/e-mail/dokumentację otwartą na innych monitorach. Tylko moje IDE ma ciemny motyw, a większość stron/dokumentacji ma białe tło. To zmusza moje oczy do ciągłego dostosowywania się między moim ciemnym IDE a białą stroną internetową, co obciąża moje oczy. Jestem pewien, że nie jestem jedyną osobą, która próbuje używać ciemnego motywu dla IDE i mam wiele monitorów. Jak inni ludzie radzą sobie z tym problemem?


title: Analiza zależności od kodu C# do tabel/kolumn bazy danych

text: Szukam narzędzia do analizy zależności całego systemu w kodzie C# i bazach danych SQL Server. Wygląda na to, że jedynym dostępnym narzędziem, które to robi, może być CAST (oprogramowanie CAST), które jest drogie i ma **dużo** więcej poza tym, czego tak naprawdę nie potrzebuję. Zależność kodu C# od kolumny bazy danych byłaby niezwykle użyteczna z wielu powodów, w tym: \- określanie skutków zmian w bazie danych w całym systemie \- obserwowanie gorących punktów w schemacie bazy danych \- znajdowanie martwych procedur składowanych, tabel itp. \- zrozumienie istniejąca baza kodu Czy takie narzędzia istnieją?


title: Co dostarczasz w pierwszych kilku iteracjach Agile?

text: Jak rozumiem, idea metodologii Agile polega na tym, że dostarczasz coś funkcjonalnego i dostarczasz to często. Aplikacja po inkrementacji osiąga swój ostateczny kształt. Ale we wczesnych iteracjach możesz zbudować framework lub fundamenty, na których będzie opierać się aplikacja, więc jest to coś ważnego, ale niewidocznego dla użytkowników. Co jest dostarczane klientowi w tych pierwszych iteracjach? Jak pokazujesz postępy we właściwym kierunku, budując kod rusztowania?


title: Jaka jest atrakcyjność systemów węgierskich?

text: W Jakich wytycznych nazewnictwa się kierujesz?, autor mówi: > Również wolę kodować przy użyciu notacji węgierskiej Charlesa Simonyi. Spotkałem kilku programistów, którzy nadal wolą używać języka węgierskiego, głównie węgierskiego smaku Petzold/Systems. Pomyśl `dwLength = strlen(lpszName)`. Przeczytałem Sprawianie, że niewłaściwy kod wygląda źle, i rozumiem uzasadnienie Apps węgierski, gdzie informacje o typie domeny są zawarte w nazwach zmiennych. Ale nie rozumiem wartości w dołączaniu typu kompilatora do nazwy. Dlaczego programiści wciąż upierają się przy używaniu tego stylu notacji? Czy to tylko bezwładność? Czy są jakieś korzyści, które przewyższają zmniejszoną czytelność? Czy ludzie po prostu uczą się ignorować dekoratorów podczas czytania kodu, a jeśli tak, to w jaki sposób nadal dodają wartość? EDYCJA: Wiele odpowiedzi wyjaśnia historię lub dlaczego nie ma już znaczenia, z których oba zostały omówione w cytowanym przeze mnie artykule. Naprawdę chciałbym usłyszeć od każdego, kto nadal go używa. Dlaczego go używasz? Czy to jest w twoim standardzie? Czy użyłbyś go, gdyby nie był wymagany? Czy użyłbyś go w nowym projekcie? Jakie widzisz zalety?


title: W jaki sposób odpowiednio przeklasyfikować zespół programistów?

text: Mamy zespół ponad 20 programistów o mieszanych umiejętnościach i różnych poziomach umiejętności w każdym z nich. Niektórzy z nich to programiści C#/MVC4/.Net 4.5 wycinający nowy kod, inni to twórcy VB6 utrzymujący nasze krytyczne starsze aplikacje. Dla każdego mamy „Ramy postępu kariery” – wewnętrznie dostępną listę tego, co należy zrobić, aby przejść z poziomu 1, 2, 3 i 4 Trainee Analyst Programmer do poziomu 1, 2, 3 i 4 Analyst Programmer , na poziom Senior Analyst Programmer 1, 2, 3 i 4. Trzeba przyznać, że CPF, którego używamy, jest bardzo przestarzały i wymaga przeróbek, co samo w sobie jest prostym procesem. Wraz z pojawianiem się nowych technologii w dziedzinie .Net przez cały czas, ten framework prawie musi być podobny do chodzenia po schodach ruchomych, gdy porusza się w dół, ponieważ nowsze rzeczy powinny być znane na szczycie „drzewa”, zanim stażysta dostanie do niego. Należy pamiętać o tym, że na każdym etapie deweloper otrzymuje niewielką podwyżkę wynagrodzenia w nagrodę za swój wysiłek, ale w większości przypadków jest to zachęta do „wspinania się” po drabinie; jeśli otrzymali podwyżkę za uzyskanie nowego etapu, HR może mieć problemy z usunięciem go! Wiem, że deweloperzy powinni dbać o ostrzenie swoich osi, ale w rzeczywistości nie wszyscy są tacy, niestety i tacy są. Problem polega na tym, że próbuję określić najlepszy sposób oceny naszych programistów w oparciu o ich specyficzne umiejętności i wiedzę na temat frameworka, i zastanawiam się nad wadami mojego określonego podejścia. **Pamiętaj, że odpowiedzi powinny być adekwatne i dotyczyć unikalnych wyzwań związanych z ocenianiem programistów w organizacji**. EDYCJA: Deweloperom oferowane są szkolenia na miejscu i poza nim.


title: Zautomatyzowana platforma do budowania portfela .NET - najlepszy wybór?

text: Zajmuję się utrzymaniem dość dużego portfolio aplikacji .NET. W portfolio znajdują się również starsze aplikacje zbudowane na innych platformach - natywny C++, ECLIPS Forms itp. Mam teraz złożoną strukturę kompilacji na bazie NAnt, która zarządza kompilacjami dla wszystkich tych aplikacji. Struktura kompilacji używa NAnt do wykonywania wielu różnych rzeczy: * Wyciąganie kodu z Subversion, a także tworzenie tagów w Subversion * Budowanie kodu za pomocą MSBuild dla .NET lub innych kompilatorów dla innych platform * Zajrzyj do plików AssemblyInfo, aby zwiększyć numery wersji * Czy usuwa niektóre pliki, które nie powinny być zawarte w kompilacjach / wydaniach * Publikuje kod do folderów wdrażania * Spakuje kod do celów tworzenia kopii zapasowych * Wdraża usługi Windows; uruchamiaj je i zatrzymuj * Itd. Większość z tych rzeczy można wykonać za pomocą samego NAnt, ale zbudowaliśmy kilka zadań rozszerzających dla NAnt, aby wykonać pewne rzeczy, które były specyficzne dla naszego środowiska. Ponadto większość z powyższych procesów jest uogólniona i ponownie używana w wielu naszych różnych skryptach do tworzenia aplikacji, dzięki czemu nie powtarzamy logiki. Nie jest to więc prosty kod NAnt, ani proste skrypty budujące. Istnieją dziesiątki plików NAnt, które łączą się w celu wykonania kompilacji. Ostatnio byłem niezadowolony z NAnt z kilku powodów: (1) jego składnia jest po prostu okropna – języki programowania oparte na XML są naprawdę przerażające w utrzymaniu, (2) projekt wydaje się umrzeć; ostatnio nie było mnóstwa aktualizacji i wygląda na to, że nikt tak naprawdę nie jest u steru. Próba uruchomienia go z .NET 4 powoduje pewne problemy z powodu braku aktywności. Tak więc, pomijając to wszystko, oto moje pytanie. Biorąc pod uwagę niektóre z rzeczy, które chcę osiągnąć w oparciu o powyższą listę i biorąc pod uwagę, że jestem głównie w sklepie .NET, ale muszę również tworzyć projekty inne niż .NET, czy istnieje alternatywa dla NAnt, którą powinienem rozważyć przełączać na? Rzeczy na moim radarze to Powershell (z psake lub bez), sam MSBuild i prowizja. To wszystko ma swoje plusy i minusy. Na przykład, czy MSBuild jest wystarczająco wydajny? Pamiętam, że używałem go lata temu i nie wydawał się mieć tak dużej mocy jak NAnt. Czy naprawdę chcę, aby mój zespół nauczył się Rubiego tylko po to, aby tworzyć kompilacje przy użyciu rake'u? Czy psake naprawdę jest wystarczająco dojrzałym projektem, aby przypiąć do niego moje portfolio? Czy Powershell jest „zbyt blisko metalu” i będę musiał napisać własną bibliotekę kompilacji podobną do psake, aby móc jej używać samodzielnie? Czy są inne narzędzia, które powinienem rozważyć? Gdybyś był zaangażowany w utrzymywanie portfela .NET o znacznej złożoności, na jakie narzędzie do kompilacji byś szukał? Z czego obecnie korzysta Twój zespół?


title: Struktura projektu zorientowana na architekturę (strukturę) a struktura projektu zorientowana na funkcje

text: Projekt, w który zaangażowałem się, ma strukturę plików/folderów zorientowaną na architekturę: Root |____ Node1 |____ Event Handlers | |___ <wszystkie programy obsługi zdarzeń projektu> |____ Zdarzenia | |___ <wszystkie zdarzenia projektu> |____ Programy obsługi żądań | |___ <wszystkie programy obsługujące żądania projektu> |____ Żądania | |___ <wszystkie wnioski projektu> |____ ... Jest to czytelne z architektonicznego punktu widzenia systemu (zostało to zaproponowane przez zespół programistów). Jest to struktura zorientowana na funkcje, zaproponowana przez zespół projektantów: Root |____ Feature #1 |____ Event Handlers | |___ <wszystkie programy obsługi zdarzeń funkcji #1> |____ Zdarzenia | |___ <wszystkie zdarzenia funkcji #1> |____ Programy obsługi żądań | |___ <wszystkie programy obsługujące żądania funkcji #1> |____ Żądania | |___ <wszystkie żądania funkcji #1> |____ ... Ten wariant jest bliższy projektantom i wyraźnie opisuje funkcję, która ma zostać zaimplementowana. Nasze zespoły rozpoczęły świętą wojnę: jakie jest najlepsze podejście. Czy ktoś mógłby nam pomóc i wyjaśnić wady i zalety pierwszego i drugiego. Może istnieje trzecia, która jest bardziej użyteczna i korzystna dla nas obojga. Dziękuję Ci.


title: Jak reprezentować jeden specjalny powiązany rekord

text: Mam dwa stoły, „projekt” i „foto”. „zdjęcie” ma „ID”, „ID projektu”, „ścieżkę” : każdy „projekt” ma wiele „zdjęć”. Teraz jedno z tych zdjęć jest tym, które ma zostać wyświetlone. Pytanie brzmi, jak to przedstawić w bazie danych. Wcześniej użyłem malejącej kolejności numerów `ID` i wybrałem ostatni, ale to się nie udało i spowodowało problemy. Teraz nie jestem pewien, w którą stronę iść: * Utwórz nową tabelę `projectPhotoDisplayed`, która zawiera numery `projekt`.`ID` i `photo`.`ID`(te, które mają być wyświetlane tylko). Złe : zbyt dużo pracy, a także powielanie informacji, które tabela `photo` już posiada (`photo` jest powiązane z `project``). * Utwórz nowe pole binarne w tabeli `photo`. Jeśli prawda, to wyświetl, w przeciwnym razie nie. Złe : Strukturalnie nie zapobiega zaznaczaniu wielu zdjęć do wyświetlenia. Chcę zachowanie przycisku radiowego * Utwórz nowe pole w tabeli `project`, które przechowuje `photoID` zdjęcia, które ma być wyświetlane. Złe : nie gwarantuje, że konkretny `photoID` jest faktycznie powiązany z tym `projektem`. Czy te informacje również tu należą? * Jakiekolwiek podejście z kluczami obcymi, aby zachować integralność referencyjną..? Korzystam z bazy danych PHP i MySQL InnoDB, choć jestem pewien, że nie będzie to miało znaczenia. Jaki jest najlepszy sposób przechowywania tych informacji?


title: Budowanie Java CMS — jakiego istniejącego produktu powinienem użyć?

text: Jestem programistą Java i potrzebuję CMS. Spędziłem dużo czasu czytając o Liferay i majstrując przy nim, ale obawiam się, że nie obejmuje on dwóch z moich **trzech głównych obaw** * Potrzebuję wielu witryn z indywidualnymi domenami * potrzebni projektanci HTML/CSS aby móc projektować szablony stron internetowych, wygląd i działanie oraz układy we własnych narzędziach bez konieczności pisania skryptów * API do tworzenia stron i stron muszą być zrozumiałe, aby można było stworzyć niestandardowy interfejs kreatora i wykorzystać CMS, a nie zhakowanie go Liferay przybija pierwszy punkt, ale dwa drugie wydają się nierozwiązane. Czy ktoś ma doświadczenie z Java CMS, który obsługuje wszystkie trzy? Lub masz pomysł, jak podejść do problemu, jeśli go nie ma? Czy ktoś używał Java CMS i był w stanie dodać tę funkcjonalność, aby uzyskać pewien wgląd?


title: Sesja HTTP: pojedynczy obiekt czy wiele?

text: Przetestowałem dwa podejścia do przechowywania danych sesji: * Klasyczne: 1 klucz, 1 obiekt (I każdy klucz jako `statyczny ciąg końcowy` w klasie) > "użytkownik" --> UserObject >> "preferencje" --> Lista > > ... * Podejście z tylko 1 obiektem > "sessionObject" --> SessionObject A mój `SessionObject` zawiera `UserObject` i listę preferencji jako atrybuty. To dość prosty przykład, ale wyobraź sobie go z ponad 20 atrybutami. Zaletą, którą widzę w drugim podejściu jest to, że: * Musisz tylko usunąć jeden klucz, aby upewnić się, że sesja jest pusta * Nie musisz tworzyć kłopotliwego zestawu `końcowego statycznego ciągu`, aby utworzyć klucze * Będziesz wiedział jaki typ obiektu pobrać (Używając klucza musisz `rzucić`) Czy widzisz jakiś problem, który mógłbym omówić? A może coś jest sprzeczne z najlepszymi praktykami?


title: Czy istnieje dobry zasób, aby zobaczyć jasne porównania językowe. Np.: Zakres w C++ vs JavaScript

text: Kiedy uczę się nowego języka, często nie potrzebuję nic więcej niż prostego porównania z językami, które już znam. Na przykład każdy język używa własnych reguł zakresu i typowania dynamicznego lub statycznego itp. Czy istnieje dobry sposób na śledzenie tego? Czy istnieją dobrze zorganizowane zasoby umożliwiające znalezienie tych informacji? Uważam, że przeglądanie 500 stron książki, gdy wystarczyłoby 10 stron, jest bardzo nieefektywne.


title: Ochrona projektu bazy danych — SQL

text: Może trochę dziwne pytanie, ale nie mogę wymyślić sposobu, aby osiągnąć to, czego chcę. Produkuję produkt, który jest instalowany na miejscu u klienta. Jest to aplikacja o krytycznym znaczeniu dla biznesu i zapewniająca wysoką dostępność, która musi bardzo szybko obsługiwać procesy. Chociaż oczywiście większość pracy jest poświęcona samej aplikacji (usługi Windows), jednym z powodów, dla których produkt jest tak dobry, jest inteligentne projektowanie baz danych. Do niedawna zazwyczaj dostarczałem serwery i byłem jedyną osobą, która miała dostęp do bazy danych i instancji SQL Server. Jednak ostatnio klienci poprosili o uruchomienie aplikacji na serwerze produkcyjnym, zwykle VMWare, i użycie ich farmy SQL dla bazy danych. Jest to w porządku dla aplikacji, jednak martwię się o to, kto będzie miał dostęp do serwera SQL i czy będzie mógł grzebać w bazie danych mojej aplikacji. Czy mogę coś zrobić, aby uniemożliwić dostęp do niego? A może chodzi o to, że jeśli go hostują, to nic nie mogę zrobić? Dzięki EDIT: Jeśli potrącił mnie autobus, firma składa itp. istnieje umowa depozytowa, która da im kod źródłowy wszystkiego, czego potrzebują. Co do tego, dlaczego się martwię, widziałem w przeszłości przykłady ludzi wprowadzających zmiany w tabelach danych i raportach i nie, nie mieli na to ochoty. Oznaczało to, że ktoś musiał wejść i wszystko naprawić, podczas gdy oczywiście pobieramy za to opłatę, zastanawiałem się, czy jest sposób, aby tego wszystkiego uniknąć, a przynajmniej zminimalizować ryzyko.


title: Dostosowywanie konfiguracji za pomocą Dependency Injection

text: Projektuję małą bibliotekę infrastruktury aplikacji, której celem jest uproszczenie tworzenia aplikacji opartych na ASP.NET MVC. Głównym celem jest wymuszenie konwencji nad konfiguracją. Jednak nadal chcę, aby niektóre części były „konfigurowalne” przez programistów. Skłaniam się ku następującemu projektowi: interfejs publiczny IConfiguration { SomeType SomeValue; } // ten nie zostanie zarejestrowany w klasie chronionej kontenerem DefaultConfiguration : IConfiguration { public SomeType SomeValue { get { return SomeType.Default; } } } // zadeklarowana wewnątrz biblioteki innej firmy, zostanie zarejestrowana w klasie chronionej kontenera CustomConfiguration : IConfiguration { public SomeType SomeValue { get { return SomeType.Custom; } } } I klasa "service" : public class Service { private IConfiguration conf = new DefaultConfiguration(); // opcjonalna zależność, jeśli zostanie znaleziona, zostanie ustawiona na CustomConfiguration przez kontener DI public IConfiguration Conf { get { return conf; } ustaw { konf = wartość; } } public void Konfiguruj() { DoCośZ(Konf); } } Tam część "konfiguracyjna" jest wyraźnie zależnością klasy usługi, ale czy jest to "nadużywanie" DI?


title: Jak możemy zmaksymalizować naszą wartość i otrzymać zapłatę?

text: Mieszkam w Hong Kongu. Właśnie usłyszałem jednego z moich znajomych, który studiuje angielski na uniwersytecie, właśnie ukończył studia i znalazł pracę za 20 tys. HKD jako nauczyciel języka angielskiego. Karierę zaczynałem jako programista z pensją 10 tys. HKD, a po pół roku podnoszę ją do 11,5 tys. HKD. Ukończyłem informatykę. Nie rozumiem, dlaczego jest tak duża przepaść między różnymi rodzajami zawodów. Nie mam żadnych pomysłów jak zmienić pracę i rzucić pracę programisty. Moje pytanie brzmi, czy możemy szybko zmaksymalizować moją wartość, aby moja pensja mogła wzrosnąć do podobnego zakresu, odpowiednio do innej pracy, takiej jak: nauczyciel, prawnik, lekarz?


title: Współczynnik proporcji monitora; Czy różnica ma znaczenie?

text: Tak więc zamierzam wkrótce zamówić sobie nowy komputer stacjonarny i stworzyć WŁAŚCIWE środowisko biurowe do końca tego roku. Aby zwiększyć produktywność, zamierzam kupić trzy nowe monitory. Uważam, że dwa po prostu nie wystarczą, gdy debuguję lub robię coś intensywnego. Powiedziałem, że pewnego dnia zwróciłem mi uwagę na coś, czego nigdy wcześniej tak naprawdę nie zauważyłem ani nie przejmowałem się tym - _czy różnica między monitorem 16:10 a 16:9 jest zauważalna podczas programowania?_ Czy naprawdę tęsknisz za tymi kilkoma dodatkowymi linijkami , czy jest to coś, czego w ogóle nie zauważasz. Zauważyłem, że HP wydaje się sprzedawać tylko monitory 16:9 (o ile znalazłem). Czy to staje się czymś w rodzaju nowego standardu w związku z niedawnym wzrostem i sprytnym marketingiem „HD 16:9”? **Podsumowując** : Czy ktoś przestawił się z 16:10 na 16:9 (lub odwrotnie) i rzeczywiście zauważył różnicę podczas programowania?


title: inżynieria wsteczna kontrolek js/html jako część rozwoju

text: Rozpoczynam projekt z dużym klientem, który ma kilka stron internetowych na całym świecie i chce zintegrować je w jedną bazę/strukturę kodu Sitecore. Zasadniczo wszystko w porządku, ale są pewne elementy sterujące nawigacją, z których musimy korzystać, ale ze względu na złożoność organizacyjną _nie mamy dostępnych źródeł innych witryn_ (nie, że ich gdzieś nie ma, po prostu nasz zespół będzie miał trudny czas, aby go opanować). Pozostaje nam więc zadanie przechodzenia strona po stronie (każda strona jest w innym języku), patrzenia na elementy sterujące nawigacji i mniej więcej kopiowanie html i js i używanie ich. Coś, co nie wydaje się niemożliwe, ale nigdy wcześniej tego nie próbowałem i czuję się nieco zdezorientowany, jak się do tego zabrać. **Edytuj**, aby powtórzyć, nie przejmujemy się tłumaczeniami ani nie chcemy pobierać wyświetlanego tekstu z innych witryn, chcemy uzyskać kod kontrolny, abyśmy mogli go używać lokalnie. A z kodem mam na myśli html/css i js. Elementy sterujące muszą wyglądać dokładnie tak samo, jak te już w produkcji. Czy masz do zaoferowania jakieś ogólne lub zwięzłe zalecenia?


title: Jaka jest najlepsza praktyka projektowania systemu obsługującego wiele języków, 1 słownika centralnego dla wszystkich języków czy słownika oddzielnego?

text: Chcę zbudować system wykorzystujący słownik wielu różnych języków. Dostępne są 2 opcje: Zbuduj 1 centralny słownik „Tabela” i każdy język jest identyfikowany przez „langType” (np. 1 dla niemieckiego i 0 dla angielskiego): CentralDict słowo - znaczenie - langType samochód - .... - 0 auto - .. .. - 1 lub 2 oddzielone tabele EngDict słowo - znaczenie samochód - .... GerDict słowo - znaczenie auto - .... Jeżeli opcja wynosi 2, to przy kodowaniu należy wykonać ciąg znaków DictTable=""; Ustawienia regionalne=getLocale(); if ("gm".locale){ DictTable="GerDict"; } else if("pl".locale){ DictTable="EngDict"; } Następnie, gdy zapytamy z String sql="select * from "+DictTable; //dostęp do danych z tabeli tutaj Jeśli wybrano opcję 1, int langType=0; Ustawienia regionalne=getLocale(); if ("gm".locale){ langType=1; } else if("en".locale){ langType=0; } String sql="wybierz * z CentralDict gdzie langType="+langType; //dostęp do danych z tabeli tutaj Zgaduję, że opcja 2 jest bardziej elegancka, ale nie masz pewności, czy mam rację? Dzięki opcji 2 możemy łatwo utworzyć relację 1 do 1 między 2 językami. Uwaga: nie jest to kwestia internacjonalizacji, ponieważ mój system bardzo dobrze radzi sobie z internacjonalizacją. Podczas gdy internalizacja zajmuje się tekstem Gui, takim jak tekst przycisku lub informacje o wiadomości, nie zajmuje się danymi, które zostały wyciągnięte z DB. Mój system słownika pomaga użytkownikowi zobaczyć wyjaśnienia terminów, takich jak „samochód”, „telefon”... w celach dydaktycznych. Obecnie działa dobrze w języku angielskim, ale chcę obsługiwać niemiecki i wiele z nich będzie francuskich lub w innych językach w przyszłości. Nie wiem, czy powinienem utworzyć kompletną oddzielną tabelę dla każdego języka, czy po prostu potrzebuję 1 scentralizowanego słownika dla wszystkich języków i ma pole `langType` do identyfikacji języka, który ma być używany w oparciu o wymagania użytkownika. Np.: gdy użytkownik wprowadzi `mojadomena.com/locale=de`, system pokaże dokładne Gui (jak w języku angielskim), ale cały tekst Gui będzie w języku niemieckim. Również, gdy użytkownik szuka danych , powinien pobrać niemieckie dane z bazy danych. nie dane w języku angielskim.


title: Duży projekt z wieloma zewnętrznymi bibliotekami - organizacja kodu źródłowego

text: Zastanawiałem się, jaki jest najlepszy sposób na uporządkowanie mojego kodu źródłowego. Badałem na SO i znalazłem http://stackoverflow.com/a/1398594/137261, ale ten układ kodu źródłowego jest specyficzny dla biblioteki i nie obejmuje mojej sytuacji. **Moja sytuacja:** * 10 własnych modułów (100k linii kodu) * 15 bibliotek zewnętrznych (np. boost, sqlite, zlib, itp.) * 2 krytyczne moduły muszą być dostępne tylko dla wybranych programistów (może oddzielne repozytoria git ? ) * projekt jest wieloplatformowy (Linux i Windows) * Git jako system kontroli wersji * cmake użyty do zbudowania projektu **Pytanie:** * czy jest sens włączać wszystkie biblioteki do mojego projektu np.? w folderze _3rd_party_libs_ ? * jak obsługiwać lib include paths w moich modułach (zmienna środowiskowa, ścieżki względne, submoduły git itp.) ? * czy powinienem zawsze budować zewnętrzne biblioteki ze źródeł, czy po prostu używać ich binariów?


title: Konfigurowanie projektu Clojure i projektów podrzędnych

text: Jest to przede wszystkim pytanie dotyczące tworzenia dużego projektu i jego podprojektów i nie ma być pytaniem dyskusyjnym. Zamiast tego interesuje mnie wskaźnik do dokumentacji lub link do najlepszych praktyk Clojure / lein. Mam aplikację do wycen nieruchomości komunalnych, która dzieli dwie główne muchy na różne pliki podzbiorów, w zależności od tego, czy ma miejsce przelew rozliczeniowy, czy też chcemy zbiorczo zaktualizować nowe konta, zamiast zmuszać nasz dział wyceny do wprowadzania nowych kont raz w swoim systemie, a następnie ponownie w systemie poboru podatków. Moja aplikacja będzie na tyle duża, że mogę zobaczyć wspólny projekt lein biblioteki z funkcjami pomocniczymi, takimi jak dzielenie plików, a następnie pojedyncze projekty lein, które korzystają ze wspólnej biblioteki. Czy projekty lein powinny być ustawione na tym samym poziomie i wsparcie zawarte w plikach project.clj/core.clj? Czy istnieje korzyść z tworzenia projektów „lein new” pod dużym projektem? Czy jest problem z połączeniem wszystkich funkcji w jednym projekcie? Prawdopodobnie mogę sprawić, że mój jeden core.clj będzie zawierał wszystkie smaki programu, ale wywodząc się z C/C++ i Pythona, wolałbym mieć dużo małych projektów.


title: Zalecane sposoby na dobre zrozumienie dziedziczonego oprogramowania

text: Odziedziczyłeś więc dużą bazę kodu, w której musisz wprowadzić istotne zmiany i chcesz uzyskać całkiem pełne zrozumienie oprogramowania przed rozpoczęciem. Czy zobrazowałbyś to? Jeśli tak, które narzędzie uważa za najbardziej odpowiednie dla dużej bazy kodu? Idealnie byłoby, gdybym chciał węzły rozwijalne reprezentujące główne koncepcje w przepływie, które można by przeanalizować pod kątem podpojęć i podpojęć. Najlepiej oparte na UML, ale nie niezbędne. Czy istnieją przyzwoite narzędzia do automatycznego tworzenia diagramów źródeł, w szczególności PHP->UML?


title: Co jest nie tak z licencją?

text: Często słyszę, że nie powinienem korzystać z bezlicencji ze względu na problemy z udostępnieniem rzeczy do domeny publicznej. Jednak nie rozumiem, dlaczego miałby to być problem dla Unlicense. The Unlicense próbuje umieścić wszystko, co nie jest licencjonowane, w domenie publicznej, a jeśli to działa, super! Jednak autor Unlicense rozumie, że umieszczenie czegoś w domenie publicznej nie jest takie proste, może nawet być niemożliwe, dlatego też Unlicense zawiera klauzulę zapasową (paragraf 2), która wyraźnie stwierdza, że każdy może robić to, co chce. chcesz z oprogramowaniem bez licencji. Licencja bez licencji zawiera nawet zastrzeżenie zawierające zwykłe legalne „to oprogramowanie jest dostarczane tak, jak jest, bla bla”. Czy brak licencji jest zły, ponieważ jest krótki i nie określa, kto jest „nielicencjodawcą”, „bezlicencjobiorcą” i Świętym Mikołajem? Jeśli tak, to co z licencjami w stylu MIT/BSD? Są one ogólnie uważane za ważne, więc dlaczego nie jest to licencja bez licencji? Czy sprzeciw wobec zrzeczenia się domeny publicznej z liberalnymi klauzulami zapasowymi licencji, takimi jak Unlicense, a nawet Creative Commons CC0, to tylko FUD, czy są z nimi naprawdę poważne problemy prawne? Oto pełny tekst Licencji: > Jest to bezpłatne i nieobciążone oprogramowanie udostępnione do domeny publicznej. > > Każdy może kopiować, modyfikować, publikować, używać, kompilować, sprzedawać lub rozpowszechniać > to oprogramowanie, w formie kodu źródłowego lub jako skompilowany plik binarny, w dowolnym > celu, komercyjnym lub niekomercyjnym, i w jakikolwiek sposób . > > W jurysdykcjach, które uznają prawa autorskie, autor lub autorzy > tego oprogramowania przeznaczają wszelkie prawa autorskie do > oprogramowania do domeny publicznej. Oddanie to czynimy dla dobra ogółu > społeczeństwa oraz ze szkodą dla naszych spadkobierców i następców. Chcemy, aby to poświęcenie było jawnym aktem zrzeczenia się na zawsze wszystkich obecnych i przyszłych praw do tego oprogramowania na mocy prawa autorskiego. > > OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKICHKOLWIEK GWARANCJI, WYRAŹNYCH LUB > DOROZUMIANYCH, W TYM MIĘDZY INNYMI GWARANCJI WARTOŚCI HANDLOWEJ, > PRZYDATNOŚCI DO OKREŚLONEGO CELU I NIENARUSZANIA PRAW. W ŻADNYM WYPADKU > AUTORZY NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIA, SZKODY LUB INNĄ ODPOWIEDZIALNOŚĆ, CZY W ZAKRESIE UMOWY, CZYNNEGO LUB INNEGO, WYNIKAJĄCEJ Z OPROGRAMOWANIA LUB W ZWIĄZKU Z > OPROGRAMOWANIE. > > Więcej informacji można znaleźć na stronie http://unlicense.org/


title: Jak oceniać wiedzę młodszych programistów

text: Zacząłem mentorować młodszemu programiście. Przeczytałem wiki społeczności o tym, jak mentorować i podążam za wieloma sugestiami tam zawartymi. Deweloper ma kilkuletnie doświadczenie, głównie w modyfikowaniu istniejących programów lub przenoszeniu kodu z naszego starszego systemu do naszego nowego systemu (dużo wycinania i wklejania). Uczę ją o naszej infrastrukturze, która ma w sobie dużo bardziej złożone programowanie, np.: odbicie, wskaźniki, wielowątkowość, obiekty dynamiczne. Kiedy już jej wyjaśnię, co należy zrobić, jest w stanie napisać działający kod, zwykle kopiując podobny kod i modyfikując go. Martwię się, że nie rozumie, dlaczego i jak kod robi to, co robi. Kiedy proszę ją o wyjaśnienie mi kodu, zwykle parafrazuje wymagania, które jej pierwotnie postawiłem. Więc moje pytanie brzmi: jak mogę zmierzyć, jak dobrze rozumie ona logikę biznesową i używane struktury programistyczne? O co powinienem pytać, czego powinienem szukać?


title: Jakie podejście należy zastosować do tworzenia aplikacji przeznaczonych na wiele platform?

text: W przypadku aplikacji przeznaczonych dla wielu platform, widzę głównie dwa podejścia programistyczne: * Przejdź do jakiejś platformy programistycznej podobnej do JAVA. Miej jedno rozwiązanie kodu i pozwól pośredniemu środowisku wykonawczemu obsługiwać różne platformy. Jeśli coś pójdzie nie tak na dowolnej platformie, dostosuj nieco kod. Ale zachowaj to samo dla wszystkich. * Stwórz modułowy kod oddzielający podstawową logikę i interfejs użytkownika. Opracuj oddzielne interfejsy użytkownika dla odpowiednich platform, które będą wywoływać te same podstawowe biblioteki. Zbuduj aplikację osobno dla każdej z platform docelowych. Więc który z nich naśladować? Wiem, odpowiedź zacznie się od „ **To zależy**”. Ale chcę poznać wasze opinie na temat tych podejść i czynników, które należy wziąć pod uwagę przy wyborze któregoś z nich.


title: Czy projektanci stron internetowych są programistami?

text: > **Możliwy duplikat:** > Czy programista Front-End Web jest "programistą"? Czy trafne jest klasyfikowanie projektantów stron internetowych jako programistów? Czy należy je zaklasyfikować jako takie?


title: Co się stało z interfejsem Google AJAX Search API

text: Chcę przeszukać główną wyszukiwarkę Google, ale wszystkie odniesienia, w tym punkt stackoveflow, do interfejsu API wyszukiwania Google AJAX. Dziwne jest to, że wydaje się, że już nie istnieje, nie ma nawet notatki z informacją, że jest zdeprecjonowana? Stare linki prowadzą do głównej witryny kodu Google. Jeśli spojrzę na listę interfejsów API w tej witrynie, zastąpione API jest tam API wyszukiwania w sieci Web (przestarzałe), które łączy z powrotem do tej samej strony, ale nie API wyszukiwania Google AJAX. Dalsze wyszukiwanie w Google też nie jest pomocne, wiele postów na blogu wskazuje na tę samą witrynę Google (http://code.google.com/apis/ajaxsearch/), która nie ma treści i przekierowuje do tego samego miejsca? Aby udowodnić, że istnieje, znalazłem go na maszynie w drodze powrotnej, jednak ostatnia migawka nie pokazała żadnego specjalnego nietypowego komunikatu.


title: Czy ma sens pisanie testów dla starszego kodu, gdy nie ma czasu na pełną refaktoryzację?

text: Zazwyczaj staram się postępować zgodnie z radami zawartymi w książce _Efektywna praca z Legacy Code_. Łamię zależności, przenoszę części kodu do metod `@VisibleForTesting publicznych statycznych` oraz do nowych klas, aby kod (lub przynajmniej jego część) był testowalny. I piszę testy, aby upewnić się, że niczego nie psuję, modyfikując lub dodając nowe funkcje. Kolega mówi, że nie powinienem tego robić. Jego rozumowanie: * Po pierwsze, oryginalny kod może nie działać poprawnie. A pisanie testów do tego sprawia, że przyszłe poprawki i modyfikacje stają się trudniejsze, ponieważ programiści również muszą rozumieć i modyfikować testy. * Jeśli jest to kod GUI z pewną logiką (na przykład ~12 wierszy, 2-3 bloki if/else), test nie jest wart zachodu, ponieważ kod jest zbyt trywialny na początek. * Podobne złe wzorce mogą istnieć również w innych częściach kodu (czego jeszcze nie widziałem, jestem raczej nowy); łatwiej będzie je wszystkie posprzątać podczas jednej dużej refaktoryzacji. Wydobycie logiki może podważyć tę przyszłą możliwość. Czy powinienem unikać wyodrębniania testowalnych części i pisania testów, jeśli nie mamy czasu na pełną refaktoryzację? Czy jest jakaś wada, którą powinienem wziąć pod uwagę?


title: RESTful skład/włączenie innych zasobów

text: Mam kilka zasobów HTTP i zastanawiam się, czy uwzględnienie modeli jednego w drugim jest dopuszczalne, czy też istnieje czystsza metoda. W tym przykładzie mamy mnóstwo zasobów "wiadomości", a użytkownicy mogą subskrybować zasób o nazwie "subskrypcja": ==>/news-items/{id}/ { "id": 987, "url": " http://example.com/foo/bar", "title": "Wow! Nagłówek", } And ==> /users/{identyfikator-użytkownika}/subscriptions/ [ { "id" : 123 "słowa kluczowe" : "Mr Celebrity" }, ... ] A potem punkt końcowy, który zawiera modele obu zasobów ... ==> /users/{user-id}/my-news/ [ { "id": 987, " url": "http://example.com/foo/bar", "title": "Wow! Nagłówek", "matched_by": [ { "id": 123, "keywords": "Wow", }, ... ] }, ... ] Przypadek użycia jest dość oczywisty: kanał wiadomości z 'dopasowanym przez "Mr Celebrity"' obok. Dziwne jest posiadanie punktu końcowego składającego się tylko z modeli zagnieżdżonych/złożonych z innych punktów końcowych... Czy jest to dopuszczalna praktyka czy problematyczna? Punkt końcowy będzie tylko do odczytu, a inne opcje wydają się być następujące: 1. Styl HATEOAS: „matched_by” i element wiadomości to adresy URL wskazujące na element wiadomości i subskrypcję. Wymagałoby więcej żądań HTTP. 2. Pewien rodzaj odpowiedzi na wiele ładunków z głównym ładunkiem HATEOAS, a następnie „powiązanym” ładunkiem zasobów, do których się odnoszą. Nie widziałem tego wcześniej. 3. ??? jakieś inne opcje? Jeśli moje podejście jest rozsądne, świetnie, ale chcę usłyszeć, co zrobiliby inni, gdyby istniała lepsza alternatywa. Dziękuję :)


title: Python - Importowanie modułów i widoczność

text: Rozważmy następujący kod: a.py import os def print_rand(): print os.urandom() I inny moduł: b.py z importu * W tym kodzie kończę z importem zmiennej `os` z `a `. Mógłbym temu zapobiec z małą zmianą: a.py import os jako _os def print_rand(): print _os.urandom() Ponieważ `z importu *` nie pobiera elementów zaczynających się od podkreślenia, `b` zrobiłoby to t zaimportować moduł `os` z `a`. Myślałem o zrobieniu tego w części mojego kodu. Nigdy nie używam `import *`, ale logicznie rzecz biorąc, i tak ma to jakiś sens. (Nie wspominając o tym, że nie pracuję sam nad swoim kodem.) `os` jest elementem, którego `a` używa wewnętrznie; nie jest po to, by być wystawionym na świat zewnętrzny. (Tak, zdaję sobie sprawę, że i tak można do niego uzyskać dostęp, ale mam na myśli tylko to, że podkreślenie umownie oznacza „prywatny”.) Czy to jest coś, co powinienem zrobić? Czy byłoby to uważane za „Pythonic”, czy jest to coś, czego powinienem szczególnie unikać? Czy to w ogóle ma znaczenie? (Czy powinienem zapytać o StackOverflow? Wydaje mi się to zbyt koncepcyjne.)


title: Jak mogę stworzyć własną licencję na oprogramowanie?

text: Widziałem wiele licencji na wszelkiego rodzaju oprogramowanie, takie jak GNU GPL, licencja BSD, licencja MIT i LGPL. Jak wygląda proces tworzenia nowej licencji na oprogramowanie, takiej jak „licencja ogólna Johna Doe”?


title: Ponowne wymyślanie projektu systemu dla Scala

text: Wiele, wiele, wiele księżyców temu ukończyłem studia magisterskie z inżynierii oprogramowania zorientowanej obiektowo. Zajmowałem się wszystkim: inicjacją projektu, wymaganiami, analizą, projektowaniem, architekturą, rozwojem itp. Moją ulubioną książką informatyczną wszech czasów było Developing Object Oriented Software, a Experience Based Approach (IBM-1996). Książka stworzona przez grupę prawdziwych ekspertów swoich czasów. Opisuje skoncentrowane na produkcie pracy podejście do analizy obiektowej, projektowania i metod rozwoju. Zaprojektowałem i opracowałem, byłem szczęśliwy i byłem na szczycie mojej gry, ale zacząłem czuć się trochę przestarzały: ruchy zwinne stały się modą dnia i zmieniły markę niektórych dobrze znanych iteracyjnych i przyrostowych podejść z nowymi modnymi słowami. Nagle niedoświadczeni programiści zaczęli marszczyć brwi, kiedy powiedziałem „wymagania” lub „architektura”, jakby te rzeczy zostały zastąpione magią. Projektowanie i rozwój straciły frajdę i miałem zamiar zostawić za sobą całą branżę IT. Potem odkryłem Scala. Och, jak delikatny deszcz na zakurzonej drodze. Wszystko po prostu stało się jasne, powietrze znów stało się słodkie, a małe światełko mojego dysku twardego migotało głęboko w noc, radośnie dotrzymując mi towarzystwa w moim świecie odkryć. Lubię projektowanie systemów. W głębi serca jestem architektem, bardziej niż programistą. Uwielbiam analizować, projektować, myśleć, argumentować, ulepszać - po prostu uwielbiam proste, czyste i wyraziste projekty. **Jak projektujemy czyste rozwiązania Scala?** Z pewnością konwencjonalne diagramy sekwencji, diagramy interakcji, diagramy obiektów itp. można zastąpić lub ulepszyć, łącząc imperatywne i funkcjonalne systemy zorientowane obiektowo. Z pewnością jest miejsce na coś zupełnie innego! Nie szukam nadętej złożoności - szukam elastycznej prostoty. Podobnie jak Scala jest w rzeczywistości prosta i łatwa (choć inna), ale można ją rozszerzyć tak, aby pasowała do twoich wymagań, jak para spodni do jogi. Musi istnieć system projektowania dla tego uroczego języka, który na początku będzie prosty i można go rozszerzyć, aby pasował do Twoich wymagań i domeny. Na pewno UML nie może tak być! Jak więc projektujemy czyste systemy Scala? Wyobraź sobie przez chwilę, że masz luksus zaprojektowania kompletnego systemu od podstaw i wiesz, że będziesz używać tylko Scali - _Jak będą wyglądały Twoje modele?_ Jakiego rodzaju diagramy musiałbyś opisać, aby opisać strukturę i zachowanie? Jak byś modelował opcje, dopasowania, mixiny, pojedyncze obiekty itp. bez wciągania w złożoność rozszerzania istniejących technik modelowania, zamiast świeżego, lekkiego, innowacyjnego zestawu narzędzi. _Czy taki projekt/proces/rozwiązanie istnieje_ , czy **czas je wymyślić?**


title: Jak przeprowadzić wywiady na miejscu z wieloma firmami?

text: Obecnie mieszkam w Tajlandii. Zrobiłem wywiady telefoniczne z kilkoma firmami w San Francisco i zdałem wszystkie. Teraz problem polega na tym, że mam na miejscu wywiady z 3 firmami, które są gotowe zapłacić za loty i hotele. Nie mam pojęcia, co mam teraz zrobić. Nie chcę latać trzy razy tam iz powrotem między Tajlandią a San Francisco. Sądzę, że mam dwie możliwości: 1. Okłamuj pierwszą firmę, w której chcę przez kilka dni zwiedzać, i poproś ją, aby przesunęła lot trochę dalej. 2. Poinformuj bezpośrednio HR, że będę miał rozmowę kwalifikacyjną również z innymi firmami i poproś pierwszą firmę o zapłatę za lot do SF, a drugą o zapłatę za lot powrotny do Tajlandii. (Trzecia firma dostaje darmowy bilet) Lot między Tajlandią a San Francisco powinien kosztować około 1500 dolarów. (podróż w obie strony) Co mam zrobić?


title: użycie operatora trójskładnikowego w nawiasach IF

text: czy mógłbyś mi pomóc zrozumieć ten operator trójargumentowy public static <E> void replace(List<E> list, E val, E newVal) { for (ListIterator<E> it = list.listIterator();it.hasNext(); ) if (val == null ? it.next() == null : val.equals(it.next())) it.set(newVal); } Myślałem, że część po ? jest zwykłym stwierdzeniem, więc w jaki sposób używa się tutaj ==?


title: Dołącz ignorowany plik do repozytorium git

text: Załóżmy, że konfiguruję stronę internetową i jest tam mnóstwo zdjęć. Te obrazy się nie zmienią. Ale chciałbym, aby każdy członek zespołu, który sklonował projekt, otrzymał obrazy, aby natychmiast uruchomić witrynę. Czy to oznacza, że powinienem dodać również obrazy śledzenia? Po prostu biorę przykład, może to być słoik w projekcie java lub coś innego.


title: Co jest wywoływane za każdym razem przez pętlę?

text: while (true) { // co jest wywoływane za każdym razem w tej pętli? }