title: Czy programiści muszą rozumieć domenę biznesową, czy specyfikacja powinna być wystarczająca?

text: Pracuję dla firmy, dla której dziedzina jest naprawdę trudna do zrozumienia, ponieważ jest to zaawansowana technologia w elektronice, ale ma to zastosowanie do każdego tworzenia oprogramowania w złożonej domenie. Aplikacja, nad którą pracuję, wyświetla wiele informacji, wykresów i metryk, które są trudne do zrozumienia bez doświadczenia w tej domenie. Deweloper używa specyfikacji, aby opisać, co oprogramowanie musi zrobić, na przykład określając, że konkretny wykres musi wyświetlać tego rodzaju metryki, a ta metryka jest następującą formułą arytmetyczną. W ten sposób programista tak naprawdę nie rozumie biznesu i co/dlaczego wykonuje to zadanie. Może to być w porządku, jeśli specyfikacja jest naprawdę szczegółowa, ale gdy nie jest lub gdy autor zapomniał o przypadku użycia, deweloperowi jest to dość trudne do znalezienia rozwiązania. Z drugiej strony przeszkolenie każdego programisty we wszystkich aspektach biznesowych może być bardzo długie i trudne. Czy powinniśmy przykładać większą wagę do szczegółowej specyfikacji (ale jak wiemy, idealna specyfikacja nie istnieje), czy też powinniśmy przeszkolić wszystkich programistów, aby rozumieli dziedzinę biznesową? **EDYTUJ: w swojej odpowiedzi pamiętaj, że firma może korzystać z zewnętrznych programistów i że formacja do całej domeny może trwać około 2 tygodni**


title: Projektowanie dostępu do „bazy danych” opartej na plikach

text: Często zdarzało się, że musiałem zapewnić dostęp do kilku plików uporządkowanych w drzewie katalogów według pewnych (czasem luźno określonych) reguł. Moim standardowym wzorcem jest dostarczenie klasy Database, która jest inicjowana z katalogiem głównym. Ta klasa zapewnia metody podobne do getX() (przykład: getStructure()) do wyodrębniania danych z bazy danych. Metody te zwykle zwracają obiekty sensowne semantycznie (Structure) z odpowiednimi metodami zwracającymi dane (np. structure.getPoints()). Nie jestem do końca zadowolony z tego projektu z dwóch głównych powodów. Pierwszy problem polega na tym, że mapowanie między obiektami w aplikacji i plikami może nie być 1:1, to znaczy, aby utworzyć obiekt Struktury, będę musiał otworzyć różne pliki w „bazie danych”, a mapowanie może nie być idealne. W tym przypadku Strukturę nazywam „Grubym obiektem”. Alternatywą („cienkie obiekty”) jest trzymanie się obiektów, które _są_ w pełni reprezentowane w pliku, nawet jeśli są słabe w znaczeniu domeny wysokiego poziomu (to znaczy, jeśli mam dwa pliki do zdefiniowania struktury, jeden plik zawierający punkty i drugi zawierający połączenia między tymi punktami, po prostu dostarczam obiekt Points i obiekt Connections i pozwalam komuś innemu "łączyć kropki" poza bazą danych). Inny problem, jaki mam, jest następujący: kto powinien przeprowadzić właściwą analizę plików? Wyobrażam sobie dwie strategie: albo obiekty są w stanie deserializować się z pliku ("marynowane" w żargonie Pythona), albo są po prostu głupimi kontenerami danych wypełnionymi przez bezstanowe obiekty parsera (jeden na plik), lub nawet przez obiekt bazy danych samo. Kiedy robisz ORM, istnieją jasne, dobrze zdefiniowane zasady dotyczące tego, jak obiekt jest reprezentowany w bazie danych, a proces jest bardzo dobrze zdefiniowany pod względem interfejsu i zachowania. Niekoniecznie jest to weryfikowane w przypadku dowolnej ilości plików, które niektórzy ludzie nazywają „bazą danych”. Naprawdę cieszyłbym się z twoich uwag w tym zakresie. Jak wykonać właściwą deserializację w przypadku „surowego mapowania”? Cienkie czy grube przedmioty ? Mądry czy głupi ? Zauważ, że tak naprawdę nie mam żadnej kontroli, jeśli chodzi o pliki, do których mam dostęp. Otrzymuję pliki z zewnętrznych źródeł i muszę je przekonwertować na pewnego rodzaju obiekty domenowe, generalnie tylko do odczytu, ale czasem także do zapisu. Jednak Readonly jest zdecydowanie najczęstszym przypadkiem.


title: Jak zdalni programiści pracujący nad oprogramowaniem własnościowym radzą sobie z zabezpieczaniem swojej pracy/kodu źródłowego?

text: Zastanawiałem się tylko, jakie protokoły musiałby przejść inżynier oprogramowania, gdyby pracował w domu dla firmy opracowującej zastrzeżone oprogramowanie o zamkniętym kodzie źródłowym. Czy użyłbyś antywirusa innej firmy, czy obawiasz się, że może ukraść Twój kod? Czy możesz zaufać usługom hostingowym, takim jak github i bit-bucket? Czy zachowałbyś swój kod źródłowy na zaszyfrowanej partycji? Czy zrobiłbyś jakieś konfiguracje, aby upewnić się, że system Windows nie może ukraść twojego kodu źródłowego za pomocą jakiejś wbudowanej funkcji? Jakie inne rodzaje obaw związanych z bezpieczeństwem miałbyś i jak sobie z nimi radzisz?


title: Algorytm dopasowywania elementów tekstowych o podobnej treści

text: Pracuję na stronie internetowej (C#, ASP.Net MVC 3), która odczytuje niektóre kanały RSS z wielu źródeł i umieszcza tytuł i podsumowanie kanału w tabeli bazy danych (Sql Server). To, co chcę zrobić, to: Umieścić algorytm, który może powiązać wiele kanałów. Na przykład, jeśli każdy kanał jest wiadomością, chciałbym odnieść się do wszystkich wiadomości, które w innej gramatyce angielskiej mówią „Niektórzy wygrali wybory”. Czy istnieje standardowy algorytm dla takiej logiki dopasowania treści? Jeśli nie, jakiego rodzaju algorytmu niestandardowego należy użyć? Jeśli ta logika może być napisana po stronie bazy danych (np. Stored Procedure) będzie lepiej.


title: Nowatorski polimorfizm – jakieś powody tego kodu?

text: W ramach mojej pracy nad starszą aplikacją C# natknąłem się na nowatorskie (dla mnie) wykorzystanie interfejsu i konkretne implementacje. Nie mogę wymyślić żadnego powodu, dla którego miałbyś to zrobić, ale jestem dość gruby, więc może ktoś inny może? IContract interfejsu publicznego { ContractImplementation1 Contract { get; } bool IsCollection { get; } bool Dotknął { get; ustawić; } } public class ContractImplementation1 : IContract { public ContractImplementation1(string propertyOne, string propertyTwo, string propertyThree, string propertyFour) { PropertyOne = propertyOne; Druga własność = Druga własność; WłaściwośćTrzy = WłaściwośćTrzy; WłaściwośćCzwarta = WłaściwośćCztery; } public ContractImplementation1 Contract { get { return this; } } public bool IsCollection { get { return false; } } public bool Dotknął { get; ustawić; } ciąg publiczny PropertyOne { get; zestaw prywatny; } ciąg publiczny PropertyTwo { get; zestaw prywatny; } ciąg publiczny PropertyThree { get; zestaw prywatny; } ciąg publiczny PropertyFour { get; zestaw prywatny; } public override string ToString() { if (string.IsNullOrEmpty(PropertyFour)) return string.Format("{0} => {1}: {2}", PropertyOne, PropertyTwo, PropertyThree); else return string.Format("{0} => {1}: {2} {3}", PropertyOne, PropertyTwo, PropertyThree, PropertyFour); } } public class ContractImplementation2 : IContract { public ContractImplementation1 Contract { get { return null; } } public bool IsCollection { get { return true; } } public bool Dotknął { get; ustawić; } public List<ContractImplementation1> Contracts = new List<ContractImplementation1>(); } Nie rozumiem supertypu posiadającego właściwość, która jest podtypem samego siebie. Idąc za odpowiedzią Cosmina: Nie rozumiem, dlaczego miałbyś mieć podtyp jako właściwość, biorąc pod uwagę, że właściwość zwraca się sama po implementacji (zamiast „rodzica” tego samego typu, tj. innej instancji super-typ).


title: Wyzwania wobec podejścia Agile w projektach rządowych

text: Poprzednia dyskusja na temat Agile zawierała dobre odpowiedzi określające, co jest **krytyczne** dla sukcesu wdrożenia metodologii Agile w tworzeniu oprogramowania. Większość punktów dotyczyła typowych wyzwań organizacyjnych i zarządczych, ale martwi mnie jeden punkt, a mianowicie, że klient musi być zaangażowany w cały proces. Klient jest jedyną rzeczą, której nie możesz realistycznie kontrolować, być może Twój model biznesowy przystosowuje Cię do pracy na zlecenie rządu, na przykład tam, gdzie bardzo rygorystyczna umowa zobowiązuje firmę do: * Zapewnienia X funkcji dokładnie tak, jak jest to wymagane * Prośby o funkcje zostaną przerzucone przez ścianę , nie przeszkadzaj nam, nie chcemy tego słyszeć. * W umyśle klienta nie ma koncepcji priorytetu funkcji, _wszyscy są ważni, inaczej nie prosilibyśmy o nie._ * Projekt będzie kosztował nie więcej i nie mniej niż Y, niezależnie od przekroczeń lub terminów. * Bezwzględny, ścisły, ostateczny i niepodlegający negocjacjom termin realizacji wszystkich prac. Nigdy wcześniej nie pracowaliśmy z takim klientem, ale pieniądze na projekt są po prostu zbyt dobre, by z nich zrezygnować. Potrzebujemy tej pracy. Przyjechałem tutaj i pracowałem **CIĘŻKO**, aby zmienić procesy w ramach rozwoju Agile i tutaj nie wiem, jak pogodzić, gdzie ten projekt pasuje do naszego nowego procesu. Nigdy wcześniej nie miałem luksusu otwartego, bezpośredniego zarządzania, które zaufało mi, że poprowadzę zespół programistów i procesy na tej ścieżce, a teraz, gdy tu jesteśmy, nie mogę szczerze powiedzieć sobie, że ten projekt zostanie naprawdę wykonany w Zwinny sposób. Czuję, że kierownictwo zaufało mi, że poprowadzę tę ścieżkę i że ich zawiodłem, ponieważ sytuacja, w której się teraz znajdujemy, wyraźnie wzywa do Wodospadu. Boję się, że stracę ich zaufanie, jeśli teraz się cofnę. Inne odpowiedzi, takie jak ta tutaj, mówią, że Agile jest niemożliwe z tego rodzaju klientem, zgadzasz się? Czy ktoś z Was był w podobnej sytuacji i sprawił, że to zadziałało? Jakie strategie wdrożyłeś, aby Agile było skuteczne?


title: Czy korzystniej jest napisać program do testowania kodu (np. klienta) czy po prostu użyć głównej części programu?

text: Na przykład gdybym miał program z kilkoma metodami. public class Dog{ public boolean ishappy{..} public int weight{...} public static void main{ Dog Max = nowy pies Max.ishappy}} Czy najlepiej jest używać głównej części kodu do testowania lub pisania zupełnie osobny program, który byłby klientem klasy psa do testowania mojego kodu?


title: Jak korzystasz z CFThread w aplikacjach ColdFusion?

text: W tym roku prezentuję temat Współbieżność w ColdFusion na CFObjective i chciałbym usłyszeć, jak używasz CFThread w swoich aplikacjach ColdFusion. Ponadto, jakie problemy miałeś podczas korzystania z niego i jak (jeśli w ogóle) je rozwiązałeś? Czego nie lubisz w CFThread? Czy napotkałeś poważne słabości z CFThread lub inne problemy, w których po prostu nie mógł zrobić tego, co chciałeś zrobić? Na koniec, jeśli chcesz dodać coś związanego ze współbieżnością w CF, a nie konkretnie z CFThread, poinformuj o tym.


title: Czy dobrym pomysłem jest użycie frameworka testów jednostkowych do innego celu niż kod testowy?

text: Mam zamiar napisać prosty skrypt do testowania zestawu danych dla określonych warunków. Projektowałem go jako zestaw funkcji, z których każda opisuje warunek do przetestowania i przekazuje je do silnika testowego: # Silnik testera: all(f(zestaw danych) dla f w warunkach) Zdałem sobie sprawę, że moje podejście jest podobne do jednostki testowanie. Tak więc, aby uniknąć powtarzania się, myślę o użyciu mojego ulubionego frameworka do testów jednostkowych. 1. Co myślisz o tym pomyśle? 2. Czy ktoś z was używał frameworka testów jednostkowych do innych celów niż kod testowy?


title: Menedżer Ruby dla Windows: Czy PIK Rubiego żyje, czy umiera?

text: Na początku proszę o wybaczenie prawdopodobnie nie na temat i/lub niekonstruktywnego pytania, ale naprawdę nie mam pojęcia, gdzie je zadać. Na początku celowałem w StackOverflow, widać przynajmniej część ruchu związanego z PIK, ale Programiści wydają się bardziej odpowiedni (chociaż wydaje się, że nie ma tu trzech słów o PIK..). Jakiś czas temu szukałem szybkiego sposobu na przewidywalne i powtarzalne konfigurowanie środowisk Ruby i stwierdziłem, że PIK jest stosunkowo łatwy i użyteczny. Zauważ, że nie jestem pełnoetatowym programistą Ruby, używam go bardziej jako "szybkiej konsoli hakerskiej" i "lekkiego zamiennika Basha" w systemie Windows. Przez ostatni rok, a może nawet trzy lata szczęśliwie używałem PIK do izolowania ENVS Rubiego od normalnego środowiska powłoki Windows. Wymyśliłem też kilka rozszerzeń, zarówno do powłoki Windows, jak i samego PIK-a, i od czasu do czasu mam ochotę je opublikować. Obejmują one proste rzeczy, od uruchamiania skryptu przez dwukrotne kliknięcie do .vbs lub .bat, do bardziej interesujących, takich jak przeciąganie i upuszczanie plików do skryptu .rb, po dość ezoteryczne, jak emulowane wsparcie dla shebangów, takich jak `#!/bin/ruby-187 ` `#!/bin/ruby-193` dzięki czemu można łatwo przełączać środowiska wykonawcze Rubiego w skryptach znajdujących się na pulpicie. Omówiłem trochę tła, pozwól, że zadam straszne pytanie: ~~czy warto to opublikować?~~. Nie, oczywiście prawie wszystko, co można wykorzystać, jest tego warte. Chodzi mi bardziej o poczucie, że może mógłbym lepiej spędzić ten czas, nie ma sensu polerować martwych narzędzi, a jak przeszukuję sieć, widzę **bardzo** mały ruch w temacie :) * Czy takie rozszerzenia faktycznie potrzebne, a może istnieją i po prostu wymyśliłem koło na nowo? Czy wy, użytkownicy Rubiego, czujecie ich „braku” w „codziennym użytkowaniu” systemu Windows? * Czy PIK żyje, staje się popularny czy umiera? czy jest on znany/używany w społeczności Windows/ruby, czy też powinienem dostosować moje dodatki do innych menedżerów?


title: Który wzorzec projektowy jest ilustrowany przez dziedziczenie interfejsu IStructuralComparable?

text: Wiemy, że niektóre wzorce projektowe są tak przydatne, że stają się cechami samego języka. Na przykład interfejs `IEnumerator`, który jest zaimplementowany przez obiekt `Array`. Pomaga to w oddzieleniu iteratora od obiektu kolekcji. Wewnętrzna reprezentacja obiektu jest hermetyzowana. Wzorzec: Wzorzec iteratora Właśnie natknąłem się na inny interfejs `ISstructuralComparable`(msdn). Służy do porównywania struktury dwóch typów kolekcji przy użyciu klasy `StructuralComparisons`(msdn). Wydaje się, że intencją tego interfejsu jest: > Rozumiem, że jest on używany do typów podobnych do kolekcji i > hermetyzuje strukturalną część porównania, ale pozostawia porównanie > elementów do porównywarki przekazanej przez użytkownika. (link) (Got > z sekcji komentarzy pytania) **Czy jest to implementacja znanego wzorca projektowego? Jeśli tak, jaki to wzór?**


title: Czy są jakieś dobre edytory dla asp.net na smartfony?

text: Niedawno natknąłem się na coderun.


title: Samoodwołanie przy użyciu nowej tabeli a połączonej listy identyfikatorów

text: W moim obecnym miejscu pracy istnieje wspólny wzorzec w projektowaniu baz danych: nie używają kluczy obcych, ale wyświetlają wszystkie odpowiadające im identyfikatory w kolumnie tak: some_table id name image_ids 1 a 1,2,3 2 b 4,6,7 images id url 1 ... 2 ... ... Przechowują autoreferencje w ten sam sposób: id_tabeli nazwa jakaś_id_tabeli 1 a 2,3 2 b 1,3 ... Zachęcają mnie do korzystania z tego wzorca, ale tak nie czuję się dobrze dla mnie. Nigdy nie zaprojektowałbym takiej bazy danych. Mam przeciwko temu kilka kontrargumentów: * A jeśli pewnego dnia dodam jakieś arbitralne dane do autoreferencji? Używając tego modelu nie byłbym w stanie. * Nie zapewnia integralności referencyjnej. Mogę łatwo dodać nieistniejące identyfikatory, co spowoduje problemy * Przeszukiwanie ciągów też nie jest szybkie. Muszę uzasadnić swoje skargi, więc moje pytanie brzmi: Jakie przekonujące kontrargumenty możesz wymyślić przeciwko temu zwariowanemu podejściu projektowemu?


title: Dlaczego implementacje IQueryProvider powinny rzucać NotSupportedExceptions?

text: Przeszukując sieć, możemy znaleźć wiele przykładów różnych ORM-ów (nHibernate, EF, LinqToSql itp.), które implementują, ale w rzeczywistości nie obsługują pełnego interfejsu `IQueryable<T>`, rzucając `NotSupportedExceptions`, gdy napotkają coś, czego nie robią. nie lubić, takich jak LinqToSql i `SkipWhile`. Moje pytanie brzmi: dlaczego dostawcy ORM decydują się na rzucenie „NotSupportedException” zamiast zezwalać niektórym operatorom zapytań (które nie tłumaczą dobrze lub w ogóle na docelowe źródło danych) uruchamiają wykonanie zapytania, a następnie pozwalają Linq to Objects obsłużyć resztę ? Rozumiem, że w rezultacie może wystąpić duże zużycie zasobów fizycznych, ale gdyby instancje `IQueryable<T>` były _prawdziwie_ wymienialne, czy nie byłoby lepiej?


title: Standardowe praktyki dla architekta

text: Jestem architektem dla mojej grupy. Niestety otrzymałem to stanowisko organicznie i nie ma żadnych standardów dotyczących tego, jak powinienem wykonywać swoją pracę. Jak działa rola architekta w różnych firmach? Bardzo interesuje mnie, na przykład, jaki rodzaj diagramów i dokumentów może dostarczyć architekt, aby mógł pomóc deweloperowi w wykonywaniu jego pracy.


title: Jakie jest najlepsze podejście do tworzenia schematu bazy danych dla profilu, jeśli nie śledzenie zmian?

text: Pracuję nad witryną, w której firmy mogą tworzyć profil, a następnie dodawać lokalizacje dla każdego profilu. Te dwie pierwsze tabele są dość proste. Jednak wszelkie zmiany w ich profilach lub lokalizacjach muszą przejść przez proces zatwierdzania. Tutaj jestem rozdarty. Efektem końcowym byłby przeglądanie przez pracownika listy roboczej i widzenie żądanych zmian oraz kliknięcie „zatwierdź” lub „odrzuć”. Zatwierdź zastosowanie nowych danych do istniejącego rekordu, odmów ustawienia flagi w rekordach żądania i wysłania odpowiedzi. Zastanawiam się nad tym, jak najlepiej zająć się prośbami o zmianę. Zdecydowanie chciałbym, aby prośby o zmianę były przechowywane w osobnej tabeli niż tabela profilu lub lokalizacji. Nie mogę się zdecydować, czy najlepiej po prostu tworzyć duplikaty z kilkoma dodatkowymi kolumnami profilu i tabel lokalizacji i używać ich do śledzenia zmian. Lub, jeśli powinienem po prostu utworzyć prostą tabelę tylko z kolumnami, aby przechwycić identyfikator docelowy zmiany, pole i wartość, a także kilka dodatków, takich jak zestaw zmian, data i godzina, flaga itp. Co o tym myślisz?


title: Wielowątkowy zwrot pojedynczego wyniku SQL

text: Mam pewne trudności z MySQL i zwracam unikalny wiersz do wątku. Chcę, aby wątek szukał wiersza z tabeli, w którym bit (patrz poniżej) jest fałszywy i zwracany jest tylko jeden wiersz. Ale nie chcę, aby inne wątki zwracały ten sam wynik, jeśli mogą wystąpić warunki wyścigu, w których ten sam wynik jest zwracany do wątku; ponieważ wątek będzie następnie wykonywał dużo przetwarzania z tyłu tego wyniku i nie chcę duplikacji. Tło: Mam bazę danych MySQL, która zawiera 3 kolumny (identyfikator, tekst, bit). Identyfikator jest automatycznie zwiększany. Mam wielowątkową aplikację Ruby, która odczytuje, aktualizuje i wstawia wiersze do tabeli. Pseudo kod wątku jest następujący: wybierz wiersz z tabeli, w którym bit jest fałszywy, wykonaj trochę przetwarzania z tekstem zwróconym z tego wiersza wstaw więcej wierszy z bitem ustawionym na false Wypróbowałem prosty test ze skryptem wielowątkowym która używa następującego: SELECT id, tekst FROM tabela WHERE bit =FALSE LIMIT 1 FOR UPDATE Ale każdy wątek zwraca ten sam wiersz. Wyłączyłem automatyczne zatwierdzanie zgodnie z zaleceniem. Ponieważ pomijam jakiekolwiek zatwierdzenie, spodziewałbym się, że inne wątki będą miały inny wynik, ponieważ wiersz jest zablokowany. Czy czegoś mi brakuje, czy powinienem szukać innej metody?


title: Czy Scala jest gotowa na prime time?

text: Teraz, gdy zrobiłem kilka trywialnych rzeczy ze Scala (którą uwielbiam za "hello world" i wymyślone aplikacje!) Zastanawiam się... część o dojrzałości narzędzi wspierających rozwój, a część o ogólnej przydatności. Czy zestawy narzędzi są gotowe? Czy Scala jest odpowiednia do użytku w aplikacjach korporacyjnych/biznesowych? Czy „ty” użyłbyś go w nietrywialnym projekcie? Oto niektóre z moich (prawdopodobnie bezpodstawnych) obaw: * czy środowisko IDE i zestawy narzędzi są tak bogate, jak to, czego potrzebujemy do tworzenia aplikacji .net i java (eclipse dla Scali wydaje się ograniczone w porównaniu do eclipse dla javy)? * czy zestawy narzędzi do budowania / CI / testowania są w stanie skutecznie radzić sobie ze Scala? * jak konserwowalny jest zwięzły kod, który _można_ (zachęcać?) napisać w tym języku? * czy można znaleźć programistów z doświadczeniem Scala? * czy jest wystarczająca masa krytyczna, aby uzyskać pomoc za pośrednictwem internetowych materiałów źródłowych i książek, które są czymś więcej niż „wprowadzeniem” do języka? Podsumowując – czy ekosystem jest wystarczająco dojrzały, aby go używać teraz, czy lepiej czekać, aby zobaczyć, jak ewoluuje? EDYCJA: powiedzmy, że „nietrywialny” to wieloletni, wielowydaniowy projekt dla 10-20 programistów.


title: Czy istnieje język, w którym kolekcje mogą być używane jako obiekty bez zmiany zachowania?

text: Czy istnieje język, w którym **kolekcje** mogą być używane jako **przedmioty** bez zmiany zachowania? Jako przykład, najpierw wyobraź sobie, że te funkcje działają: function capitalize(str) //przypuśćmy, że *modyfikuje* obiekt tekstowy, pisząc go wielkimi literami function powitaj(osoba): print("Cześć, " + osoba) capitalize("pedro") > > "Pedro" powitaj("Pedro") >> "Cześć, Pedro" Załóżmy teraz, że definiujemy standardową kolekcję z kilkoma ciągami znaków: people = ["ed","steve","john"] Następnie wywołamy toUpper () na każdym obiekcie na tej liście people.toUpper() >> ["Ed","Steve","John"] I wywoła to raz powitanie dla KAŻDEJ osoby na liście, zamiast wysyłać listę jako argument powitaj( osób) >> "Cześć, Ed" >> "Cześć, Steve" >> "Cześć, John"


title: Jakie są najlepsze praktyki czytania nieudokumentowanego i nieskomentowanego kodu wysokiego poziomu?

text: Istnieje kilka projektów open source, które mają klasy i klasy bez żadnego znaczącego wyjaśnienia, co robi klasa i lub dlaczego ta klasa jest potrzebna. Na przykład klasy we wtyczce CppEditor dla QtCreator. Jakie są najlepsze praktyki czytania nieudokumentowanego kodu? Nie czytaj, to nie wchodzi w grę :)


title: Czy masz własną bibliotekę 'misc utils'? Z której części jesteś najbardziej dumny?

text: Wiem, że wielu z nas posiada własną małą osobistą bibliotekę z narzędziami i narzędziami, których często używamy. Mam swój od 16 roku życia, więc urósł do całkiem sporych rozmiarów. Niektóre z rzeczy, które napisałem, zostały dodane do frameworka. Napisałem własną małą implementację drzew wyrażeń do użytku z algorytmami genetycznymi na długo przed LINQ, co bardzo mi się podobało i z którego byłem wtedy dumny - oczywiście jest teraz całkiem bezużyteczny. Ale ostatnio przechodziłem przez to i uaktualniałem do .NET 4.0 i ponownie wzbudziłem zainteresowanie. Więc jestem ciekaw, do czego używasz swojej biblioteki. Może uda nam się zdobyć kilka fajnych pomysłów na przydatne krótkie fragmenty i podzielić się nimi między sobą. Więc moje pytania to: * Czy masz bibliotekę różnych narzędzi? * Z której części jesteś najbardziej dumny i dlaczego? Podaj przykład kodu, jeśli lubisz `:-)`


title: Projekt klasy, jedna klasa w dwóch źródłach

text: Czy można zdefiniować metody z **tej samej klasy** w różnych plikach "CPP"? * * * Mam plik nagłówkowy "myClass.h" z: class mojaKlasa { public: // metody liczenia ... // metody dla innych ... }; Chciałbym zdefiniować "metody liczenia" w jednym CPP i "metody dla innych" w innym CPP. Dla jasności. Obie grupy metod czasami używają tych samych atrybutów. Czy to możliwe? Dziękuję :).


title: Przemyślenia dotyczące rozwoju chmury/Google App Engine

text: Do tworzenia stron internetowych używam głównie PHP, ale ostatnio zacząłem myśleć o wykorzystaniu Google App Engine. Nie używa PHP, które już znam, więc będzie bardziej stroma krzywa uczenia się. Prawdopodobnie przy użyciu Pythona/Django. Ale myślę, że może warto. Niektóre zalety, które widzę: * Skoncentruj się na aplikacji / rozwoju. Nie trzeba konfigurować/utrzymywać serwera... nigdy więcej konfiguracji serwera * Skaluje się automatycznie * Płać za to, z czego korzystasz. Bezpłatna do niskiego użycia * Niezawodny, w końcu to Google Jednak pewne obawy: * Czy baza danych bez złączeń stanowi problem dla tych, którzy wcześniej korzystali z App Engine? * Czy muszę przesyłać dane do Google tylko w celu przetestowania? Czy będzie powolny w porównaniu z testowaniem lokalnym? Jakie są Twoje przemyślenia i opinie? Dlaczego miałbyś używać lub nie używać App Engine?


title: Jak aplikacje internetowe tworzą subdomeny?

text: Chcę zrozumieć architekturę aplikacji internetowych korzystających z subdomen. Nie sądzę, żebym dobrze to sformułował, więc pozwól, że wyjaśnię. Wiele aplikacji internetowych, takich jak tumblr czy shopify, tworzy witrynę użytkownika w subdomenie. Powiedzmy na przykład, że moje konto tumblr nosiło nazwę „johndoe”, a mój blog tumblr można znaleźć na „johndoe.tumblr.com”. Czy ktoś może wyjaśnić, jak to jest realizowane?


title: Jak migrujesz z jednego języka na inny?

text: Wiem, że język to tylko narzędzie i chodzi o tworzenie produktu. Ale jeśli skupiasz się na przedsiębiorstwie, a potem przechodzisz na rozwój mobilny - jak sobie z tym radzisz? Jeśli jestem przyzwyczajony do PHP i jego frameworka i przejdę na Ruby - jak sobie z tym poradzić? Z nauką i zdobywaniem doświadczenia z Rails, z językiem Ruby i tak dalej. A gdybym był programistą C++ pracującym nad samodzielnymi programami? A potem przełączam się na Python/Django dla sieci? Oto moje pytania dotyczące wszystkich powyższych przykładów: 1. Czy można zmienić specjalizację jako programista? Od tworzenia stron internetowych do przedsiębiorstwa, od samodzielnego do mobilnego itp. Jeśli tak, w jaki sposób? A może powinienem trzymać się jednej ścieżki, aby stać się w tym ekspertem? 2. Jak uczysz się nowych języków? Chodzi mi o to, że są nowe frameworki, których musisz się nauczyć, a jeśli jest to inna sfera programistyczna - powiedzmy mobile po web-development - musisz nauczyć się podstawowych rzeczy z tej sfery, prawda? Jak sobie z tym radzisz? 3. Czy zmiana języka/ścieżki kariery zawodowej jest trudna, jeśli chodzi o zdobycie nowej pracy, skoro nie masz żadnego doświadczenia w tym języku? Czy obniżasz pensje? _**Proszę, wyjaśnij mi to wszystko! Jak ludzie sobie z tym radzą? Jestem w 100% pewien, że kocham programowanie, a także kocham PHP/RoR i web-development, więc używam PHP jako mojego głównego języka w pracy na pełny etat, ale nie chcę przy nim trwać wiecznie i chcę móc zmienić języki lub/i kierunek rozwoju (mobile, standalone, enterprise). Jak to zrobić bez szkody dla swojej kariery, czy jest to niemożliwe?_**


title: Czy istnieją jakieś twarde dane do utworzenia kopii zapasowej „Ludzkie przełączniki zadań są uważane za szkodliwe”?

text: Joel Spolsky napisał słynny post na blogu „Human Task Switches uznane za szkodliwe”. Chociaż zgadzam się z założeniem i wydaje mi się, że to zdrowy rozsądek, zastanawiam się, czy są jakieś badania lub białe księgi na ten temat, aby obliczyć narzut na przełączniki zadań, czy też dowody są tylko anegdotyczne?


title: Przenoszenie starych projektów do nowszych IDE i bibliotek

text: W pracy mamy kilka starszych projektów, które utknęły w .NET 1.1 i VS 2003. Chociaż jest to prawdopodobnie za dużo pracy, aby iść naprzód, zastanawiam się, czy wysiłek, aby nasze nowsze projekty były aktualne, będzie tego wart. W szczególności przyjrzelibyśmy się przeniesieniu około 30 projektów z .NET 3.5 do .NET 4.0 i VS2008 do VS2010. Moje pytania dla społeczności to: **Czy przenosisz swoje projekty w miarę pojawiania się nowych narzędzi i bibliotek, czy po prostu uruchamiasz najnowsze rzeczy w najnowszych wersjach? Jeśli pójdziesz dalej, czy zauważyłeś, że korzyści przewyższają koszt aktualizacji?**


title: Jakie techniki stosuje się w rozwiązywaniu problemów z kodowaniem golfa?

text: ### „Zwykły” golf a golf kodowy: oba rodzaje to zawody. Oba mają dobrze zdefiniowany zestaw zasad, które dla uproszczenia pominę. Oba mają dobrze określone cele; w skrócie, „użyj mniejszej liczby trafień/znaków niż konkurenci”. Aby wygrywać mecze, wysportowani golfiści polegają na * sprzęcie * Niektóre sytuacje wymagają piaskowego klina; inne, 9-żelazko. * techniki * Napęd działa lepiej, gdy stopy są rozstawione na szerokość barków, a ramiona są rozluźnione. * i strategie * Jasne, możesz iść na skróty do dziury… ale czy naprawdę chcesz ryzykować zagrożenie wodne lub bunkier piaskowy, gdy te drzewa przeszkadzają, a wiatr jest tak silny? Może lepiej będzie iść na dłuższą metę. **Co mają golfiści z kodem, co jest analogiczne do sprzętu, technik i strategii sportowych golfistów?** Przykładowa odpowiedź na początek: użyj odpowiedniego kija! Wybierz GolfScript zamiast C#.


title: Najczęściej używane wzorce projektowe w refaktoryzacji (mój przykład)

text: Ostatnio robiłem sporo refaktoryzacji kodu C++ i C# i odkryłem, że 90% wzorców, których używam to: * Metoda szablonowa * Fabryka * Singleton Czy są to najczęściej używane wzorce w refaktoryzacji, czy tylko ja? Czy możesz podzielić się swoimi doświadczeniami z refaktoryzacji?


title: Dlaczego MVC jest bardziej popularny niż PAC?

text: Właśnie natknąłem się na pytanie w SO dotyczące PAC i zainteresowałem się wzorem. Zastanawiam się, dlaczego nie jest tak powszechnie stosowany jak MVC? Jakie są zalety MVC w porównaniu z PAC?


title: Co się stanie, jeśli serializujemy i deserializujemy dwa obiekty, które odwołują się do siebie?

text: Aby było bardziej jasne, to jest szybki przykład: klasa A implementuje Serializable { public B b; } klasa B implementuje Serializable { public A a; } A a = nowy A(); Bb = nowy B(); a.b = b; b.a = a; Co się stanie, jeśli zserializujemy obiekty aib do pliku i dokonamy deserializacji z tego pliku? Myślałem, że dostajemy 4 obiekty, po 2 z każdego. Identyczne obiekty, ale różne instancje. Ale nie jestem pewien, czy jest coś jeszcze, czy to dobrze, czy źle. Jeśli potrzebna jest jakakolwiek technologia, aby odpowiedzieć, pomyśl opartą na Javie. Dziękuję Ci.


title: Napotkanie tego samego problemu w aplikacji

text: Często spotykam się z sytuacją, kiedy ten sam błąd popełniany jest w wielu miejscach w aplikacji. Na przykład w aplikacji internetowej, gdy użytkownik utworzy element i kliknie przycisk „Dodaj”, aby go zapisać. Jeśli klikną przycisk kilka razy, zamiast jednego zostanie dodanych wiele elementów, ponieważ interfejs użytkownika nie został zablokowany, a sprawdzenie zaplecza nie zostało wykonane prawidłowo. Jak w takich przypadkach tworzyć zgłoszenia błędów? Oto rozwiązania, które mógłbym wymyślić: * utwórz jedno zgłoszenie błędu i wypisz, w którym występuje sytuacja * dla każdego znalezionego przypadku utwórz osobne zgłoszenie * po znalezieniu błędu powiedz programistom, aby zwrócili uwagę, poczekaj, aż się skończą i przetestuj ponownie


title: Czy jest to właściwe zastosowanie metody resetowania Mockito?

text: W mojej klasie testowej mam prywatną metodę, która konstruuje powszechnie używany obiekt `Bar`. Konstruktor `Bar` wywołuje metodę `someMethod()` w moim mockowanym obiekcie: private @Mock Foo mockedObject; // Mój wyśmiewany obiekt ... private Bar getBar() { Bar result = new Bar(mockedObject); // to wywołuje mockedObject.someMethod() } W niektórych moich metodach testowych chcę sprawdzić, czy `someMethod` również został wywołany przez ten konkretny test. Coś takiego: @Test public void someTest() { Bar bar = getBar(); // zrób kilka rzeczy Verify(mockedObject).someMethod(); // <--- nie powiedzie się } To się nie udaje, ponieważ naśladowany obiekt miał dwukrotnie wywołaną metodę `someMethod`. Nie chcę, aby moje metody testowe dbały o skutki uboczne mojej metody `getBar()`, więc czy rozsądne byłoby zresetowanie obiektu makiety na końcu metody `getBar()`? private Bar getBar() { Bar result = new Bar(mockedObject); // to wywołuje mockedObject.someMethod() reset(mockedObject); // <-- czy to jest w porządku? } Pytam, ponieważ dokumentacja sugeruje, że resetowanie pozorowanych obiektów generalnie wskazuje na złe testy. Jednak wydaje mi się to w porządku. **Alternative** Wydaje się, że alternatywnym wyborem jest wywołanie: Verify(mockedObject, times(2)).someMethod(); co moim zdaniem zmusza każdy test do poznania oczekiwań funkcji `getBar()`, bez żadnego zysku.


title: Poza starszym oprogramowaniem, czy istnieją powody używania języka COBOL?

text: COBOL jest nadal (mocno?) używany do obliczeń finansowych. Jest to stary język, a większość programistów AFAIK nienawidzi, a przynajmniej nie lubi, COBOL. Rodzi to pytanie: czy jest to jedyny powód, dla którego COBOL jest nadal używany, że używa go starsze oprogramowanie, czy też ma realną przewagę nad innymi językami programowania? Po prostu ciekawy.


title: Silniki szablonów Pythona: jakie są prawdziwe zalety i wady XML w porównaniu z niestandardową składnią

text: Interesuje mnie, jaka jest prawdziwa różnica (korzyści i wady) między dwoma typami silników szablonów Pythona; XML (jak Genshi lub Kid) i niestandardowa składnia (jak Cheetah lub Jinja2). Nie szukam lepszego, ani rekomendacji. Rozumiem, że żadne rozwiązanie nie będzie idealne, a najlepsze będzie zależało od problemu. Chcę lepiej zrozumieć różnice między tymi dwoma typami, zanim wybiorę jeden dla mojego problemu. Ta lista może nie dotyczyć wszystkich rozwiązań szablonowych. Korzyści z XML: * Używa XML, jest w większości rodzinny dla programistów. Jest kilka nowych (ifelse, logika przepływu) elementów do nauczenia się. * Działa z istniejącymi łańcuchami narzędzi XML. * Jest potężniejszy, ponieważ ma wiedzę na temat danych, nad którymi pracuje. (Genshi jest świadomy kontekstu) Wady XML: * Silniki oparte na XML są zwykle wolniejsze niż silniki niestandardowej składni. * Niektórzy twierdzą, że XML jest trudniejszy do nauczenia niż niestandardowa składnia. Korzyści z niestandardowej składni: * Jest szybki niż silniki oparte na XML. (zobacz wcześniejszy link) * Jest to prosta, potężna składnia, która powinna być łatwiejsza do nauczenia. Wady niestandardowej składni: * To kolejna składnia do nauczenia. * Może nie działać płynnie z istniejącymi łańcuchami narzędzi XML.


title: Czy można odczytać pamięć z innego programu, przydzielając całą pustą przestrzeń w systemie?

text: Teoretycznie, gdybym miał zbudować program, który alokowałby całą niewykorzystaną pamięć w systemie i nadal żądał coraz większej ilości pamięci, gdy inne aplikacje zwalniały pamięć, której już nie potrzebują, to czy byłoby możliwe odczytanie ostatnio zwolnionej pamięci z innych aplikacji ? A może jest to w jakiś sposób chronione przez nowoczesny system operacyjny? Nie mam do tego praktycznego zastosowania, jestem po prostu ciekawa. Zdaję sobie sprawę, że istnieją pewne problemy z przydzielaniem „całej dostępnej pamięci” w prawdziwym życiu. Edycja: Aby wyjaśnić, pytam konkretnie o pamięć „zwolnioną”, a nie dostęp do pamięci, która jest aktualnie przydzielona przez inną aplikację.


title: Jak wybrać agencję, przez którą chcę przejść?

text: Pracuję w mieście, w którym większość pracy pochodzi z rządu. Jako wykonawca generalnie muszę ubiegać się o pracę za pośrednictwem agencji, które znajdują się na liście preferowanych przez rząd dostawców. Większość ofert pracy jest publicznie dostępnych i aby się o nie ubiegać, zazwyczaj potrzebujesz agencji, która będzie Cię reprezentować, przesyłając aplikację ze stawką, która zwykle jest Twoją stawką plus prowizja. Próbowałem dowiedzieć się, co robią agencje i wydaje się, że dużą częścią tego, co robią, jest 1) dostanie się na listę preferowanych dostawców i 2) przekazywanie CV. Więc w tej chwili moja polityka jest taka, że skoro ich prowizja wpływa na to, jak drogi jestem, po pierwsze - nie pracuję z firmami, które nie ujawniają swojej marży. Po drugie, wybieram agencję, która pobiera najmniej prowizji za pracę, o którą chcę się ubiegać. CZY to najlepsze podejście? Myślę, że staranie się o pracę z najbardziej konkurencyjną stawką jest najlepszym podejściem, ale zastanawiam się też, czy to, przez którą agencję aplikujesz, ma znaczenie? Wiem, że niektóre agencje faktycznie budują osobiste relacje z menedżerami wyższego szczebla, ale skąd mam wiedzieć, którą? Skąd mam wiedzieć, że faktycznie wpływa to na moje perspektywy pracy? Jakich kryteriów powinienem użyć, aby zdecydować, przez którego agenta przejdę do pracy?


title: pytanie, najlepsza struktura danych i algorytm

text: Mam pytanie o zaimplementowanie struktury danych (z algorytmem), która ma następujące cechy: 1. Jest zbyt wiele miejsc (jak sklepy), a każde miejsce może przechowywać zbyt wiele przedmiotów, chcę przechowywać przedmioty w miejscach. Chodzi o to, że musimy mieć zoptymalizowane wstawianie (lub usuwanie) i zoptymalizowaną funkcję wyszukiwania. 2. Wyszukiwanie może odbywać się na podstawie miejsc (zwróć przedmioty w miejscu) lub na podstawie przedmiotów (zwróć miejsca, które mają przedmiot) Pomyślałem, że użyję do tego hashmap i użyj identyfikatora miejsca jako klucza i przechowuj przedmioty jako kolekcję (ponownie hashmapa z identyfikatorem pozycji zarówno dla klucza, jak i wartości). Na tej podstawie wstawienie każdego elementu lub miejsca będzie O(1), ale uzyskanie lub usunięcie miejsca będzie O(n), a dla elementu będzie O(n*k)! (załóżmy, że mamy "n" miejsc i "k" przedmiotów - mam nadzieję, że to poprawna kalkulacja). Czy istnieje lepsza struktura danych lub algorytm dla tego problemu?


title: Zawsze aktualizuj pliki w Eclipse

text: Wiele plików/edytorów mam otwartych w Eclipse. Uwielbiam też używać `git stash` i innych poleceń git, które zasadniczo zmieniają zawartość moich otwartych plików. Czy istnieje funkcja lub wtyczka Eclipse, która zawsze będzie aktualizować zawartość moich otwartych plików? Obecnie, jeśli skupię się na niezsynchronizowanym edytorze, otrzymuję niezręcznie sformułowane okno dialogowe, które muszę uważnie analizować za każdym razem. Chciałbym, żeby to po prostu synchronizowało mnie tak, jak robi to Textmate.


title: Wolisz budować swoje interfejsy w IB czy programowo? i dlaczego?

text: Od dwóch miesięcy używam Xcode i buduję aplikacje na iPhone'a, ale naprawdę trudno mi ogarnąć dobry projekt aplikacji. Zawsze napotykam problemy – na przykład nie możesz umieścić swojego kontrolera tabbar w innym niestandardowym kontrolerze widoku – które „czasami” oczywiście zadziałałyby, gdybyś tworzył widoki/kontrolery widoku programowo. Więc nie wiem, czy powinienem zacząć pisać tworzenie moich obiektów, czy używać Interface Buildera. Jakie są twoje doświadczenia?


title: Jak na przestrzeni czasu śledzić istniejące wymagania?

text: Jestem inżynierem oprogramowania pracującym na złożonej, ciągłej stronie internetowej. Ma wiele ruchomych części i mały zespół projektantów interfejsu użytkownika i ludzi biznesu, którzy dodają nowe funkcje i poprawiają stare. W ciągu ostatniego roku dodaliśmy setki interesujących małych przypadków brzegowych. Planowanie, wdrażanie i testowanie ich nie stanowi problemu. Problem pojawia się później, gdy chcemy dokonać refaktoryzacji lub dodać kolejną nową funkcję. Nikt nie pamięta połowy starych funkcji i skrajnych przypadków sprzed roku. Kiedy chcemy dodać nową zmianę, zauważamy, że kod robi różne rzeczy i nie jesteśmy do końca pewni, które rzeczy są celowymi wymaganiami, a które bezsensownymi efektami ubocznymi. Czy ktoś w zeszłym roku zażądał, aby token logowania był ważny tylko przez 30 minut, czy też niektórzy programiści wybrali po prostu rozsądną wartość domyślną? Czy możemy to zmienić? Kiedy produkt został wymyślony po raz pierwszy, stworzyliśmy dokumentację opisującą działanie witryny. Od tego czasu stworzyliśmy kilka dodatkowych dokumentów opisujących nowe funkcje, ale nikt nigdy nie wraca i nie aktualizuje tych dokumentów, gdy żądane są nowe funkcje, więc jedyną wiarygodną dokumentacją jest sam kod. Ale kod nie podaje żadnego uzasadnienia, żadnego powodu dla swoich działań: tylko jak, nigdy dlaczego. Co robią inne długo działające zespoły, aby śledzić, jakie były wymagania i dlaczego?


title: Unikanie „podwójnych” subskrypcji

text: Pracuję nad stroną internetową, która wymaga trochę marketingu; pozwól mi wyjaśnić. Ta strona oferuje _pojedynczy_, powiedzmy, kupon iTunes 50 $ dla szczęśliwego zwycięzcy. Aby wziąć udział w losowaniu, musisz zaprosić (i dołączyć) przynajmniej jednego znajomego do serwisu. Całkiem proste. Oczywiście każdemu byłoby łatwo stworzyć fałszywe konto i zaprosić je, więc zastanawiałem się nad innym sposobem, aby jakoś dowiedzieć się o możliwym oszustwie. Myślałem o sprawdzeniu adresu IP nowo zasubskrybowanego (zaproszonego) użytkownika, a jeśli w ciągu ostatnich 24 godzin zarejestrowano ten sam adres IP, a jeśli tak jest, sprawdź więcej na ten temat. Ale pomyślałem, że może jest sprytniejszy sposób na obejście tego problemu. Czy ktoś kiedyś o tym myślał? Jakie inne rozwiązania wypróbowałeś? Z góry dziękuję.


title: Przechowywanie obrazów w systemie plików i zwracanie adresów URL czy wirtualna zmiana rozmiaru i zwracanie tablic bajtów?

text: Muszę utworzyć usługę sieciową REST do zarządzania obrazami przesłanymi przez użytkowników i wyświetlania ich wszystkich na stronie internetowej. Istnieje wiele stron internetowych, które będą korzystać z tej usługi do zarządzania i wyświetlania obrazów. Wymagane jest posiadanie 5 wstępnie zdefiniowanych rozmiarów obrazów. Dwie opcje, które widzę, są następujące: 1. Serwis internetowy utworzy 5 obrazów, przechowa je w systemie plików i przechowa adres URL w bazie danych, gdy użytkownik prześle obraz. Po zażądaniu obrazu usługa internetowa zwróci tablicę adresów URL. Widzę, że ta opcja jest trochę trudna dla dysku twardego. Szacuje się, że na witrynę przypada 10 000 użytkowników i powiedzmy 100 witryn. Ciężkie przetwarzanie zostanie wykonane, gdy użytkownik prześle obraz, a każdy obraz zostanie pobrany z systemu plików. 2. Usługa sieciowa będzie przechowywać tylko obraz przesłany przez użytkownika w systemie plików i jego adres URL w bazie danych. Gdy użytkownik zażąda obrazów, usługa sieciowa pobierze informacje z bazy danych, załaduje obraz do pamięci, utworzy jego 5 instancji i zwróci obiekt z 5 tablicami obrazów (prawdopodobnie zbuforuję te tablice). Ta opcja jest trudniejsza dla procesora i pamięci. Ciężkie przetwarzanie zostanie wykonane, gdy obrazy zostaną poproszone. Plusem, który widzę dla opcji 2, jest to, że da mi ona możliwość przepisania adresu URL obrazu i uzależnienia go od witryny (ładniejszego) niż posiadanie repozytorium obrazów dla wszystkich witryn. Ale to nie jest wielka sprawa. Co myślisz o tych opcjach? Masz inne sugestie?


title: Wskazówki dotyczące uzyskania „ciągłej” dostawy

text: Zespół ma trudności z częstym wydawaniem oprogramowania (raz w tygodniu). Poniżej przedstawiono typową oś czasu wydania: Podczas iteracji: * Deweloperzy pracują nad historiami w backlogu w krótko żyjących (jest to entuzjastycznie wymuszane) gałęziach funkcji opartych na gałęzi głównej. * Deweloperzy często wciągają swoje gałęzie funkcji do gałęzi integracji, która jest stale budowana i testowana (o ile obejmuje pokrycie testami) automatycznie. * Testerzy mają możliwość automatycznego wdrażania integracji w środowisku pomostowym i odbywa się to wiele razy w tygodniu, umożliwiając ciągłe uruchamianie ich zestawów testów. W każdy poniedziałek: * odbywa się spotkanie dotyczące planowania wydania, aby określić, które historie są „znane jako dobre” (na podstawie pracy testerów), a zatem znajdą się w wydaniu. Jeśli istnieje znany problem z historią, gałąź źródłowa jest wycofywana z integracji. * żaden nowy kod (tylko poprawki błędów zgłoszone przez testerów) nie może zostać włączony do integracji w ten poniedziałek, aby zapewnić testerom stabilną bazę kodu, z której można wyciąć wydanie. W każdy wtorek: * Testerzy przetestowali gałąź integracyjną na tyle, na ile to możliwe, biorąc pod uwagę dostępny czas i nie ma żadnych znanych błędów, więc wydanie jest wycinane i powoli wypychane do węzłów produkcyjnych. W praktyce brzmi to dobrze, ale okazało się, że jest to niezwykle trudne do osiągnięcia. Zespół dostrzega następujące symptomy * w środowisku produkcyjnym wykryto "subtelne" błędy, które nie zostały zidentyfikowane w środowisku pomostowym. * Gorące poprawki w ostatniej chwili będą kontynuowane we wtorek. * problemy w środowisku produkcyjnym wymagają wycofania, co blokuje dalszy rozwój, dopóki nie zostanie osiągnięte pomyślne wdrożenie na żywo, a gałąź główna może zostać zaktualizowana (a tym samym odgałęziona). Myślę, że w grę wchodzą: pokrycie testów, jakość kodu, możliwość szybkiego testowania regresji, zmiany w ostatniej chwili i różnice środowiskowe. Czy ktoś może udzielić porady, jak najlepiej osiągnąć „ciągłą” dostawę?


title: API do rozbudowy skomplikowanych reguł obliczeniowych lub biznesowych?

text: W sklepach internetowych są obszary o skomplikowanych zasadach. Na przykład * czy produkt jest widoczny w katalogu produktów * czy produkt jest wyprzedany * jaka jest cena produktu (Rabaty, Promocje, ...) Czy dobrym pomysłem jest posiadanie dodatkowego API objaśniającego dla każdej skomplikowanej reguły? Przykład: `boolean isProductVisible()` ma dodatkowy `String explainIsProductVisible()`? Jak ułatwić zrozumienie tych zasad? Tło: Wczoraj jako programista miałem problem z tym, że mój standardowy produkt testowy w moim lokalnym systemie testowym został „wyprzedany” i potrzebowałem tego produktu do przetestowania strony potwierdzenia zamówienia. Musiałem więc debugować procedurę `IsProductAvailable`, aby poprawić dane testowe, zanim mogłem wykonać oryginalne zadanie "testowanie strony potwierdzenia zamówienia". Aby dowiedzieć się, dlaczego mój testowy produkt został wyprzedany, pomocna byłaby wiadomość wyjaśniająca. W podobnej sytuacji w silniku kalkulacji ceny dodałem już komunikaty logu, takie jak podwójne obliczenieCenaPozycjiForProduktu(Produkt produkt, ilość int, Koszyk koszyka, ...) { double cumulatedPrice = 0; ... if (ilość > 1) { Cena cena = getScalePrice(produkt, ilość); if (price != null) { skumulowanacena = cena.getValue(); if (log.isDebugEnabled()) { log.debug("calculateItemPriceForProduct("+ product.getCode()+ ") używając scalePrice " + cena.getCode() + " dla ilości " + ilość + ":" + cena.getValue ()); } } } ... } Jako programista mogę zajrzeć do dziennika serwera i mam nadzieję dowiedzieć się, co się stało. Gdybym był menedżerem produktu, wygodniej byłoby mieć podpowiedzi dotyczące poszczególnych ról na stronie internetowej, która pokazuje część wyjaśniającą. Oczywiście te podpowiedzi nie byłyby dostępne dla zwykłych klientów, tylko dla programistów i menedżerów produktu. Moje pytania: * Czy istnieją inne sposoby na ułatwienie zrozumienia skomplikowanych zasad? * Czy dobrym pomysłem jest posiadanie dodatkowego API objaśniającego dla każdej skomplikowanej reguły? * Czy taka funkcja zwraca koszty opracowania tej funkcji?


title: Jak mogę się dowiedzieć, co oznacza tytuł zawodowy w firmie?

text: Mam dylemat dotyczący oferty pracy od 10 najlepszych firm półprzewodnikowych w rejonie zatoki SF. Mam około 10 lat doświadczenia w różnych małych i dużych (> 1 mld USD) firmach w rejonie zatoki. Po ukończeniu studiów około 10 lat temu rozpocząłem pracę w dużej firmie w rejonie zatoki jako starszy inżynier. Jednak ze względu na zmianę pracy po 5 latach od tego stanowiska, kolejne zmiany pracy później i nie dbam zbytnio o tytuły, obecnie jestem (nadal) starszym inżynierem w innej firmie. Mając tak wiele lat doświadczenia w Hi-tech, teraz zdaję sobie sprawę, że tytuły też są ważne. Dylemat polega na tym, że ta oferta innej firmy również jest przeznaczona dla starszego inżyniera oprogramowania, a nie tytuł sztabowy lub MTS, który po pewnym dochodzeniu zdaję sobie sprawę, że są to wyższe tytuły niż tylko starszy inżynier. Czy powinienem prosić firmę (i jej rekrutera) o przyznanie mi wyższego tytułu niż Sr Sw Engineer; czy to oczekiwanie jest rozsądne? Miałem ten sam tytuł starszego inżyniera 7 lat temu i po wielu doświadczeniach zawodowych i ukończeniu studiów myślę, że powinienem zostać doceniony przez nową firmę zgłaszającą ofertę pracy jako inżynier wyższego personelu. **Czy jest jakiś sposób na znalezienie informacji o hierarchii firmy, ponieważ nie mogę ufać informacjom, które rekruter firmy udziela mi ze względu na jego żywotne zainteresowanie?** Istnieją opinie o firmie na stronach takich jak glassdoor, ale nie dają szansy zadawać pytania pracownikom. Czy są jakieś interaktywne strony internetowe/fora dla pracowników Hi-tech (projektowanie sprzętu i oprogramowania), na których można zadać takie pytanie i miejmy nadzieję uzyskać odpowiedź od kogoś pracującego w firmie? PS: W razie potrzeby firma regularnie co roku pojawia się na liście 20 największych korporacji półprzewodnikowych w wyszukiwaniu Google.


title: Jakieś twarde dowody na to, ile faktycznie zarobili twórcy aplikacji na smartfony?

text: Rozważam stworzenie aplikacji na smartfona. Zanim zacznę, chcę zobaczyć, czy w ogóle warto. Niestety bardzo trudno jest mi znaleźć jakiekolwiek twarde dowody na to, ile twórcy takich aplikacji faktycznie zarabiają na zakupach aplikacji lub reklamach w aplikacji. Najlepsze badania, jakie do tej pory znalazłem, mówią, że przeciętna aplikacja na iPhone'a zarabia 682$ rocznie. Z drugiej strony istnieje wiele aplikacji, z których niektóre mogą nawet nie działać, a ich zarobki również liczą się do tej statystyki. Dlatego szukam kilku konkretnych przykładów aplikacji i jej zarobków.


title: Jaki jest sens pisania przechwytujących WCF w porównaniu z użyciem metody pomocniczej?

text: Dla tych, którzy nie wiedzą, WCF umożliwia dołączanie przechwytywaczy do metod w kontrakcie usługi. Interceptor jest w stanie wykonać niestandardową logikę przed i po wywołaniu metody i jest (o ile wiem) używany głównie do walidacji parametrów i wykonywania niestandardowych schematów autoryzacji. Ale jaki jest sens ich używania, jeśli możesz po prostu napisać metodę pomocniczą, aby zrobić to samo?


title: Jak mogę zaimplementować system płatności depozytowych na mojej stronie internetowej?

text: Chciałbym zbudować serwis sieciowy podobny do kickstartera, który pozwalałby użytkownikom zastawić pieniądze na pomysł, ale nie jestem pewien, jak mogę zaimplementować tego rodzaju system płatności. Jeśli pomysł otrzyma określoną kwotę pieniędzy, płaci się darczyńcom. Jeśli tak się nie stanie, darczyńcy nie są obciążani. Przeprowadziłem wstępne badania i stwierdziłem, że Amazon Payments jest możliwym dostawcą rozwiązania w tym zakresie, ale nadal nie jestem pewien, od czego zacząć i miałem nadzieję, że ktoś może wskazać mi właściwe wskazówki, jak mogę wdrożyć tego rodzaju struktura płatności na mojej stronie internetowej. Powinienem również zauważyć, że jest to przede wszystkim prototyp, który buduję, więc jest w porządku, jeśli rozwiązanie jest ograniczone tylko do klientów z USA. Planuję również zbudować witrynę przy użyciu Ruby on Rails. Dziękuję bardzo za twoją mądrość!


title: Jak zaprojektować bazę danych, w której z identyfikatorem ma być powiązanych wiele tagów (ciągów)?

text: Muszę zaprojektować bazę danych, w której muszę powiązać audio_id z wieloma tagami (słowami). Rozważam następujące sposoby wybrania jednego z nich: 1) Aby mieć wiele pól dla wielu tagów (kolumny: tag1, tag2, tag3.... tag10) odpowiadających jednemu identyfikatorowi audio_id. Liczba tagów w mojej aplikacji nie będzie większa niż 10-15. 2) Aby zapisać tagi (słowa) jako oddzielony przecinkami pojedynczy ciąg odpowiadający pojedynczemu identyfikatorowi audio. 3) Aby zapisać asocjacje (tag:audio_id) w osobnej tabeli. Ale problem polega na tym, że skojarzenia mogą mieć od n do n. Wiele tagów może być powiązanych z audio_id, a ten sam tag może znajdować się w wielu audio_id. Daj mi również znać, czy istnieje jakiś alternatywny projekt dla tego scenariusza, czy też lepiej jest rozważyć inny typ bazy danych inny niż MySQL. Całkowita liczba tagów wyniesie około miliona, a audio_id około kilku tysięcy. Martwię się o wydajność systemu.


title: "Funkcjonalne" wcięcie php

text: Jestem wielkim fanem 1tbs, jeśli chodzi o języki typu c. Teraz, gdy php ma przyzwoite lambdy i domknięcia, nie jestem jednak pewien, czy styl, którego używam do nich (zasadniczo wymyślony, ma coś wspólnego z kodem źródłowym jquery) jest najbardziej czytelną/standardową opcją. Co myślisz? Ktoś ma kilka fajnych przykładów 1tbs + lambdy i funkcji jako parametrów? Oto próbka mojego kodu. function bold_search_terms($igła, $stóg siana) { return str_replace( $occurrencies = array_filter ( explode(" ",$stóg siana), function ($var) use ($igła) { return(levenshtein($var, $igła) < 3 ); } ), array_map( function ($zmienna) { return "<strong>$zmienna</strong>"; }, $occurrencies ), $stóg siana ); }


title: Dlaczego dziedziczenie, enkapsulacja i polimorfizm nie są filarami OOP?

text: Pewnego dnia poszedłem na czat Stack Overflow i zobaczyłem zdanie, które mówiło, że dziedziczenie, inkapsulacja i polimorfizm to filary OOP (w tym sensie, że są fundamentalne, podeszwa konstrukcyjna). Jest też podobne pytanie, które zadawano mi bardzo często na egzaminach i rozmowach kwalifikacyjnych, a właściwą odpowiedzią zawsze było stwierdzenie w tytule pytania („Tak, dziedziczenie, enkapsulacja i polimorfizm to filary OOP ).Ale na czacie Stack Overflow zostałem poważnie wyśmiany, uczestnicy zdecydowanie nie zgodzili się z takim stwierdzeniem.Więc, co jest nie tak z tym stwierdzeniem?Czy programiści wydają się być szkoleni w różnych dziedzinach na uczelniach postsowieckich i amerykańskich?Czy dziedziczenie, enkapsulacja i polimorfizm nie są uważane za filary OOP przez programistów z USA/Wielkiej Brytanii?


title: Ile razy wykonywano polecenie? Szukasz błędu

text: Mam następujący fragment kodu: int sum = 0; for (int i = 1; i <= N; i++) for (int j = 1; j <= N; j++) for (int k = 1; k <= N; k = k*2) for (int h = 1; h <= k; h++) suma++; Więc obliczyłem, ile wykonuje każdy cykl, a następnie cały skrypt, i myślę, że mogę się mylić w przypadku ostatniego. 1. N 2. N 3. 1 + log2N( oznacza log N do podstawy 2) 4. N Zatem całkowita ilość wykonania cyklu wewnętrznego będzie wynosić N^3 * (1 + log2N). Czy mam rację? Jak mogę przekształcić to stwierdzenie? **UPDATE 1** Mam inne rozwiązanie, które wydaje się monstrualne: 1. N 2. N 3. LOG2(N) + 1 4. 2^(LOG2(2N)) - 1 Więc całkowita ilość cykli będzie `n^2 * (LOG2(N) + 1) * 2^(LOG2(2N)) - 1`. Który przekształca się w n^2 rząd wzrostu. **UPDATE 2** Napisałem prostą aplikację testową, aby sprawdzić moje założenie. wydaje się, że trzeci cykl jest już z jakiegoś powodu obliczony jako czwarty. Tak przynajmniej wynika z aplikacji testowej. Wyrzuciłem `(LOG2(N)+1)`. W wyniku kilku przekształceń mam następujące równanie na całkowitą ilość wywołań sum++: N*N*(2*N - 1) = 2 * N^3 - N^2 ~ N^3


title: Jak rozwiązywać zależności pakietów cyklicznych

text: Refaktoryzuję dużą bazę kodu, w której większość klas znajduje się w jednym pakiecie. Dla lepszej modułowości tworzę podpakiety dla każdej funkcjonalności. Pamiętam, że dowiedziałem się gdzieś, że wykres zależności pakietów nie powinien zawierać pętli, ale nie wiem, jak rozwiązać następujący problem: `Rysunek` znajduje się w pakiecie `figure`, `Układ` jest w pakiecie `layout`, `Układ` wymaga, aby rysunek wykonał układ, więc pakiet `layout` zależy od pakietu `figure`. Ale z drugiej strony, `Figura` może zawierać w sobie inne `Figury`, mające swój własny `Układ`, co sprawia, że `figura` pakietu jest zależna od `układu` pakietu. Przemyślałem kilka rozwiązań, takich jak stworzenie interfejsu `Container`, który implementuje `Figure` i umieszczenie go w pakiecie `Layout`. Czy to dobre rozwiązanie? Jakieś inne możliwości? Dziękuję


title: Formatowanie dynamicznych stron internetowych

text: Strona zbudowana w taki sposób ma zaimplementowane skrypty po stronie serwera. Czy wcięcie kodu powinno być zgodne z logiką po stronie serwera (ułatwiając czytanie podczas kodowania) czy zgodnie ze znacznikami HTML/ASP.NET (ułatwiając czytanie podczas debugowania itp.)?


title: Jak wykonać testy jednostkowe na metodzie uwzględniającej upływ czasu?

text: Obecnie jestem w trakcie refaktoryzacji ważnej metody w tradycyjnym systemie. Testów było prawie zero, dopóki nie zacząłem nad tym pracować, a dodałem sporo, aby zapewnić poprawną pracę po moich refaktoryzacjach. Teraz natrafiłem na najważniejszą część: algorytm obliczający wskaźnik. Jest to coś w rodzaju wskaźnika = (JedenNumberFromA + InnyNumberFromB) / elapsedTime; Jak mogę przetestować prawidłowe zachowanie tej funkcji za pomocą testów jednostkowych? W funkcjach są też nieco inne algorytmy, które program osiąga w niektórych przypadkach - ale we wszystkich z nich "elapsedTime" ma kluczowe znaczenie dla wyniku.


title: Przenoszenie biblioteki, co zrobić z komentarzami/kredytami JavaDoc

text: Przeniosłem bibliotekę do Javy, ale zastanawiam się, co zrobić z komentarzami JavaDoc. Oryginalna biblioteka również używała komentarzy javadoc, więc czy mam zostawić tagi @author z oryginalnego kodu? A jak mogę przyznać sobie uznanie jako osoba, która go przeniosła?


title: Jak nowy programista może zaimponować inżynierowi oprogramowania (szefowi)?

text: Pracuję w swojej pierwszej pracy programistycznej. Mój szef jest bardzo inteligentnym inżynierem oprogramowania i czuję, że mam niewiele do zaoferowania w porównaniu z nim. Problem polega na tym, że jest zawsze zajęty i potrzebuje kogoś, kto mu pomoże. Czuję, że nie jestem wystarczająco dobry, ale nadal chcę odnieść sukces. Chcę być świetnym programistą. Co mogę zrobić, żeby mu zaimponować? Dziękuję Ci.


title: Jaką strategię zastosować rozpoczynając nowy projekt bez dokumentacji?

text: **Który jest najlepszy powód, aby jechać, gdy nie ma dokumentacji?** Na przykład jak nauczyć się reguł biznesowych? Wykonałem następujące kroki: 1. Ponieważ używamy narzędzia ORM, wydrukowałem kopię schematu bazy danych, w której widzę relacje między obiektami. 2. Sporządziłem listę krótkich nazw/nazw tabel, które zostaną mi wyjaśnione. Projekt jest aplikacją korporacyjną klient/serwer wykorzystującą wzorzec MVVM.


title: Jak mogę zalecić pół rygorystyczny harmonogram wydań w środowisku unikającym ryzyka?

text: Ostatnio coraz bardziej nęka mnie to, co chciałbym opisać jako jedno z moich najbardziej frustrujących i zabijających morale doświadczeń w tym zawodzie: konieczność _siedzenia przy wydaniu_, które zostało przetestowane, ponownie przetestowane, zainscenizowane i w każdym razie i cele są _gotowe do wysłania/wdrożenia_. Jako człowiek zajmujący się wszechstronnymi rozwiązaniami, a nie tylko zagorzały programista, rozumiem, a nawet opowiadam się za potrzebą odpowiedniej kontroli zmian. Ale ostatnio wątła równowaga między pokryciem naszych baz a dostawą na czas straciła na znaczeniu, a ja nie odniosłem żadnego sukcesu w przywracaniu jej do czegoś zdrowego. Szukam _przekonujących_ argumentów, które pomogą przekonać kierownictwo niechętne ryzyku, że: 1. Zespół programistów powinien (lub musi) być w stanie ustalić własny harmonogram wydań - oczywiście w granicach rozsądku (1-3 miesiące powinny być wystarczająco konserwatywne dla wszystkich ale największe firmy z listy Fortune 500); 2. Wersje oprogramowania są ważnymi kamieniami milowymi i nie należy ich traktować niedbale; innymi słowy, _niepotrzebne_ opóźnienia/przestoje są wysoce destrukcyjne i powinny być traktowane tylko jako ostateczność w przypadku jakiegoś krytycznego problemu biznesowego; oraz 3. Zewnętrzne (nie-deweloperskie/nie-informatyczne) podmioty, które chcą (lub żądają) zaangażowania się jako interesariusze, mają obowiązek współpracować z zespołem programistów w celu dotrzymania harmonogramu wydań, zwłaszcza w ostatnim tygodniu przed planowana data wysyłki (tj. testowanie/inscenizacja użytkownika). Powyższe są _oświadczeniami_, które brzmią dla mnie zgodnie z doświadczeniem, ale wygląda na to, że teraz muszę to _udowodnić_ - więc proszę o coś nieco bardziej treściwego, jeśli coś takiego istnieje. Czy ktoś, kto musiał „sprzedać” pomysł stałego (a może na wpół elastycznego) cyklu wydań kierownictwu, może udzielić wskazówek na temat tego, które argumenty/strategie są skuteczne lub przekonujące, a które nie? Czy oprócz oczywistej sprzeczności z harmonogramem i utopionych kosztów są jakieś twarde dane/dowody, które byłyby przydatne w uzasadnieniu, że wysyłka jest rzeczywiście ważna, nawet w sytuacji „korporacyjnej”? Alternatywnie, jestem otwarty na konstruktywne argumenty o tym, dlaczego elastyczność harmonogramu (nawet w okresie tygodni/miesięcy) jest ważniejsza niż wysyłka zgodnie z harmonogramem; w tej chwili trudno mi w to uwierzyć, ale może oni wiedzą coś, czego ja nie wiem. Zwróć uwagę, że przygotowaliśmy wydania etapowe i przeszło to przez wszystkie etapy, z wyjątkiem produkcji. Problemy są śledzone za pomocą komercyjnego narzędzia do śledzenia błędów, a każdy problem - 100% z nich - który był przypisany do tego wydania, został zamknięty. Zdaję sobie sprawę, że trudno w to uwierzyć i właśnie o to chodzi – nie ma sensu, aby wydanie w 100% kompletne, w pełni przetestowane i zatwierdzone przez interesariuszy zostało opóźnione przez kierownictwo z niewyjaśnionych powodów, ale tak się stało, to się dzieje, to jest problem do rozwiązania.


title: Wyodrębnianie tekstu z różnych formatów plików

text: Chcę wyodrębnić tekst z różnych plików. Użyłem Apache POI do parsowania dokumentów Microsoft. Działa, a teraz chcę przeanalizować pliki PDF i wyodrębnić z nich tekst. Czy istnieje Java API, z którego mógłbym skorzystać? Użyłem Apache Tika, ale nie zapewnia interfejsu API.


title: Lata doświadczenia po nieukończonym dyplomie?

text: Obecnie jestem na rocznym stażu i pracuję dla świetnej firmy programistycznej. Moim zamiarem zawsze było dotarcie do tego etapu przez studia, zdobycie wystarczającego doświadczenia akademickiego oraz rocznego stażu, a następnie podjęcie pracy w pełnym wymiarze godzin w programowaniu bez konieczności ukończenia studiów. Zdecydowałem o tym od samego początku, ponieważ nigdy tak naprawdę nie lubiłem całego środowiska uniwersyteckiego. Byłem bardzo nieszczęśliwy na uniwersytecie i jestem bardzo szczęśliwy, że jestem na roku praktyk, naprawdę nie wiem, czy mogę wrócić. Moje pytanie brzmi, czy uważasz, że firmy przyjmą mnie, jeśli zgłoszę się do innej pracy po roku stażu i nie będą mnie karać za nieukończenie studiów? Chyba pod koniec dnia nie chcę patrzeć wstecz na swoje życie i myśleć „Boże, dlaczego po prostu nie spędziłem jeszcze jednego roku, będąc nieszczęśliwym, mając pracę, którą kocham”, ale wiem to, nawet jeśli uzyskać stopień naukowy, nadal mógłbym skończyć bez pracy programisty, a to martwi mnie bardziej niż cokolwiek innego.


title: Postępowanie z danymi, gdy baza danych jest pod kontrolą wersji

text: Obecnie moja baza danych nie jest pod jakimś rodzajem vcs, możemy uzyskać delty, ale to wszystko. Chciałbym spróbować, aby wdrożenia produktów były bardziej zautomatyzowane i mniej czasochłonne. Rozumiem, że umieszczenie plików schematu bazy danych pod kontrolą źródła pozwala zarządzać wersjami i że te pliki służą zasadniczo do usuwania starych tabel/indeksów/itp., a następnie dodawania nowych wersji. Moje pytanie brzmi, co z danymi, które już tam są? Upuszczając wszystko, stracilibyśmy wszystkie dane. Tak więc musielibyśmy wykonać zrzut danych przed aktualizacją bazy danych, a następnie ponownie załadować dane po zakończeniu aktualizacji. Problem polega na tym, że niektóre z naszych największych baz danych mają ponad 80 GB danych i prawdopodobnie mamy łącznie 20 zestawów baz danych (6 DB na zestaw). Jestem pewien, że to zadziała, ale biorąc pod uwagę rozmiar wszystkiego, czy istnieje prostsze rozwiązanie, które wyeliminowałoby potrzebę zrzucania i ponownego ładowania wszystkiego za każdym razem, gdy miała miejsce aktualizacja schematu? A jeśli nie, to czy nie musielibyśmy zrzucać danych tak, aby ich ponowne wczytanie uwzględniało nowy schemat?


title: Jakie są zalety/wady używania nagrywania i odtwarzania do testowania regresji?

text: Mamy aplikację webową, na której chcemy rozpocząć testy regresji, a jedną z rzeczy, na które mam zwrócić uwagę przy wyborze alternatywy, jest narzędzie z rejestratorem. Mam jednak ogólne wrażenie, że nie jest to mile widziane i preferowane jest pisanie testów w kodzie. Jakie są ewentualne wady lub zalety używania narzędzia do nagrywania i odtwarzania do testowania regresji?


title: Jakiego rejestratora używam do Selenium 2

text: Mamy aplikację internetową, na której chcemy rozpocząć testy regresji i zdecydowaliśmy, że będziemy używać Selenium 2. Nie wszyscy testerzy są doświadczeni w programowaniu. Czy można do tego użyć Selenium IDE? Jakie inne alternatywy dla rejestratora są najlepsze dla Selenium 2?


title: Czy to kiedykolwiek w porządku, aby mieć pustą instrukcję catch?

text: Myślałem o tym i nie mogłem wymyślić przykładu. Dlaczego ktoś miałby chcieć złapać wyjątek i nic z tym nie robić? Czy możesz podać przykład? Może to po prostu coś, czego nigdy nie powinno się robić.


title: Mam wyjątkowy wyjątek. To jest rzucane przez API używane w moim projekcie. Czy logowanie takich błędów jest standardem, czy też obsługa ich bez rejestrowania?

text: Interfejs API ma ograniczenie liczby żądań, które możesz złożyć. Dlatego kolejkujemy nasze żądania w lokalnej bazie danych i wykonujemy jak najwięcej żądań, dopóki nie zostanie zgłoszony „wyjątek Throttle”. Po złapaniu wychodzimy z programu, a zaplanowane zadanie rozpoczyna proces od nowa za 15 minut. Czy standardem jest rejestrowanie tego typu wyjątku, czy po prostu wyjście z programu, ponieważ ten wyjątek jest oczekiwany?


title: Deweloper .NET potrzebuje porady FoxPro

text: Mamy perspektywę z systemem FoxPro 2.6 (cokolwiek to znaczy). Nasz produkt integruje się z innymi systemami za pomocą wyzwalaczy (zazwyczaj). Umieścilibyśmy kilka wyzwalaczy w systemie X, a następnie po prostu wyciągalibyśmy zebrane dane do naszego użytku. W ten sposób nie ma potrzeby dostosowywania produktu klienta i działa świetnie (prawie w czasie rzeczywistym - co 30 sekund odpytujemy o zmiany). Pytanie: 1. Czy mogę umieścić wyzwalacze w FoxPro 2.6? 2. Czy można uzyskać dostęp do FoxPro z platformy .NET? Jakieś haczyki/zastrzeżenia?


title: Gdzie powinien być napisany kod weryfikacyjny „nie puste pole” w aplikacji 3-warstwowej?

text: Gdzie należy umieścić kod weryfikacyjny podczas pracy z modelem 3-warstwowym? za: niepuste pola, niezaznaczone opcje, wartości null, źle napisane daty itp. Aby zachować całkowitą izolację między formularzem (warstwą UI) a regułami biznesowymi, ta walidacja powinna należeć do BLL? To jedyna praca dla interfejsu użytkownika: pobierz dane użytkownika bez **żadnej** troski o weryfikację i po prostu wyślij je do następnej warstwy. Na przykład jest to puste pole nazwy użytkownika, naprawdę łamie regułę biznesową lub LOGO nie musi nawet dbać o uzyskanie pustych wartości, oczywiście, UI dba. Czy może to być ta płytka walidacja, uważana za rzeczywistą regułę BL, czy wystarczy obsłużyć ją w warstwie interfejsu użytkownika?


title: Zmiany formy, dopasowania i funkcji w stosunku do oprogramowania

text: Patrzę na zarządzanie konfiguracją, a pomysł na zmianę formy, dopasowania i funkcji może określić, czy zmiana jest niewielka, czy poważna. Zastanawiałem się, jak można zastosować tę definicję podczas tworzenia oprogramowania. Czy istnieją dobre wytyczne dotyczące tego, czy zmiana w oprogramowaniu jest klasyfikowana jako zmiana poważna, czy niewielka?


title: xmpp flow - serwer, klient i biblioteka

text: Moim całkowitym wymaganiem jest stworzenie silnika czatu - w tym serwera, klientów itp. Obecnie pracuję tylko na moim pulpicie, ale po zakończeniu muszę go hostować; w zasadzie włączyć go do witryny w celu prowadzenia rozmów. Więc teraz mój problem polega na tym, że nie wiem, jak wygląda rzeczywisty przepływ danych? Wygooglowałem i przeczytałem o xmpp (książce Petera Andre), ale nie mam jasności co do przepływu i jakie są faktyczne wymagania do wykonania wyżej wymienionego zadania. Obecnie wiem, że: 1. Potrzebuję serwera - tak wybrany ejabberd 2. Potrzebuję klienta - wciąż nie jestem pewien, którego użyć, a kolejna wątpliwość dotyczy tego, jak ten klient będzie działał po wdrożeniu na jakiejś stronie internetowej do celów czatu. 3. Jakaś biblioteka - nie wiesz jaka i do czego służy? Czy ktoś może mnie poprowadzić?


title: Jak mieć możliwą do utrzymania i zarządzaną bazę kodu JavaScript?

text: Niedługo rozpoczynam nową pracę jako frontend developer. Aplikacja, nad którą pracowałbym, to 100% Javascript po stronie klienta. wszystko, co zwraca serwer, to strona indeksu, która ładuje wszystkie pliki JavaScript potrzebne aplikacji. Teraz pojawia się problem: cała aplikacja jest zbudowana wokół funkcji owiniętych w różne przestrzenie nazw. Z tego, co widzę, prosta funkcja, taka jak renderowanie kodu HTML strony, może zostać zrealizowana przez wywołanie 2 lub więcej funkcji w różnych przestrzeniach nazw... Moją pierwszą myślą było „to nie wydaje się idealnym rozwiązaniem” i ja może po prostu przewidzieć wiele problemów z utrzymaniem kodu i rozszerzaniem go w dół. Teraz wkrótce zacząłbym pracować nad rozwojem projektu i chciałbym mieć sugestie dotyczące dobrych praktyk w przypadku pisania i zarządzania stosunkowo dużą ilością kodu javascript.


title: Jaki algorytm łączy bloki w pary tak, aby średnia ważona z dwóch bloków mieściła się w górnej i dolnej granicy?

text: Jaki algorytm sparowałby działki o wysokim udziale własności x z działką o niskim udziale własności x, tak aby średnia ważona dwóch działek mieściła się w górnej i dolnej granicy? Algorytm musi sparować zestaw działek, aby zmaksymalizować ilość mieszczącą się w danym przedziale. Paczki są różnej wielkości. Załóżmy na przykład, że mam tabelę danych zawierającą tony każdego bloku i procent żelaza w każdym bloku. Mogę przetwarzać dwa bloki jednocześnie, aby uzyskać średni procent żelaza. Chcę zmienić kolejność każdego bloku, aby zmaksymalizować ilość ton mieszczących się w zakresie procentowym żelaza.


title: Przepływ pracy GIT dla jednego programisty (przejście z prostego FTP)

text: Zastanawiam się, czy przejście na VCS jest dla mnie sensowne. Jestem samodzielnym programistą stron internetowych w małej organizacji (5 osób). Myślę o VCS (Git) z następujących powodów: kontrola wersji, kopia zapasowa offsite, scentralizowane repozytorium kodu (możliwość dostępu z domu). W tej chwili pracuję ogólnie na serwerze live. Wysyłam FTP, wprowadzam zmiany i zapisuję je, a następnie przesyłam ponownie i odświeżam. Edycje dotyczą zwykle plików motywów/wtyczek do CMS-ów (np. Concrete5 lub Wordpress). Działa to dobrze, ale nie zapewnia kopii zapasowej ani kontroli wersji. Zastanawiam się, jak najlepiej zintegrować VCS z tą procedurą. Przewidywałbym założenie serwera Git na firmowym serwerze WWW, ale nie wiem, jak wypchnąć zmiany na konta klientów (zwykle VPSy na tym samym serwerze) - w tej chwili po prostu loguję się do SFTP z ich danymi i robię zmiany bezpośrednio. Nie jestem też pewien, co sensownie reprezentowałoby repozytorium - czy strona każdego klienta miałaby własną? Wszelkie spostrzeżenia lub doświadczenia byłyby naprawdę pomocne. Nie sądzę, bym w jakikolwiek sposób potrzebował pełnej mocy Git, ale podstawowa kontrola wersji i de facto dostęp do chmury byłyby naprawdę przydatne. **EDYTUJ:** Ograniczyłem to do dwóch opcji, które wydają się najbardziej sensowne. Pierwsza opiera się na odpowiedzi ZweiBlumena, zgodnie z którą edycje są dokonywane na serwerze na żywo i stamtąd przekazywane na (zewnętrzny) serwer Git. Ma to tę zaletę, że mój przepływ pracy nie zmieni się zbytnio (jest dodatkowy etap dokonywania zatwierdzeń, ale poza tym jest identyczny). Drugą opcją jest praca lokalna przy użyciu XAMPP, a następnie zatwierdzenie zmian z komputera lokalnego. Dopiero po uruchomieniu witryny przesyłam gotowy artykuł na serwer WWW z komputera lokalnego (natychmiast po ostatecznym zatwierdzeniu w Git). Teoretycznie wydaje się to w porządku, ale jeśli strona później wymaga poprawek i dokonam ich na serwerze na żywo (jak zwykle to robię), będę musiał ręcznie skopiować zmienione pliki w moim lokalnym repozytorium, a następnie zatwierdzić te zmiany w Serwer Gita. Wydaje się to zbyt skomplikowane i być może jest zbyt dużym odejściem od mojego obecnego przepływu pracy. Myślę, że w sumie wypróbuję opcję nr 1 i zobaczę, jak sobie poradzę.


title: Jak uruchomić aplikację F# w Windows Azure?

text: Mam projekt, który wymaga ode mnie napisania systemu zarządzania biblioteką w F# i korzystania z Windows Azure do rozwoju. Jestem całkiem nowy w koncepcji Cloud i nie wiem, co zrobić jako następny krok. Czy jest jakiś sposób na zaimplementowanie go za pomocą webForms? Jeśli możesz mi pomóc w krokach, które muszę podjąć, mogę je studiować i uczyć się. Dziękuję


title: Czego programiści mogą się nauczyć od branży budowlanej?

text: Rozmawiając z kolegami na temat projektowania i zasad tworzenia oprogramowania zauważyłem, że jednym z najczęstszych źródeł analogii jest branża budowlana. **Budujemy** oprogramowanie, a projekt i konstrukcję uważamy za **architekturę**. Jednym z najlepszych sposobów uczenia się (lub nauczania) jest analiza analogii - **jakie inne analogie można wyciągnąć z konstrukcji?** (czy są już powszechnie używane w oprogramowaniu, czy nie). Podaj opis lub swoje osobiste doświadczenia dotyczące podobieństwa koncepcji programistycznej do koncepcji konstrukcyjnej. [Credit to Programowanie koncepcji zaczerpniętych ze sztuki i nauk humanistycznych za pomysł]


title: Nowe podejście Twittera do aplikacji innych firm? Jak byś postrzegał ten ruch jako programista… szczególnie planujesz zbudować klienta Twittera?

text: Właśnie dziś rano przeczytałem wiadomość, że Twitter przestrzegł deweloperów, aby nie tworzyli żadnego nowego klienta strony trzeciej, oficjalne ogłoszenie można przeczytać tutaj. Jako programista, jak widzisz ten ruch twittera? Czy wydaje się, że chcą ujednolicić zachowanie klienta zewnętrznego, czy nie chcą żadnego nowego klienta na rzecz klientów domyślnych, których pozyskali? A jeśli ktoś chce stworzyć nowego klienta? Czy istnieją jakieś wytyczne, których przestrzeganie zapewnia nam stworzenie nowego klienta mobilnego? Czy powinniśmy przestać o tym myśleć? Jakie są opcje dla programistów, którzy chcą zbudować klientów na Twittera? Zdaję sobie sprawę, że zadałem zbyt wiele pytań, ale nadal uważam, że może być jedna wspólna odpowiedź.


title: Kod źródłowy używany podczas dostarczania tego do klienta

text: Czy piszesz swój kod inaczej, gdy musisz go przekazać klientowi? Jak zrównoważyć dostarczanie dobrego kodu, jednocześnie nie przekazując zbyt wiele „własności intelektualnej”?


title: Jak mogę poprawić mój interfejs użytkownika i umiejętności projektowania użyteczności?

text: Zainwestowałem najwięcej czasu i zasobów w programowanie, a teraz myślę, że nadszedł czas, aby zainwestować trochę czasu w naukę projektowania interfejsu użytkownika, doświadczenia użytkownika i użyteczności. Jakie są dobre zasoby dotyczące użyteczności i projektowania interfejsów użytkownika? Szukam głównie tematów teoretycznych, takich jak teoria kolorów i fizjologia kolorów oraz ich wpływ na użytkowników, a także informacje o najlepszych praktykach.


title: Mam tytuł magistra inżynierii oprogramowania... Co teraz?

text: Niedawno ukończyłem studia magisterskie z inżynierii oprogramowania na Drexel University (Filadelfia, PA, USA), ponieważ chciałem mieć _jakaś_ formalną edukację w zakresie oprogramowania (moim licencjatem jest matematyka), a także dlatego, że chciałem móc kariera poza programowaniem. Nie zrozum mnie źle; Uwielbiam kodować. Dużo wolnego czasu spędzam na kodowaniu. Jednak dla mnie pisanie kodu to tylko środek do celu: **NAPRAWDĘ** kocham projektowanie oprogramowania. Pamiętaj, nie projekt wizualny, ale architektura systemu. Więc idealnie chciałbym spróbować dostać pracę zajmującą się architekturą oprogramowania. Problem w tym, że nie mam w tym _prawdziwego_ doświadczenia poza pracą na studiach magisterskich. Więc co powinienem zrobić, aby moje "kości" w architekturze oprogramowania? **AKTUALIZACJA** Żeby było jasne, mam ponad 5 lat doświadczenia zawodowego w tworzeniu oprogramowania i certyfikat MCTS oprócz mojego wykształcenia, więc nie szukam zwykłego „Jestem świeżo po szkole, co czy powinnam?" Rada.


title: Jakimi zasadami etykiety należy przestrzegać na konferencjach software'owych?

text: Czy jako uczestnik, prelegent, czy sprzedawca chciałem wiedzieć, jakie są niewypowiedziane zasady etykiety na konferencjach programistycznych. Inne niż oślepiająco oczywiste (np. Nie atakuj zwycięzcy loterii na iPada, ponieważ nie wygrałeś). Jakie są niektóre zasady, których należy przestrzegać, nawet jeśli uważasz, że nie trzeba ich mówić? Proszę o jedną regułę na odpowiedź, z pogrubionym podsumowaniem na początku odpowiedzi. Opublikuj wiele odpowiedzi, jeśli masz wiele reguł.


title: Deweloperzy podchodzą do złożonych interfejsów użytkownika JavaScript

text: Staram się zrozumieć krajobraz różnych podejść i najlepszych praktyk związanych z tworzeniem złożonego JavaScript po stronie klienta. Nie jestem pewien, jak nazwać tę klasę aplikacji, być może **heavy AJAX** lub **RIA** (ale nie wtyczki takie jak Flash/Silverlight). Mam na myśli aplikacje internetowe o następujących cechach: * Emuluj bogaty/natywny UX pulpitu w JavaScript * Zawiera większość/wszystkie zachowania w JS po stronie klienta, używając serwera jako interfejsu API danych (JSON/Html-Templates). Jest to w przeciwieństwie do korzystania z serwera WWW do renderowania interfejsu użytkownika, tworzącego cały kod HTML w modelu odświeżania strony. Oto kilka przykładów: * Google Docs / Gmail * Mindmeister * Pivotal Tracker W miarę jak przechodzimy do HTML5, widzę, że ten styl tworzenia RIA, z ciężkim JavaScriptem, staje się coraz bardziej powszechny i niezbędny do konkurowania. **PYTANIE: Jakie są więc popularne podejścia do zarządzania tego rodzaju ciężkimi programami JS?** Kod po stronie klienta, w miarę powiększania się funkcji aplikacji, jest piekielnie skomplikowany. Występują problemy ze skalowaniem wysiłku programistycznego w wielu zespołach z surowym JS (a przynajmniej tak słyszę i mogę w to uwierzyć). Google podeszło do problemu, budując GWT, który kompiluje z języka wyższego poziomu (Java) do JS, opierając się na istniejącej infrastrukturze programistycznej, którą posiada język wyższego poziomu (Eclipse, narzędzia do silnego typowania, refaktoryzacji), wraz z abstrakcyjną kompatybilnością przeglądarek i inne problemy z dala od dewelopera. Istnieją inne narzędzia, takie jak Script# for C#, które robią coś podobnego. Wszystko to stawia JS w roli IL (języka pośredniego). tj. „Nigdy tak naprawdę nie piszesz już w tym „języku niskiego poziomu”. Ale ta „kompilacja do JS” nie jest jedynym podejściem. Nie jest oczywiste, że GWT jest dominującym podejściem… lub rzeczywiście się nim stanie. **Co ludzie robią z bogatym klientem JavaScript?** Kilka pytań dotyczących orientacji: * Czy większość sklepów tworzy JS ręcznie (na bibliotekach takich jak jQuery i inni)? * A może istnieje wiele różnych podejść, bez wyraźnych najlepszych praktyk? * Czy większość sklepów unika rozwoju w skali RIA na rzecz prostszego dla programisty modelu po stronie serwera/przerysowywania strony? Jeśli tak, czy to potrwa? * Czy kompilowanie do JS może być nowym trendem w przyszłości? A może to po prostu źle nagłówek? * Jak zarządzają złożonością i refaktoryzacją klienta JS? * Modularyzacja i dystrybucja pracy pomiędzy zespołami? * Aplikacja, egzekwowanie i testowanie wzorców po stronie klienta, takich jak MVC/MVP itp. **Jakie są więc nowe trendy w naszej przyszłości wykorzystującej ciężki JavaScript i HTML5?** Dzięki!


title: Jak zaprojektować dowolny system w rozmowie kwalifikacyjnej?

text: Częstym pytaniem w Tech Interview jest zaprojektowanie konkretnego systemu, zwykle istniejącego produktu firmy. Na przykład „Zaprojektuj Dokumenty Google”. Jaka jest oczekiwana odpowiedź na takie pytanie? Chodzi mi o to, że takie systemy z pewnością mają złożoną konstrukcję, która wykracza poza zakres jakiegokolwiek wywiadu. Czego oczekują ankieterzy w tak krótkim czasie?


title: Czy grupy takie jak comp.unix.programmer wciąż żyją?

text: Jeśli widzisz posty na http://groups.google.com/group/comp.unix.programmer/topics?pli=1, większość z nich to spam. Czy te grupy com są nadal dobrymi miejscami do odwiedzenia dla programistów, a jeśli tak, jak filtrować spam? Dlaczego i tak nie są moderowane?


title: Kiedy naprawdę skupić się na wydajności?

text: Właśnie kończymy pierwsze wydanie aplikacji internetowej opartej na bazie danych, która jest obecnie w fazie testów regresji. Aplikacja posiada zaawansowane wyszukiwanie z wieloma różnymi kryteriami filtrowania. Gdy wyszukiwanie jest używane po raz pierwszy z minimalnymi wymaganymi kryteriami wyszukiwania 3 (z 28), obliczenie i pobranie danych do załadowania strony zajmuje około 15-20 sekund. Dzieje się tak tylko przy pierwszym uruchomieniu wyszukiwania (używa zapisanego proc). Przeszukiwanie następnie zajmuje 2-6 sekund. Procedura składowana ma średnią złożoność około 1500 - 2000 linii. Chciałbym skrócić go, aby za pierwszym razem działał do 6 sekund, a potem do 1-2 sekund, ale nie mogę znaleźć czasu, aby przyspieszyć. Moje pytanie brzmi, czy jest to akceptowalne dla użytkowników, jeśli jest to powolne tylko przy pierwszym uruchomieniu wyszukiwania? Czy ktoś inny miał podobne doświadczenia z tworzeniem wyszukiwań zaawansowanych? Jakie było twoje rozwiązanie?


title: Co to jest O(...) i jak to obliczyć?

text: > **Możliwy duplikat:** > Zwykłe angielskie wyjaśnienie Big O. Widziałem tu kilka pytań na temat najskuteczniejszego sposobu na znalezienie lub posortowanie tego lub tamtego. Pytania zazwyczaj mówią o efektywności pewnych algorytmów w zakresie O(...). Jako niedoszły programista chciałbym zacząć uczyć się programowania algorytmicznego. Czym więc jest O(...)? Jak to obliczyć, gdzie mogę się o tym dowiedzieć?


title: Programowanie za pomocą emacs zamiast zintegrowanego z debuggerem IDE

text: Jest pytanie, które może zostać uznane za duplikat tego (używam IDE (Eclipse) do tworzenia oprogramowania. Dlaczego powinienem przełączyć się na vima lub emacsa?), ale nie sądzę, aby odpowiadało na moje pytanie. Zwykle programuję w C++ (nie do końca po to, by tworzyć GUI, więc raczej niskopoziomowe) i czuję się komfortowo z edycją kodu w Visual Studio, kompilacją i debugowaniem. Wiem, że wszystko to można zrobić w środowisku linux/unix (nawet w systemie Windows), ale zastanawiam się, dlaczego wielu niskopoziomowych programistów biegle posługuje się takimi narzędziami jak emacs, który, jak sądzę, nie ma żadnego debuggera zintegrowany (brak ustawiania punktów przerwania, robienie tego z gdb wydaje się dość powolne i naprawdę nieprzydatne). Jak mogą tworzyć złożone oprogramowanie z cyklem zapisu-kompilacji-debugowania w takich środowiskach? Czy czegoś mi brakuje? Wątpię, czy tworzą kod w Eclipse, Qt Creator czy Visual Studio, a potem wracają do narzędzi tekstowych.


title: Dołączasz do zespołu w zepsutym i niekontrolowanym projekcie, prawdopodobnie opracowanym przez początkujących?

text: Kontekst: Firma, która sprzedaje się we wszelkiego rodzaju partnerstwach i lubi firmę programistyczną, ale **czuje**, że jest firmą zatrudniającą tanich studentów za niskie płace do pracy nad ich głównym produktem (co wygląda na część). Sprzedają się z wieloma pochwałami, ale nigdy nie słyszałem o firmie w społeczności open source, co sprawia, że sceptycznie podchodzę do ich poziomu wiedzy. Teraz ta firma szuka długoterminowego zaangażowania i oferuje pracę do pracy nad tym produktem. Ale moje pierwsze wrażenie było bardzo negatywne: * brak kontroli wersji, * niedziałający kod, * amatorski i niedoświadczony kod. Co więcej, wydają się być nieuczciwi, ponieważ naciskają na niskie zarobki, minimalizując wagę problemu, ale nadal wymagają długiego zaangażowania. Nie sądzę, abym kiedykolwiek mógł rozwiązać jakikolwiek znaczący problem w takim środowisku, w którym spotykam się z tego rodzaju rozrywkami. Dobrze jest mówić o problemach szczerze i otwarcie. Tutaj boję się marnowania czasu. Jakieś takie doświadczenia i zalecenia, jak ocenić sytuację lub skłonić ją do zmiany?


title: Sprawdzenie poprawności wzorca projektowego używanego ze skomplikowanym modelem obliczeniowym

text: Pracuję nad projektem, który generuje wsadowe broszury techniczne. Używany interfejs API innej firmy oczekuje POCO z nazwami właściwości, które pasują do nazw pól używanych w każdym szablonie broszury. Zadanie, w sprawie którego szukam porady, dotyczy źródła danych, które zostanie użyte do wypełnienia tych POCO. Dane są oparte na obliczeniach kaskadowych względem modelu domeny. Początkowo rozważałem pomysł, aby Domena sama się obliczała, ale jest tak wiele wymaganych obliczeń, że wydawało mi się oczywiste, że należy to oderwać. Stworzyłem jakiś hipotetyczny kod, który ściśle naśladuje dany wzorzec projektowy i jestem otwarty na wszelkie sugestie lub potwierdzenia, czy podchodzę do tego prawidłowo. Moje główne obawy: 1. Konstruktor dla klasy „AirplaneResultsContext”, który wstrzykuje się do klas obliczeniowych, które są również publicznie dostępnymi właściwościami. Czy to tworzy ścieżki rekurencyjne? 2. Możliwe występowanie odwołań cyklicznych z kaskadowymi wywołaniami obliczeń do różnych właściwości/metod w różnych innych klasach. Zauważ, że ponownie używam większości logiki obliczeniowej (zgodnie z prośbą), ale mogę zaproponować konieczność jej refaktoryzacji, jeśli zajdzie taka potrzeba. Zauważyłem, że użyłem słowa „Skomplikowane”, które zwykle jest ostrzegawczym ostrzeżeniem dla kodu, który musi zostać wyabstrahowany, ale staram się zobaczyć, jak mogę to poprawić. * * * **Podmiot, od którego obliczana jest wartość**. Wyobraź to sobie jako zagregowany katalog główny dla większego modelu domeny. class Samolot : Entity<int> { public double Długość Skrzydła { get; ustawić; } publiczny podwójny obwód kadłuba { get; ustawić; } public double Długość kadłuba { get; ustawić; } public double Szerokość siedziska { get; ustawić; } public double Głębokość siedziska { get; ustawić; } public double wysokość siedziska { get; ustawić; } public double IsleWidth { get; ustawić; } public double LegRoomArea { get; ustawić; } } **Kontekst obliczeniowy**. Celem jest przekazanie tego obiektu jako części procesu wsadowego — abstrakcyjnej fabryki, która wykorzystuje interfejs reprezentowany przez tę klasę kontekstu i generuje obiekty POCO. Zauważ, że pominąłem również interfejsy i klasy abstrakcyjne, które byłyby używane w różnych strategiach obliczeniowych dla zwięzłości. class AirplaneResultsContext { public AirplaneResultsContext (samolot) { Samolot = samolot; Kadłub = nowy Kadłub Kalkulator(to); Seating = new SeatingCalculator(this); } public Samolot Samolot { get; zestaw prywatny; } public Kadłub Kalkulator Kadłub { get; zestaw prywatny; } public SeatingCalculator Seating { get; zestaw prywatny; } public double ComputeWidth() { return Airplane.WingLength*2 + Kadłub.ComputeDiameter(); } } **Kalkulatory**. W moim niehipotetycznym projekcie metody te są prywatne/chronione, buforowane przy pierwszym wywołaniu i odczytywane przez właściwości tylko do odczytu, ale chciałem tylko pokazać podstawową reprezentację niektórych złożoności obliczeń. class SeatingCalculator { private readonly AirplaneResultsContext _context; public SeatingCalculator (kontekst samolotuResultsContext) { _context = kontekst; } public int ComputeNumberOfSeats() { double isleArea = _context.Samolot.IsleWidth* _context.Samolot.Długość kadłuba; double availableArea = (_context.Fuselage.ComputeDiameter()*_context.ComputeWidth()) - isleArea; double seatArea = _context.Airplane.SeatDepth * _context.Airplane.SeatWidth + _context.Airplane.LegRoomArea; return (int) Math.Floor(availableArea/seatArea); } } * * * class FuselageCalculator { private readonly AirplaneResultsContext _context; public FuselageCalculator (kontekst samolotuResultsContext) { _context = kontekst; } public double ComputeDiameter() { return Math.PI / _context.Airplane.FuselageCircumference; } }


title: Rozpoczęcie tworzenia stron internetowych i interaktywne doświadczenia

text: Jestem nowy w tworzeniu stron internetowych i jestem trochę zdezorientowany różnymi językami i technologiami w sieci. Rozumiem, że podstawowe to Html, Javascript i Css. Potem jest jQuery, ASP.net, Html5. Jestem zdezorientowany, gdzie powinienem używać każdej technologii i której powinienem użyć. Na przykład, oto film z aplikacji WPF, którą zbudowałem: Demo aplikacji WPF Aplikacja jest zasadniczo dla studentów, którzy prowadzą lekcje. Uczeń może wybrać lekcję, słuchać i oglądać obrazy. Uczeń może się również sprawdzić. Jak widać, aplikacja ma animację i slying Gdybym miał spróbować zbudować tę aplikację dla sieci - od czego powinienem zacząć i czego użyć? HTML5 (Canvas?), jQuery (jQueryUI?), ASP.net? Byłbym bardzo wdzięczny, jeśli mógłbyś mi pomóc. Dziękuję!


title: czy język ograniczeń obiektów jest wart wysiłku?

text: więc OCL ma rozszerzać UML, gdy my jako projektant/analityk nie możemy wyrazić czegoś za pomocą diagramu, wciąż ma pełną specyfikację, nie ma (przynajmniej nie wiem) żadnego gotowego do produkcji kompilatora obsługiwanego przez jakąkolwiek większą firmę (np. Oracle, MS, IBM, Apple, Google), które mogą tłumaczyć OCL na dowolny język pośredni/maszynowy, więc dlaczego ktoś miałby inwestować w naukę czegoś takiego? Dlaczego nie zainwestować tego czasu w naukę rzeczywistego języka programowania? istnieje kilka łatwych do nauczenia się i szybkich języków (ruby, php, visual basic) i jeśli jego jedyną funkcją jest rozszerzanie diagramów UML, dlaczego nie po prostu napisać pseudokodu i skończyć z tym? naprawdę musimy nauczyć się pełnej specyfikacji tylko do napisania specjalnego przypadku pseudokodu ?


title: Testujesz mój kod VB.NET?

text: Mam problem z opracowywaniem podejść do testowania jednostkowego do testowania zarówno jeśli „kod robi to, co chcę”, jak i testowanie „czy mój kod działa”. Na przykład piszę kod, który sprawdza poprawność danych wejściowych, które zostaną wstawione do tabeli bazy danych, więc muszę sprawdzić, czy mój kod robi to, co chcę — dobre dane wejściowe są akceptowane, złe dane wejściowe są odrzucane. Oto fragment kodu w VB.NET: 'Sprawdźmy, czy zamierzamy zaktualizować wszystkie pola, które muszą zostać zaktualizowane... If record.table.RequiredMustBeSuplied IsNot Nothing Then For Każde żądanie In record.table.RequiredMustBeSuplied If zapytanie .UpdateFields(req.Key).value to nic, a następnie wyrzuć nowy argument ArgumentNullException End If Next End If tak, w moim teście jednostkowym przekażę zapytanie bez odpowiednich pól aktualizacji i spodziewam się, że spowoduje to wystąpienie „ArgumentNullException”, oraz odpowiedni test, który przechodzi. Problem, który mi się przytrafia, polega na tym, że później zauważę błąd i zdam sobie sprawę, że mój kod nie działa poprawnie. Na przykład poprawny kod w tym przypadku brzmiał: 'Sprawdźmy, czy mamy zamiar zaktualizować wszystkie pola, które muszą zostać zaktualizowane... If record.table.RequiredMustBeSuplied IsNot Nothing Then For Every req In record.table.RequiredMustBeSuplied If zapytanie .UpdateFields(req.Key).value to nic, a następnie wyrzuć nowy ArgumentNullException End If Next End Jeśli tak, udało mi się przetestować problemy, o których wiem (brakujące pola), ale nie jest to problem, o którym nie wiem (różnica między „dbnull” i nic). Czy testowanie jednostkowe nie jest zbyt dobre w znajdowaniu tego rodzaju błędów, czy może ktoś mógłby zasugerować jakieś podejście?


title: Zarządzanie zadaniami – jak ważne jest dla dewelopera na poziomie podstawowym, który w przyszłości będzie kierował się rolą PM?

text: Z wykształcenia jestem magistrem CS, a teraz jestem programistą aplikacji mobilnych (poziom podstawowy), zawsze zaczynam planować rzeczy, rozpoczynając lub wykonując dowolny projekt zarówno w pracy, jak i projekty, które robię w domu (z pasji) - ponieważ mogę dostarczyć projekt na czas, ale czasami kończy mi się czas, np. 10 zadań dziennie, a moja prognoza czasu zajmie 2 w tym dniu? Ponieważ jestem na poziomie początkującym, chcę uzyskać Twoje sugestie, jak ważne jest zarządzanie zadaniami dla osoby takiej jak ja i osiąganie moich celów? Moim celem na najbliższe 3 lata będzie Project Manager lub podobna rola - wierzę, że te umiejętności zarządzania czasem będą potrzebną jakością.


title: DDD — Czy repozytorium agregatu głównego obsługuje zapisywanie agregatów?

text: Używam podejścia podobnego do DDD dla modułu greenfield istniejącej aplikacji; to nie jest 100% DDD ze względu na architekturę, ale próbuję użyć niektórych koncepcji DDD. Mam ograniczony kontekst (myślę, że to właściwy termin - wciąż uczę się o DDD) składający się z dwóch Jednostek: „Rozmowa” i „Wiadomość”. Konwersacja jest korzeniem, ponieważ wiadomość nie istnieje bez konwersacji, a wszystkie wiadomości w systemie są częścią konwersacji. Mam klasę `ConversationRepository` (chociaż tak naprawdę bardziej przypomina bramę, używam terminu "Repository"), która znajduje konwersacje w bazie danych; gdy znajdzie konwersację, tworzy również (za pośrednictwem fabryk) listę wiadomości dla tej konwersacji (uwidocznionych jako właściwość). Wydaje się, że jest to właściwy sposób obsługi rzeczy, ponieważ wydaje się, że nie ma potrzeby korzystania z pełnej klasy `MessageRepository`, ponieważ istnieje ona tylko wtedy, gdy pobierana jest konwersacja. Jednak jeśli chodzi o zapisywanie wiadomości, czy jest to odpowiedzialność ConversationRepository, ponieważ jest to zbiorczy katalog główny wiadomości? Chodzi mi o to, czy powinienem mieć metodę w ConversationRepository o nazwie, powiedzmy, „AddMessage”, która przyjmuje Message jako parametr i zapisuje go w bazie danych? A może powinienem mieć osobne repozytorium do wyszukiwania/zapisywania wiadomości? Logiczną rzeczą wydaje się być jedno repozytorium na jednostkę, ale słyszałem również "Jedno repozytorium na kontekst".


title: wykres czy relacyjna baza danych?

text: Zaczynam myśleć, że wiele moich tabel można by zastąpić tylko wykresem db: Na przykład: mam 4 tabele: konta, głosy, posty, relacje, ale mogę to wszystko przedstawić w tabeli wykresu z różnymi krawędziami, WĘZEŁ1 -> typ relacji -> WĘZEŁ2 konto -> głos_+1 -> napisać konto -> napisać -> napisać konto -> znajomy -> konto2 czy jest między nimi różnica w wydajności lub inne?


title: Taktyka testów jednostkowych

text: Jedyną znaną mi taktyką testów jednostkowych jest porównywanie ze złotymi danymi _ predefiniowanego zestawu danych wejściowych, dla których znane są dane wyjściowe (najlepiej z uwzględnieniem przypadków narożnikowych). Nie mogę wymyślić żadnego innego rozsądnego sposobu testowania jednostkowego. Próba testowania jednostkowego przy użyciu dowolnych danych wejściowych jest (przynajmniej) tak trudna, jak napisanie samej aplikacji. Czy istnieją jakieś skuteczne taktyki dla testów jednostkowych inne niż testowanie złotych danych? Uwaga: Mówiąc arbitralne dane, mam na myśli dowolne "syntaktycznie" poprawne dane wejściowe, które metoda może zaakceptować (w tym logicznie niepoprawne dane wejściowe).


title: Czy powinienem się bać, że duża korporacja ukradnie mój pomysł?

text: Jeśli mam pomysł na stronę internetową, która jest naprawdę dobra, ale sam nie mam wystarczającego doświadczenia, aby dobrze ją wykonać samodzielnie, ale realizuję go z zespołem ludzi (zgadnij, że to się nazywa start-up), czy powinienem boisz się, że Google czy Microsoft zauważą moją witrynę, myśląc sobie _To genialne — mamy tysiąc razy ich zasoby, zróbmy to lepiej niż oni_ i odkładaj mnie na sucho?


title: Czy stopień w toku przejdzie przez filtr HR?

text: Rzuciłem studia w połowie ostatniego roku z powodów osobistych. Mam 6 modułów do powtórzenia, ale niestety nie mogę sobie pozwolić na powrót i ukończenie ich przez co najmniej kolejny rok. Zastanawiam się, czy jeśli zapiszę to w moim CV, przejdzie przez filtr HR? Bachelor of Science in Computing in Software Development 2007 - obecnie


title: Jak określasz kompetencje w ujęciu czasowym (lata)?

text: Kiedy jakiś czas temu szukałam pracy za pośrednictwem agencji, ciągle miałam pytania od pośredników rekrutacyjnych lub w formularzach aplikacyjnych typu: Ile masz lat doświadczenia w: * Oracle * ASP.NET * J2EE itp. itd. Na początku odpowiadałem wiernie... 5 lat, 7 lat, 2 lata, brak, kilka miesięcy itd. Potem pomyślałem; Mogę robić coś płytkiego przez 7 lat i nie być w tym kompetentnym, po prostu dlatego, że robię niewielkie wsparcie dla starszego systemu z SQL2000, co wymaga 10 dni mojego czasu przez ostatnie 7 lat. W końcu odmówiłem odpowiedzi na takie pytania. Zastanawiam się, dlaczego wciąż zadają te pytania. Każdy, kto właśnie ukończył informatykę, może pochwalić się 3-4 letnim doświadczeniem we wszystkim, czego „dotknął” w kręgu, co według mnie może być równoważne zeru lub 10 lat, w zależności od tego, jak na to spojrzeć. Może to mieć miejsce kilkadziesiąt lat temu, kiedy programiści i umiejętności informatyczne mają zupełnie inny charakter. Mogę się mylić, ale naprawdę wątpię, czy „czas” lub „lata” są już dobrym wskaźnikiem kompetencji lub doświadczenia. Wszelkie opinie/obalenia są mile widziane!


title: Ścieżki audytu i relacje między podmiotami

text: Pracuję nad systemem zamówień i wdrażam dziennik audytu. Dwa główne problemy to: 1) Podczas kontroli elementu zamówienia powinieneś widzieć tylko kontrole dla tego elementu 2) Podczas kontroli zamówienia powinieneś zobaczyć kontrole dotyczące informacji nagłówka ORAZ elementu zamówienia. Na przykład element zamówienia miałby ścieżkę audytu dotyczącą tego, co zostało zmienione w polach elementu zamówienia, a ponadto wszelkie dodawanie/usuwanie/modyfikacja komentarzy, załączonych zdjęć itp. również byłyby rejestrowane. Audyt zamówienia zawierałby wszystkie powyższe elementy oraz zmiany w rzeczywistym zamówieniu (zmiany lokalizacji wysyłki, zmiany nazwy nabywcy itp.). Zamiast dublować relacje dla tabel śladów audytu, planuję mieć tylko 2 tabele, które są następujące Audit_Log: -audit log id -entity type -entity id -audit timestamp -audit user -audit message (serializacja zmian obiektu najprawdopodobniej) Audit_Relationship -identyfikator dziennika audytu 1 -identyfikator dziennika audytu 2 -jest dzieckiem encji To znacznie uprości zapytania i posortuje ślady audytu. Dużym plusem jest to, że wszystkie ścieżki audytu znajdują się w jednej tabeli. Możesz po prostu posortować według sygnatury czasowej i zorientować się, co dokładnie dzieje się w systemie (chociaż myślę, że audyty mają skupiać się głównie na mniejszym obszarze, tj. określonej kolejności, aby zobaczyć zmiany). Czy ktoś próbował podobnego projektu? Martwię się, czy to w ogóle myli relacje między podmiotami. (Tj. do zamówienia zostanie dołączony audyt komentarza długiego dla pozycji, nawet jeśli ta relacja nie istnieje w logice biznesowej.) Użyto „jest dzieckiem encji”, aby było to nieco jaśniejsze. .. *Używam php z Doctrine 2, ale myślę, że jest to wystarczająco abstrakcyjny pomysł, aby pracować z dowolnym ORM-em. **(DODANO) Używam również MySQL i rozważam użycie wyzwalaczy bazy danych, a nie robienie tego na poziomie biblioteki ORM. **(DODANO) Użycie metody opisanej powyżej może być fatalnym pomysłem. Dołączając ścieżkę audytu, musimy pobrać wszystkie podmioty, które będą powiązane ze ścieżką audytu. W tym celu musielibyśmy zaimplementować metodę, aby uzyskać listę wykonanych identyfikatorów. Może jakieś specjalne adnotacje, których Doctrine używa, aby określić, które właściwości powinny być stosowane, gdy dziennik audytu "bulgocze" i dołącza? W każdym razie przejście na dłuższe czasy odczytu przy użyciu złączeń brzmi o wiele bardziej rozsądnie niż dłuższy czas zapisu dla tej funkcji.