title: Jak świadczyć usługę z RESTful API?

text: Ogólnie rzecz biorąc, interfejsy API RESTful są bardzo dobre do reprezentowania zasobów i kolekcji zasobów. * http://example.com/resources * http://example.com/resources/item17 I jesteśmy dobrzy, jeśli pracujemy z zasobem. Co jednak należy zrobić, gdy trzeba wyeksponować API, które wykonuje akcję, która nie tworzy/aktualizuje ani nie usuwa zasobu. Kilka przykładów: * Masz algorytm (jako przykład dodaj dwie liczby) * Masz akcję, która korzysta z zewnętrznego systemu (np. wyślij e-mail). Widziałem dwa podejścia: **Reprezentuj akcję jako podzasób** POST http://example.com/resource/item17/sendemail Z jednej strony jest to proste. Z drugiej strony zaczyna pachnieć SOAPy (czytaj wywołania RPC). **Reprezentuj działanie jako samodzielny zasób** POST http://example.com/emailsender To wygląda bardziej na REST. Jednak to też nie wydaje się właściwe (zaimplementowana jest tylko jedna z akcji CRUD). Ten zasób w rzeczywistości nie ma reprezentacji. Nie jestem pewien, może są inne metody, które przegapiłem. Pytanie brzmi: „Czy istnieje konsensus w tej sprawie? Jaki jest preferowany sposób to zrobić?”


title: Kiedy współpracownik prosi cię, abyś nauczył go tego, co wiesz, dzielisz się informacjami, czy zachowujesz je dla siebie?

text: Jestem jedynym developerem/DBA w małym dziale IT. Jest inny facet, który może to zrobić, ale jest bardziej kopią zapasową, ponieważ spędza czas pracując nad rzeczami wsparcia IT. W każdym razie mamy nowego pracownika i szkoliłem go w zakresie wsparcia IT. Wygląda na to, że jest chętny do nauki i bycia produktywnym, ale nikt nie stara się mu niczego pokazać. Prosił mnie, żebym nauczył go projektowania baz danych, SQL itp. Z jakiegoś powodu szef kazał mu ze mną współpracować. Wysyła go też na spotkania, na które chodzę, ale nie powiedział wprost, że muszę go czegoś nauczyć. Tymczasem szef nalega, aby sam wykonał wiele prac pomocniczych (tj. gromadzi informacje i nie przekazuje nikomu delegacji). Jestem trochę na płocie. Po pierwsze, nowy facet nie ma jeszcze mocnych podstaw w zakresie funkcji wsparcia IT, dlatego w tej chwili naprawdę potrzebujemy pomocy. Po drugie, zapłaciłem tysiące dolarów za zajęcia i spędziłem wiele godzin na nauce tych rzeczy. Czy moim obowiązkiem jest nauczenie innych umiejętności, których sam musiałem się nauczyć? Inni tutaj naprawdę nie są zbyt szybcy w dzieleniu się informacjami, więc nie jestem pewien, czy powinienem w tym środowisku. Wiem, że jeśli go zaangażuję i zacznę przy projektach, będę odpowiedzialny za jego błędy. Musiałem wziąć się za drugiego faceta, kiedy popełnił błędy. OTOH facet chce się czegoś nauczyć, jest zmotywowany, a ja nie chcę go zatrzymywać. W grupie mieliśmy sporo próżniaków i fajnie jest mieć kogoś, kto chce pracować dla odmiany. Więc co byście zrobili? Czy nauczyłbyś go umiejętności, których nauczyłeś się przez cały ten czas? Ustawić mu testową bazę danych na swoim komputerze i polecić mu kilka książek? Zachęcić go, aby najpierw zdobył solidne podstawy wsparcia IT, a później zapytać? Od lat nie mieliśmy nowego pracownika, a co dopiero takiego, który interesuje się tym, co robię, więc to dla mnie nowość.


title: Projektowanie wokół ograniczeń usług zewnętrznych w architekturze klient-serwer

text: Załóżmy, że masz klienta, który łączy się z serwerem, który z kolei wywołuje usługę zewnętrzną w celu spełnienia niektórych żądań klienta. Projektuję klienta i serwer i muszę uwzględnić ograniczenia usługi zewnętrznej. Mam następujące opcje: 1. Zahermetyzuj (w miarę możliwości) cały kod zajmujący się ograniczeniami usługi wewnątrz aplikacji **serwerowej**. 2. Zahermetyzuj (w miarę możliwości) cały kod związany z ograniczeniami usługi wewnątrz aplikacji **klient**. 3. Projektuj aplikacje klienckie i serwerowe z uwzględnieniem ograniczeń usługi zewnętrznej. Wybrałem opcję nr 1, ponieważ aplikacja serwera była "bliżej" usługi zewnętrznej i nie chciałem przeprojektowywać klienta, jeśli i kiedy usługa zewnętrzna zostanie ulepszona. Jednak teraz zostałem poproszony o wybranie opcji nr 3 przez zespół po stronie serwera, abyśmy mogli poradzić sobie z ograniczeniami usług zewnętrznych w API zamiast obsługi wyjątków. Czy istnieje wzorzec projektowy, do którego mogę się odwołać, aby przekonać ich (lub siebie), że preferowana jest jedna opcja? (Rozdzielenie obaw wygląda obiecująco, ale nie przekonywałem się, że to wystarczy, bo mogłoby też przemawiać za opcją nr 2)


title: Korzystanie z formantów SQLDataSource/DataBound w ASP.NET — zła praktyka?

text: Programując w ASP.NET, można uzyskać bardzo szybką, efektywną funkcjonalność, korzystając z kontrolek DataBound (`GridView`, `FormView` itp.) z kontrolką `SQLDataSource` na stronie (w każdym razie moim zdaniem mógłbym być sam na tym). Na przykład często używam tego typu kontrolek do tworzenia podstawowych funkcji wyszukiwania - takich jak przeglądanie historii zamówień w aplikacji koszyka. Jednak ta odpowiedź na SO skłoniła mnie do myślenia: ** Czy użycie kontrolki `SQLDataSource` jest uważane za złą praktykę? ** Nie mogłem znaleźć żadnych zasobów online, które uzasadniłyby to twierdzenie, więc pomyślałem, że zapytam tutaj. Pytanie na SO dotyczy obliczania sumy końcowej kolumny w `GridView`. Wady `SQLDataSource` wskazane przez respondenta (w ich komentarzu): * ASPX to prezentacja, a nie logika biznesowa. * Ta praktyka powoduje, że powtarzasz SQL na każdej stronie, która tego potrzebuje. * Kiedy dokonujesz zmiany w DB, musisz zmienić SQL w aspx. * Ponieważ sprawia to, że proste zadania, takie jak wyświetlanie sumy całkowitej, są trudne. * Dostarczone rozwiązanie oblicza sumę całkowitą w zdarzeniu `DataBound`. Co się stanie, jeśli nie użyjesz kontroli ze zdarzeniem `DataBound`? * Ponieważ nie można tego przetestować. Jestem nieco nowy w programowaniu ASP.NET (pochodzący z tła Java / C#) i chciałem się tylko upewnić, że nie podążam tutaj złą ścieżką (przy użyciu kontrolki `SQLDataSource`).


title: Zapamiętywanie poświadczeń użytkownika w samodzielnej aplikacji

text: Zajmuję się tworzeniem samodzielnej aplikacji przy użyciu javy, mam ekran logowania, w którym użytkownik wpisuje swoją nazwę użytkownika i hasło. Dla każdego wystąpienia aplikacji użytkownik musi wprowadzić swoje dane uwierzytelniające. Z punktu widzenia użyteczności, pomyślałem o zachowaniu przycisku zapamiętania mnie. Moje pytanie brzmi, ponieważ nie używam żadnej bazy danych, w jaki sposób utrwalić dane użytkownika. Mam kilka szorstkich przemyśleń, przechowuję je w pliku właściwości i odzyskuję. Myślę, że mogą być lepsze podejścia niż to, które miałem. Jakieś pomysły i sugestie?


title: Rozszerzenie interfejsu

text: Załóżmy, że mam interfejs strumienia wejściowego, który definiuje metodę odczytu danych. Mam również interfejs z możliwością przeszukiwania, który definiuje metodę wyszukiwania. Naturalnym sposobem definiowania pliku wejściowego jest wtedy zaimplementowanie zarówno strumienia wejściowego, jak i możliwego do przeszukiwania. Chcę skonstruować dekoder danych z interfejsu strumienia wejściowego, aby móc odczytywać dane z pliku lub z innego strumienia. Problem polega na tym, że chcę również zaimplementować funkcję seek do dekodera danych, ponieważ chcę mieć możliwość kroczenia pojedynczych rekordów, a nie surowych bajtów. Nie jest to możliwe, jeśli udostępnię tylko strumień wejściowy, który nie ma metody bytewise seek. Czy powinienem pominąć interfejs wyszukiwania i zamiast tego dodać metodę wyszukiwania do strumienia wejściowego i wymusić na wszystkich strumieniach przynajmniej pozostawienie go jako nop. EDYCJA: Dekoder nie musi szukać, jeśli klient nie żąda operacji wyszukiwania. Również strumień jest powiązany z dekoderem i nie można go zmienić po inicjalizacji


Czy pole tylko do odczytu w wątku VB.NET jest bezpieczne? Na przykład zobacz poniższy kod: Class Customer ReadOnly Name As String ReadOnly ZIP As Integer = 98112 Sub New(ByVal Name As String) Me.Name = Name End Sub End Class


title: Po co zwiększać wskaźniki?

text: Dopiero niedawno zacząłem uczyć się C++ i jak większość ludzi (zgodnie z tym, co czytałem) zmagam się ze wskaźnikami. Nie w tradycyjnym sensie, rozumiem, czym one są, dlaczego są używane i jak mogą być przydatne, jednak nie rozumiem, jak przydatne byłyby wskaźniki inkrementacyjne, czy ktoś może wyjaśnić, w jaki sposób inkrementacja wskaźnika jest użyteczna koncepcja i idiomatyczny C++? To pytanie pojawiło się po tym, jak zacząłem czytać książkę A Tour of C++ autorstwa Bjarne Stroustrupa, polecono mi tę książkę, ponieważ dobrze znam Javę, a chłopaki z Reddit powiedzieli mi, że będzie to dobra książka „przełączająca” .


title: Jak mogę się upewnić, że moja witryna będzie indeksowana, gdy artykuły są generowane przez bazę danych?

text: Nie byłam pewna, jak zadać pytanie. Ale w zasadzie jest to scenariusz podręcznikowy. Pracuję w witrynie opartej na artykule, ale informacje o artykule są przechowywane w bazie danych. Następnie strona jest renderowana z informacjami z bazy danych na podstawie żądanego identyfikatora artykułu: Na przykład: `http://www.mysite.com/articles/9851` Jestem nowym w SEO, więc zastanawiam się jak silniki są w stanie zindeksować zawartość stron takich jak ta i/lub co muszę zrobić, aby upewnić się, że _będzie_ ona zindeksowana. Na przykład ta strona. Wszystkie artykuły/posty na tej stronie wydają się znajdować gdzieś w bazie danych. Adres URL ma identyfikator, który wygląda tak, jakby służył do informowania serwera, jakich danych użyć do wygenerowania strony — więc strona tak naprawdę nigdzie nie istnieje, ale jej szablon tak. Kiedy przeszukuję google, mogę znaleźć jeden z tych postów na podstawie treści posta. Rozumiem, że roboty indeksujące zwykle po prostu znajdują stronę i podążają za jej linkami, podążają za linkami do jej linków itd., ale jak to działa, gdy witryna jest oparta na wyszukiwaniu w taki sposób? Czy musisz utworzyć stronę, która losowo wybiera artykuły z bazy danych, aby robot mógł je zobaczyć, czy coś?


title: Wzorce automatyzacji interfejsu użytkownika i najlepsze praktyki dla aplikacji desktopowych

text: **Tło** Obecnie automatyzuję niektóre testy wtyczki do MS Office. Tworzymy kodowane testy interfejsu użytkownika w VS 2010. Przypuszczam, że mógłbym użyć narzędzia " _Coded UI test builder_ ", ale tak naprawdę nie pasuje ono do mojego konkretnego przypadku. Z tego powodu stworzyłem własną klasę mapy interfejsu użytkownika i metody rozszerzenia dla każdej kontrolki/mapy interfejsu użytkownika, w której dodaję różne funkcje akcji. Na przykład naciśnij przyciski lub zatwierdź niektóre wartości interfejsu użytkownika. Scenariusze przypadków testowych znajdują się w klasach testowych. Jestem nowy w tym obszarze, a także jestem nowy w pracy jako tester automatyzacji. **Pytanie** Czy ludzie byliby na tyle uprzejmi, aby podzielić się swoim doświadczeniem i radą na temat dobrych praktyk automatyzacji testów w aplikacjach desktopowych z punktu widzenia programowania/projektowania?


title: Jak ponownie wykorzystać kod spaghetti

text: Pracujemy nad nowym firmware dla naszego nowego urządzenia V2. Firma ma starsze oprogramowanie układowe V1 (i sprzęt). Sprzęty są do siebie podobne (ale są pewne różnice), więc w zasadzie moglibyśmy użyć oprogramowania V1 z „pewnymi” modyfikacjami. Niestety oprogramowanie V1 to kod spaghetti. Musimy obsługiwać oba urządzenia, w tym nowe funkcje, więc kod powinien być możliwy do utrzymania. Próbowaliśmy stworzyć backlog z małymi historiami. Każda historia pokazywałaby użytkownikowi nową działającą funkcję, podczas gdy wyodrębnia część kodu V1 wielokrotnego użytku do projektu biblioteki i używa go w V2. Byłoby zawsze dostępne do wydania zarówno oprogramowania V1, jak i V2, a my moglibyśmy wcześnie pokazać działające demo (na początku z ograniczoną funkcjonalnością). Z czasem okazało się, że kierownictwo oczekuje, że będzie to krótki projekt (bo hws są podobne) i proponują inne podejście: przenieść wszystko do projektu bibliotecznego i zmodyfikować tylko te części, które są inne. Takie podejście wydaje się bardziej ryzykowne, ponieważ nie będziemy w stanie zademonstrować żadnego postępu (pierwsze demo będzie później, raczej wszystko albo nic, każdy moduł musi pracować mniej więcej na pierwsze demo) i myślę, że może to prowadzić do nieprzewidywalnych naprawa błędów. Co powinienem wziąć pod uwagę przed podjęciem decyzji między dwoma podejściami? Czy jest trzecia?


title: Otrzymałeś projekt i pracowałeś z 1 inną osobą - nigdy wcześniej z nikim nie pracowałeś

text: Biorę klasę, w której pracuję z partnerem, aby zaimplementować warstwę łącza modelu OSI. Pracowałem już kiedyś z partnerem zaprogramowanym i poszło źle. Czy celem jest podzielenie pracy i decydowanie, kto co robi lub powinna jedna osoba kodować, a druga przeglądać i zmieniać role po pewnym czasie? Wszelkie wskazówki są mile widziane. Dosłownie nic nie wiem o współpracy z partnerem przy programowaniu, więc nawet jeśli jest to podstawowe, proszę powiedz mi.


title: Jakie jest dobre pytanie do pomiaru zdolności kandydata do abstrakcji?

text: Przeprowadzanie rozmów kwalifikacyjnych z nowymi kandydatami jest częścią mojej pracy i wymyśliłem test, który w dużej mierze mierzy umiejętności kodowania kandydatów. Jednak nie mogłem (jeszcze) wymyślić dobrego pytania, które zmierzyłoby zdolność kandydata do radzenia sobie z abstrakcją. Wcześniej w moim teście miałem następujące pytanie: > Załóżmy strukturę drzewa, w której każdy węzeł przechowuje wartość całkowitą. Narysuj > najprostszy diagram klas przy użyciu języka UML, który reprezentuje opisany model domeny. Następnie zapytałbym: > Teraz zmień model w powyższym pytaniu, aby reprezentował liść (tj. Węzeł, który > nie ma dzieci). W końcu, po kilku rozmowach kwalifikacyjnych, zdałem sobie sprawę, że te dwa pytania nie dawały mi żadnej wskazówki, czy kandydat znał abstrakcję. Niektórzy znali odpowiedź, ale podczas wywiadu pokazali mi, że właściwie nie mają pojęcia, jeśli chodzi o abstrakcyjne, bardziej złożone tematy. Naprawdę nie mogę zadać bardzo głębokiego złożonego pytania w tym teście, ponieważ: 1. Całkowity czas całego testu to ~2h, a w pierwszej części spędzają już około 1h do 1h30 (umiejętności kodowania) 2. Dobry kandydat może nie zaliczą konkretnego złożonego pytania, a to nie dowodzi, że w ogóle nie potrafią abstrahować. Po przeczytaniu tego artykułu zaintrygował mnie: > Wymyślanie pytań, które zmuszają kandydatów do zrozumienia wskaźników bez > używania C, nie jest zbyt trudne. Prawie każde pytanie, które zmusza kandydatów do wymyślenia > struktury danych (np. tablicy haszującej, drzewa AVL itp.) będzie testować, w jaki sposób radzą sobie z pośredniością, ideą, że posiadanie rzeczy różni się od posiadania wskaźnika do tej rzeczy . Wybrałem więc pytanie, które zmusza > kandydatów do zaprojektowania struktury danych. I rzeczywiście, widzę kandydatów > którzy mają duże doświadczenie w programowaniu, ale którzy nie "rozumieją", całkowicie > bombardują mnie podczas rozmowy kwalifikacyjnej. Moim zdaniem wymyślenie struktury danych to dobry sposób na pomiar umiejętności abstrakcji. Więc moje pytanie brzmi, czy ktoś zna dobre pytanie (lub zestaw małych pytań), które mogłyby zmierzyć umiejętności abstrakcji w teście? Szukam takich pytań, które: 1. Nie zależą w szczególności od żadnego języka 2. Mogą na nie odpowiedzieć mądrzy ludzie 3. Nie mogą na nie odpowiedzieć osoby, które znają wszystkie książki na pamięć 4. Będzie przeciętnie 40 minut na rozwiązanie 5. Nie wygeneruje dużej ilości stron w odpowiedzi


title: Czy algorytm genetyczny jest potrzebny, gdy obliczenia są nieskończenie szybkie?

text: Z tego, co rozumiem, algorytmy genetyczne wypróbowują wiele odmian i oceniają dopasowanie każdej z nich. Następnie wybierają najlepsze odmiany, zmieniają je nieco i kontynuują proces z następną generacją. Ale co, jeśli mamy nieograniczone zasoby obliczeniowe? Czy możemy zatem po prostu wypróbować wszystkie możliwe odmiany i ocenić ich przydatność bez uciekania się do złożonego procesu hodowli nowych pokoleń? Innymi słowy, czy algorytmy genetyczne są potrzebne tylko wtedy, gdy obliczenia są drogie, a metoda brute-force jest niemożliwa? A może dodają też inne korzyści?


title: Czy powinniśmy unikać tworzenia obiektów w Javie?

text: Kolega powiedział mi, że w Javie tworzenie obiektów jest najdroższą operacją, jaką można wykonać. Więc mogę tylko stwierdzić, że stworzymy jak najmniej obiektów. Wydaje się to poniekąd przekreślać cel programowania obiektowego. Jeśli nie tworzymy obiektów, to piszemy tylko jeden długi styl klasy C, do optymalizacji?


title: Co zrobić, jeśli utknąłeś w projekcie, ponieważ zostałeś porzucony bez potrzebnych informacji?

text: Jestem młodszym programistą i powinienem debugować ten projekt, ale faktem jest, że ani ja, ani nikt inny (jedyna osoba, która niedawno nad nim pracowała) nie wie zbyt wiele o tym, jak to działa. Jestem sfrustrowany, ponieważ chciałbym to zrobić i zdjąć to z mojego talerza, ale w tej chwili nie jest to możliwe. Czy to normalne?


title: Duże wewnętrzne funkcje w kanban

text: Obecnie czytam kilka samouczków/porad dotyczących procesu Kanban i metodologii Agile, ale mam dwa duże pytania dotyczące tej metodologii Kanban. Zrozumiałem, że historyjki użytkowników polegają na dodawaniu wartości biznesowej, takiej jak funkcja, z której mogą korzystać nasi klienci. Głównym problemem jest to, że mamy wiele funkcji, które wyglądają na trywialne (na przykład prosty formularz, który zarządza synonimami dla solr), ale są trudne do zaimplementowania i mogą zająć kilka dni/tygodni, ze względu na skalowanie/szczegóły koordynacji w naszym klastrze ( odświeżanie synonimów za pomocą zk i przeładowanie z bazy danych, np.). Jak podzielić tę historyjkę użytkownika na mniejsze, skoro ze względu na specyfikę Kanbana każda historyjka użytkownika musi być niezależna? Czy mogę podzielić to na historyjki użytkowników dotyczące szczegółów implementacji? (zaimplementuj algorytm koordynacji, zaimplementuj usługę przechowywania X itp.) I moje ostatnie pytanie dotyczy zmian architektonicznych/refaktoryzacji. Skoro nie dodaje to żadnej wartości biznesowej (niewidocznej dla naszych klientów), jak odzwierciedlasz te zadania w tej metodologii?


title: Który z tych projektów jest preferowany?

text: W przypadku aplikacji z jedną prostą odpowiedzialnością (np. proste zastąpienie „grep” lub „wc”), który z tych projektów jest preferowany i dlaczego? Uważam, że wszystkie są testowalne i wszystkie wykonują swoją pracę. Czy któryś z nich ma jakąś znaczącą przewagę nad drugim? 1: Wszystkie metody w głównej klasie: public class App { public static void main(String[] args) { App app = new App(); Wejście AppInput = app.readInput(); Wyjście AppOutput = app.processInputToOutput(wejście); app.writeOutput(wyjście); } public AppInput readInput() { .. } public AppOutput processInputToOutput(AppInput input) { .. } public void writeOutput(AppOutput output) { .. } } 2: Metody podstawowe w osobnej klasie, klasa główna tylko wykonująca wywołania do odczytu i wejście procesu i wynik wyjścia: public class App { public static void main(String[] args) { AppWorker worker = new AppWorker(); Wejście AppInput = worker.readInput(); Wyjście AppOutput = worker.processInputToOutput(wejście); pracownik.writeOutput(wyjście); } } public class AppWorker { public AppInput readInput() { .. } public AppOutput processInputToOutput(AppInput input) { .. } public void writeOutput(AppOutput output) { .. } } z klasą główną tylko tworzenie instancji pracownika i wyzwalanie go do wykonania swojej pracy: public class App { public static void main(String[] args) { AppWorker worker = new AppWorker(); pracownik.doTwojejPracy(); } } public class AppWorker { public void doTwojaPraca() { AppInput input = readInput(); Wyjście AppOutput = processInputToOutput(wejście); writeOutput(wyjście); } public AppInput readInput() { .. } public AppOutput processInputToOutput(AppInput input) { .. } public void writeOutput(AppOutput output) { .. } }


title: Generowanie wszystkich słów akceptowanych przez deterministyczny automat skończony

text: 1. Wyobraź sobie, że masz skończony deterministyczny automat `A` definiujący jakiś skończony język regularny `L`, składający się z `N` słów. 2. Pierwsze pytanie brzmi: jak określiłbyś liczbę słów „N”? 3. Następnie chcę wyliczyć wszystkie te słowa, tj. utworzyć funkcję typu `f: {1..N} -> L`. Jakieś sugestie? Obowiązują następujące ograniczenia: * `N` może być wystarczająco duże, na przykład `[0-9A-Z]{8}` daje `N = 36^8` różnych kombinacji, więc przechowywanie wszystkiego w pamięci nie jest opcją . * Chcę móc utrzymać stan. Na przykład oblicz `f(x)`, następnie przechowuj wszystkie potrzebne dane pośrednie w bazie danych, a jakiś czas później oblicz `f(x+1)`. To, co na razie zrobiłem, to uproszczenie słów o stałej długości. Jakieś sugestie, jak to zrobić dla arbitralnego DFA? Podejrzewam, że jest to powszechny problem, więc wszelkie odniesienia do algorytmów są mile widziane. Dziękuję!


title: Jak powinienem uporządkować bazę danych, aby w tym scenariuszu uzyskać maksymalne korzyści?

text: Zajmuję się tworzeniem skryptu PHP, który analizuje ruch na stronach internetowych moich klientów. Umieszczając link do javascriptu na stronie klienta (pomyśl o Google Analyses), mój skrypt zbiera informacje takie jak: adres IP odwiedzającego, link referencyjny, link do bieżącej strony, agent użytkownika itp. Teraz moi klienci mogą przeglądać te statystyki za pomocą panel sterowania który mam zbudował. Klienci ci mogą również dostosowywać ustawienia profilu, ustawiać reguły zapory, tworzyć zgłoszenia do pomocy technicznej i płacić faktury. Obecnie cały ruch jest przechowywany w jednej tabeli. Możesz sobie wyobrazić, że ta tabela stałaby się bardzo duża, ponieważ niektórzy moi klienci otrzymują tysiące odsłon dziennie. Ponadto wszystkie dane o ruchu każdego klienta byłyby przechowywane w tej samej tabeli, tworząc bałagan. To samo dotyczy obecnie reguł zapory sieciowej oraz systemu faktur i wsparcia. Szukam sposobu na uporządkowanie mojej bazy danych w bardziej zorganizowany sposób, aby przechowywać duże ilości danych wielu użytkowników. To pierwszy projekt, który rozwijam, który zajmuje się tak dużą ilością danych i chciałbym usłyszeć sugestie i wskazówki. Myślałem o użyciu wielu baz danych do strukturyzowania danych. Główna baza danych będzie przechowywać dane użytkowników (e-mail, hasło, identyfikator itp.) ustawienia administratora/strony. Wtedy każdy klient będzie miał unikalną bazę danych o nazwie prefix_userid, która zawiera tabele zawierające dane o ruchu, fakturach i biletach pomocy technicznej. Czy byłoby to rozwiązanie i czy spowolniłoby lub przyspieszyło ogólną wydajność (czyli rozłożenie danych na wiele baz danych). Mam solidny VPS, ale chciałbym być bezpieczny i jak najbardziej wydajny.


title: Pomoc w wyborze struktury projektu: Korzystanie z klas lub biblioteki funkcji

text: Mam więc klasę GUI, która wywoła inną klasę o nazwie `ImageProcessor`, która zawiera kilka funkcji, które będą wykonywać algorytmy przetwarzania obrazu, takie jak `edgeDetection, gaussianblur, contourfinding, generowanie map konturowych itp.` GUI przekazuje obraz do `ImageProcessor`, który wykonuje na nim jeden z tych algorytmów i zwraca obraz z powrotem do GUI w celu wyświetlenia. Tak więc zasadniczo `ImageProcessor` jest obecnie biblioteką niezależnych funkcji przetwarzania obrazu. Nazywa się to w GUI, podobnie jak Image image = ImageProcessor.EdgeDetection(oldImage); Niektóre procedury algorytmów wymagają wielu funkcji, a niektóre mogą być wykonane w jednej funkcji lub nawet w jednej linii. Wszystkie te funkcje dla algorytmów spakowanych w ImageProcessor mogą być dość bałaganiarskie, a ImageProcessor nie brzmi, że powinna być biblioteką. Myślałem więc o tym, aby każdy algorytm był klasą ze współdzielonym interfejsem, powiedz „IAlgorithm”. Następnie przekazuję interfejs IAlgorithm z GUI do ImageProcessor. publiczny interfejs IAlgorytm{ public Image Process(); } public class ImageProcessor{ public Image Process(IAlgorithm TheAlgorithm){ return IAlgorithm.Process(); } } Wywołanie w GUI, tak jak `Image image = ImageProcessor.Process(new EdgeDetection(oldImage));` Myślę, że ma to sens z punktu widzenia obiektu, ale problem polega na tym, że skończę z kilkoma klasami, które są tylko jedna funkcja. Jak myślisz, co jest lepszym projektem, czy obaj są gówniani i masz o wiele lepszy pomysł? Dziękuję!


title: Czy funkcje powinny zawsze zwracać status sukcesu/porażki?

text: > **Possible Duplicate:** > Kiedy i dlaczego należy użyć void (zamiast bool/int) Jakie jest powody, dla których wszystkie funkcje (i metody!) zwracają jednolity typ, zwykle int, jako status? Dla mnie to dziwne; zwłaszcza, gdy wywołujesz metodę pobierającą i zwraca ona status (który zwykle jest zawsze taki sam) i ustawia jeden z parametrów na wartość, którą otrzymujesz.


title: Zezwolić na rezygnację z analizy aplikacji?

text: Biorąc pod uwagę, że raportowanie analizy aplikacji mobilnej może kosztować ruch danych klienta, którego, w przeciwieństwie do aplikacji internetowej, korzystanie z aplikacji mobilnej może w innym przypadku nie być wymagane, jeśli aplikacja mobilna zapewnia użytkownikowi ustawienie umożliwiające klientom rezygnację z gromadzenia danych analitycznych aplikacji lub raportowania ? Czy i gdzie należy powiadomić klienta, że uruchomienie danej aplikacji mobilnej może przechwytywać i przesyłać dane analityczne dotyczące korzystania z aplikacji? Czy istnieją sklepy z aplikacjami, w których wymagane jest jedno z powyższych?


title: Zatrudnianie programistów — jakieś wskazówki, jak być bardziej wydajnym?

text: Reprezentuję firmę programistyczną, która jest w trakcie budowania dużego zespołu programistycznego. Jesteśmy wybredni co do tego, kogo zatrudniamy i mamy naprawdę dobry wskaźnik retencji (większość deweloperów jest tu średnio 5-6 lat). Poświęcamy dużo czasu programistom i działom HR i mamy niski wskaźnik liczby aplikacji do zatrudnienia. Oto proces, którego używamy: * Wywiad HR przez telefon - Obejmuje zadawanie podstawowych pytań behawioralnych i technicznych * Test online - Obejmuje 30-minutowy test techniczny * Techniczna rozmowa telefoniczna - 60-minutowa rozmowa z programistą * Wywiad na miejscu - 60-90 minut wywiad z kilkoma starszymi programistami Chociaż ten proces działa, spędzamy zbyt dużo czasu na rozmowach kwalifikacyjnych. Jakieś przemyślenia, jak można to zrobić inaczej? Naszym celem jest zautomatyzowanie wszelkich zadań, jeśli to możliwe, przy zachowaniu jakości talentów. * * * **AKTUALIZACJA:** Dziękujemy za odpowiedzi. Muszę wyjaśnić kilka rzeczy. Naszym celem jest zmniejszenie liczby kandydatów, którzy przechodzą z jednego etapu do drugiego. Oto nasze aktualne liczby. 1. Otrzymujemy 1000 życiorysów 2. 800 życiorysów zalicza wywiad HR 3. 500 zda test online 4. 100 zda wstępny ekran telefonu 5. 10 zda się na miejscu i zostanie zatrudniony Jak widać, musimy wykonać lepszą pracę wykluczenia kandydatów na wcześniejszym etapie procesu. Czy możemy wykonać lepszą pracę w sposobie, w jaki test online ocenia ludzi? Oto więcej szczegółów na temat procesu w oparciu o niektóre odpowiedzi: * Wywiad HR na telefon - Zadaje bardzo podstawowe pytania techniczne (Co to jest CLR?), aby wyeliminować jak najwięcej osób * Test online - Masz około 10 podstawowych pytań z 3 pytania dotyczące kodowania * Ekran telefonu Tech - Obejmuje różne technologie. Nie obchodzi nas, że kandydat nie wie wszystkiego, o ile potrafi wykazać, że będzie w stanie wychwycić nowe technologie i szybko przyspieszyć * Na miejscu — pytania dotyczące kodowania przed programistami. Więcej pytań na poziomie architektonicznym.


title: Tworzenie niestandardowego GUI. Aplikacja/DE/WM?

text: Zaczynam od tego mojego projektu pisania niestandardowego interfejsu użytkownika dla systemu Linux. Co by się stało, to: * Komputer uruchomiłby się w tym interfejsie użytkownika, który nie byłby typowym rodzajem paska zadań/ikony/przycisku startowego. Pomyśl bardziej jak dedykowany interfejs użytkownika zamiast ogólnego przeznaczenia. * Zapewniłby dostęp do Wi-Fi, Ethernetu, Bluetooth itp. Zasadniczo ma dostęp do większości zasobów systemowych. Do tego momentu nie planuję posiadania menedżera plików dla użytkownika. Aplikacja zajmie się tym. Rodzaj działania aplikacji na telefonach komórkowych. Moim pierwszym odruchem była praca (rozwidlenie istniejącego) na niestandardowym DE, takim jak Gnome/KDE. Więc czytałem dużo o menedżerach okien i środowiskach graficznych i chociaż menedżery okien wydają się być najlepszą opcją dla tego, co próbuję zrobić, przyszedł mi do głowy inny pomysł, który byłby znacznie mniej skomplikowany. Mógłbym po prostu (wiem!) napisać aplikację, w której uruchamia się natywny system operacyjny, bez ekranu powitalnego itp. Więc weź dystrybucję taką jak Arch Linux, rozbierz ją do podstaw, a następnie zbuduj aplikację na tym. Chciałbym zasięgnąć porady, jaki byłby najlepszy sposób, aby to zrobić. Czy zgadzacie się, że aplikacja jest lepsza? Przepraszam, jeśli pytanie wydaje się naiwne. Wszelkie sugestie/pomysły mile widziane.


title: Zmuszony do pisania procedur przechowywanych

text: Czy możesz podać jakieś powody, dla których kierownictwo zmusza programistów do pisania i wywoływania Procedur zapisanych w bazie zamiast bezpośrednio wbudowanych instrukcji SQL? Nawet bardzo prosta instrukcja CRUD pisanie procedury składowanej zajmuje więcej czasu i tworzy dodatkowe obciążenie.


title: Jak ważne jest generowanie blogów/poradników dla rozwoju kariery?

text: Ostatnio widziałem wiele ofert pracy dla programistów aplikacji z dedykowanym polem na osobisty blog. Zastanawiałem się, jak ważne dla rozwoju kariery jest prowadzenie bloga i generowanie treści związanych z technologią? W jaki sposób posiadanie jednego/brak jednego wpływa na twój potencjał zatrudnienia?


title: Który kontroler powinienem umieścić w akcji wyszukiwania, która dotyczy wielu różnych modeli?

text: Obecnie mam następujące modele i projektuję funkcję wyszukiwania, która przeszukuje te 3 modele: Lokalizacje Użytkownicy User_friends Czy powinienem utworzyć kontroler wyszukiwania, czy powinienem umieścić akcję w jednej z istniejących lokalizacji, użytkowników lub kontrolerów user_friends? Jeśli tak, czy powinno być w liczbie mnogiej - searches_controller czy po prostu search_controller?


title: Jaką licencję wybrać do swojego projektu?

text: Początkowo myślałem o creative commons, gdy czytając książkę o wordpressie (profesjonalnym wordpressie), dowiedziałem się, że powinienem również sprecyzować, że produkt jest dostarczany > ... BEZ ŻADNEJ GWARANCJI; nawet bez dorozumianej gwarancji > PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONEGO CELU i zalecają GNU GPL. Jak napisać licencję lub wybrać 1? btw, co właściwie oznacza „POBYT lub PRZYDATNOŚĆ DO OKREŚLONEGO CELU”? Czy bez gwarancji nie wystarczy?


title: Stosowanie podkreślników i nauszników

text: Widziałem podkreślenia i nauszniki (takie jak `_good_` czy `*good*`) często używane w rozmowach między programistami. Wiem tylko, że podkreślenia są używane do oznaczania prywatnych zmiennych lub metod w językach takich jak C, Python itp., a nauszniki są preferowanym sposobem wskazywania, że coś jest zmienną globalną. Czy mają one jakieś inne znaczenie interpunkcyjne, gdy są używane poza kodem, na listach mailingowych itp.? Czy podświetlone słowo ma jakieś ukryte znaczenie lub wyrażenie? A może są jak cytaty lotnicze?


title: Co to jest pamięć podręczna podtrzymania bateryjnego?

text: Przeczytałem artykuł o optymalizacji wydajności Innodb i w tym poście autor wielokrotnie wspominał o czymś o nazwie "pamięć podręczna kopii zapasowej baterii". Nie jest dla mnie jasne, o czym mówił, a google też nie pomogło. Domyślam się, że jest to rodzaj przechowywania kopii zapasowych na wypadek awarii zasilania. Czy mam rację?


title: Jak wypromować Scala w kadrze zarządzającej?

text: Jako programista lubię Scala i mogę powiedzieć kierownictwu o technicznych zaletach języka. Ale nawet jeśli kierownictwo rozumie, że lepsza technologia ma wpływ na biznes, obawiam się, że nie rozumieją, o czym mówię. Jakie argumenty przedstawiłbyś menedżerom z wykształceniem technicznym (informatykom nieprogramującym od wielu lat)?


title: Sql Server Data Tools & Entity Framework — czy jest tu jakaś synergia?

text: Wychodząc z projektu wykorzystującego Linq2Sql, podejrzewam, że następny (większy) może popchnąć mnie w ramiona Entity Framework. Zrobiłem trochę lektury na ten temat, ale nie udało mi się znaleźć spójnej historii o tym, jak SQL Server Data Tools i Entity Framework powinny/mogą/mogą być używane razem. * Czy zostały poczęte całkowicie oddzielnie, a używanie ich razem jest głaskaniem w niewłaściwy sposób? * Czy są w jakiś sposób całkowicie ortogonalne i nie rozumiem sedna sprawy? Oto kilka powodów, dla których myślę, że mogę chcieć obu: * SSDT świetnie nadaje się do posiadania „skompilowanego” (sprawdzonego) i łatwego do wersjonowania sql i schematu * Ale historia „migracji/aktualizacji” SSDT nie jest przekonująca (dla mnie): „Aktualizuj wszystko” działa dobrze dla schematu, ale nie ma możliwości (AFAIK), żeby kiedykolwiek działał dla danych. * Z drugiej strony nie próbowałem migracji EF, aby dowiedzieć się, czy przedstawia podobne problemy, ale bity Up/Down wyglądają na całkiem przydatne.


title: Czy dobrą/bezpieczną praktyką OOP jest posiadanie metody, której jedynym celem jest wysyłanie/pobieranie danych z innej klasy?

text: Mam klasę, która wykonuje podstawowe operacje MySQL. To wszystko w PHP. class dbTables { public $nazwa; chronione $pola = tablica(); // tablica obiektów dbTableField public $result_sets = array(); chroniony $klucz_podstawowy; // wypełniane za pomocą getFields() z __construct() public function __construct($table_name) { $this->name = $table_name; $this->getFields(); } public function removeWhitespace($table_name) { $this->name = $table_name; $this->getFields(); } // itd... } Więc wszystko, czego potrzebujesz, to nazwa tabeli do utworzenia obiektu, a konstrukcja automatycznie pobiera kilka danych pól z `INFORMATION_SCHEMA` (nazwy, typy danych itp.). Mam również metodę usuwania białych znaków z kolumny, która obecnie znajduje się w innej klasie, ale myślę o przeniesieniu się do powyższej klasy `dbTables`. Możesz zobaczyć metodę poniżej. Nie sądzę, aby czytanie tej metody było naprawdę konieczne, aby odpowiedzieć na moje pytanie, ale może to być pomocne. protected function removeWhiteSpace($target_field,$abbrev_field,$from_size,$to_size,$options) { // opcjonalne warunki oparte na oryginalnej długości znaku i wynikowej długości znaku. /* options: from_size = wszystkie/dłuższe_niż/krótsze_niż * to_size = wszystkie/dłuższe_niż/krótsze_niż */ $temp_table = $this->table_name; $sql = "AKTUALIZACJA `$temp_table` SET `undo_sku` = `$target_field`, `$target_field` = REPLACE(`$target_field`,' ',''), `$abbrev_field` = 'w'"; $gdzie = tablica(); if($options['from_size'] == 'longer_than') { $where[] = "`$target_field` > $from_size"; } else if($options['from_size'] == 'shorter_than') { $where[] = "`$target_field` < $from_size"; } if($options['to_size'] == 'longer_than') { $where[] = "DŁUGOŚĆ(REPLACE(`$target_field`,' ','')) > $to_size"; } else if($options['from_size'] == 'shorter_than') { $where[] = "DŁUGOŚĆ(REPLACE(`$target_field`,' ','')) < $to_size"; } //WHERE `$target_field` = '' AND LENGTH(REPLACE(`vnd_sku`,' ','')) <= $string_length"; $result = mysql_query($sql); } Teraz, jeśli to przeniosę do `dbTables`, nadal będę chciał używać funkcjonalności z drugiej klasy.Czy powinienem po prostu utworzyć instancję obiektu `dbTables`, gdy potrzebuję użyć `removeWhitespace`?Czy mogę dać `dbTables` jego własną metodę `removeWhitespace` tak: protected function removeWhiteSpace($target_field,$abbrev_field,$from_size,$to_size,$options) { /* options: from_size = all/longer_than/krótszy_than * to_size = all/longer_than/krótszy_than */ $dbtable = new dbTables( $this->table_name); $temp_table = $this->table_name; $result = $dbtable->removeWhiteSpace($target_field,$abbrev_field,$from_size,$to_size,$options);return $result;} Korzyści, które widzę jest to, że teraz mam sposób na ograniczenie tworzenia instancji obiektu `dbTables` w różnych innych klasach. Metody, które muszą używać `removeWhiteSpace` mogą używać `$this->removeWhiteSpace` zamiast tworzenia instancji obiektu `dbTables`. Dba o to własna metoda `removeWhiteSpace` klasy. Jestem jednak nowy w OOP, więc zastanawiam się, czy to dobra praktyka, czy zła. Mam też nadzieję, że zadaję to pytanie we właściwym miejscu. Jestem prawie pewien, że to nie jest pytanie StackOverflow.


title: Czy są jakieś korzyści z usuwania nieużywanych plików skryptów ze strony internetowej/projektu?

text: Witryny/projekty VS Web są ładowane z kilkoma plikami .js, z których większość nie używam (np. Używam CDN dla nowszych wersji jQuery i jQuery-UI). Wiem, że usunięcie tych niepotrzebnych plików .js z moich projektów jest bezpieczne, ale czy są z tego jakieś korzyści? Czy zostaną wdrożone na serwerze sieciowym, jeśli zostaną pozostawione same sobie?


title: Jaki jest najbardziej produktywny sposób rozpoczęcia i zarządzania rozwojem dużej aplikacji internetowej?

text: Szukałem w górę i w dół, aby znaleźć dobrą odpowiedź na to pytanie i z tego, co wiem, jest to tylko połączenie standardowych narzędzi organizacyjnych (utrzymywanie rutyny, dobra struktura folderów, obszerna dokumentacja) i upewnienie się, że myślisz o każdym kroku zanim ruszysz dalej. Planuję wkrótce uruchomić nową aplikację internetową i wydaje mi się, że ilość wyborów, których muszę dokonać, jest niemal przytłaczająca. Chociaż zwykle tworzę aplikacje przy użyciu Django, ostatnio rozważałem alternatywy. Do szału doprowadzają mnie również takie rzeczy, jak wybór hosta, system kontroli wersji, który powinienem użyć i który bit powinienem zacząć od pierwszego. Zastanawiałem się, czy ktoś ma dla mnie jakąś profesjonalną radę, jak mogę lepiej zarządzać tym, co robię, aby ten projekt był gotowy na właściwą stopę.


title: Jakie są kluczowe punkty, które należy ocenić, aby wybrać dobrą bramkę SMS?

text: Planujemy dodać opcję „Konto weryfikacji SMS” dla naszych klientów. (Więc wyślemy tylko SMS-y. Nie potrzebujemy krótkiego kodu.) Znaleźliśmy kilka firm, które oferują bramki SMS przez REST API (używamy PHP). Ponieważ jesteśmy zupełnie nowi w świecie SMS-ów, zastanawiamy się: Na jakie kluczowe punkty należy zwrócić uwagę/ocenić, aby wybrać dobrą bramkę SMS?


title: Czy użytkownik może zmienić licencję LGPL jako GPL lub GPL jako AGPL?

text: LGPL (dla ułatwienia przyjmiemy wersję 3 dla wszystkich w dyskusji) jest mniej restrykcyjną wersją GPL, podobnie AGPL jest bardziej restrykcyjną wersją GPL, ale czy można używać kodu LGPL, wprowadzać dodatki (lub nie rób tego) i ponownie licencjonować je jako GPL lub AGPL; czy kod GPL może być modyfikowany i relicencjonowany jako AGPL?


title: Myśląc o datach i godzinach - czy północ jest dziś w przeszłości czy w przyszłości?

text: To zawsze jest dla mnie zagadka – i zdaję sobie sprawę, że nie jest to kwestia ściśle związana z programowaniem czy tworzeniem oprogramowania, ale wydaje się, że jest to rozsądna powszechna w naszej dziedzinie. Na przykład, gdybym miał ustawić datę wygaśnięcia jako 2011-04-08 00:00:00 - a mój aktualny czas lokalny to 10:45 już 8-go - czy już wygasłem? A może zostało mi jeszcze pół dnia? Czy istnieje uniwersalny standard, do którego końca dnia „należy” północ? A może powinienem wziąć kartkę z brytyjskiego wojska i powiedzieć, że dzień kończy się o 23:59:59 i zaczyna się o 00:00:01 i że nie ma północy?


title: Czy można uzyskać solidne podstawy programistyczne bez pójścia na studia/uniwersytety?

text: Po pierwsze, przeszukałem już witrynę i przeczytałem wszystkie poprzednie tematy „samouk kontra uczelnia”. Większość odpowiedzi broniła, że pójście na studia jest najlepszym wyborem, z dwóch głównych powodów: 1. Studia dają ci papier, który jest niezbędny do zdobycia pracy, zwłaszcza w trudnych ekonomicznie czasach. 2. Chodzenie na studia daje solidną bazę programistyczną, ucząc Cię zasad, które będą niezbędne bez względu na język/ścieżkę, którą obierasz. Tu pojawia się moje pytanie: w ogóle nie martwię się o powód 1, ponieważ mam już własną firmę (tworzę strony internetowe / zajmuję się marketingiem afiliacyjnym) i stabilną sytuację finansową, więc jestem prawie pewien, że nie będę musiał się rozglądać dla pracy. Martwię się jednak o powód 2. Oznacza to, że chcę mieć pewność, że będę miał tak solidne podstawy programowania, jak wszyscy inni, i zastanawiam się, czy jest to możliwe w przypadku samodzielnego uczenia się. Załóżmy, że poświęcam swój czas na naukę podstaw, takich jak matematyka dyskretna, projektowanie algorytmów, logika programowania, architektura komputerowa, montaż, programowanie w języku C, bazy danych i struktury danych - głównie przy użyciu książek, zasobów internetowych i dużej ilości kodowania. Powiedzmy, że poświęcam 1-2 lata na zapoznawanie się z tymi podstawami. Czy uważasz, że moje podstawy byłyby solidne, czy nadal brakowało mi w porównaniu z kimś, kto poszedł na studia?


title: Przydatne języki programowania do programowania sprzętu

text: Zastanawiam się, czy w następnym semestrze wziąć udział w kursie „Architektura systemów cyfrowych” i wiem, że musimy programować mikrokontrolery w kilku językach programowania, takich jak C, C++, verilog i VHDL. Chcę być przygotowany do wzięcia udziału w tym kursie, ale muszę wiedzieć, czy muszę głębiej uczyć się tych języków. W tej chwili wziąłem udział w jednym kursie podstawowej Javy zajmującym się podstawowymi metodami, typami danych, strukturami pętli, wektorami, macierzami i programowaniem GUI. Czy muszę głębiej studiować Javę, a następnie korzystać z C i C++? Poza tym znam podstawowe verilog i VHDL.


title: Wiosenne zamówienie doradztwa AOP

text: W Spring AOP mogę dodać aspekt w następujących lokalizacjach * przed wykonaniem metody (przy użyciu MethodBeforeAdvice) * po wykonaniu metody (przy użyciu AfterReturningAdvice) * wokół metody (zarówno przed jak i po wykonaniu metody) (przy użyciu MethodInterceptor) Jeśli I masz wszystkie trzy rodzaje porad, czy kolejność wykonania jest zawsze następująca? * Wokół (przed częścią) * Przed * Sama metoda * Po * Wokół (po części)


title: Jak działają poprawki i aktualizacje oprogramowania?

text: A więc, jak dokładnie działają poprawki oprogramowania. Jeśli istnieje pewien błąd w kodzie źródłowym programu, w jaki sposób ten kod źródłowy zmienia się po zainstalowaniu poprawki? Jak po zainstalowaniu łatki 'automatycznie' odbudowuje się program?


title: Programowanie par i ISO 27001

text: Pracuję w zespole programistycznym eXtreme i zajmuję się programowaniem w parach od ponad 7 lat w środowisku Windows. Kiedy zaczęliśmy to robić, ktoś logował się przy użyciu swoich poświadczeń systemu Windows, a zatem cały dostęp do zasobów domeny, a dokładniej kontrola wersji, byłby odpowiedzialny przed tym użytkownikiem systemu Windows. W końcu rozwinęliśmy się, aby mieć konta parowania okien dla określonych stacji parujących (np. PairA, pairB, PairC itp.). Wszyscy twórcy znają hasła do tych kont. Odpowiedzialność za zatwierdzenia (check-in) uzyskuje się poprzez umieszczenie inicjałów programisty w komentarzu podczas zatwierdzania. Do tej pory działało to dla nas dobrze, ale moja firma przechodzi obecnie audyt ISO 27001, który został oznaczony przez audytora jako ryzyko. Mam kilka możliwych rozwiązań, takich jak utworzenie konta parowania dla każdej kombinacji par, ale naprawdę chciałbym wiedzieć, czy ktoś inny napotkał ten problem i jak go rozwiązał? Jakie rozwiązanie było do przyjęcia przez audytorów?


title: Jak w praktyce zarządzać plikami licencyjnymi przy łączeniu kodu na licencji GPL i BSD?

text: Piszę kod, który korzysta z jednej biblioteki z licencją GPL (nie LGPL) i jednej z licencją 3-klauzulową BSD. Ponieważ linkuję do biblioteki na licencji GPL, mój kod również będzie musiał być na licencji GPL. Jak w praktyce mam postępować z oryginalnym plikiem LICENSE.txt z biblioteki BSD? (A) Czy mogę rozpowszechniać projekt tak, aby główny kod źródłowy był na licencji GPL, a następnie jakiś podkatalog był na licencji BSD? (B) Gdybym miał nie tylko łączyć się z bibliotekami, ale używać i łączyć kod BSD i GPL w bardziej zaangażowany sposób, co wtedy zrobić z plikiem LICENSE.txt? Tekst BSD z trzema klauzulami mówi: „Ponowne dystrybucje kodu źródłowego muszą zawierać powyższą informację o prawach autorskich, tę listę warunków i następujące wyłączenie odpowiedzialności”. więc najwyraźniej powinienem gdzieś zachować notę o prawach autorskich i tę listę warunków. Ale wtedy będę musiał też gdzieś umieścić plik txt z licencją GPL. Co więcej, najwyraźniej nie muszę zachowywać części tekstu licencji BSD „Redystrybucja i używanie w formie źródłowej i binarnej, z modyfikacją lub bez, jest dozwolone pod warunkiem spełnienia następujących warunków:” części tekstu licencji BSD, ponieważ zachowaj pozostałe części. Jak więc iw jakich plikach tekstowych powinienem w praktyce uporządkować tekst licencji GPL oraz części licencji BSD i prawa autorskie, które zachowam? EDYCJA: Więc w przypadku B, wziąłbym 3-klauzulowy kod na licencji BSD i redystrybuował go na GPL, co jest dozwolone, ponieważ 3-klauzulowa licencja BSD jest (jednostronna) kompatybilna z GPL. Pytam tylko, jak w praktyce radzić sobie z tekstami licencyjnymi i plikami tekstowymi.


title: Używanie typów surowych w sygnaturach metod Java

text: Generalnie staram się unikać używania surowych typów w sygnaturze metod w rozwijanych przeze mnie bibliotekach. Jednak ostatnio zaczynam łagodzić tę (samoprzyjętą) zasadę i zaczynam pisać surowe typy częściej niż wcześniej. Na przykład, zakładając metodę otrzymującą jako parametr _dowolną_ listę (tzn. typ jej członków nie jest istotny), kusiło mnie wcześniej, aby zadeklarować to jako: void myMethod(List<?> list) {...} Ale teraz Zaczynam pisać coraz więcej: void myMethod(List list) {...} Ponieważ jest krótsza. Moje konkretne pytanie brzmi: Czy w scenariuszu, w którym parametry typu nie są ważne, używanie typów surowych w parametrach metody jest uważane za dobrą praktykę? Jeśli nie, to dlaczego nie? Jedyny problem, jaki widzę, to skazanie się na wieczne ostrzeżenie w używanym przeze mnie IDE (choć prawdopodobnie można to gdzieś wyłączyć), ale chciałbym mieć pewność, że nie brakuje mi niczego innego. **Aktualizacja:** W pełni przekonałem się, że powinienem wszędzie używać generyków, po przeczytaniu poniższego akapitu: > Odradza się używanie typów surowych. Specyfikacja języka Java stwierdza nawet >, że możliwe jest, że przyszłe wersje języka programowania Java > zabronią używania typów surowych.


title: Czy należy przetłumaczyć EULA?

text: Mam aplikację, która będzie dostępna w 4 językach: francuskim, niemieckim, duńskim i angielskim. Cały tekst w aplikacji zostanie przetłumaczony, ale czy należy również przetłumaczyć EULA? Jaki jest powszechny sposób radzenia sobie z tym? Prawnik zaakceptował angielską wersję umowy EULA i zakładam, że wszystkie przetłumaczone wersje również powinny zostać zaakceptowane. Czy można po prostu korzystać z angielskiej umowy EULA?


title: Jak wybrać odpowiedni certyfikat MCPD?

text: Od lat rozwijam się na wielu platformach, w tym Java, PHP, Flash/Flex, ASP.NET (w tym MVC), Ruby on Rails i wielu innych. Zdecydowałem (z różnych powodów), że nadszedł czas, aby wybrać jedną technologię do głębokiego uczenia się, zamiast uczyć się wielu technologii szeroko; i wybrałem .NET. Zdecydowałem, że jednym z kluczowych posunięć będzie zdobycie kilku certyfikatów Microsoftu - choćby po to, by pokazać, że poważnie podchodzę do tej technologii jako wybranej przeze mnie technologii. Ale **jak wybrać, który certyfikat wziąć?** Jest ich kilka z podobnie brzmiącymi opisami. Chociaż prawdopodobnie wybiorę między **Windowsową i internetową wersją MCPD.** Jeśli to pomoże, kieruję się na stanowiska w stylu kierownika zespołu i kierownika projektu. **Edytuj:** Powodem, dla którego chcę uzyskać certyfikat, jest to, że moje CV brzmi następująco: * 3 lata JEE * 3 lata C++ * 2,5 roku Flash/Flex * 2 lata .NET * 1 rok Ruby on Rails * 1 rok PHP Kiedy Mówię, że mam „dziesięć lat doświadczenia” i staram się o pracę, która mówi „5+ lat doświadczenia w .NET”, wiem, że mogę się uczyć i wykonywać pracę. Ale nie mam tych pięciu lat; Przekazałem je Flexowi, C++ i JEE. Myślę, że biorąc pod uwagę moją konkretną sytuację, certyfikacja to (mały) krok we właściwym kierunku.


title: Korzystanie z kontroli stron trzecich/open source

text: Zwykle niechętnie korzystam z kontroli stron trzecich lub open source podczas kodowania w iPhone Objective-C z następujących powodów. Kontrole open source są opracowywane w sposób przyrostowy. Więc po zintegrowaniu muszę dalej szukać aktualizacji i będę musiał zaktualizować swój kod. Zwiększy wysiłek. Kontrole typu open source mogą prawdopodobnie powodować wycieki pamięci, a tym samym sprawić, że aplikacja będzie niekompetentna pod względem pamięci. Biblioteki innych firm są trudne w zarządzaniu, a także pozostają w konflikcie z twoimi klasami. Proszę o poprawienie mnie w tych punktach, abym mógł czuć się komfortowo z kodami open source.


title: Czy Metodologia SCRUM jest dobrą techniką, którą można zastosować w kluczowym projekcie terminowym?

text: Właśnie dołączam do firmy i pracują w (tak zwanej) metodologii SCRUM, mają bardzo napięty termin, a rozwój projektu wydaje się nie mieć żadnego kierunku lub tak nie wygląda (To jest to, czego chcemy). rozwijanie modułu, który nie ma Bazy Danych, nie mam też żadnych informacji, które trzeba z nim powiązać, ludzi, którzy są z nim powiązani i pomieszali się we własnej pracy, ponieważ nie jestem w stanie uzyskać w tym wsparcia. Czy ktoś mógłby mi teraz zasugerować, że jest to dobry sposób na kontynuowanie tej metodologii, która nie zawiera żadnej tabeli DB do opracowania modułu? Proszę zasugerować coś... Dzięki


title: Jak sformalizować prośby o dodanie funkcji

text: Jestem nowicjuszem w tworzeniu oprogramowania i obsługiwałem żądania funkcji dla wewnętrznej aplikacji internetowej, którą zbudowałem. Czasami żądania funkcji są proste i wymagają minimalnej logiki biznesowej do wdrożenia, więc rozmawiam z daną osobą przez chwilę, zapisuję jej wymagania i zabieram się do pracy. Jednak zaczynam pracę nad funkcją X, w której X ma ciemne zakamarki logiki biznesowej, a scenariusze przypadków specjalnych ciągle się pojawiają, ponieważ nie zadałem właściwych pytań i/lub osoby, z którą rozmawiam nie myślałem o tym wspominać. Jestem więc ciekaw, jak profesjonaliści radzą sobie z tym procesem? Niektóre rzeczy, o których myślałem, to: 1. Wymagaj, aby prośby o funkcje były zapisywane z odpowiednimi wymaganiami. 2. Zrozum ich pracę na tyle dobrze, abym mógł wykonywać swoją. Przykładem ilustrującym podobny problem jest implementacja przepisów rządowych w kodzie. Zbadałem przepisy, stworzyłem schemat blokowy i stamtąd wyszedłem. Mógłbym zaoszczędzić kilka dni, gdyby ktoś dobrze obeznany z tymi przepisami spisał wymagania i przekazał mi je. Robię to samo dla funkcji X, z wyjątkiem tego, że nic nie jest zapisywane, więc nie jestem w stanie wydedukować ich logiki biznesowej bez przechodzenia przez proces krok po kroku przez ich pracę. Nawet to czasami zawodzi, bo tego dnia nie było jakiegoś szczególnego przypadku. Korzystając z powyższego przykładu, czy to programista jest odpowiedzialny za zbadanie tego, czy coś, co powinno być dostarczone? Jakieś sugestie, jak usprawnić ten proces?


title: SQL: pusty ciąg vs wartość NULL

text: Wiem, że ten temat jest nieco kontrowersyjny i w Internecie krąży wiele różnych artykułów/opinii. Niestety większość z nich zakłada, że dana osoba nie wie, jaka jest różnica między NULL a pustym ciągiem. Opowiadają więc historie o zaskakujących wynikach z łączeniami/agregatami i generalnie prowadzą nieco bardziej zaawansowane lekcje SQL. Robiąc to, zupełnie mija się z celem i dlatego są dla mnie bezużyteczne. Miejmy więc nadzieję, że to pytanie i wszystkie odpowiedzi posuną temat nieco do przodu. Załóżmy, że mam tabelę z danymi osobowymi (imię i nazwisko, urodzenie itp.), w której jedną z kolumn jest adres e-mail typu varchar. Zakładamy, że z jakiegoś powodu niektórzy ludzie mogą nie chcieć podawać adresu e-mail. Przy wstawianiu takich danych (bez e-maila) do tabeli mamy do wyboru dwie możliwości: ustaw komórkę na NULL lub ustaw ją na pusty ciąg (''). Załóżmy, że jestem świadomy wszystkich technicznych implikacji wyboru jednego rozwiązania nad drugim i potrafię stworzyć poprawne zapytania SQL dla obu scenariuszy. Problem w tym, że nawet jeśli obie wartości różnią się na poziomie technicznym, to na poziomie logicznym są dokładnie takie same. Po spojrzeniu na NULL i '' doszedłem do jednego wniosku: nie znam adresu e-mail faceta. Również bez względu na to, jak bardzo się starałem, nie byłem w stanie wysłać e-maila przy użyciu ani wartości NULL, ani pustego ciągu, więc najwyraźniej większość serwerów SMTP zgadza się z moją logiką. Więc mam tendencję do używania NULL tam, gdzie nie znam wartości i uważam pusty ciąg za złą rzecz. Po kilku intensywnych dyskusjach z kolegami zadałem sobie dwa pytania: 1. czy mam rację zakładając, że użycie pustego ciągu dla nieznanej wartości powoduje, że baza danych „kłamie” na temat faktów? Mówiąc dokładniej: korzystając z wyobrażenia SQL o tym, co jest wartością, a co nie, mogę dojść do wniosku: mamy adres e-mail, po prostu dowiedziawszy się, że nie jest on pusty. Ale później, próbując wysłać e-mail, dochodzę do sprzecznego wniosku: nie, nie mamy adresu e-mail, że baza danych @!#$ musiała kłamać! 2. Czy istnieje logiczny scenariusz, w którym pusty ciąg '' mógłby być tak dobrym nośnikiem ważnych informacji (poza wartością i brakiem wartości), którego przechowywanie w inny sposób (np. dodatkowa kolumna) byłoby kłopotliwe/nieefektywne? Widziałem wiele postów twierdzących, że czasami dobrze jest użyć pustego ciągu wraz z rzeczywistymi wartościami i wartościami NULL, ale do tej pory nie widziałem scenariusza, który byłby logiczny (pod względem projektowania SQL/DB). PS Niektórzy pokusią się o odpowiedź, że to tylko kwestia gustu. Nie zgadzam się. Dla mnie jest to decyzja projektowa z ważnymi konsekwencjami. Więc chciałbym zobaczyć odpowiedzi, w których opinia na ten temat jest poparta pewnymi logicznymi i/lub technicznymi przyczynami.


title: Jak zorganizować metody sprawdzające dostępność nazwy użytkownika/e-maila w REST API?

text: W swoim projekcie rozwijam RESTful API, ale nie mam w tym żadnego doświadczenia. Aby wypełnić te luki, obejrzałem kilka filmów, głównie z Apigee, które są świetne. Jedna sytuacja wywołuje wiele dyskusji na temat mojego projektu i mam nadzieję, że pomożesz mi to wyjaśnić. Klient korzystający z API jest w stanie utworzyć użytkownika, umieszczając go na moim /Users url, ale ma pewne wymagania, takie jak: format nazwy, dostępność nazwy użytkownika, dostępność poczty e-mail, prawidłowy region i wiele innych. Mogę łatwo sprawdzić poprawność formatu nazwy w mojej aplikacji klienckiej, co byłoby łatwe. Problem dotyczy dostępności (głównie jeśli e-mail i nazwa użytkownika są dostępne dla użytkownika lub są już zajęte). W moim zespole mamy dwie różne linie myślenia: pierwsza złamałaby każdą weryfikację w innym adresie URL, coś w stylu /Users/EmailAvailable i /Users/UsernameAvailable lub /Available/Email and /Available/Username Twierdzą, że to sprawiłoby interfejs czystszy (bardziej intuicyjny) i zachowałby spójność, ponieważ jedna metoda ma tylko jedną odpowiedzialność. Drugą linią myślenia jest posiadanie tylko jednego adresu URL /User/Verify, który zweryfikuje nazwę użytkownika, adres e-mail lub oba, w zależności od otrzymanego JSON. Twierdzą, że wymagałoby to tylko jednej podróży do serwera i że spójność nie jest problemem, ponieważ ponieważ adresy URL niekoniecznie są mapowane na metody, mogą podzielić wywołania na metody, które wykonują jedną rzecz każda. Twierdzą również, że interfejs nie powinien dbać o spójność Moje pytania: 1- Czy te argumenty o spójności z drugiej linii są słuszne? 2- Jak byś zrobił? (Albo jeden z tych lub innych, o których wiesz) dzięki!


title: Jak przekonać członków drużyny do korzystania z TDD

text: Jestem jedyną osobą w moim zespole, która korzysta z TDD. Jak zmusić ich, aby z niego korzystali? Denerwuje mnie, że jak ciągnę, czyjś kod zepsuje moje testy i to ja muszę je naprawić. Czy użycie github, fork i pull request rozwiąże ten problem, tak że muszą przejść test, zanim pull zostanie zaakceptowany? Nie jestem kierownikiem projektu i nie mogę jej przekonać do korzystania z tego.


title: Dowiedz się zasobów Java (dla programistów noobów), które nie używają IDE

text: > **Możliwy duplikat:** > Najlepsza książka o Javie, jaką do tej pory przeczytałeś. Nauczyłem się programować w Ruby, ale mam problemy ze zrozumieniem pojęć OO. Powiedziano mi, że istnieje wiele przewodników/książek, które uczą programowania obiektowego w języku Java. Słyszałem, że Java jest dobrym językiem do nauki OO z wielu powodów... haha, z powodów, których nie znam. W każdym razie próbowałem użyć IDE (Eclipse) i nie obchodzi mnie to zbytnio. Czy są jakieś dobre przewodniki/książki/filmy, które skupiają się na nauczaniu koncepcji obiektowych przy użyciu Javy, które nie wykorzystują do tego IDE, takiego jak Eclipse?


title: Rozpoczęcie kodowania za pomocą java (brak doświadczenia w kodowaniu)

text: > **Możliwe powielenie:** > Najlepsza książka o Javie, jaką do tej pory przeczytałeś Chcę się nauczyć javy, ale nie mam żadnego doświadczenia w kodowaniu. jaka jest najlepsza strona internetowa, książka lub cokolwiek, co jest najlepsze w nauczaniu javy?


title: Jaka książka jest najlepsza do przygotowania się do rozmowy kwalifikacyjnej w języku Java?

text: > **Możliwy duplikat:** > Jak przygotować się do programowania pytań do rozmowy kwalifikacyjnej? Znalazłem starsze pytania, ale zastanawiałem się, czy w ciągu ostatnich dwóch lat ukazały się nowsze, lepsze książki/przewodniki. Prowadzę rozmowę kwalifikacyjną na stanowisko analityka technologicznego w finansach i spodziewam się, że będę mieć wiele pytań technicznych dotyczących czasu pracy/struktur danych itp. Jest to stanowisko na poziomie podstawowym, więc nie miałem wcześniejszego doświadczenia w programowaniu w pracy, tylko doświadczenie poprzez moje zajęcia.


title: Czym jest dobra metodologia planowanego wydania/zamrożenia/bety?

text: Od kilku miesięcy pracuję nad koszmarnym projektem. Produkt jest małą aplikacją/witryną Ruby on Rails do użytku wewnętrznego przez niewielką grupę osób. Zbliżam się do mety i chciałbym, aby właściwa wersja beta przebiegła gładko. Wciąż mam kilka drobnych błędów, które w niewielkim stopniu wpływają na funkcjonalność i nie psują kompilacji. To moja pierwsza praca i pierwszy raz, kiedy wprowadzam produkt na rynek. Jestem ciekaw, jakie są metodologie ludzi dla płynnego przejścia aplikacji ze środowiska programistycznego do środowiska produkcyjnego na żywo.


title: Jaka jest różnica między księgą a listą transakcji?

text: odp: koncepcje algorytmu i struktury danych Kiedy księgowi mówią o księgach rachunkowych, mają na myśli coś bardzo konkretnego. Jako programista jestem bardzo przyzwyczajony do myślenia o tabelach informacji, ale wyraźnie są określone rzeczy, które sprawiają, że księga rachunkowa jest księgą rachunkową. Tak więc, mając prostą listę transakcji (data, wpłaty, wypłaty, notatki), co należy dodać/zmienić, aby ta lista stała się czymś, co księgowi nazwaliby księgą rachunkową? np. względy formatowania, czy musi być niezmienne, czy musi odzwierciedlać coś, co dzieje się gdzieś na prawdziwym koncie bankowym, czy musi mieć jakiś „klucz obcy” opisujący, do którego podmiotu odnosi się każda transakcja…


title: TDD i pełne pokrycie testami tam, gdzie potrzebne są wykładnicze przypadki testowe

text: Pracuję nad porównywarką list, która pomaga sortować nieuporządkowaną listę wyników wyszukiwania według bardzo specyficznych wymagań naszego klienta. Wymagania wymagają algorytmu rangowanej istotności z następującymi regułami w kolejności ważności: 1. Dokładne dopasowanie do nazwy 2. Wszystkie słowa zapytania w nazwie lub synonimie wyniku 3. Niektóre słowa zapytania w nazwie lub synonimie wynik (% malejąco) 4. Wszystkie słowa zapytania w opisie 5. Niektóre słowa zapytania w opisie (% malejąco) 6. Data ostatniej modyfikacji malejąco Naturalny wybór projektu dla tego komparatora wydawał się być punktowany ranking oparty na potędze 2. Suma mniej ważnych reguł nigdy nie może być większa niż dodatnie dopasowanie na regule o wyższym znaczeniu. Osiąga się to dzięki następującej punktacji: 1. 32 2. 16 3. 8 (Wynik drugiego dogrywki na podstawie malejącego procentu) 4. 4 5. 2 (Wynik drugiego dogrywki na podstawie malejącego procentu) 6. 1 Duch TDD Postanowiłem zacząć od testów jednostkowych. Posiadanie przypadku testowego dla każdego unikalnego scenariusza byłoby co najmniej 63 unikalnymi przypadkami testowymi bez uwzględniania dodatkowych przypadków testowych dla drugorzędnej logiki wyłącznika rozstrzygającego na zasadach 3 i 5. Wydaje się to narzucające się. Rzeczywiste testy będą jednak mniej. Na podstawie samych reguł niektóre reguły zapewniają, że niższe reguły zawsze będą prawdziwe (np. gdy „Wszystkie słowa wyszukiwanego hasła pojawiają się w opisie”, to reguła „Niektóre słowa wyszukiwanego hasła pojawiają się w opisie” zawsze będzie prawdziwa). Czy jednak warto włożyć wysiłek w napisanie każdego z tych przypadków testowych? Czy jest to poziom testowania, który jest zwykle wymagany, gdy mówimy o 100% pokryciu testami w TDD? Jeśli nie, to jaka byłaby akceptowalna alternatywna strategia testowania?


title: Wytyczne dotyczące procesu optymalizacji HTML/CSS/JS

text: Obecnie posiadamy serwer deweloperski, na którym piszemy kod HTML/CSS/JS. Nie optymalizujemy naszego kodu za pomocą kompresorów/minifikatorów. Dlatego nasz proces wdrażania od rozwoju do produkcji polega po prostu na skopiowaniu plików z serwera deweloperskiego na serwer produkcyjny. Ale teraz planujemy użyć kompresorów/minyfikatorów. Jesteśmy zdezorientowani co do procesu, który powinniśmy podążać. Obecnie używamy jednego pliku JS o nazwie common.js i jednego pliku CSS o nazwie common.css. Również teraz planujemy używać wielu plików CSS w Dev, takich jak reset.css, common.css itp., a podczas wdrażania ich do produkcji połączymy je w jeden plik CSS. Najprostszy proces, jaki przychodzi mi do głowy, to: 1. Zrób dokładną kopię plików deweloperskich na serwerze deweloperskim. Użyj kopii w dalszych krokach. 2. Połącz wszystkie pliki CSS w jeden plik CSS, powiedz common.css. To samo z plikami JS. Usuń inne pliki, na przykład reset.css. 3. Skompresuj/zminifikuj common.css i common.js do common.min.css i common.min.js. Usuń common.css i common.js. 4. We wszystkich plikach HTML usuń wszystkie znaczniki linków i znaczniki skryptów z wyjątkiem common.css i common.js 5. We wszystkich plikach HTML zmodyfikuj src skryptu i link href z common.js na common.min.js i common. css do common.min.css. 6. Skopiuj wszystkie pliki na serwer produkcyjny. 7. Usuń kopię To wygląda na zbyt nudne dla nas. Co może być lepszym procesem? Czy jest jakieś narzędzie, które może przeprowadzić optymalizację (powyżej kroków) automatycznie. Wygląda na to, że nie byłoby trudno napisać skrypt, który wykona wszystkie powyższe kroki. Ale wolałbym skorzystać z istniejącego narzędzia, zamiast samodzielnie je rozwijać. Chciałbym dołożyć starań tylko wtedy, gdy takie narzędzie nie istnieje. Kiedy generalnie przeprowadza się testy? Myślę, że powinno to zostać wykonane na zoptymalizowanych plikach (na wypadek, gdyby kompresory miały jakiś błąd). Ale wtedy proces stałby się bardziej żmudny, ponieważ powyższy proces musiałby być powtarzany po każdym cyklu Test-Bugfix.


title: Object Constraint Language (OCL) dla stosu w pakiecie java.util

text: Zbliża się egzamin i przeglądam poprzednie prace, aby dowiedzieć się, czego się spodziewać. Trochę utknąłem na następnym i byłbym naprawdę wdzięczny, gdyby ktoś mógł podać przykładowe odpowiedzi. Zapisz warunki wstępne i warunki końcowe w OCL dla każdej z następujących operacji (zawartych w klasie Stack w pakiecie java.util): * (1) Boolean empty() — sprawdza, czy ten stos jest pusty * (2) E peek() — Patrzy na obiekt na szczycie tego stosu bez usuwania ze stosu * (3) E pop() — Usuwa obiekt ze szczytu tego stosu i zwraca ten obiekt jako wartość tej operacji * (4) E push( Element E) — umieszcza element na szczycie tego stosu. Tutaj E oznacza typ elementów w stosie. Moje próby są następujące: Boolean empty() pre: none post: self -> IsEmpty() = true //czy to powinien być wynik -> IsEmpty() = true ponieważ zwraca wartość logiczną? E peek() pre: self -> NotEmpty() = true post: wynik = ??? // Na tym etapie tracę nadzieję. Nie wiem też, czy powinienem odwoływać się do elementów na stosie. Na przykład: self.elements -> IsEmpty() = true Jeśli ktoś mógłby mi pomóc, bardzo bym to docenił. **EDYTUJ** Przyjaciel ma następujące pomysły: context Stack empty() pre: self.data.size = 0 context Stack peek() pre: self.data.AsSequence.first context Stack pop() pre: !self. data.isEmpty post: self.data.AsSequence.first.remove (nie jestem pewien co do tego) post: self.data.count = @pre:data - 1 kontekst Stack push(E Item) post: self.data.asSquence. prepend(E.asSequence) post: self.data.size = @pre.data.size + 1


title: Dlaczego CS nigdy nie jest tematem rozmów laika?

text: Oczywiście każdy zawód ma swoje techniczne aspekty. Jeśli jesteś lekarzem medycyny, lepiej znasz anatomię ludzkiego ciała, a jeśli jesteś astronomem, lepiej znasz swój rachunek. Jednak nie musisz znać tych bardziej zaawansowanych tematów, aby wiedzieć, że palenie może wywołać raka płuc z powodu czynników rakotwórczych lub księżyc krąży wokół Ziemi z powodu grawitacji (dziękuję Discovery Channel). Istnieje powszechna wiedza (przynajmniej w krajach bardziej rozwiniętych) na temat tych bardziej zaawansowanych tematów. Powiedziawszy to, **dlaczego takie rzeczy jak rekurencyjne analizowanie zniżania, BNF lub maszyny Turinga prawie nigdy nie są wspominane poza zajęciami na poziomie 3000 lub 4000 na uniwersytecie lub między kolegami?** Nawet w moich czasach przed collegem w pogoni za wiedzą o tym, jak działają komputery, te bardzo ważne tematy (IMHO) nigdy nie wychodzą na światło dzienne. Wiele różnych źródeł i witryn zawiera pytanie „Co to jest procesor?” lub „Co to jest pamięć RAM?” lub „Co to jest system operacyjny?”. Możesz mieć szczęście i odkryć coś o językach programowania i ich roli w tworzeniu aplikacji, ale nic o narzędziach do tworzenia samego języka. Aby rozszerzyć ten pomysł, Dennis Ritchie zmarł wkrótce po Steve'ie Jobsie, jednak Dennis Ritchie otrzymał bardzo mało prasy w porównaniu ze Stevem Jobsem. A więc sedno mojego pytania: ** Czy opinii publicznej nie zależy na słuchaniu o tematach informatyki, które sprawiają, że technologia w ich życiu działa, czy też społeczność informatyczna nie nadaje się do ogółu społeczeństwa, aby wypełnić lukę w wiedzy ?** Czy mylę się, myśląc, że opinia publiczna ma takie samo pragnienie wiedzy o tym, jak działają rzeczy, jak ja? Prosimy o dokładne rozważenie pytania przed udzieleniem odpowiedzi lub zakończeniem głosowania.


title: Dlaczego w Scrum nie można połączyć ról Product Owner i ScrumMaster?

text: W bardziej tradycyjnych projektach, nad którymi pracowałem, kierownik projektu (a przy większych projektach może być współpracownik/zastępca/asystent kierowników projektów, jeśli jedna osoba jest niedostępna) jest osobą odpowiedzialną za komunikację z klientem, odbiór projektu aktualizacje kondycji i statusu, ustalanie harmonogramów i budżetów, zarządzanie procesem, upewnianie się, że zespół ma to, czego potrzebuje do wykonania zadań i tak dalej. W Scrumie obowiązki te są jednak podzielone między Właściciela Produktu i ScrumMastera. Właściciel produktu jest głosem klienta. Kontaktują się bezpośrednio z klientem, tworzą historie użytkowników, organizują i ustalają priorytety zaległości produktowych oraz inne problemy, z którymi borykają się użytkownicy/klienci. ScrumMaster obsługuje proces, nadzorując spotkania (w tym szacowanie i planowanie), usuwając przeszkody i monitorując ogólny stan projektu, dokonując korekt w razie potrzeby. Czytałem w wielu źródłach, w tym w Wikipedii, że role ScrumMastera i Product Ownera powinny pełnić dwie różne osoby. Nie tylko czytałem o tym, ale pracowałem nad udanymi projektami w stylu „tradycyjnym”, w których działaniami obojga zajmowała się jedna osoba. W rzeczywistości bardziej sensowne jest, aby jedna do trzech osób była odpowiedzialna za obsługę projektu (w tym zarządzanie zasobami ludzkimi/personelem) i zadania na poziomie procesu, ponieważ często idą one ręka w rękę. Zmiany procesu mają wpływ na planowanie, budżetowanie, jakość i inne cele na poziomie projektu, a zmiany projektu mają wpływ na proces. Dlaczego Scrum wzywa do wydzielenia tych działań na dwie role? Jakie to naprawdę daje korzyści? Czy ktoś brał udział w udanym projekcie Scrum, w którym Product Owner i ScrumMaster byli tą samą osobą?


title: Gdzie powinienem szukać, aby dowiedzieć się, która technologia jest używana w aplikacji internetowej?

text: Powiedzmy, że mam jedną lub więcej aplikacji internetowych, które uważam za interesujące, a ponieważ chcę zrobić coś podobnego, chciałbym wiedzieć, na jakiej technologii są oparte (język programowania, baza danych, serwer WWW, framework, ...). Czy jest jakaś strona, na której takie informacje są scentralizowane? Jeśli nie, gdzie powinienem szukać tych informacji?


title: Delegowanie a interfejsy — dostępne są dodatkowe wyjaśnienia?

text: Po przeczytaniu artykułu - Kiedy używać delegatów zamiast interfejsów (Przewodnik programowania C#), potrzebuję pomocy w zrozumieniu poniższych punktów, które okazały się nie tak jasne (dla mnie). Dostępne są jakieś przykłady lub szczegółowe wyjaśnienia? **Użyj delegata, gdy:** * Używany jest wzorzec projektowy zdarzenia. * Pożądane jest hermetyzacja metody statycznej. * Pożądana jest łatwa kompozycja. * Klasa może wymagać więcej niż jednej implementacji metody. **Użyj interfejsu, gdy:** * Istnieje grupa powiązanych metod, które można wywołać. * Klasa potrzebuje tylko jednej implementacji metody. _**Moje pytania to,_** 1. Co one oznaczają przez wzorzec projektowy WKKW? 2. Jak komponowanie okazuje się łatwe, jeśli korzysta się z delegata? 3. Jeśli istnieje grupa powiązanych metod, które można wywołać, użyj interfejsu-Jakie ma to korzyści? 4. jeśli klasa potrzebuje tylko jednej implementacji metody, użyj interfejsu – jak jest to uzasadnione z punktu widzenia korzyści?


title: Zadanie na rozmowę kwalifikacyjną: produkcja, wolne od błędów czy dzwonki i gwizdki?

text: W weekend dostałem mały projekt do wykonania na rozmowę kwalifikacyjną. Niezbyt trudny projekt. Na szczęście mogłem spędzić cały swój czas na projektowaniu, rozwijaniu i testowaniu aplikacji, zamiast badać coś, czego nie byłem zaznajomiony. Po opracowaniu kilku krytycznych błędów zastanawiam się, czy powinienem dodać coś więcej do zadania. Załóżmy, że w tym momencie: * wszystko jest skomentowane * nie znaleziono żadnych błędów * wszystkie znane wyjątki są obsługiwane * pozostało 8 godzin w wyznaczonym czasie ** Czy lepiej jest iść dalej i przesłać wolne od błędów zadanie robocze przed terminem ?** ...lub ... **Poświęć w pełni przydzielony czas, aby dodać funkcję (oczywiście coś prostego, jak logowanie)?** ...lub ... **Podaj listę TODO, które mogą poprawić elastyczność, skalowalność czy ogólna użyteczność?** Są to ulepszenia, których po prostu nie da się zrobić w ciągu jednego dnia lub mogą wprowadzić zbyt wiele problemów do rozwiązania w wyznaczonym czasie. FWIW: projekt polegał na stworzeniu wielowątkowego kontrolera sortowania realizującego 3 różne algorytmy sortowania; wyniki, które mają być wyświetlane w interfejsie użytkownika WinForms.


title: Terminologia zajęć

text: Integruję się z systemem zarządzania finansami (FMS). Mam klasę, która przygotowuje zestaw obiektów (każdy z tych obiektów nazywa się TransactionEntity). Są one następnie przekazywane do FMS. Szczególną wagę przywiązuję do poprawnej terminologii. Jak nazwać klasę przygotowującą transakcje? Myślę o TransactionSomething. Przykład TransactionBuilder, TransactionFactory itp. Ale nie sądzę, że te nazwy są poprawne. Dla przypomnienia używam .Net, ale nie sądzę, że framework powinien mieć na to wpływ.


title: Doświadczenie serwera JavaEE ma znaczenie dla programisty?

text: Ostatnio widzę sporo ogłoszeń o pracę w tworzeniu aplikacji z prośbą o doświadczenie z tym lub innym serwerem Java EE. Rozumiem to, jeśli jest to dla administratora serwera, jednak uważam za głupie i śmieszne proszenie o kogoś z konkretnym doświadczeniem w implementacji serwera, gdy praca polega na opracowywaniu oprogramowania Java. Cała idea stojąca za Java EE, którą studiowałem w moich pierwszych dniach, polegała na opracowywaniu standardów i wdrażaniu na dowolną wybraną platformę, w tym serwery, system operacyjny itp. Moje pytanie brzmi, czy różne implementacje kontenerów aplikacji Java EE są tak bardzo różne, że można je uznać za własną ścieżkę kariery dla rozwoju? Jakie funkcje istnieją wśród kontenerów aplikacji Java, które wymagają tak specjalistycznych umiejętności, że mógłbym nie chcieć nie brać pod uwagę kandydatów o imponujących kwalifikacjach programistycznych?


title: Szkodliwe pokusy w programowaniu

text: Ciekawi Cię tylko, jakie pokusy w programowaniu okazały się naprawdę szkodliwe w Twoich projektach? Na przykład, gdy naprawdę czujesz potrzebę zrobienia czegoś i wierzysz, że przyniesie to korzyści projektowi, albo po prostu oszukujesz się, by uwierzyć, że tak jest, a po tygodniu zdajesz sobie sprawę, że nie rozwiązałeś żadnych _prawdziwych_ problemów, ale stworzyłeś nowe lub , w najlepszym przypadku zadowoliło twoją wewnętrzną bestię bez widocznego wpływu. Osobiście jest mi bardzo trudno nie refaktoryzować złego kodu. Pracuję z dużą ilością złego, starszego kodu i potrzeba kilku głębokich oddechów, aby go nie dotknąć, gdy nie mam testów, które udowodniłyby, że moja refaktoryzacja niczego nie psuje. Kolejny demon dla mnie w interfejsie użytkownika, mogę dosłownie spędzać godziny na zmienianiu układu interfejsu użytkownika tylko dlatego, że lubię to robić. Czasami mówię sobie, że pracuję nad użytecznością, ale prawda jest taka, że uwielbiam przesuwać przyciski. **Jakie są twoje demony programowania i jak ich unikać?**


title: NLP jako wymóg pracy

text: Kiedy pracodawca wskazuje, że NLP jest wymagane na stanowisku, czego oczekuje? Czy mogę nauczyć się teorii przetwarzania języka naturalnego, czy muszę znać konkretne frameworki, czy co?


title: Jaki jest najlepszy język programowania do rozwiązywania równań różniczkowych cząstkowych?

text: Muszę stworzyć program, który porównuje dwie lub trzy różne metody (FEM FVM FDM) w celu rozwiązania prostego pde. Czy istnieje język programu, w którym mógłbym to łatwo zrobić? (muszę operować na wektorach/macierzach i wykonywać inwersje na macierzy)


title: Jak radzisz sobie z obsługą wersji Chrome?

text: Pracuję nad witryną dla mojej firmy, która do pewnego momentu była witryną tylko dla Internet Explorera z różnych powodów, głównie dlatego, że kiedy strona była pierwotnie tworzona, IE miała ponad 90% udziału w rynku, więc praca, aby uzyskać to działanie w innych przeglądarkach po prostu nie miało sensu. Teraz, gdy żyjemy w bardziej zróżnicowanej gospodarce przeglądarek, pracujemy nad tym, aby strona działała wszędzie, a na szczęście przyzwoita jej część po prostu już działa. Jednak jednym z problemów, z którym się borykamy, jest kwestia tego, co wspierać, a czego nie. Po pierwsze, przeglądarki inne niż IE są wydawane znacznie częściej niż IE i nie wiesz, które wersje są nadal dostępne. W ciągu ostatniej dekady zostały wydane w zasadzie trzy wersje IE, a IE6 jest nadal obsługiwany do 2014 roku. Ale co drugi dzień jest aktualizacja dla Firefoksa, Apple aktualizuje Safari mniej więcej co roku. A potem jest Chrome. Chrome przeszedł z 0,2 do 9,0 w nieco ponad dwa lata. 7.0.517 został wydany półtora miesiąca po 6.0.472. Obecnie dostępne są trzy różne wersje: stabilna, beta i deweloperska. Wersja deweloperska 9.0.587 została wydana przed najnowszą wersją beta 8.0.552. Z IE mieliśmy do czynienia z sytuacją, w której musimy wspierać starą wersję, ponieważ dział IT danej firmy nie pozwala pracownikom na upgrade. Myślę, że w przypadku przeglądarek innych niż IE przyjmiemy hasło „zaktualizuj do najnowszej wersji albo nie możemy Ci pomóc”, ale nie jestem pewien, na ile to jest skuteczne. Ponadto moja firma wprowadza pewne sztuczne ograniczenia. Na przykład mamy produkt skierowany do firm, więc nie obsługujemy „domowych” wersji systemu Windows (tj. XP Home, 7 Home Premium), mimo że nie ma technicznych powodów, dla których nie moglibyśmy tego zrobić. Jak mam odpowiedzieć, gdy moja firma zaczyna pytać „którą wersję lub wersje Chrome obsługujemy”?


title: Ostrzeżenia IDE dotyczące bezpieczeństwa gwintów

text: Zastanawiam się, czy nie byłoby możliwe, aby IDE wykryło jakiekolwiek współużytkowane obiekty mutowalne, które są używane w wielu wątkach? Możesz oznaczyć typy jako „[ThreadSafe]” lub „[Immutable]” na przykład przy użyciu atrybutów w .NET, a wtedy te zmienne nigdy nie będą powodować ostrzeżeń, ale każda inna zmienna, która jest używana wewnątrz metody wywoływanej przez „Thread” zostanie wyróżnione jako „prawdopodobnie niebezpieczne”, chyba że wszystkie przypisania występują wewnątrz „zamka” lub czegoś podobnego. Wiem, że nie byłoby to idealne, ponieważ kompilator po prostu nie może zrozumieć wszystkich możliwych scenariuszy (ludzie ledwo potrafią), ale takie wskazówki byłyby całkiem cenne, nie? Czy to w ogóle możliwe?


title: Javascript: Bezpiecznie prześlij plik danych klienta

text: Pracuję (nadal) nad programem do edycji XML opartym na szablonach. Jest to edytor XML oparty na graficznym interfejsie użytkownika, który pozwala użytkownikom dodawać tylko określone tagi i atrybuty w oparciu o wymagania. Możesz zobaczyć aktualną wersję tutaj dla pomysłu. Teraz chciałbym umożliwić użytkownikom przesyłanie własnych szablonów danych, ale obawiam się potencjalnych hacków XSS. Obecnie plik szablonu znajduje się w notacji literału obiektowego JavaScript, co, jak można się spodziewać, jest koszmarem bezpieczeństwa, jeśli użytkownik może przesłać własne. Zamiast tego myślałem o użyciu XML, ale czy istnieje jeszcze lepsza alternatywa?


title: Nie umiem rysować. Jak mogę wykonać dopracowane aplikacje?

text: Nie jestem grafikiem. Jestem kiepski w rysowaniu czegokolwiek. Zmagam się z tworzeniem rzeczy, które wyglądają nawet tak ładnie, jak „przykładowe” aplikacje w pakiecie z narzędziami programistycznymi; przede wszystkim dlatego, że nie mam przysiadów w zakresie zasobów artystycznych. Jakie strategie mogę zastosować, aby to złagodzić?


title: Dlaczego wymagane są maszyny wirtualne?

text: Zamiast kompilować kod źródłowy dla odpowiedniego systemu operacyjnego (na który jest przeznaczony), kompilujesz raz i uruchamiasz wszędzie. Ze względu na to pytanie nazwałbym go VM (na przykład zarówno dla Javy, jak i .NET). Czyli wykonywanie programów staje się czymś w rodzaju ------------ ---- ---- | Wykonywalny | -> | maszyna wirtualna | -> | system operacyjny | ------------ ---- ---- To ma sens, kompilator pozostaje ogólny dla danej maszyny wirtualnej. Jednak implementacja maszyny wirtualnej może się różnić w zależności od maszyny, na której ma zostać zainstalowana, tj. (*nix, windows, mac) x (32 bit, 64 bit). Moje pytanie brzmi: zamiast pisać VM dla odpowiednich maszyn, dlaczego kompilator nie jest napisany dla tej konkretnej maszyny? W ten sposób, zamiast pobierać odpowiednią maszynę wirtualną, pobierasz odpowiedni kompilator, a ten kompilator zajmie się kodem maszynowym + systemem operacyjnym dla tej konkretnej maszyny. Wynik końcowy, wykonanie kodu natywnego dla dowolnej maszyny. Zdecydowanie każdy kod źródłowy wymagałby kompilacji dla tej konkretnej maszyny, ale obecnie zautomatyzowane systemy, kompilacje scm mogą nam w tym pomóc. Czy moje powody bycia zdezorientowanym są słuszne, czy też brakuje mi tutaj kilku szczegółów technicznych? Edycja: **PRZENOŚNOŚĆ**: Tak, to jeden z powodów, ale czy przenośność jest dużym problemem w dzisiejszych zautomatyzowanych systemach? jak często musimy się martwić o to, że nie musimy go kompilować na inne maszyny? Posiadanie kodu skompilowanego dla natywnej maszyny dałoby znacznie lepszą wydajność. Weźmy na przykład Javę, nie możesz programować na niskim poziomie w systemie Windows i musisz wybrać JNI. Weźmy zautomatyzowane systemy, takie jak TeamCity/Jenkins lub inne. Moglibyśmy mieć taką zautomatyzowaną konfigurację systemu, w której kod przesłany przez kontrolę wersji dawałby plik wykonywalny.


title: Jak uzyskać dobre pokrycie scenariuszy w testach wydajności?

text: Jeśli stosunkowo łatwo jest uzyskać dobre _pokrycie kodu_ z profilowania (ponieważ profilowanie mówi, które funkcje są/nie są wywoływane, ile razy i z jakimi parametrami), w jaki sposób uzyskać dobre _pokrycie scenariusza wydajności_ podczas wykonywania testów wydajności? Skąd mam wiedzieć, że nie ma pewnych „czarnych dziur wydajnościowych”, których nie można wykryć, z wyjątkiem sytuacji, gdy pewne parametry testowe są bardzo bliskie „czarnej dziury”? Dla przykładu zabawki, algorytm sortowania można przetestować z zestawami danych o rozmiarze `1, 10, 100, 1000, 10000, ...`. Przykładem pokrycia nienumerycznego może być testowanie algorytmu sortowania za pomocą „danych posortowanych”, „danych nieposortowanych” lub „danych skonstruowanych przez zło, które mają na celu ujawnienie najgorszego przypadku”. Scenariusze te zostały wyczerpująco zbadane przez środowisko akademickie w przypadku algorytmów sortowania. Jak zastosować to myślenie w innych rodzajach oprogramowania?


title: Jakie są cechy dobrego oprogramowania do generowania raportów do raportowania i śledzenia wyników testów porównawczych oprogramowania?

text: Jest to pytanie poboczne z tej odpowiedzi do poprzedniego pytania, gdzie http://speed.pypy.org jest wyróżniony jako przykład dobrej prezentacji. (Wydaje mi się jednak, że projekt nie rozdziela komponentów wykonania/śledzenia/generowania raportów/serwisu internetowego, co utrudnia innym osobom adaptację.) Interesuje mnie zarówno funkcjonalność, jak i interfejs użytkownika. wymagania takiego oprogramowania. Mam nadzieję, że będę mógł wybrać istniejący na podstawie kryteriów, aby móc go użyć w moim projekcie. W tej chwili jedyne, co przychodzi mi do głowy, to to, że interfejs wykonawczy powinien być podobny do uprzęży do testów jednostkowych, ale interfejs użytkownika raportowania powinien być zupełnie inny niż oprogramowanie z rodziny xUnit. Strony internetowe wydają się być lepszym sposobem poruszania się po wynikach. I wraz z kilkoma drobnymi pomysłami: * Powinien istnieć komponent śledzenia do śledzenia zmian wydajności na wszystkich poziomach * Jednak warstwa prezentacji powinna podkreślać tylko „istotne” zmiany wydajności, to znaczy spadki wydajności w ważnych obszarach, które są wystarczająco poważne, aby wymagają uwagi programistów. Interesuje mnie również, czy któreś z rad Edwarda Tufte można tu zastosować.


title: Prawidłowa droga do certyfikacji Microsoft?

text: Oto moja sytuacja - Obecnie na studiach i jestem przekonany, że chcę kontynuować karierę w technologiach Microsoft (a dokładniej rozwój .NET). Nie mam żadnego doświadczenia w świecie rzeczywistym (tak jak w przypadku projektów płatnych ani open source, tylko aplikacje osobiste i projekty szkolne) i ciężko jest dostać się na jakąkolwiek pozycję programistyczną, ponieważ większość, jeśli nie wszyscy, proszą o lata doświadczenia zawodowego. Jestem prawie pewien, że udanie się na certyfikację jest właściwą rzeczą do zrobienia, aby „oddzielić się od reszty”, co powinno mi pomóc w rozpoczęciu projektów open source i płatnej pracy. Pytanie brzmi, jakie certyfikaty mam wybrać? Zastanawiałem się nad przejściem na MCTS: .NET Framework 4, aplikacje Windows (70-511), a następnie MCTS: .NET Framework 4, aplikacje internetowe (70-515) robić ? Czy powinienem rozwiązać cokolwiek związanego z aplikacjami komputerowymi, ponieważ wszystko zmierza w kierunku opartego na sieci Web? Którą drogą po wydanych certyfikatach? Każdy wkład jest doceniany! LA.


title: Czy istnieją poważne firmy, które nie stosują kontroli wersji i ciągłej integracji? Czemu?

text: Mój kolega miał wrażenie, że nasz dział oprogramowania jest bardzo zaawansowany, ponieważ używaliśmy zarówno serwera kompilacji z ciągłą integracją, jak i oprogramowania do kontroli wersji. To nie pasowało do mojego punktu widzenia, ponieważ znam tylko jedną firmę, która robiła poważne oprogramowanie i też nie miałam. Jednak moje doświadczenie ogranicza się tylko do kilku firm. Czy ktoś zna jakąś prawdziwą firmę _(większą niż 3 programistów)_ , która działa w branży oprogramowania i nie używa tych narzędzi? Jeśli taka firma istnieje, czy jest jakiś dobry powód, by tego nie robiła?


title: Jak utrzymać standardową jakość zdjęć wgrywanych przez wielu użytkowników?

text: Rozwijamy witrynę, na której osoby prywatne (właściciele sklepów) będą mogły robić zdjęcia i przesyłać je do witryny. Naszym największym zmartwieniem jest zróżnicowanie jakości zdjęć w serwisie. Rozważane przez nas opcje to: 1. Minimalne skrypty do czyszczenia obrazów (w tym filtry, zmiana rozmiaru, wyostrzanie itp.) 2. Proces zatwierdzania przesłanych obrazów 3. Zatrudnienie zespołu do robienia dla nich zdjęć Chciałbym sprawdzić, czy ktoś ma miał jakieś doświadczenie z 1 i 2 powyżej. Jaka jest skuteczność 1, a jaka 2?


title: Czy zmiany łamania semantycznego powinny być powiązane ze zmianami łamania składni?

text: **Wyjaśnienie** Najpierw pokrótce zdefiniuję, w jaki sposób używam terminów (być może trochę naginam ich typowe użycie): Kiedy mówię o _zmianach łamania semantycznego_, mam na myśli zmianę znaczenia/zachowania publiczne API. Może to wymagać zmian w kodzie konsumenckim, ale nie jest to od razu oczywiste, ponieważ nic się nie „zepsuło”. Zmiany są wymagane tylko dlatego, że założenia dotyczące warunków wstępnych/zachowania nie są już aktualne. Jest to w przeciwieństwie do _zmiany łamania składni_, przez które mam na myśli zmiany w publicznym API, które wymagają, aby kod wywołujący zmienił sposób, w jaki wywołuje API. Ten rodzaj przełomowej zmiany jest oczywisty, ponieważ zwykle skutkuje błędami kompilacji, które należy naprawić. **Przykład** Załóżmy, że piszę mikro-ORM, w którym dany obiekt POCO, połączenie z bazą danych i zapytanie mapują wyniki na obiekt. Publiczny interfejs API jest dość prosty: Query<T>(connection As IDbConnection, sql As String) Jest bardzo mało prawdopodobne, że zmienię składnię w sposobie interakcji z tym narzędziem. Jednakże, ponieważ w tym prostym stwierdzeniu kryje się wiele zachowań, bardzo prawdopodobne jest, że nastąpią zmiany semantyczne. **Pytanie** Skoro nie ma zmiany składni, w jaki sposób mogę skutecznie informować użytkowników mojego interfejsu API, że nastąpiła zmiana semantyczna? Czy powinienem zawsze łączyć zmiany semantyczne w zmianach składniowych, aby nie było wątpliwości, że coś się zmieniło? Jeśli wersjonowanie semantyczne obejmuje zarówno zmiany semantyczne, jak i składniowe, to jest to długa droga do rozwiązania problemu. Ale nadal byłoby możliwe, aby programiści kompilowali na nowszej wersji, nie zauważyli żadnych błędów kompilacji, założyli, że wszystko będzie dobrze (ponieważ nie przeczytali dokumentacji) i wprowadzą błędy spowodowane zmianami semantycznymi w moim API.


title: Jaki jest pierwszy język, który miał wbudowaną pętlę warunkową/o ile nie?

text: Jaki jest pierwszy _(najstarszy)_ język, który miał wbudowaną pętlę warunkową/o ile nie? Gdzie może być przykład, chyba że (myVar) == if (!myVar) do (myVar) == while (!myVar)


title: Rozszerzenie OpenGL a rdzeń OpenGL

text: Wątpiłem: piszę wieloplatformowy silnik OpenGL C++, zorientowałem się, że okna zmuszają programistów do dostępu do funkcji OpenGL powyżej 1.1 poprzez rozszerzenia. Teraz chodzi o to, że w Linuksie wiem, że mogę bezpośrednio uzyskać dostęp do funkcji, jeśli wersja obsługuje je, za pośrednictwem wersji glext.hi opengl. Problem polega na tym, że jeśli w Linuksie jądro go nie obsługuje, to czy możliwe jest rozszerzenie, które obsługuje tę samą funkcjonalność, w moim przypadku obiekty bufora wierzchołków? Robię coś takiego: Windows: `#define glFunction functionpointer_to_the_extension` Linux: Ponieważ glext już zdefiniował funkcję glFunction, mogę pisać w kodzie klienta glFunction i kompilować go zarówno w systemie Windows, jak i Linux bez zmiany ani jednej linii w kodzie klienta za pomocą silnik (mój cel). Teraz chodzi o to, że widziałem, jak samouczek używa tylko rozszerzenia na Linuksie i nie sprawdza wersji implementacji opengl. Jeśli funkcjonalność jest dostępna w rdzeniu, czy jest również dostępna jako rozszerzenie (np. VBO)? A może rozszerzenie jest czymś, o czym nigdy nie wiesz, że jest dostępne? Chcę napisać silnik, który będzie miał wszystkie możliwości sprzętowe, więc muszę sprawdzić (w systemie Linux) rozszerzenia oraz wersję rdzenia pod kątem możliwej implementacji funkcjonalności.


title: Kiedy mówisz „bliski identyfikator” / „daleki identyfikator” podczas korzystania z RTMFP w języku ActionScript 3?

text: Używam strumieniowania RTMFP od około roku w języku ActionScript 3 i prawie znam różnicę między identyfikatorem bliskim a dalekim. Bliski identyfikator to identyfikator twojego partnera, a daleki identyfikator to identyfikator drugiego użytkownika. Problem, jaki mam, polega na tym, że według mojej wiedzy wybór, czy użyć jednego czy drugiego terminu w danym zdaniu, jest trochę jak wybór, czy powiedzieć „idź”, czy „przyjdź”. W języku angielskim „go” i „come” mają przeciwne znaczenia, ale jak na ironię, wciąż można ich używać prawie zamiennie. Dzieje się tak dlatego, że to, czy idziesz, czy przychodzisz, zależy w dużej mierze od perspektywy, w przeciwieństwie do czegokolwiek konkretnego. Czy wybór słów między „bliskim ID” a „dalekim ID” jest tak samo niejednoznaczny, czy może jest jakaś metoda na to szaleństwo? Dziękuję!


title: skróty klawiszowe emacs

text: Dużo czytałem o vimie i emacsie oraz o tym, jak zwiększają produktywność, ale nie wiedziałem, który wybrać. W końcu, kiedy postanowiłem nauczyć się zwykłego seplenienia, decyzja była prosta: wszyscy mówią, że nie ma lepszego edytora do zwykłego seplenienia niż emacs + slime. Zacząłem więc od samouczka emacsa i od razu wpadłem na coś, co wydaje mi się bardzo nieproduktywne. Mówię o powiązaniach klawiszy dla klawiszy kursora: przód/tył: Ctrl+f, Ctrl+b góra/dół: Ctrl+p, Ctrl+n Uważam te powiązania za bardzo dziwne. Zakładam, że palce powinny znajdować się w swoich rzędach domowych (czy się tutaj mylę?), więc aby przesunąć kursor do przodu lub do tyłu, powinienem użyć lewego palca wskazującego oraz prawego małego palca wskazującego w górę iw dół oraz prawego palca wskazującego. Podczas pracy z dowolnymi środowiskami IDE systemu Windows i edytorami tekstu do nawigacji po tekście zwykle umieszczam prawą rękę w takiej pozycji, aby mój kciuk znajdował się na prawym Ctrl, a mój palec wskazujący, pierścień i środkowy znajdowały się na klawiszach kursora. Z tej pozycji poruszanie kursorem jest bardzo łatwe i wygodne: mogę wykonywać ruchy jednego znaku trzema prawymi palcami lub mogę nacisnąć `ctrl` prawym kciukiem i zamiast tego wykonać ruchy słowne. Mogę również nacisnąć 'shift' lewym małym palcem i dokonać selekcji pojedynczych znaków lub słów. Jest to również bardzo wygodna pozycja do dotarcia prawą ręką do klawiszy „PgUp”, „PgDn”, „Home”, „End”, „Delete” i „Backspace”. Mam więc jeszcze więcej możliwości nawigacji i selekcji. Rozumiem, że decyzja o nieużywaniu klawiszy kursora polega na umożliwieniu używania emacsa do łączenia się ze zdalnymi sesjami terminalowymi, gdzie te klawisze nie są obsługiwane, ale nadal uważam, że wybór klawiszy kursora jest bardzo niefortunny. Dlaczego zamiast tego nie użyć `j`, `k`, `i`, `l`? W ten sposób mogłem używać prawej ręki bez nadmiernego rozciągania palców. Jak więc emacs jest bardziej produktywny? Co ja robię źle?


title: Jak mogę wprowadzić kontrolę jakości i podzielić ją na części dla różnych osób?

text: Ostatnio zapytano mnie, jak to zrobić, a konkretnie: 1. Jak wprowadzić QA w organizacji? 2. Jak podzielić QA na części, które mogą zrobić inni? 3. Jak ustalić priorytety, które wymagają QA? 4. Jak ustalić, co kupić? kod? itp. Organizacja intensywnie korzysta z Rails on Rails jako platformy programistycznej Uwaga: Sam zamieszczam długą odpowiedź, ale będę również popierał dodatkowe dobre odpowiedzi (i prawdopodobnie włączę je do mojej odpowiedzi).


title: Kanoniczna reprezentacja obiektu klasy zawierającego element listy w XML

text: Widzę, że większość implementacji JAX-RS reprezentuje obiekt klasy zawierający listę elementów w następujący sposób (załóżmy klasę House zawierającą listę osób) <houses> <house> <person> <name>Adam</name> </ person> <person> <name>Blake</name> </person> </house> <house> </house> </houses> Powyższy wynik jest uzyskiwany na przykład z implementacji Jersey 2 JAX-RS, zauważ, że Jersey tworzy klasa wrapper „domy” wokół każdego domu, jakkolwiek, co dziwne, nie tworzy to klasy wrappera wokół każdej osoby! Uważam, że to nie jest poprawne odwzorowanie listy, innymi słowy czułbym się bardziej komfortowo z czymś takim: <houses> <house> <persons> <person> <name>Adam</name> </ person> <person> <name>Blake</name> </person> </persons> </house> <house> </house> </houses> Czy istnieje jakikolwiek dokument wyjaśniający, w jaki sposób obiekt powinien być poprawnie zmapowany poza jakaś opinia?


title: Jaka jest odpowiednia ilość czasu potrzebna na rozmowę z programistą .NET?

text: Miałem dwie rozmowy kwalifikacyjne w ciągu ostatnich dwóch tygodni, jedna z nich trwała około 30 minut, a wcześniej kazali mi wypełnić podanie o pracę, a druga trwała mniej niż 10 minut! Z Twojego punktu widzenia, ile czasu potrzebujesz na rozmowę z deweloperem .NET z prawie dwuletnim doświadczeniem?


title: Czy powinienem unikać programowania SharePoint w Visual Studio?

text: Niedawno rozpocząłem staż w firmie zajmującej się doradztwem, hostingiem i rozwojem SharePoint. Chociaż ich doradztwo wydaje się być całkiem dobre i solidne, wydaje mi się, że ich działowi rozwoju brakuje kierunku. Powodem tego jest najprawdopodobniej to, że nie tak dawno przestali outsourcingować. Jedną z rzeczy, na które często wpadałem w głowę, jest następująca: Mój przełożony stanowczo nalega, aby wszystko, co można zrobić natywnie w SharePoint (w jakiś sposób obejmuje to edytowanie plików xslt w Designer), powinno być zrobione w SharePoint. Nawet jeśli skutkuje to dłuższym czasem programowania (przynajmniej wtedy, gdy zmuszają mnie do pisania XSLT) i zmniejszoną użytecznością. Jej główne argumenty przemawiające za tym to: * Lepsza konserwacja * Edycja funkcjonalności nie wymaga znajomości programowania Czuję, że firma jest trochę stronnicza i nie jestem w stanie prowadzić porządnej dyskusji. Dlatego szukam innych miejsc, aby uzyskać odpowiedzi na ten temat (i nie tylko na argumenty mojego przełożonego, ale ogólnie na ten temat). Z poważaniem


title: Interfejsy: zysk z użytkowania

text: Przede wszystkim moim wszechobecnym językiem jest PHP i myślę o nauce Javy. Pozwólcie więc, że podzielę moje pytanie na dwie ściśle powiązane ze sobą części. Oto pierwsza część. Załóżmy, że mam klasę modelu domeny. Ma kilka getterów, seterów, metod zapytań itp. I pewnego dnia chcę mieć możliwość ich porównania. A więc wygląda to tak: class MyEntity extends AbstractEntity { public function getId() { // pobiera właściwość id } public function setId($id) { // ustawia właściwość id } // wiele innych metod, które ustawiają lub pobierają dane public function CompareTo (MyEntity $anotherEntity) { // trochę logiki porównania } } Gdyby to była Java, powinienem zaimplementować interfejs `Comparable`. Ale dlaczego? Wielopostaciowość? Czytelność? Albo coś innego? A gdyby to był PHP - czy powinienem stworzyć dla siebie interfejs `Comparable`? Oto druga część. Mój kolega powiedział mi, że w Javie praktyczną zasadą jest tworzenie interfejsu dla każdego behawioralnego aspektu klasy. Na przykład, gdybym chciał przedstawić ten obiekt jako string, powinienem określić to zachowanie poprzez coś w rodzaju `implementuje Stringable`, gdzie w przypadku PHP `Stringable` wyglądałoby to tak: interface Stringable { public function __toString(); } Czy to naprawdę praktyczna zasada? Jakie korzyści daje takie podejście? A czy warto w PHP? A w Javie?


title: Kto właściwie wykonuje zadanie rotacji kłód?

text: Wiem, że _rotacja logów_ to funkcja obserwowana w serwerach aplikacji, takich jak Oracle Weblogic. Chciałbym zrozumieć: 1. Co właściwie oznacza rotacja kłód? 2. Co to jest przydatne? 3. Kto wykonuje zadanie? Czy ten obowiązek jest wykonywany przez frameworki rejestrujące, z których korzystają programiści, czy jest obsługiwany przez same serwery? Czy rotacja dzienników byłaby dostępna na serwerze takim jak Weblogic, jeśli aplikacja nie używa żadnej struktury rejestrowania (nie `java.util.logging`) i po prostu polega na `System.out.println()` i `System.err.println ()` itd?


title: Jakie są prawidłowe informacje o prawach autorskich?

text: Chcę wiedzieć, co mam napisać w części dotyczącej praw autorskich? Mam na myśli część dotyczącą praw autorskich, gdy klikniesz prawym przyciskiem myszy plik wykonywalny, klikniesz właściwości i klikniesz kartę szczegółów. Rozwijałem małe narzędzie, które analizuje niektóre informacje z plików wyjściowych. Minął już rok i jakoś stało się czymś więcej niż prostym, osobistym narzędziem. Używamy go do celów akademickich i będzie cytowany w kilku artykułach naukowych. BTW, nie chcę robić tego jako freeware. Ponadto jestem jedynym twórcą oprogramowania. Korzystałem z programu Visual Studio 2010 Ultimate, który uzyskałem bezpłatnie na licencji akademickiej dostarczonej przez moją uczelnię.


title: Czat w czasie rzeczywistym w Ruby on Rails bez posiadania serwera

text: Chciałbym zaimplementować czat w czasie rzeczywistym dla mojej aplikacji Rails, ale tak naprawdę nie mogę hostować serwera, który obsługuje gniazda. Próbowałem Faye, ale potrzebuje serwera. Słyszałem również o pusherze, ale jest on ograniczony do 20 użytkowników na czacie i nie jestem pewien, czy nie będzie ich więcej. Myślałem o IRC, ale myślę, że tak naprawdę nie mogę osadzić go w aplikacji rails, może potrzebuje gniazd... Jak mogę zaimplementować czat w czasie rzeczywistym bez posiadania serwera?