title: Co sprawiło, że programowanie obiektowe odniosło sukces?

text: Jaka jest według Ciebie ta cecha, która sprawiła, że programowanie obiektowe jest tak skuteczne? 1. Przekazywanie wiadomości 2. Dziedziczenie 3. Polimorfizm 4. Enkapsulacja Lub jakaś inna funkcja, którą możesz wprowadzić. Chciałbym też wiedzieć, jaki jest związek między abstrakcyjnym typem danych a programowaniem obiektowym?


title: Wymagania klienta zawierają równania, które nic nie kończą

text: Mam projekt, w którym wymagania klienta określają raport i zawierają równania matematyczne dotyczące zawartości niektórych kolumn tego raportu. Jedna z kolumn w tym raporcie to suma bieżąca, która zaczyna się od wartości początkowej i która „powinna” pozostać na tej wartości przez cały czas trwania raportu, ponieważ pozostałe elementy się równoważą. Tj. gdyby czegoś zaginęło, wartość zmieniłaby się i klient zobaczyłby, że jest problem. Powodem, dla którego zacytowałem „powinien” w tym ostatnim akapicie, jest to, że specyfikacja definiuje równanie dla tej kolumny i mogę matematycznie udowodnić, że znosi się do „wartości z poprzedniego wiersza”. Innymi słowy, wartość nigdy nie zmieni się od wartości otwarcia. Moje opcje to: * Zaimplementuj równanie zgodnie ze specyfikacją, podejrzewam, że interpreter nie rozwiąże równania, więc nastąpi spadek wydajności * Zrób trochę anulowania i zaimplementuj wartość kolumny jako „wartość z poprzedniego wiersza” * Wyślij pytanie z powrotem do klienta i zaryzykuj niedotrzymanie terminu z powodu kilku dni straconych na biurokrację i improwizowane lekcje matematyki 101, aby wyjaśnić różnicę między „tak, to się nigdy nie zmieni, to jest na wszelki wypadek” i „to . nigdy się nie zmieni." Właściwie zdecydowałem, co zamierzam zrobić, ale pomyślałem, że to interesujące pytanie. Jak myślisz, co należy zrobić profesjonalnie?


title: Czy projektowe „robale” to zły znak?

text: Czy to zły znak, że użytkownicy zgłaszają błędy dotyczące rzeczy, które są zgodne z projektem? Czy zazwyczaj oznacza to, że aplikacja jest niejasna lub niejasna, czy też powinienem po prostu przypisać to jednorazowemu błędowi użytkownika, chyba że zostało to wyraźnie określone? (Właściwie nie mam żadnych takich raportów. Jest to czysto hipotetyczne pytanie o to, czy istnienie „błędów” zaprojektowanych zgodnie z projektem jest czymś złym.)


title: Miksowanie logiki biznesowej w Angularjs

text: ## Scenariusz Wczoraj wieczorem zadałem to pytanie na StackOverflow. Chociaż teraz mam rozwiązanie i mogę iść naprzód z rozwojem, wydaje mi się, że częściowo odpowiedziałem, ponieważ mam teraz więcej pytań niż wcześniej. Proponowane rozwiązanie stwarza brzydki efekt. Teraz '$scope.item' zawija $resource w '$scope.item.item' Więc powinienem zmienić każdą ścieżkę powiązań w dokumencie. ### Od  ### Do  To nie do zaakceptowania, czuję zła praktyka. wtedy pomyślałem o tym rozwiązaniu ### Konstruktor pozycji var Item = function Item(item) { // mieszanie angular.extend(this, item); }; To rozwiązało ostatni problem, ale wygenerowało nowy. Teraz `$scope.item` nie zawiera metod `$resource`. (np. `$scope.item.update()`) z powodu `__proto__` zmienionego z `Resourse` na `Item` ### Konstruktor pozycji v2 var Item = function Item(item) { this.api = item; // Zasób // mieszanie angular.extend(this, item); }; Teraz, aby wywołać stary '$scope.item.update()' należy zmienić na '$scope.item.api.update()'. To też jest złą praktyką. W tym momencie obawiam się, że jest to problem XY. ## Cel > Połącz logikę biznesową z danymi w sposób angulay. ## Pytanie Czy „Cel” sam w sobie jest „Kątową drogą”? „Droga kątowa” pozostaje dla mnie niejasna. Może powinienem pomyśleć o innym projekcie.


title: Testowanie bezpieczeństwa gwintu

text: Załóżmy, że masz funkcję `f`, która jest lub zawiera sekcję krytyczną. Jak byś przetestował, czy tylko jeden wątek może go uruchomić na raz, że nie ma warunków wyścigu i nie powoduje zakleszczenia itp.?


title: Jak „Zmienne wprowadzają stan”?

text: Czytałem "Standardy kodowania C++" i ten wiersz tam był: > Zmienne wprowadzają stan i powinieneś mieć do czynienia z jak najmniejszym stanem > jak to możliwe, z jak najkrótszymi okresami życia. Czy coś, co mutuje ostatecznie nie manipuluje stanem? Co oznacza „powinieneś mieć do czynienia z jak najmniejszym państwem”? Czy w nieczystym języku, takim jak C++, zarządzanie stanem nie jest tym, czym się zajmujesz? A jakie są inne sposoby „radzenia sobie z jak najmniejszym stanem” poza ograniczaniem czasu życia zmiennej?


title: wykresy z wieloma seriami w javascript

text: Szukam narzędzia do tworzenia wykresów, które pozwoli ci wykreślić wiele serii z 2 osiami pionowymi i różnymi typami wykresów (przynajmniej tak opisałbym to w Excelu). Nigdy wcześniej nie zajmowałem się tworzeniem wykresów, chociaż mam rozsądną wiedzę o javascript. Od czego zacząć? Oto przykład typu wykresu, który mam nadzieję stworzyć. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/IUCmR.png)


title: Czy istnieje bardziej nowoczesny program niż lex lub yacc, który nie wymaga JVM?

text: Czy istnieje „nowoczesny” odpowiednik Bison i Flex, który nie wymaga JVM, .NET lub podobnych „ciężkich” środowisk uruchomieniowych? Dzięki za komentarze, edytuj: Przez nowoczesny mam na myśli na przykład Antlr i inny w Javie, który widziałem, ale zapomniałem nazwy. (Wiem, że na przykład Antlr ma cel w C, ale bawię się pomysłem osadzenia generatora kompilatora _wewnątrz mojego własnego programu_, a Java byłaby dla mnie bardzo niepraktyczna.)


title: Mapowanie starszej bazy danych do ORM za pomocą klas opakowujących

text: Chcę użyć ORM ze starszą bazą danych, ale nie chcę ujawniać niektórych podstawowych typów danych. Na przykład niektóre kolumny są wartościami podwójnymi lub zmiennoprzecinkowymi dopuszczającymi wartość null i chcę, aby mój model domeny używał ułamków dziesiętnych nie dopuszczających wartości null. Wydaje się, że nie można automatycznie rzutować Entity Framework między tymi typami i być może z dobrych powodów. Chcę również móc używać wyliczeń i jak dotąd nie znalazłem żadnej metody, która nie wyglądałaby jak brzydkie hacki, aby to umożliwić. Moim pomysłem jest po prostu użycie wrapperów, gdzie mam klasy tabelaryczne zmapowane do bazy danych, ale opakowane w "prawdziwe" klasy domenowe do wykorzystania w kodzie. Moje pytanie brzmi po prostu, czy masz jakieś przemyślenia na temat tego podejścia lub czy masz jakieś wskazówki. Nie mam doświadczenia w mapowaniu starszej bazy danych do ORM, więc wszelkie uwagi lub sugestie są mile widziane. Uwaga: zapoznałem się tylko z Entity Framework, więc nie mam wiedzy o możliwościach innych ORM, takich jak NHibernate.


title: Ile pytań jest na egzaminie 70-511?

text: Przygotowuję się do egzaminu Programowanie aplikacji Windows z Microsoft .NET Framework 4, ale nie jestem pewien, ile pytań jest na ten temat. Wiem, że egzamin powinien zająć tylko 90 minut, ale na ile pytań musiałbym odpowiedzieć? 50? 100? Więcej?


title: FromXYZ kontra przeciążona metoda

text: Próbuję wymyślić najczystszy sposób zaimplementowania kilku metod, które otwierają plik. Rozważ następujące sygnatury metod: public static DomainObject Load(Uri urlToFile) { /* pobiera plik i wywołuje Load(savedToFilename) */ } public static DomainObject Load(string filename) { /* tworzy strumień plików i wywołuje Load(stream) */ } public static DomainObject Load(Stream stream) { /* faktycznie ładuje */ } Próbuję zaimplementować niektóre koncepcje z czystego kodu, w szczególności: > Gdy konstruktory są przeciążone, użyj statycznych metod fabrycznych z nazwami, które > opisują argumenty. Na przykład > > _Complex fulcrumPoint = Complex.FromRealNumber(23.0);_ > > jest generalnie lepszy niż > > _Complex fulcrumPoint = new Complex(23.0);_ Teraz wiem, że nie mam przeciążonych konstruktorów per se (zrefaktorowałem od tego), ale myślę, że zasada jest taka sama. Oznacza to, że moje metody Load zostaną zrefaktoryzowane na coś takiego: public static DomainObject FromURI(Uri urlToFile); public static DomainObject FromFile(string filename); publiczny statyczny DomainObject FromStream (strumień strumienia); Ale, tbh, myślę, że bardziej intuicyjne jest korzystanie z tego, co już mam. Z perspektywy konsumenta wydaje się, że Open weźmie każde źródło, które akurat posiadam, podczas gdy druga metoda wymaga ode mnie najpierw zastanowienia się nad tym, jakie jest moje źródło, a następnie zastanowienia się, czy istnieje na to konkretna metoda. Pytam więc, z twojego bardziej doświadczonego punktu widzenia, co jest lepsze i dlaczego?


title: Radzenie sobie ze standardami kodowania w pracy (nie jestem szefem)

text: Pracuję w małym zespole, około 10 developerów. Nie mamy żadnych standardów kodowania. Są pewne rzeczy, które stały się normą, ale niektóre sposoby działania są całkowicie odmienne. Moim największym jest wcięcie. Niektórzy używają tabulatorów, niektórzy używają spacji, niektórzy używają innej liczby spacji, co stwarza ogromny problem. Często kończę konfliktami podczas łączenia, ponieważ ktoś użył swojego IDE do automatycznego formatowania i używa innego znaku do wcięcia niż ja. Nie obchodzi mnie, którego używamy, chcę tylko, abyśmy wszyscy używali tego samego. Albo otworzę plik i niektóre wiersze będą miały nawiasy klamrowe w tym samym wierszu co warunek, podczas gdy inne będą miały je w następnym wierszu. Znowu nie mam nic przeciwko, który z nich, o ile wszystkie są takie same. Poruszyłem kwestię standardów mojemu bezpośredniemu przełożonemu na spotkaniach indywidualnych i grupowych, a on nie przejmuje się tym zbytnio (jest kilku innych, którzy podzielają ten sam pogląd co ja). Wspomniałem moje szczególne obawy dotyczące znaków wcięć, a on pomyślał, że lepszym rozwiązaniem byłoby „stworzenie jakiegoś skryptu, który mógłby przekonwertować to wszystko, gdy wypchniemy/wyciągniemy z repozytorium”. Podejrzewam, że nie chce się zmieniać, a to rozwiązanie wydaje się zbyt skomplikowane i podatne na problemy z konserwacją (również dotyczy to tylko jednego przejawu większego problemu). Czy ktoś z was spotkał się w podobnej sytuacji w pracy? Jeśli tak, jak sobie z tym poradziłeś? Jakie byłyby dobre punkty, aby pomóc mojemu szefowi sprzedać standardy? Czy dobrym pomysłem byłoby rozpoczęcie oddolnego ruchu w celu stworzenia standardów kodowania wśród tych z nas, którzy są zainteresowani? Czy nie jestem zbyt szczegółowy, czy powinienem po prostu odpuścić? Dziękuję wszystkim za poświęcony czas. **Uwaga:** Dziękujemy wszystkim za dotychczasowe świetne opinie! Żeby było jasne, nie chcę dyktować jednego stylu, by nimi wszystkim rządzić. Jestem gotów oddać mój ulubiony sposób robienia czegoś na rzecz tego, co najbardziej odpowiada każdemu. Chcę spójności i chcę, żeby to była demokracja. Chcę, żeby była to decyzja grupowa, na którą wszyscy się zgadzają. To prawda, że nie wszyscy postawią na swoim, ale mam nadzieję, że wszyscy będą wystarczająco dojrzali, by pójść na kompromis dla polepszenia grupy. **Uwaga 2:** Niektóre osoby są wciągnięte w dwa przykłady, które podałem powyżej. Bardziej chodzi mi o sedno sprawy. Objawia się to wieloma przykładami: konwencjami nazewnictwa, ogromnymi funkcjami, które powinny zostać rozbite, czy coś trafi do narzędzia lub usługi, czy coś jest stałą lub wstrzykniętą, czy wszyscy używamy różnych wersji zależności lub tego samego, czy w tym przypadku należy użyć interfejsu, jak ustawić testy jednostkowe, co powinno być testowane jednostkowo, (specyficzne dla Javy) czy powinniśmy używać adnotacji lub zewnętrznej konfiguracji. Mogę iść dalej.


title: Najszybszy sposób dokumentowania architektury i projektowania oprogramowania

text: Jesteśmy małym zespołem 5 programistów i szukam kilku świetnych porad dotyczących dokumentacji architektury i projektowania oprogramowania. Wybieram się w najsłodsze miejsce, gdzie zainwestowany czas się opłaca. Nie chcę poświęcać więcej czasu na dokumentowanie niż to konieczne. Szybko przekażę ci moje myśli. Jakie schematy powinienem wykonać? Myślę o ogólnym diagramie pokazującym różne aplikacje i usługi. A potem kilka diagramów sekwencji pokazujących najważniejsze lub najbardziej skomplikowane procesy. Jeśli chodzi o sam kod, naprawdę nie widzę dużej wartości w opisywaniu lub tworzeniu diagramów kodu poza plikami .cs. Jeśli chodzi o dokumenty tekstowe, to nie mam pewności, kiedy odłożyć na papier. Większość programistów nie lubi ani pisać, ani czytać długich dokumentów.


title: Korzystanie ze ścieżek bezwzględnych dla zależności kompilacji

text: Obecnie używamy Source Safe i rozpoczęliśmy migrację do Subversion. Wszystkie nasze zewnętrzne pakiety SDK (> 500 MB) są obecnie przechowywane w Source Safe i szukam sposobów na przeniesienie ich z VSS do repozytorium. Mamy projekty C++ (głównie), C# (wiele), Java (niewiele). Setki projektów, wszystkie działające w systemie Windows. Spojrzałem na kilka menedżerów zależności, ale nie jestem zadowolony: * NuGet - dobry dla .Net, ale bolesny dla C++ * Ivy - nie zaglądam dogłębnie, ale nie wydaje się akceptowalny dla C++ **Pierwsze pytanie: co jeszcze powinno Sprawdzam? Powinien być łatwy w użyciu dla programisty front-end. Najlepszym przypadkiem jest prosta kompilacja w IDE.** * * * Obecnie skłaniam się ku takiemu rozwiązaniu: Przydziel jakiś rzadko używany dysk, taki jak S: i zadeklaruj go jako 'DEV HOME'. Następnie umieść zewnętrzne tutaj: S:\SDK\boost\1.30\... S:\SDK\boost\1.45\... S:\SDK\oracle\agile_9.0.0.0\... S:\SDK\ IBM\lotus_8.0\... S:\SDK\IBM\lotus_9.0\... S:\Tools\NuGet\nuget.exe S:\Tools\clr\gacutil.exe Maszyna Autobuild będzie przechowywać kopię główną tego „DOM DEV”. Każdy programista powinien skopiować niezbędne pakiety SDK z maszyny do autokompilacji do lokalnej i utworzyć „fałszywy” dysk z **subst**. Nie widzę większych problemów z tym rozwiązaniem: * Gałęzie. Projekty w różnych branżach zawierają odniesienia do różnych wersji SDK (np. boost) * Wersja zewnętrznego komponentu nie będzie się zbyt często zmieniać, więc nie będzie setek, powiedzmy, wersji boost. * Łatwa konfiguracja dla programistów. * Ścieżki bezwzględne obsługiwane przez dowolne narzędzie. Drobne problemy: * Dla mnie osobiście nie jest to piękne rozwiązanie. * Dysk (S:) może być zajęty * Nie można tego zrobić w Linuksie (ale obecnie nie jesteśmy tym zainteresowani) **Drugie pytanie: jakie problemy widzisz z tym rozwiązaniem?**


title: Zespoły równoległe i scrum/agile

text: Moja firma poważnie się rozwinęła w ciągu ostatnich lat. Jeszcze kilka lat temu mogliśmy pracować z 1 zwinnym zespołem i wszystko szło całkiem gładko. Teraz mamy wiele zespołów, wszystkie pracują zwinnie i wszystko idzie mniej gładko, jak byśmy chcieli. Jednym z głównych problemów [psychologicznych] jest organizacja metod pracy w zespołach. * Jeśli każdy zespół ma swój własny sposób pracy (własny rodzaj arkuszy Excela, w których utrzymywany jest postęp, własny sposób obliczania zdolności, ...), zespoły wydają się od siebie oddalać i wydają się konkurować, a nie współpracować nad rzeczami ( rozwijanie podobnego kodu równolegle) * Jeśli wszystkie zespoły używają tych samych metodologii i procedur przepływu pracy, to znowu mamy dwie alternatywy: * „Wymuszanie” metodologii przez kierownictwo wydaje się niepoprawne, ponieważ kierownictwo nie wie jasno, jak powinny działać metodyki Agile/Scrum ( wiedzą o tym tylko rzeczywiste zespoły) * Pozwolenie zespołom na zgłaszanie sugestii ulepszeń i „narzucanie” tego innym zespołom może poprawić konkurencję, a nie współpracę (zespoły odmówią zastosowania metodologii, ponieważ pochodzi ona od innego zespołu). Czy ktoś ma jakieś doświadczenie z wieloma zespołami pracującymi razem w sposób zwinny/scrum? Jak promować współpracujące ze sobą zespoły, nie zmuszając ich do „obwiniania się nawzajem” za rzeczy, które nie działają?


title: Jakie inne języki, poza Transact SQL, podają, że 22/7 jest równe 3?

text: Kiedyś korzystałem z Microsoft SQL Query Analyzer i napisałem bardzo prostą instrukcję select: SELECT 22/7 as [PI Equiv] Zaskoczyło mnie, że wynik to 3, kiedy spodziewałem się zobaczyć 3.1428571. Nawet jeśli zadeklarujesz wyjście jako `Numeryczne(18,7)`, nadal otrzymasz 3.0000000. DECLARE @Answer Numeric(18,7) SET @Answer = 22/7 SELECT @Answer as [PI Equiv] RESULT = 3.0000000 Jakie inne języki zwracają wartości całkowite, gdy dzielna i dzielnik są liczbami całkowitymi?


title: Strategia/algorytm podziału uczciwych zespołów na podstawie historii

text: Jesteśmy grupą ludzi, którzy regularnie grają razem w unihokeja. Każda sesja zaczyna się od zniechęcającego zadania dzielenia zespołów... Więc co byłoby lepszego niż aplikacja do automatycznego wybierania zespołów? Biorąc więc pod uwagę historię kombinacji zespołów i wyników oraz listę osób pojawiających się na tej konkretnej sesji, jaka byłaby dobra strategia na znalezienie optymalnych zespołów? Przez optymalne rozumiem zespoły możliwie równe. Jakieś pomysły? Edycja: Żeby było jasne, dane, na których muszę oprzeć wybór, będą wyglądały mniej więcej tak: [{ team1: ["playerA", "playerB", "playerC"], team2: ["playerD", " playerE", "playerF"], goal_team1: 10, goal_team2: 8 }, { team1: ["playerD", "playerB", "playerC"], team2: ["playerA", "playerE", "playerG"], goal_team1: 2, goal_team2: 5 }, { team1: ["playerD", "playerB", "playerF"], team2: ["playerA", "playerE", "playerC"], goal_team1: 4, goal_team2: 2 } ]


title: Punkt rozwiązywania w zapytaniach interwałowych

text: Istnieje n przedziałów określonych przez początek (a[1], a[2], ..., a[n]) i punkty końcowe (b[1], b[2], ..., b[n]) i m zapytań postaci: przy danej liczbie całkowitej x znajdź indeksy przedziałów, które zawierają x. Można to zapisać jako S(x) = {k | 1 <= k <= n i a[k] <= x <= b[k]}. Jaki jest najszybszy algorytm/struktura danych (proszę, jeśli to możliwe, podać odniesienia do implementacji/dokumentacji) do rozwiązania tych zapytań? Jestem przekonany, że drzewa interwałowe powinny rozwiązać problem, ale nie jestem pewien, jak mam podejść do zwracania wyników. Do tej pory mogłem tworzyć następujące metody, ale wszystkie wydają się dość powolne. * Podejście naiwne: dla każdego zapytania przejrzyj wszystkie przedziały i zobacz, czy punkt znajduje się w odpowiednim przedziale * Sortuj przedziały według ich punktu początkowego (a następnie końcowego) i wyszukuj binarnie dolną granicę na punkcie początkowym, a następnie iteruj do prawidłowego sprawdzania stanu.


title: Podział kodu na zestawy w celu logicznego oddzielenia

text: Rozpocząłem pracę w tej firmie, a oprogramowanie jest zarządzane w rozwiązaniu Visual Studio, które obejmuje setki projektów (C++ i C#). Po kilku tygodniach grzebania w rozwiązaniu zacząłem się zastanawiać, dlaczego jest tak wiele projektów. Nie tylko znacznie spowalnia VS, ale odbudowa może potrwać nawet godzinę. Ponieważ projekt Visual Studio odpowiada jednostce wdrażania fizycznego (czy to .NET dll, C++ lib lub exe), istnieją powody, dla których warto podzielić kod na partycje między projektami. Niektóre z tych powodów można znaleźć w tym artykule. W moim konkretnym przypadku żaden z powodów w tym artykule się nie utrzymał. Istnieje około 5 procesów działających na różnych warstwach, być może kilka dynamicznie ładowanych zestawów używanych w modelu wtyczek oraz pewna infrastruktura, która jest rzadko zmieniana. Nie widzę potrzeby więcej niż ~50 projektów VS dla tego rozwiązania i wierzę, że ich połączenie zwiększy produktywność i pozwoli na skrócenie pętli sprzężenia zwrotnego. Kiedy próbowałem zasugerować to menedżerowi oprogramowania, jego odpowiedź była taka, że starają się mieć **jak najwięcej bibliotek dll, jak to możliwe**, aby kiedy planują wysłać nową funkcję, **QA może przetestować tylko zachowanie zmodyfikowanych bibliotek dll** bez obaw, że nastąpiło coś innego. Powiedział, że skoro biblioteka nie została zmieniona, to będzie się zachowywać tak samo. Aby to zadziałało, dążą do wysokiej szczegółowości jednostek wdrożeniowych. Czy to ma dla kogoś sens? Nie widzę różnicy we wpływie na zachowanie między edycją pojedynczego wiersza w projekcie, który ma jedną ogromną bibliotekę dll, a edycją tego samego wiersza w projekcie, który zawiera setki bibliotek dll. **EDYTUJ** Szukam odpowiedzi na temat używania zestawów/projektu jako środka do oddzielenia logicznych obaw i jego wpływu na wysiłek testowy. Posunąłbym się nawet do stwierdzenia, że wiele zestawów może dać więcej scenariuszy testowych z powodu niezgodności wersjonowania. Więc moje główne pytanie brzmi: kiedy podzielisz swój kod na projekty/zespoły zamiast przestrzeni nazw w tym samym zestawie, biorąc pod uwagę, że nie ma ograniczeń w czasie wykonywania i dlaczego? **EDYTUJ 2** Chyba szukam czegoś takiego jak ten artykuł. Jednak niechętnie publikuję to jako odpowiedź i akceptuję, zanim zobaczę, czy w społeczności są różne opinie.


title: Sugestia dotycząca konwersji dokumentów w Railsach?

text: Obecnie uczę się railsów z dnia na dzień i coraz bardziej się przywiązuję. Chciałbym użyć Rails do zbudowania aplikacji sieci Web o podobnej funkcjonalności, takiej jak Scribd lub Docstoc. Jakie komponenty/klejnoty/wtyczki/biblioteki w Rails lub Ruby mogą być użyte do stworzenia aplikacji webowej o podobnej funkcjonalności? Aplikacja internetowa powinna mieć * konwersję Epub na obraz (jpeg) oraz pdf * Konwersję PDF na obraz (jpeg) oraz epub * PDF na Epub Chciałbym tylko sugestie dotyczące bibliotek lub wtyczek itp... do wykorzystania w celu uzyskania powyższych funkcjonalności za pomocą Railsów i co czyni je wyjątkowymi.


title: Szybka ekstrakcja do pliku tekstowego z bazy danych Oracle

text: Muszę wydobyć około 3 milionów rekordów z dwóch różnych baz danych do dalszego przetwarzania. Obecnie wykonuję zapytania poprzez SQL*Plus i buforuję wyniki do zwykłego pliku tekstowego. Te zapytania trwają około 10 minut każde (jest szybsze w jednej z baz danych), ale zamierzam poprawić te czasy. Znalazłem to narzędzie: http://www.iri.com/products/FACT, które ma robić dokładnie to, czego potrzebuję. Czy znasz jakieś inne narzędzie typu open source, którego mogę użyć, aby poprawić czasy ekstrakcji, a może lepszą technikę niż zwykłe buforowanie do pliku tekstowego?


title: Czym jest proces myślowy zorientowany obiektowo?

text: Przez ostatnie kilka miesięcy studiowałem OOP w połączeniu z implementacją MVC firmy Zend. Ogólnie jestem całkiem nowy w programowaniu, ale czuję, że powinienem uczyć się rzeczy we właściwy sposób, co dla mnie oznacza upewnienie się, że rozumiem _dlaczego_ rzeczy są robione tak, jak są. Odkryłem, że ucząc się, jak coś zrobić (cokolwiek, powiedzmy muzykę), najlepszym sposobem na nauczenie się, jak coś zrobić, jest przede wszystkim wiedza, dlaczego jest to zrobione w ten sposób. W każdym razie bardzo ciężko zmagałem się ze zrozumieniem, jak rozwijać własne modele biznesowe (tj. M MVC) i zdecydowałem, że to nie dlatego, że nie rozumiem ogólnie OOP, ponieważ studiowałem to od kilku lat. miesięcy i nie sądzę, by te pojęcia były bardzo trudne do uchwycenia. Uważam, że przykłady, które studiowałem, są bardzo intuicyjne. Wydaje mi się, że problemem jest proces przekładania własnych problemów na rozwiązania zorientowane obiektowo. Przykłady w książkach (które do tej pory czytałem) są zbyt oczywiste, więc przełożenie problemu na przedmioty nie jest bardzo trudne. Myślę, że może mi brakować abstrakcyjnego procesu wysokiego poziomu. Jakiś rodzaj listy kroków lub pytań, na które każde rozwiązanie obiektowe musi odpowiedzieć na najwyższym poziomie. Gdybyś miał opisać taki proces w nie więcej niż pięciu krokach, co by to było i dlaczego? Jaki jest najskuteczniejszy proces przełożenia dowolnego problemu na rozwiązanie zorientowane obiektowo?


title: Wielu czytelników w FIFO

text: Zadałem tutaj wcześniej pytanie dotyczące wielu pisarzy w FIFO i teraz wiem, że zapis jest bezpieczny dla wątków, o ile piszę mniej niż PIPE_BIF, tutaj jest link do tego limitu. A co z czytaniem? co jeśli masz dwóch (lub więcej) czytników w wielu wątkach do czytania z tej samej kolejki fifo, czy potrzebuję tutaj blokad? czy wszystko, czego potrzebuję, to czytać mniej niż PIPE_BUF? BTW, mówię o Linux FIFO i używam C.


title: W jaki sposób Powszechna Licencja Publiczna GNU (GPL) jest zgodna z definicją Open Source (OSD) inicjatywy Open Source Initiative (OSI)?

text: Z OSD OSI: > 1. Bezpłatna redystrybucja > > > Licencja nie może ograniczać żadnej stronie sprzedaży lub rozdawania oprogramowania jako składnika zbiorczej dystrybucji oprogramowania zawierającej programy z kilku różnych źródeł. Licencja nie wymaga > honorarium lub innej opłaty za taką sprzedaż. oraz > 3. Dzieła pochodne > > > Licencja musi zezwalać na modyfikacje i dzieła pochodne oraz musi umożliwiać > ich dystrybucję na tych samych warunkach, co licencja oryginalnego > oprogramowania. Jeśli licencja jest GPL, to punkt 3 sugerowałby, że utwory pochodne muszą być również rozpowszechniane na GPL, co jest intencją takiej „wirusowej” licencji. W połączeniu z punktem 1 wydaje się, że istnieje sprzeczność, ponieważ GPL wyraźnie ogranicza sprzedaż oprogramowania. Ponieważ OSI wymienia GPL jako OpenSource, muszę czegoś przeoczyć. Czy ktoś może to wyjaśnić? EDYCJA: Sekcja FAQ witryny OSI wydaje się mówić o tym problemie, ale nadal nie jestem pewien, co do ich odpowiedzi. Myślę, że powinno to oznaczać, że możesz używać kodu GPL w sprzedawanym oprogramowaniu, o ile na żądanie dostarczysz również nowy kod źródłowy. Jednak sekcja 9 mówi: > 9. Licencja nie może ograniczać innego oprogramowania > > > Licencja nie może nakładać ograniczeń na inne oprogramowanie, które jest > dystrybuowane razem z licencjonowanym oprogramowaniem. Na przykład licencja nie może > wymagać, aby wszystkie inne programy rozpowszechniane na tym samym nośniku były > oprogramowaniem open source. Czy rozróżnienie, że oprogramowanie pochodne musi być objęte tą samą licencją (punkt 3), ale „w pakiecie” może być objęte inną licencją? Nie jestem do końca pewien, co oznacza „rozpowszechniane na tym samym nośniku”.


title: Czy powinniśmy napisać to od nowa?

text: W pracy mamy oprogramowanie napisane w PL/SQL - Oracle Forms 10g, które uruchamia oprogramowanie jako aplet Java. Moja firma kupiła oprogramowanie i musimy je rozwijać, ale uważamy, że technologia Oracle Forms 10g z apletem Java jest przestarzała. Jest to technologia z ostatniej dekady i musimy przenieść oprogramowanie na inną platformę (np. Web lub inną platformę). Czy to dobry czy zły pomysł? I dlaczego?


title: Kolekcja umożliwiająca wyszukiwanie jednym z kilku kluczy

text: Jak nazywasz kolekcję, w której każdy element można wyszukać za pomocą **jednego** z wielu kluczy? Częściową, uproszczoną definicją w języku C# może być: class MyDataStructure<TKey1, TKey2, TValue> { private List<TValue> _values; //mapuj klucze na indeksy prywatne Dictionary<TKey1, int> _keys1; prywatny Dictionary<TKey2, int> _keys2; public TValue GetByKey1(klucz TKey1) ... public TValue GetByKey2(klucz TKey2) ... } W Javie istnieje `MultiKeyMap`, ale wygląda na to, że wyszukuje elementy w oparciu o kombinację kluczy, a nie przez **każdy klucz z osobna** . Czy to, co opisałem, ma ugruntowaną nazwę? ### EDYTUJ Jeśli nie ma ustalonej nazwy, możesz zaproponować nową. Lub określ swoje preferencje dla jednego z poniższych: 1. ChoiceKeyDictionary 2. AlternateKeyDictionary 3. DualKeyDictionary


title: Czy modyfikowanie kodu wyłącznie do celów testowych to zła praktyka?

text: Rozmawiałem z kolegą programistą na temat tego, czy modyfikowanie działającego fragmentu kodu tylko po to, aby można było go przetestować (na przykład poprzez testy jednostkowe), jest dobrą czy złą praktyką. Moim zdaniem jest to w porządku, oczywiście w granicach utrzymywania dobrych praktyk zorientowanych obiektowo i inżynierii oprogramowania (nie „upubliczniania wszystkiego” itp.). Zdaniem mojego kolegi modyfikacja kodu (który działa) tylko do celów testowych jest błędem. Prosty przykład, pomyśl o tym kawałku kodu, który jest używany przez jakiś komponent (napisany w C#): public void DoSomethingOnAllTypes() { var types = Assembly.GetExecutingAssembly().GetTypes(); foreach (var currentType in types) { // zrób coś z tym typem (np. przeczytaj jego atrybuty, proces itp.). } } Zasugerowałem, że ten kod można zmodyfikować, aby wywołać inną metodę, która wykona właściwą pracę: public void DoSomething(Assembly asm) { // nie poleganie już na Assembly.GetExecutingAssembly()... } Ta metoda zawiera obiekt Assembly do pracy, dzięki czemu możliwe jest przekazanie własnego Assembly w celu przeprowadzenia testów. Mój kolega uważał, że to nie jest dobra praktyka. Co uważa się za dobrą i powszechną praktykę?


title: Jak wyglądałby Twój schemat DB, gdybyś tworzył witrynę podobną do Reddit/Digg?

text: Właśnie dowiedziałem się czegoś dość interesującego o schemacie bazy danych Reddit: > Sposób, w jaki się zmieniliśmy, polega na użyciu „otwartego schematu”. Czasami nazywa się to > „wartość atrybutu jednostki”. Jest to w zasadzie duży magazyn kluczowych wartości. Mamy > dwa typy tabel dla każdego typu danych. Jest tabela „rzecz”, a następnie > tabela „dane”. Wszystko w Reddit składa się z tego, co nazywamy rzeczami: > użytkownicy, linki, komentarze, sub-Reddit, nagrody. >> Wszystko na Reddicie to jedna rzecz. Schemat tych elementów wygląda tak samo >. Wygląda jak ta górna tabela tutaj: wzloty, upadki, typ, utworzenie > data, niektóre właściwości, które są fundamentalne dla wszystkich obiektów w > Reddit. > > Następnie mamy tak zwaną tabelę „dane”, która jest zasadniczo tą ogromną > tabelą z trzema kolumnami: rzecz, o której mówimy, to lewa najbardziej > kolumna, następnie klucz i wartość. Na przykład te dwa łącza będą > reprezentowane przez dwa łącza w tabeli rzeczy, a następnie jeden wiersz w tabeli danych > dla każdej wartości tego łącza. Będzie klucz dla tytułu i wartość > dla tego tytułu dla tego linku; oraz klucz do adresu URL i klucz do > autora, a następnie klucz do liczby głosów spamu, które są na ten temat. Źródło: http://thinkvitamin.com/code/steve-huffman-on-lessons-learned-at-reddit/ Więc zacząłem się rozglądać, żeby zobaczyć, co robią inne podobne strony. Nie udało się znaleźć niczego o Diggu. SO robi coś bardziej tradycyjnego z tabelą Użytkownicy, Posty, Komentarze, Odznaki i Głosy. DotNetKicks i DotNetShout robią podobne (tradycyjne) rzeczy. Chciałem więc zapytać społeczność SO, jeśli projektujesz witrynę taką jak Reddit lub Digg, a nawet SO (w zasadzie dowolne witryny do głosowania społecznościowego) przy użyciu ASP.NET MVC i SQL Server, co byś zrobił? Jak byś to zaprojektował?


title: Modułowość/ponowne wykorzystanie aplikacji i baz danych .Net

text: Szukam wskazówek, jak zaprojektować aplikację pod kątem modułowości, oddzielenia problemów i ponownego wykorzystania. Pracuję nad aplikacją (ASP.Net, C#), która ma bardzo ogólne fragmenty funkcjonalności, które chciałbym móc rozłożyć, wszystkie warstwy, na komponenty wielokrotnego użytku. Oznacza to, że moduł obsługuje schemat bazy danych, dostęp do danych, API, wszystko tak, że następnym razem, gdy będę chciał z niego skorzystać, mogę po prostu zarejestrować moduł i podłączyć się do niego. Tworzenie modułów o funkcjonalności wielokrotnego użytku jest oczywiste, ale to, co mnie naprawdę dezorientuje, to co zrobić, jeśli chodzi o obsługę podstawowego schematu bazy danych wielokrotnego użytku, który obsługuje funkcjonalność modułu. W idealnym świecie zarejestrowałbym moduł i upewniłby się, że powiązany schemat bazy danych istnieje w bazie danych, tworząc schemat, jeśli jeszcze go nie było. Zakodowałbym moją zależną funkcjonalność przy założeniu, że tabele istnieją, wywołując funkcjonalność modułu za pośrednictwem biblioteki DLL, niezależnej od warstwy bazy danych. Coś w rodzaju bloku aplikacji buforowania/rejestrowania Biblioteki przedsiębiorstwa, który może tworzyć schemat bazy danych w docelowej bazie danych, aby użyć go jako magazynu danych. Moje pytania to: Jak myślisz, jak najlepiej to osiągnąć, po pierwsze pod względem architektury projektu, a po drugie struktury rozwiązania. Jakie znasz wzorce/frameworki, które istnieją i wspierają tego rodzaju rzeczy? Moje dotychczasowe przemyślenia: najczęściej korzystam z Entity Framework i SQL Server DB Projects. Myślałem o podejściu „czarnej skrzynki” do modułów funkcjonalności. Mógłbym użyć podejścia „code-first” w EF4 i użyć ObjectContext do utworzenia bazy danych, gdy moduł jest inicjowany. Oznacza to jednak, że wszystkie encje, które enkapsuluje mój moduł, zostaną odłączone od reszty aplikacji, ponieważ należą do wyabstrahowanego ObjectContext. Dalej - Tworzenie odpowiednich indeksów i referencji pomiędzy encjami domeny a encjami modułu byłoby praktycznie niemożliwe. Myślałem o zaadoptowaniu Biblioteki Enterprise i stworzeniu własnych bloków aplikacji. Nie jestem jednak pewien, jak byłoby to ładnie grać z Entity Framework (jeśli w ogóle). Podoba mi się pomysł budowania na sprawdzonych wzorcach i praktykach, aby zawrzeć ugruntowaną funkcjonalność wielokrotnego użytku. Pomyślałem o porzuceniu Entity Framework dla modułu i stworzeniu oddzielnego schematu bazy danych dla modułu z własnym zestawem procedur składowanych i ADO.Net. Następnie wdrożenie skryptu w czasie wykonywania, jeśli przesłuchanie wykaże, że nie istnieje. Ale po raz kolejny do rozwijania funkcjonalności poza modułem chciałbym użyć Entity Framework i musiałbym używać modułu osobno, odłączonego od domeny ObjectContext. Czy ktoś miał doświadczenie w tworzeniu tego rodzaju modułów typu full-stack? Jakie rady możesz zaoferować? Czy odgryzam więcej, niż mogę przeżuć?


title: Potrzebuję środowiska uruchomieniowego JavaScript

text: Czytam książki o programowaniu JavaScript i potrzebuję środowiska takiego jak IDLE w Pythonie, aby wpisywać polecenia JavaScript, a następnie zobaczyć wyniki, tak jak w IDLE. Czy istnieje środowisko, w którym możesz zrobić coś takiego?


title: Uwierzytelnianie Zend framework 2 - przechowywanie identyfikatora użytkownika tylko w sesji

text: Właśnie stworzyłem swoją pierwszą aplikację za pomocą Zend_Authenticate. Według niektórych samouczków, które przeczytałem, przechowują one kolumnę „e-mail” użytkownika. Czy to jest zalecane? Czytałem, aby przechowywać tylko identyfikator, a następnie przy każdym żądaniu pobieram użytkownika według identyfikatora. W ten sposób w sesji przechowywany jest tylko identyfikator. Czy jest to również zalecane w przypadku Zend? W każdym razie tutaj jest moja obsługa logowania użytkownika, byłbym wdzięczny za wszelkie uwagi. Zasadniczo uwierzytelniam. Jeśli to minęło, przechowuję identyfikator w pamięci uwierzytelniania i niestandardowej wiadomości flash. Skrypt następnie przekierowuje na stronę główną (na której formularz logowania zostanie zastąpiony panelem użytkownika - np. "Witamy John" - i wyświetli się moja wiadomość flashowa. Poniżej moja metoda loginAction: funkcja publiczna loginAction() { $form = new LoginForm(); $form->get('submit')->setValue('Login'); $request = $this->getRequest(); if ($request->isPost()) { // sprawdź poświadczenia użytkowników i uwierzytelnienie $this->getAuthService() ->getAdapter() ->setIdentity($request->getPost('email')) ->setCredential($request->getPost('password')); $result = $this->getAuthService()->authenticate();if ($result->isValid()) { // ustaw identyfikator użytkownika w pamięci $resultRow = $this->getAuthService()->getAdapter()->getResultRowObject (); $this->getAuthService()->getStorage()->write($resultRow->id); // ustaw flash messe nger $this->flashMessenger()->addMessage('Jesteś teraz zalogowany'); // przekierowanie na stronę główną return $this->redirect()->toUrl('/'); } } return new ViewModel(array( 'form' => $form, )); } }


title: Jak obsłużyć estymacje dla programistów dołączających do zespołu?

text: Iteracja już się rozpoczęła, do zespołu dołącza nowy programista, zadanie X zostało już oszacowane na 30 godzin przez innego programistę. Jaka jest najlepsza praktyka w tej sytuacji? * nowy programista pracuje z podaną oceną (założenie polega na tym, że wszelkie rozbieżności zostaną skorygowane przy obliczaniu prędkości?) * nowy programista ponownie oszacuje zadanie? (jeśli tak, to co jeśli jest znacznie wyższy i nie mieści się już w iteracji?) * podnieś ręce i wracaj do wodospadu? * coś zupełnie innego?


title: Jakość kodu w testach jednostkowych?

text: Czy pisząc testy jednostkowe warto poświęcić dodatkowy czas, aby kod był dobrej jakości i czytelny? Pisząc testy często łamię Prawo Demeter, aby pisać szybciej i uniknąć używania tak wielu zmiennych. Technicznie rzecz biorąc, testy jednostkowe nie są bezpośrednio wykorzystywane ponownie - są ściśle związane z kodem, więc nie widzę powodu, aby poświęcać im dużo czasu; muszą tylko być funkcjonalne.


title: Ile kodu trzeba wyprowadzić z innego źródła, zanim będą miały zastosowanie zasady licencyjne?

text: Próbując nie wymyślać koła od nowa, pracowałem nad warstwą odkażania tekstu w CMS. Odkryłem, że SimplePie ma naprawdę dobry w użyciu z kanałem RSS, ale ma wiele funkcji, których nie potrzebowałem (takich jak buforowanie obrazów, tworzenie względnych adresów URL bezwzględnych itp.), więc rzeczywista ilość Kod, którego używam, jest mniej więcej bezpośrednią kopią kodu SimplePie, może stanowić 20-30% oryginalnego kodu klasy `SimplePie_Sanitize`. Moje pytanie brzmi, ponieważ nie jest to dokładnie bezpośrednia kopia (zgadzam się, że są części, które są i części, które nie są takie, jak musiałem dostosować je do specyfikacji PHP 5.3.6 i co nie), ile z kod _ma_ być bezpośrednią kopią licencji BSD (której używa SimplePie) do zastosowania? Pamiętaj, że zamierzam dodać do kodu kilka własnych rzeczy, aby zapobiec atakom XSS, więc klasa może ostatecznie być tylko w 50% oryginalna i 50% skopiowana (lub przynajmniej 20 -30%, co z tego zostało). Z tym: **czy wystarczy proste oświadczenie „TO MA KOD Z TEGO PROJEKTU”, czy też muszę zastosować licencję BSD do _całego_ pliku kodu?**


title: Jak można zintegrować wstrzykiwanie zależności z językiem?

text: Zastanawiałem się trochę nad tym, jak można lepiej zintegrować iniekcję zależności bezpośrednio z językiem podobnym do C#. Wymyśliłem potencjalne rozwiązanie, o którym chciałbym poznać Twoją opinię. Nie używałem wielu frameworków do wstrzykiwania zależności, więc może być coś, co przeoczam. Gdy obiekt jest tworzony, a ta właściwość nie jest inicjowana za pomocą konstruktora lub inicjatora obiektu, żąda wystąpienia tego typu właściwości z jakiejś usługi globalnej. Podobnie rejestrujesz programy obsługi dla różnych typów w tej usłudze, aby można było utworzyć wystąpienie wstrzykniętego typu właściwości. Zaletą korzystania z tego rodzaju architektury IMO jest to, że jest ona dość elastyczna i łatwa w użyciu. Minusem jest to, że może być trochę narzutu na wywołanie singletona za każdym razem, gdy zainicjujesz klasę, która ma wstrzyknięcie. Z drugiej strony jest to problem tylko dla klas, które są często tworzone w rozwiązaniach o wysokiej wydajności, więc nie powinno to stanowić większego problemu. Być może w takich przypadkach przydałby się jakiś rodzaj fabryki. Myśl, problemy, pytania, lepsze pomysły? **Code** public class SomeClass { public SomeClass() { //niejawne zachowanie, jeśli Animal nie jest ustawione w konstruktorze lub inicjatorze this.Animal = GlobalInjector.Get(this,typeof(Mammal)) } public injectable Mammal Animal { get; ustawić; } } GlobalInjector.Register(typeof(Mammal), () => return new Mammal(someParameter));


title: Potrzebuję szybkiego uruchomienia aplikacji internetowych opartych na Javie, Apache i Javie, aby korzystać z JasperReports

text: Przepraszam, to **NIE** duplikowane pytanie, po prostu je przeczytaj, jestem całkowicie nowy w świecie Java, jestem programistą .NET i mam dobre doświadczenie w ASP.NET. Teraz mam zadanie zrobić demo dla JasperReport, potrzebuję **SZYBKI** start do Javy i aplikacji webowej Java na Apache, a potem wymyślę jak używać _JasperReport_. Bardzo dziękuję ludziom,


title: Konwencje nazewnictwa i organizacja pakietów

text: Przez większość czasu programowałem w Javie, C#, Pythonie i AS3 i we wszystkich tych językach są _pakiety_ (lub coś takiego). Problem, który znalazłem, dotyczy konwencji nazewnictwa, a nawet organizacji pakietów. Potrzebuję, aby ktoś mi powiedział, DLACZEGO jest to: `com.company.app.type.Object` lub `org.authorname.project.type.Object` lepiej niż to: `app.feature.Object` lub `app.module. Object` * * * Inny przykład: Dlaczego: com +--company +--app +--events | |--FunkcjaJedenWydarzenieA | |--FunkcjaOneEventB | |--FunkcjaOneEventC | |--FunkcjaDwaZdarzenieA | |--FunkcjaDwaZdarzenieB | +--modele | |--Funkcja pierwsza | |--Funkcja druga | +--services |--FeatureOneServiceA |--FeatureTwoServiceA |--FeatureTwoServiceB Jest „lepsze” niż to: firma +--app +--feature +--one | |--Model | | | +--zdarzenia | | |--ZdarzenieA | | |--ZdarzenieB | | |--ZdarzenieC | | | +--usługi | |--UsługaA | +--dwa |--Model | +--zdarzenia | |--ZdarzenieA | |--ZdarzenieB | +--services |--ServiceA |--ServiceB W pierwszym wszystkie zostały zorganizowane według „typów obiektów”, ale „cechy” są mieszane, ale w drugim organizacja jest według „cechy” i każdy ma swoje własne przedmioty; więc możesz zobaczyć jedną cechę dobrze oddzieloną od drugiej. Czy ktoś może mi więc powiedzieć, dlaczego wiele firm i programistów woli to pierwsze? PS: Przepraszam za mój słaby angielski


title: Dopasowanie bazy danych zorientowane na dokument a zorientowane na kolumny

text: Mam aplikację intensywnie korzystającą z danych, która rozpaczliwie potrzebuje przeróbki bazy danych. Ogólny model danych: istnieją rekordy z identyfikatorami RID, pogrupowane według identyfikatorów grup (GID). Rekordy mają dowolne pola danych (może 5-15), z których kilka jest obowiązkowych, a reszta jest opcjonalna, a więc rzadka. Ogólny model użycia: Istnieje WIELE i WIELE zapisów. Przechowywane są miliony do miliardów rekordów. Bardzo często są one kojarzone z nowymi identyfikatorami GID, ale czasami są kojarzone z istniejącymi identyfikatorami GID. Nie ma tylu odczytów, ale kiedy się zdarzają, muszą być dość szybkie lub przynajmniej stałe, niezależnie od rozmiaru bazy danych. A kiedy nastąpią odczyty, będzie musiał pobrać wszystkie rekordy/identyfikatory RID z określonym GID. Nie muszę wyszukiwać według wartości pól rekordu. Przede wszystkim będę musiał wykonać zapytanie przez GID i być może RID. Jakiej implementacji bazy danych powinienem użyć? Przeprowadziłem wstępne badania między bazami danych zorientowanymi na dokumenty i zorientowane na kolumny i wydaje się, że te zorientowane na dokumenty są dobrze dopasowane pod względem modelu. Mogłem przechowywać wszystkie rekordy razem pod tym samym kluczem dokumentu, używając GID. Ale tak naprawdę nie mam żadnego pożytku z ich możliwości przeszukiwania samej zawartości dokumentu. Podoba mi się prostota i skalowalność baz danych zorientowanych kolumnowo, takich jak Cassandra, ale jak powinienem modelować moje dane w tym paradygmacie, aby uzyskać optymalną wydajność? Czy mój klucz powinien być identyfikatorem GID i czy powinienem utworzyć kolumnę dla każdego rekordu/RID? (może być tysiące lub setki tysięcy rekordów w grupie/GID). A może mój klucz powinien być identyfikatorem RID i upewnić się, że każdy wiersz ma kolumnę dla wartości GID? Co skutkuje szybszym zapisem i odczytem w tym modelu?


title: Jak organizować projekty z zależnościami od BitBucket?

text: Zarówno Mercurial, jak i BitBucket przyjmują jedno podstawowe założenie: 1 repozytorium = 1 projekt. Jeśli mam projekt, który ma zależność (bibliotekę), która jest współużytkowana przez wiele projektów, to założenie staje na przeszkodzie. Teraz nie jest już możliwe posiadanie oddzielnej strony BitBucket dla każdego projektu, przy jednoczesnym zachowaniu możliwości zatwierdzania wersji atomic w wielu projektach. Jeśli umieszczę wszystkie projekty w jednym repozytorium, wszystkie staną się jednym „projektem” na BitBucket. Jeśli umieszczę je w oddzielnych repozytoriach, nie będzie już można wiedzieć, która wersja projektu biblioteki była używana w wersji X zależnego projektu. Jak ta sytuacja jest zwykle rozwiązywana w BitBucket, czy też wyraźnie nie ma wsparcia dla tego powszechnego scenariusza?


title: Jak konkurencyjne są stanowiska startowe w inżynierii oprogramowania?

text: Tło: Przez ostatnie 4-5 lat pracowałem na stanowisku ilościowego doradztwa finansowego (głównie modelowanie finansowe w Matlab, VBA, Excel). Mam dyplom z informatyki (BA) i matematyki (BA). Chcę dołączyć do firmy start-upowej, aby powiązać moją karierę z moją pasją: technologią. Brakuje mi oficjalnego doświadczenia w "tworzeniu oprogramowania" (SDLC), ale mam bardzo dużo zaprogramowanych do pracy i osobiście (Python, PHP, C++, itp.). Pytanie: Jak konkurencyjne są stanowiska inżyniera oprogramowania w firmach typu start-up? Czy będzie mi trudno znaleźć kogoś, kto mnie zatrudni, nie mając „oficjalnego” doświadczenia w tworzeniu oprogramowania? Czy ktoś ma dla mnie jakieś wskazówki, jak osiągnąć swój cel?


title: Algorytm generowania liczb losowych dla ludzkiego mózgu?

text: Czy znasz lub wymyśliłeś jakieś praktyczne, proste do nauczenia się „w głowie” algorytmy, które pozwalają ludziom generować (nieco „prawdziwe”) liczby losowe? Mówiąc „w głowie” mam na myśli… najlepiej bez żadnych zewnętrznych narzędzi i urządzeń. Pożądana jest również wysoka wydajność (wiele liczb losowych na minutę). Zapytałem o to na SO, ale nie wzbudziło to dużego zainteresowania. Może to lepiej pasuje do programistów.


title: Jaka jest motywacja TypeScript?

text: Mieliśmy JavaScript, potem Flash, potem Silverlight i HTML5. Więc jaka jest motywacja TypeScript? Jakie problemy zostaną rozwiązane i jakie ulepszenia uzyskamy dzięki TypeScript? http://www.typescriptlang.org/


title: Czy jest jakiś konkretny powód, aby używać klauzuli „else if”?

text: Wszyscy używamy if ..else if.. else. Ale nadal jestem zdezorientowany, dlaczego używamy **jeżeli**. Gdzie **jeśli** robi to samo, co **jeżeli**. Dlaczego więc używamy **jeżeli**? Jakieś konkretne powody tego? Czy jest jakiś algorytm, w którym użycie **jeżeli** jest obowiązkowe?


title: Jak zorganizować zestaw klas podświetlania składni?

text: Tworzę zestaw wyróżnień składni dla aplikacji. Języki to: * HTML (w szczególności HTML5) * JavaScript * PHP * CSS (w szczególności CSS3) Problem tkwi w sposobie organizacji klas. Ponieważ jest to aplikacja Qt, każdy język ma swoją własną klasę, która wywodzi się z QSyntaxHighlighter. Każda klasa nadpisuje funkcję `highlightBlock()`, która jest odpowiedzialna za kolorowanie dostarczonego bloku tekstu. Kod JavaScript może być zawarty w plikach `.js` jak również wewnątrz znaczników `<script></script>`. Podobnie style CSS mogą być zawarte w plikach `.css` jak również wewnątrz znaczników HTML `<style></style>`. Co więcej, zawartość HTML można znaleźć zarówno w plikach `.html` jak i `.php`. Każdy język ma własne rozszerzenie pliku i dlatego wymaga własnej klasy. **Jednak** ponieważ niektóre języki mogą być osadzone w sobie, musi istnieć sposób na uniknięcie duplikowania kodu. Innymi słowy, nie ma sensu posiadanie kodu parsującego JavaScript wewnątrz klasy podświetlania HTML _i_ klasy podświetlania JavaScript. Jaki byłby idealny sposób uporządkowania kodu? Oto kilka opcji, które przychodzą na myśl: * **Całkowicie abstraktuj kod analizujący.** Ta opcja wymagałaby usunięcia kodu analizującego dla każdego języka z klasy podświetlania składni dla tego języka. Wtedy kod parsujący mógłby z łatwością wywołać inne parsery w razie potrzeby. Ta opcja brzmi dobrze, ale byłaby bardzo złożona. * **Użyj dziedziczenia.** Ta opcja nie wydaje się dobrym pomysłem, ale mimo to uznałem, że warto o niej wspomnieć. W tym przypadku miałbym klasę `PHP_SyntaxHighlighter`, która wywodzi się z `HTML_SyntaxHighlighter`, która z kolei wywodzi się zarówno z `JS_SyntaxHighlighter` jak i `CSS_SyntaxHighlighter`. Pomysł polega na tym, że klasy kontenerów (takie jak HTML) mogą w razie potrzeby wywoływać nadpisaną metodę w klasie bazowej. Ta opcja wiąże się z wielokrotnym dziedziczeniem i dlatego nie będzie działać z Qt - dlatego tak naprawdę nie jest to prawdziwa opcja. * **Utwórz instancje innych klas i wywołaj funkcję `highlightBlock()`.** Ta opcja wymagałaby stworzenia instancji innych klas, a następnie wywołania ich funkcji podświetlania składni dla danego języka. Jest to prawdopodobnie również dość trudne do zaimplementowania i wymagałoby wielu działań hakerskich. Oto opcje, na które patrzę. Czekam na wszelkie sugestie, wskazówki lub wskazówki dotyczące organizacji tych zajęć.


title: Jak zbudować stronę internetową, która pozwala użytkownikom wpłacać/przekazywać pieniądze?

text: Czy ktoś może mi pomóc zrozumieć proces, przez który trzeba przejść, aby założyć stronę internetową, taką jak tablica ogłoszeń, która pozwala użytkownikom wpłacać pieniądze na swoje konto, a następnie używać ich do kupowania/sprzedaży rzeczy? Czy można używać Paypal jako Escrow w taki sam sposób, jak robi to Ebay?


title: Jak dobrze aplikacja C++ komunikująca się przez Apache poradzi sobie z ruchem?

text: Piszę grę online, która musi działać w przeglądarce internetowej i obawiam się, czy moja architektura po stronie serwera poradzi sobie z obciążeniem. Projektuję dla 1000-2000 jednoczesnych klientów. Każdy klient będzie musiał wysyłać zapytania do serwera raz na 2 sekundy - więc moim celem projektowym jest 500-1000 transakcji na sekundę. Mój serwer gier komunikuje się z Apache przez FastCGI. Aktualnie używam Apache w systemie Windows. Wszystko to będzie działać na dedykowanym serwerze „dwurdzeniowym”. Sama aplikacja serwera gier jest napisana w C++, a transakcje są dość proste i mają dość niską przepustowość (może 2k danych na jeden), więc nie martwię się zbytnio serwerem gry. Mój klient jest napisany w Javascript i używa XMLHTTP do komunikacji z serwerem. Czy więc palę coś, aby myśleć, że mogę uzyskać od 500 do 1000 transakcji na sekundę? Jeśli tak, jakiej liczby mogę się spodziewać?


title: Jaki jest najlepszy sposób studiowania i angażowania się w pracę nad procesem inżynierii oprogramowania?

text: Może to zabrzmieć dość dziwnie dla kogoś, kto właśnie ukończył studia licencjackie z inżynierii oprogramowania, ale jestem bardzo zainteresowany procesem i ludźmi w inżynierii oprogramowania. (Powinieneś zobaczyć niektóre spojrzenia, jakie otrzymałem podczas wywiadów, gdy zostałem zapytany o moje zainteresowania zawodowe i mocne strony, po których nastąpiły pytania i ciekawe dyskusje na te tematy, które często zaskakują ankieterów.) Strona ludzi obejmuje kontakt z klientem (wymagania , testy akceptacyjne) i organizacyjne (zarządzanie i kierownictwo). Spojrzenie na moje transkrypcje i moje odpowiedzi na pytania tutaj w dużym stopniu pokazuje to. Miałem te zainteresowania na długo przed ukończeniem studiów: brałem dodatkowe zajęcia z ścieżki zorientowanej na proces, a także drobne z zarządzania biznesem (koncentracja na zachowaniach organizacyjnych i zajęcia z przywództwa) i komunikacji (koncentracja na komunikacji grupowej i technicznej). Kilka przykładów tego, co mnie interesuje: * modele procesów i metodologie * jakość procesów i oprogramowania * pomiary i metryki * zarządzanie projektami * zachowanie organizacyjne * komunikacja organizacyjna * przywództwo * cykl życia oprogramowania * inżynieria oprogramowania jako zawód ja dobrze czytam na te tematy. Przeczytałem kilka głównych książek - McConnell's Rapid Development, Software Project Survival Guide, Software Estimation, Professional Software Development, Boehm's Software Engineering Economics, Kan's Metrics and Models in Software Quality Engineering, Brooks's Mythical Man Month, DeMarco & Lister's Peopleware. Jestem również dobrze oczytany w całym SDLC, od wymagań oprogramowania Weigersa po kod McConnell's Code Complete i mam praktyczne doświadczenie w projektowaniu, budowie i konserwacji. Nie zrozum mnie źle – myślę, że strona techniczna jest fajna. Interesuję się architekturą, projektowaniem i programowaniem, ale bardziej interesuje mnie praca w zorientowanej na ludzi stronie tworzenia oprogramowania. Jednak jako inżynier oprogramowania na poziomie podstawowym nie ma zbyt wielu możliwości (nawet z 2-letnim doświadczeniem kooperacyjnym i letnim w terenie). Teraz nie jestem do końca pewien, gdzie powinienem iść dalej. Obecnie mam bardzo fajną pracę w sektorze, w którym zawsze chciałem być, wykonując prace rozwojowe. Obejmuje to zarówno dalszy rozwój istniejącego oprogramowania, jak i rozwój nowego oprogramowania w najbliższej przyszłości. Planuję również zostać certyfikowanym specjalistą ds. rozwoju oprogramowania IEEE za około 2 lata i być może samodzielną nauką dla certyfikowanego współpracownika PMI w zakresie zarządzania projektami, zanim uzyskam kwalifikację na specjalistę ds. zarządzania projektami. Moje osobiste pytanie brzmi: jak jestem na dobrej drodze? Mam jednak również o wiele bardziej istotne pytania, które można by zastosować do wszystkich inżynierów oprogramowania na wczesnym etapie kariery, którzy chcą zająć się zarządzaniem projektami/zarządzaniem procesami: * * * * Dopóki nie pojawią się możliwości zostania liderem, co może wejść- poziom / początkujący profesjonalny inżynier oprogramowania w pracy? Czy jest coś szczególnego, co można zrobić, poza szukaniem i/lub czekaniem na okazję do zaprezentowania się? * Jakiego rodzaju materiały można studiować samodzielnie, zwłaszcza w zakresie tych tematów lub tematów pokrewnych, które pomogłyby przygotować się, gdy ktoś wchodzi na te stanowiska? * Jeśli chodzi o kształcenie ustawiczne, jakie rodzaje programów dla absolwentów koncentrowałyby się na tych tematach? Niekoniecznie konkretne uniwersytety, ale czy byłyby to zazwyczaj programy inżynierskie, programy biznesowe, czy jakieś programy multidyscyplinarne? Jak postąpić ze znalezieniem uniwersytetów z programami oferującymi tego rodzaju edukację? * Gdzie jest obecny stan wiedzy w tych badaniach? Dotyczy to zarówno publikacji, jak i lokalizacji kluczowych graczy (uniwersytety, organizacje, konferencje itd.)?


title: Jak aplikacja Silverlight może rozmawiać z inną aplikacją na komputerze Mac?

text: Czy istnieje sposób, aby aplikacja Silverlight poza przeglądarką mogła komunikować się z inną aplikacją (na przykład aplikacją Objective-C) zainstalowaną na komputerze Mac? Każda pomoc lub sugestia będą bardzo mile widziane.


title: Czy dystrybucja poprawek jest zgodna z GPL?

text: Projektuję dystrybucję, a niektóre z dołączonych pakietów oprogramowania są utrzymywane w taki sposób, że moje repozytorium źródłowe w rzeczywistości nie zawiera kodu źródłowego, ale są one dołączone jako właściwość `svn:externals` lub lista tylko adresy URL repozytorium i są sprawdzane w drzewie źródłowym przed budowaniem. Czasami oprogramowanie wymaga poprawki lub dwóch, aby poprawnie zbudować lub działać. Te łatki _są_ zawarte w drzewie źródłowym i są automatycznie stosowane, ale nie są uwzględniane w wyniku końcowym. Repozytorium jest publiczne i każdy może pobrać łatki, które są regularnie utrzymywane. Moje pytanie brzmi, czy którykolwiek z tych ustawień narusza GPL? Naprawdę chcę rozpowszechniać na licencji GPL lub kompatybilnej, ale nie znam się zbyt dobrze na języku prawniczym. Czy musiałbym hostować migawki repozytorium po opublikowaniu, aby zachować pełną zgodność, czy mogę po prostu hostować poprawki?


title: Jak wspierasz swój kod po zakończeniu zatrudnienia?

text: Jak wygląda proces opuszczania firmy (lub nawet grupy/oddziału) w zakresie obsługi kodu? Czy najlepiej odpowiedzieć na wszystkie pytania? Czy dajesz pozostałym programistom dostęp do siebie jako przyszłego zasobu? Jeśli tak, czy istnieje sposób, aby nie dać pełnego dostępu? Doświadczyłem z pierwszej ręki, gdzie odpowiedzi na temat ogólnej architektury oprogramowania od pierwszego dewelopera byłyby nieocenione. Rozumiem, że jeśli potrzebna jest poważna pomoc, to staje się to typowym przypadkiem negocjacji zatrudnienia jako umowy wsparcia. Gdyby jednak potrzebna była poważna pomoc, jakie kroki możesz podjąć, aby ułatwić ten proces kontaktu z Tobą? Myślałem o zrobieniu czegoś takiego jak utworzenie adresu (YOUR_NAME)_codesupport @ (YOUR_FAVORITE_EMAIL_CLIENT).com. **Moja charakterystyka sytuacji:** Uczę się w trybie współpracy i dlatego poruszam się po firmach w ciągu 4 miesięcy. Oznacza to zapoznanie się z wieloma nowymi bazami kodu, a także pozostawienie sporej części kodu osieroconego, gdy odchodzę z firmy. Źle się czuję, jeśli zostawię śmieciowy kod.


title: Czy istnieją realistyczne/użyteczne rozwiązania kontroli źródła dla programów logiki drabinkowej?

text: Wydaje się, że kontrola wersji programów drabinkowych (LL) dla programowalnych sterowników logicznych (PLC) praktycznie nie istnieje. Może to być spowodowane tym, że LL jest językiem wizualnym i ma tendencję do przechowywania w plikach binarnych, lub może dlatego, że kontrola kodu źródłowego nie "przyczepiła się" w kręgach inżynierii kontroli procesów - a może mój Google-Fu jest dziś słaby. Czy znasz jakieś realistyczne i przydatne rozwiązania do kontroli wersji dla takich systemów? Definicje: * realistyczne = zmiany w programach są śledzone przez użytkownika i podlegają przywróceniu oraz łączeniu * przydatne = system integruje się z wizualnymi projektantami LL, nie jest ograniczony do LL od jednego producenta PLC i nie kosztuje absurdalnie dużo pieniędzy ? Uwaga: Słyszałem o ludziach używających SVN lub Mercurial et al do śledzenia plików binarnych, ale nie sądzę, aby możliwości porównania/scalania wyświetlały czytelne różnice. UZUPEŁNIENIE: Na początku musieliśmy obsługiwać tylko sterowniki PLC Allen-Bradley. Teraz mamy również sterowniki Siemens i MicroLogix. Wciąż szukam realnego rozwiązania...


title: kopia zapasowa folderu Visual Studio i bazy danych sql

text: Lubię robić kopie zapasowe każdej nocy lub co tydzień. Jestem pewien, że istnieje wydajniejszy sposób niż wysyłanie do siebie e-mailem folderu rozwiązania i plików bazy danych! Nie mam fundacji zespołowej ani żadnych komercyjnych produktów tego typu. Szukam darmowego oprogramowania.


title: Java i .NET: Dlaczego domyślnie używane są różne algorytmy sortowania?

text: Zastanawiam się tylko, dlaczego `Java` i `.NET Framework` domyślnie używają innego algorytmu sortowania. **W Javie** `Array.Sort()` używa domyślnie algorytmu Merge Sort i jak podaje Wikipedia.com: > W Javie metody Arrays.sort() używają sortowania przez scalanie lub dostrojonego sortowania quicksort > w zależności od typów danych i dla wydajności implementacji przełącz na > sortowanie przez wstawianie, gdy sortowanych jest mniej niż siedem elementów tablicy **W .NET Framework** `Array.Sort/List.Sort()` używa szybkiego sortowania jako domyślnego algorytmu sortowania (MSDN): > Lista. Sort() używa Array.Sort, który używa algorytmu QuickSort. Ta implementacja > wykonuje sortowanie niestabilne; to znaczy, jeśli dwa elementy są > równe, ich kolejność może nie zostać zachowana. Natomiast sortowanie stabilne > zachowuje kolejność równych elementów. Patrząc na świetną tabelę „Porównanie algorytmów” możemy zauważyć, że oba algorytmy zachowują się zupełnie inaczej z perspektywy najgorszego przypadku i użycia pamięci: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/fslGh .png) Zarówno `Java` jak i `.NET` są świetnymi frameworkami do tworzenia rozwiązań dla przedsiębiorstw, obie mają platformy do programowania wbudowanego. Dlaczego więc domyślnie używają innego algorytmu sortowania, jakieś myśli?


title: Czy mogę zintegrować oprogramowanie w ramach Creative Common w celu uzyskania korzyści komercyjnych?

text: Jak mówi pytanie na puszce: Czy mogę zintegrować oprogramowanie w ramach Creative Common dla zysku komercyjnego? Chcę używać oprogramowania Creative Common (np. http://thrivingkings.com/apprise/) dla niektórych dużych klientów.


title: Zaangażować się?

text: Siedzę przy komputerze od około półtorej godziny, przeglądam i próbuję znaleźć coś wartościowego do zrobienia, co by mi się podobało. Fakt, że tu jestem, pokazuje, że nic nie wymyśliłem. W każdym razie zastanawiałem się nad dobrymi sposobami zaangażowania się w projekty open source i/lub wnoszenia wkładu w różne rzeczy, bez bycia ekspertem w jakimkolwiek używanym języku, jeśli to w ogóle możliwe. Jeśli to pomaga, szukam zwłaszcza projektów internetowych, więc... tak. Wszelkie sugestie będą mile widziane!


title: Open Source - pierwszy projekt

text: Jestem dość początkującym programistą - 6 miesięcy stażu. Postanowiłem zapisać się do projektu Open Source, aby nauczyć się nowych umiejętności i zostałem do niego przyjęty. Wygląda na to, że projekt jest dość wcześnie w swoim życiu. Akceptują początkujących programistów i wyjaśniłem, że nimi jestem. Oczywiście, ponieważ jest to mój pierwszy wkład, nie chcę nikogo denerwować przy projekcie. W związku z tym, o czym muszę wiedzieć? Jakaś konkretna etykieta, o której powinienem wiedzieć? Czy będę potrzebować konkretnego oprogramowania? Mam VS2010, który jest w porządku dla C#, ale co z kontrolą źródła? Czy jest to zarządzane przez witrynę Codeplex? Dziękuję.


title: Testy jednostkowe dla warstwy abstrakcji bazy danych

text: Wcześniej zadawałem to pytanie o stworzenie algorytmu łączenia rekordów z wielu baz danych i od tego czasu zbudowałem jego szczątkową wersję (która nie pozwala na skojarzenia między tabelami między bazami danych, aby na razie było to proste), a teraz Próbuję to przetestować. Do tej pory testowałem robienie złączeń, niestandardowych kolumn, gdzie i posiadanie klauzul, kolejności według i limitów, i wydaje się, że wszystkie działają idealnie. Ale większość moich aplikacji, które wykonują zapytania do bazy danych, jest dość prosta, z zaledwie kilkoma sprzężeniami, kilkoma niestandardowymi kolumnami i kilkoma innymi bitami i kawałkami informacji, więc zastanawiałem się, czy istnieje ładna seria naprawdę złożonych zapytań mógłbym przez to przejść, aby upewnić się, że naprawdę może zrobić wszystko, co byłoby potrzebne w 99% aplikacji? Wiem, że jest to trochę obszerne, ale nawet kilka skomplikowanych zapytań byłoby fantastyczne, aby to przetestować.


title: System kontroli źródła plików binarnych

text: W pracy mamy przestarzały system napisany w Visual FoxPRO. Wszystko w foxpro to tabela, nawet formularze, więc w zasadzie, jeśli otworzysz plik formularza za pomocą edytora tekstu, niewiele się nauczysz. Czy ktoś wie o narzędziu do kontroli źródeł, które obsługuje łączenie i zarządzanie plikami binarnymi? Na razie konwertuję to, co mogę przekonwertować na tekst, używam narzędzia tekstowego, takiego jak scalanie zmian i ręczne ich zastępowanie, aby zespół pracował w jednej wersji, a następnie przesyłam rzeczy na serwer TFS. Wiem, że to nie jest genialne... proszę o radę


title: Jak zaimplementowane są cechy Scala w JVM?

text: Czytałem o cechach w Scali. Są niesamowite. Jestem ciekaw, jak rozszerzają klasę, nie powodując wielokrotnego dziedziczenia. Wiem, że JVM nie obsługuje wielokrotnego dziedziczenia, więc zastanawiam się, jak działają te rozszerzenia. Czy język dostarcza tylko cukru składniowego do kompozycji? A może kod w cesze jest zduplikowany w każdej klasie, która go używa?


title: Preferujesz normalizację bazy danych od przejrzystości schematu?

text: Pojawiło się nowe wymaganie na starej bazie kodu, która zasadniczo umożliwia bezpośrednią (wewnętrzną) komunikację między dwiema wcześniej nie bezpośrednio powiązanymi klasami użytkowników (przechowywanymi w różnych tabelach o zupełnie innym schemacie i, niestety, kod jest ledwo świadomy OO, dużo mniej zaprojektowane, więc nie ma klasy nadrzędnej). Ponieważ zamierzamy powiesić torbę na tej starej konfiguracji, która nigdy nie brała pod uwagę tej funkcjonalności, nie ma gwarancji, że nie będzie kolizji PK - biorąc pod uwagę używany zestaw danych, praktycznie jest to gwarantowane, że ISTNIEJĄ. Tak więc rozwiązanie wydaje się oczywiste: ~~zabij to ogniem i przepisz cały bałagan~~ Tabela mapowania. Otrzymałem dwie wskazówki dotyczące możliwych sposobów implementacji mapy, ale nie jestem DBA, więc nie jestem pewien, czy są jakieś plusy i minusy, które przegapiłem. W celu wyjaśnienia abstrakcji rozważ trzy grupy różnych danych użytkowników: Profesorowie, Administracja, Studenci (Nie, to nie jest zadanie domowe. Obietnica!) **Mapowanie 1** (professor_id, admin_id i student_id są obce klucze do odpowiednich tabel) | mailing_id (KLUCZ) | profesor_id | admin_id | student_id | -------------------------------------------------- ----- | 1001 | NULL | 87 | NULL | | 1002 | 123 | NULL | NULL | | 1003 | NULL | NULL | 123 | +/- w tym podejściu wydaje się dość ciężki w stosunku do wad: * Dwa „zmarnowane” pola w wierszu * Narusza 2NF * Podatne na wstawianie/aktualizowanie anomalii (wiersz z tylko 0-1 polem ustawionym na NULL, np.) Zawodowcy nie są jednak bez ich własnych zalet: * Mapowanie można wykonać za pomocą jednego wyszukiwania * Łatwe określenie danych "źródłowych" dla danego użytkownika na podstawie mailing_id Prawda, w głębi duszy nie podoba mi się ten pomysł. **Mapowanie 2** (załóżmy, że MSG_* to zdefiniowane stałe, typy wyliczeniowe lub inny odpowiedni identyfikator) | mailing_id (KLUCZ) | typ_użytkownika (UNIKALNY1) | identyfikator_wewnętrzny (UNIQUE2)| -------------------------------------------------- ---------------- | 1001 | MSG_ADMIN | 87 | | 1002 | MSG_PROF | 123 | | 1003 | MSG_STUDENT | 123 | Dzięki tej konfiguracji i unikalnemu indeksowi złożonemu {user_type, internal_id} wszystko staje się znacznie czystsze, 3NF jest utrzymywane, a kod aplikacji nie musi sprawdzać anomalii I/U. Minusem jest niewielka utrata przejrzystości w określaniu tabel źródłowych użytkownika, które muszą być obsługiwane poza DB, zasadniczo sprowadzając się do mapowania wartości user_type na tabele na poziomie aplikacji. W tej chwili (raczej mocno) skłaniam się ku drugiemu mapowaniu, ponieważ wada jest raczej niewielka. **ALE** boleśnie zdaję sobie sprawę z własnych ograniczeń i jestem pewien, że prawdopodobnie przegapiłem zalety lub przeszkody w obu kierunkach, więc zwracam się do mądrzejszych umysłów niż mój.


title: Adaptacja do środowiska zespołowego po wieloletnim samodzielnym rozwoju

text: Mam prawie 5 lat doświadczenia jako programista stron internetowych i czuję, że powinienem być teraz na średnim poziomie, ale kiedy chodzę na spacer, myślę, że nadal jestem w tym całkiem „młodzieżowy”. Oto, co moim zdaniem jest problemem: przez większość mojej kariery rzadko miałem jakieś realne wskazówki od starszego programisty i zero doświadczenia z zespołami programistów, więc musiałem przebić się przez wiele rozwiązań i zrobić wszystko cięte i suszone. W praktyce nie było czasu do stracenia jako jedyny człowiek odpowiedzialny za napisanie lub utrzymanie kodu. Z tego powodu nie mam formalnej wiedzy na temat rzeczywistego _procesu_ tworzenia oprogramowania i ostatecznie zdałem sobie sprawę, że kodowanie jest tylko niewielką częścią procesu. Bardzo podobałaby mi się praca z zespołem programistów z solidnym doświadczeniem, ale obawiam się, że próba dostosowania się do bazy wiedzy wymaganej w procesach programistycznych byłaby bardzo wyboista. Jako programista, który przez większość swojej kariery latał solo, co mogę zrobić, aby „zaaklimatyzować się” w pracy w większym zespole (co najmniej 5) doświadczonych profesjonalistów? Edycja: W tym celu nie zdałem wielu testów technicznych wydawanych przez firmy „wielkich szans”, które prosperują na swoim oprogramowaniu i programistach. Mówiąc ogólnie, nie mam na myśli jak Google, ale całkiem udany w obszarze geograficznym.


title: Jak radzić sobie z zapytaniami, które nie zwracają pełnych jednostek w Domain Driven Design?

text: W mojej aplikacji mam listę informacji, które są odejmowane od zapytania, które łączy informacje z kilku podmiotów. Sama w sobie bardzo powszechna sytuacja. Teraz odpowiednia metoda repozytorium powinna zwrócić listę zawierającą elementy odpowiedniego typu. Oczywiście wybór jednostki nie jest właściwy, ponieważ informacje, z którymi mamy do czynienia, obejmują wiele jednostek. Myślę, że to samo dotyczy zapytań o częściowe encje. Tworzenie nowego bytu również nie ma sensu, ponieważ tylko pomieszałoby model. Myślałem w kierunku czegoś takiego jak tworzenie DTO w warstwie aplikacji, ponieważ konkretne zapytanie naprawdę jest po to, aby spełnić wymagania aplikacji, a nie wymagania biznesowe. Zasadniczo prowadzi to do wprowadzenia pojęcia repozytoriów specyficznych dla aplikacji i zależności od warstwy aplikacji od tych specyficznych repozytoriów. Jakoś to nie jest w porządku. Czy istnieje bardziej odpowiednie podejście/wzór, którego mógłbym tutaj użyć?


title: Zgadnij, czy jest godzina przed południem czy po południu

text: Obecnie jestem w trakcie pisania parsera dat ludzkich. Przez ludzką datę mam na myśli, że powinien być w stanie interpretować ciągi jako „jutro o 2” i zwracać prawidłową datę w zależności od aktualnego czasu. Problem, z którym się borykam, to automatyczne wykrywanie brakującego tokena AM/PM. Na przykład, jeśli otrzymam wiadomość e-mail z informacją „Spotkajmy się jutro o 2”, wiem, że godzina 2 to w rzeczywistości godzina 14.00. Z drugiej strony, jeśli e-mail mówi „Spotkajmy się jutro o 11”, jest bardziej prawdopodobne, że 11 będzie 11 rano. Myślę, że w większości przypadków wystarczy proste porównanie. Jeśli liczba jest większa niż pewien limit _n_ , możemy założyć, że godzina to AM. Jeśli liczba jest mniejsza, to prawdopodobnie jest to PM. W powyższej próbie 2 było bardziej prawdopodobne, że to PM, a 11 to AM. Wiem, że zwykły dzień pracy to około 9-18, więc liczby mniejsze niż 6 lub większe lub większe niż 9 są w porządku. Łatwo możemy się domyślić. Ale co mam zrobić z 7 i 8? Tak więc mam dokładne pytanie, gdzie mam umieścić ten dokładny limit? Gdy liczby zbliżają się do 7~8, granica staje się bardziej niejednoznaczna. Próbowałem wyszukać poprzednią dokumentację dotyczącą tego problemu, ale nie mogłem znaleźć żadnej. Czy jest w tym jakaś konwencja? Moim zdaniem również ustawienia regionalne i/lub strefa czasowa mogą mieć wpływ na ten limit. Nawiasem mówiąc, nie interesują mnie nieostateczne odpowiedzi, takie jak „Moim zdaniem 7 to popołudnie” czy „Dla mnie 8 to poranek”. Bardzo interesuje mnie dokumentacja, która pomoże mi nakreślić ostateczną linię. Mam nadzieję, że opis problemu jest wystarczająco zrozumiały.


title: Czy ważne/konieczne jest poznanie metodologii tworzenia oprogramowania dla początkujących?

text: Jestem studentem i od niedawna zajmuję się programowaniem. W szczególności uczę się frameworka CodeIgniter - Książka, którą czytam to "Professional CodeIgniter". W książce autor wspomniał o Metodologiach Agile (i trochę trudno mi to zrozumieć). Chcę wiedzieć, czy konieczne jest nauczenie się metodologii przed rozpoczęciem produkcji oprogramowania, czy też powinienem najpierw nauczyć się kodowania, aby być w tym dobry?


title: Jakie są dobre pytania do rozmowy kwalifikacyjnej, które powinni zadać nietechniczni rekruterzy?

text: Dostałem możliwość udostępnienia banku pytań dla nietechnicznych rekruterów do zadawania kandydatom. Jednak wszystkie moje ulubione pytania podczas rozmowy kwalifikacyjnej wymagają od kogoś, kto zna się na temat, aby właściwie ocenił odpowiedź (np. jak zaprojektowałbyś X, co sądzisz o Y). Prawdopodobnie będę musiał mieć kombinację pytań C#/.Net i bardziej ogólnych pytań programistycznych, a trudne jest to, że wszystkie muszą mieć odpowiedzi, które rekruterzy mogą potwierdzić bez ich zrozumienia. jakieś pomysły?


title: Czy istnieje skalowalna strategia wielostanowiskowa z Codeigniter?

text: Od jakiegoś czasu szukałem wydajnego i bezpiecznego sposobu na włączenie funkcji wielostanowiskowych do uruchamiania kodu. Te dwa (jeden i dwa) artykuły wydały mi się dość interesujące, ale nie wydają się oferować skalowalnego sposobu na zrobienie tego. Z tych dwóch, metoda Johna Dennisa Pedrie (łącze dwa) wydawała się być bardziej przemyślana dla naszych celów. Załóżmy jednak, że masz 100, 500 lub 1000 oddzielnych witryn, czy ta metoda nadal jest najlepsza? Tj. czy posiadanie 500 oddzielnych plików konfiguracyjnych db w folderze i aktualizowanie ich za pomocą php byłoby najlepszym sposobem? Inną metodą, którą widzę jako przydatną, jest baza danych opcji konfiguracyjnych. Zaktualizuj bazę danych i możesz mieć dostęp do innej witryny. Wymagałoby to jednak przechowywania wszystkich nazw użytkowników i haseł bazy danych w postaci zwykłego tekstu. Nie widzę, żeby to się dobrze skończyło. Jakieś odpowiedzi, rady, wskazówki lub ciekawe przemyślenia?


title: Zrozum język skryptowy

text: Cytat z Wikipedii: > Język skryptowy, język skryptowy lub język rozszerzenia to język programowania, który **umożliwia kontrolę nad jedną lub kilkoma aplikacjami** i **sprawia, że > kompilator języka jest częścią środowiska uruchomieniowego języka** oraz w rezultacie > **umożliwia dynamiczne generowanie kodu**. „Skrypty” różnią się od > podstawowego kodu aplikacji, ponieważ są zwykle napisane w innym języku > i często są tworzone lub przynajmniej modyfikowane przez użytkownika końcowego. Skrypty > są często interpretowane na podstawie kodu źródłowego lub kodu bajtowego, podczas gdy aplikacja > jest zazwyczaj najpierw kompilowana do natywnego kodu maszynowego. 1. Zastanawiałem się, co oznacza "umożliwia generowanie kodu dynamicznie"? Czy kod w języku skryptowym nie jest pisany przed uruchomieniem, więc jak jest generowany dynamicznie? 2. Czy z definicji język skryptowy jest zawsze językiem interpretowanym? I odwrotnie, czy język interpretowany jest zawsze językiem skryptowym? Wydają się być bardzo blisko spokrewnieni, a nawet to samo. 3. W jaki sposób język nie obsługuje skryptów? Dziękuję i pozdrawiam!


title: Niezależność modelu w MVC i najbardziej efektywny sposób wykonywania wywołań metod

text: **TLDR:** Czy modele mają być zależne od aplikacji i całkowicie bezwartościowe podczas uruchamiania nowej aplikacji, czy też masz projektować modele niezależnie, aby działały jako samodzielne klasy/biblioteki? (To nie miałoby sensu z frameworkiem takim jak CodeIgniter, w którym rozszerzasz `CI_Model`, którego oczywiście nie ma w twoim projekcie Kohana.) Czytałem również kilka podobnych pytań do niektórych moich punktów tutaj, ale to jest główny punkt, na który nie znalazłem odpowiedzi. Od dłuższego czasu korzystam z CodeIgnitera, który wprowadził mnie do wzorca MVC. Chociaż zajęło mi to trochę czasu, opłaciło się im więcej czytałem, zastanawiałem się i inspirowałem się tym, jednak jest coś, co zawsze mnie denerwowało; jak prawidłowo złożyć poprawną, wydajną i działającą kompozycję obiektów. Biorąc pod uwagę trzy różne obszary robocze struktury MVC, których używam (kontroler, model i biblioteka - tak, powiedziałem biblioteka, do włączenia niezależnych klas), miałem trudności z podjęciem decyzji, czy model powinien działać jako samodzielna klasa, czy tylko działają jako struktura aplikacji jako tzw. „czarna skrzynka”, „model biznesowy” lub „model tłuszczu”. Utrzymuję moje kontrolery „chude” i staram się to robić, ponieważ cała dokumentacja, którą przeczytałem, próbowała to wskazać, ale ponieważ kontroler jest specyficzny dla aplikacji i nie jest niezależny (w taki sposób, że mógłbym go po prostu wziąć z aplikacji i zastosować ją do innej, zupełnie innej aplikacji), wpadłem w zakłopotanie, jeśli model ma zachowywać się w podobny sposób, po prostu będąc parą zorganizowanych klas „grubych” przywiązanych do głównej aplikacji, tracąc wszystkie swoje warto, jeśli przeniesiesz się do zupełnie nowego projektu. I dokładnie to jest sednem mojego problemu i naprawdę potrzebuję uzyskać krystalicznie jasną definicję tego. Aby pomóc Ci lepiej zrozumieć, o co mi chodzi, podam kilka przykładów: Tworzę aplikację w PHP w chwili, gdy mam model o nazwie `users.php`. W ramach tej klasy mam metody działające z tabelą 'users', takie jak: /** * Uruchamia dane logowania w bazie danych * @param string - nazwa użytkownika * @param string - hasło * @return user_id / false * */ public function VerifyLogin($username, $password) { $password = $this->_hashPassword($password); $this->db->where('nazwa_użytkownika', $nazwa_użytkownika); $this->db->where('hasło', $hasło); $this->db->where('aktywowane', 1); $this->db->where('usunięte', 0); $zapytanie = $this->db->get(DB_PREFIX.'users'); if ($zapytanie->liczba_wierszy() > 0) { $r = $zapytanie->tablica_wyników(); zwróć $r[0]['id']; // Identyfikator użytkownika } } Model jest ładowany do frameworka i wywołuję tę metodę z kontrolera w następujący sposób: $this->users->verifyLogin($_POST['login_username'], $_POST['login_password']); Poprzednio nazywałem to `$this->users->verifyLogin();`, pozwalając modelowi po prostu wziąć zmienne `$_POST` i samemu to rozpracować. Właśnie to zmieniłem, ponieważ zakładałem, że sterowanie wszystkimi wejściami i wyjściami powinno przechodzić przez kontroler, praktycznie pozostawiając model „właściwie w pełni zahermetyzowany” nawet mnie jako autorowi kodu. To pokazuje połączenie między moim kontrolerem a moim modelem, ale co, jeśli zdecyduję się na użycie niezależnej biblioteki, powiedzmy, że stworzyłem klasę Validation? Gdzie zaimplementowałbym tę samodzielną klasę? Załóżmy, że jest to fragment mojej aplikacji, w którym używam źle zaprojektowanej klasy walidacji, aby dać mi wyjątek: require_once('validator-class.php'); $val = nowy Walidator($_POST['login_username']); spróbuj { $val->max_length(16) ->min_length(4) ->alfa_numeric(); } Czy umieściłbym ten kod w kontrolerze czy modelu, aby uzyskać najlepszy efekt? Jeśli model byłby zależny od aplikacji, najbardziej sensowne byłoby delegowanie/wywołanie metod klasy biblioteki z poziomu modelu, a następnie bardzo łatwe wywołanie modelu w bardziej uproszczony sposób, taki jak metoda `save()` gdzie wszystko zostałoby załatwione za kulisami. Zacząłem się zastanawiać, czy kontroler ma być używany jako „główny obszar” do łączenia kropek, będący miejscem, w którym będę wywoływał metody każdej klasy, delegował je do modelu itp. z zachowaniem modelu 100 % poza klasą czystości, polegając wyłącznie na sobie i na pewno. Ale z drugiej strony, jeśli model ma być zależny od aplikacji, nie miałoby to większego sensu, ponieważ nie zabierałbym modelu ze sobą do nowego projektu i zamiast tego powinien po prostu wykonywać wszystkie wywołania i niechlujne procedury w ramach enkapsulowanej klasy. Muszę przeprosić za długie wyjaśnienie, ale zmagam się nawet z używaniem wzorca MVC z myślą o tym pytaniu do tego stopnia, że poważnie rozważam po prostu odpuszczenie i powrót do twardego, czystego PHP. Jakaś pomoc byłaby bardzo mile widziana. Ponadto kilka wskazówek dotyczących dokumentowania metod klas byłoby bardzo mile widzianych jako bonus. Wielkie dzięki!


title: Praca w branży w sztucznej inteligencji

text: Jako stosunkowo nowy student informatyki staram się znaleźć swoją niszę w tej szerszej dziedzinie. Moim głównym celem nie jest akademia, ale no cóż, praca. W związku z tym chcę wybrać jedną lub dwie specjalizacje, które przyniosą dwie korzyści: 1\. Interesuje mnie. Praca będzie dla mnie wciągająca i przyjemna. 2\. Właściwie mogę dostać pracę, robiąc to. Mój bardziej racjonalny mózg zachęca mnie do zrobienia czegoś takiego jak praca z bazami danych lub tworzenie stron internetowych, ponieważ prawdopodobnie będzie trwała potrzeba tego rodzaju pracy. Z drugiej strony pociągają mnie takie rzeczy, jak sztuczna inteligencja i uczenie maszynowe, ponieważ oba wydają się naprawdę fascynujące. Widziałem, jak robię naprawdę ekscytujące rzeczy w tej dziedzinie. Jednak często odnoszę wrażenie, że jest to bardziej sprawa akademicka niż coś z rzeczywistym zapotrzebowaniem przemysłu. (Chociaż to tylko moje bezpośrednie odczucie.) Czy uważasz, że specjalizacja AI może otworzyć wystarczające perspektywy pracy? Chociaż wydaje się to interesujące, jestem osobą, która nie ma nic przeciwko wykonywaniu pracy, która niekoniecznie jest tak interesująca, i bardziej interesuje mnie dostępność pracy i bezpieczeństwo w tym momencie. Twoje myśli są doceniane...dziękuję!


title: Zagadnienia zespołu rozproszonego SCRUM: Środowisko pracy

text: Dziś pojawiło się dla mnie jedno ciekawe zagadnienie. Kiedy w rozproszonym zespole SCRUM zaczynasz egzekwować jednolite środowisko pracy pod względem formatu kodu, wtyczek IDE (checkstyle & co), VCS, CI? Zespół jest w fazie eksploracyjnej, a celem nie jest kod jakości produkcji, ale raczej weryfikacja koncepcji. Czy nie jest narzutem egzekwowanie pewnych wspólnych zasad kodowania „a priori” – zanim członkowie zespołu zdecydują, które są naprawdę istotne dla ich przyszłej pracy? Korzystanie z tego rodzaju narzędzi jest z pewnością ogromną korzyścią, ponieważ działają one jak heurystyka, aby zminimalizować dług techniczny, ale egzekwowanie zasad jako „bez spacji ciągnących”, które naprawdę łamią kompilację Jenkinsa, wydaje mi się przesadą w fazie, która powinna być raczej skoncentrowana na łamaniu lodu niż na tworzeniu kodu produkcyjnego. Wzmianka 1: stworzone prototypy zostaną wyrzucone Wzmianka 2: chociaż chciałbym, aby wszystko było zrobione od początku - mam całkowitą świadomość, że nie jest to w 100% możliwe.


title: Gdzie jest dobre miejsce do nauki tworzenia systemu harmonogramów/spotkań w C#?

text: Nie harmonogram prac/zadań, ale rzeczywisty system spotkań, którego ludzie mogą używać do tworzenia wydarzeń cyklicznych. Powinien obsługiwać wiele wzorców powtarzalności, takich jak pierwszy poniedziałek każdego miesiąca, co wtorek/czwartek, konkretna data itp. Wszędzie, gdzie szukam, znajduję wiele przykładów harmonogramów pracy w C#, ale nie ma żadnych systemów terminów. Od jakiegoś czasu zajmuję się programowaniem jako hobby, ale nigdy wcześniej nie miałem do czynienia z systemem spotkań (próbowałem kilka razy, ale zrezygnowałem i przeszedłem do innych rzeczy). Jakie są dobre strony internetowe, na których można znaleźć samouczki na ten temat? A może są jakieś dobre książki na ten temat?


title: Znajdowanie „wolnego czasu” w ciągu dnia z listy wydarzeń

text: Mam listę wydarzeń, która zawsze jest posortowana chronologicznie. Po godzinie rozpoczęcia następuje zawsze czas zakończenia. Czasy to ciągi sformatowane jako „GGmmss”. // lista zdarzeń var events = [ '010000', // start '013000', // end... '053000', '060000', '161500', '184500'] // żądane wyjściowe var spares = [ '000000', // początek '010000', // koniec... '013000', '053000', '060000', '161500', '184500', '235959'] Jak mogę programowo utworzyć nową listę „wolny czas” od „000000” do „235959”? PS Próbuję to zrobić w JavaScript, ale każda koncepcyjna odpowiedź lub pseudokod też byłaby pomocna.


title: Parser języka programowania (w Javie) - Jaka byłaby lepsza alternatywa projektowa dla szczególnego przypadku?

text: ### Tło Obecnie projektuję własny język programowania jako projekt badawczy. Większość gramatyki zrobiłem i napisałem jako gramatykę bezkontekstową, która powinna działać tak, jak jest. - Teraz pracuję nad rzeczywistym kompilatorem, który powinien przetłumaczyć język na `binarny kod assemblera x86`, a dokładniej, pracuję nad `parserem` (front end). Składnia języka jest w większości bardzo podobna do Java/C/C++. Parser, który konstruuje pośrednią reprezentację z kodu źródłowego, działa w następujący sposób: Gramatyka jest zbudowana jako duże drzewo, w którym rzeczywisty kod źródłowy określa tylko liście; Każda zmienna składniowa (lub nieterminal) ma swoją własną klasę, a każda z tych klas ma metodę `static get(byte[] source, int offset)` która zwraca nowy liść (węzeł) lub `null` jeśli kod źródłowy składnia nie pasuje do tej nieterminalnej struktury. Nawiasem mówiąc, używam odmiany „przewidywania”. Dla nieterminalnego `DataType` wybrałem następującą strukturę gramatyczną: DataType: PrimitiveDataType | ArrayDataType | ComplexDataType ArrayDataType: DataType [] Czy wspomniałem, że ten język jest zorientowany obiektowo? Tak więc problem polega na tym, że kiedy wywoływana jest metoda `get` `DataType`, najpierw sprawdza, czy następujący jest prymitywny typ danych, wywoływana jest metoda `PrimitiveDataType` ``get`. Zakładając, że mamy tablicę, zwróciłoby to `null`, więc kontynuuje sprawdzanie, czy jest to `ArrayDataType`, wywołując metodę `get`. ### Problem Tablice mogą być tworzone z dowolnego typu danych, włączając w to same tablice (które wyglądają jak `Type[][]`). Metoda `get` typu „ArrayDataType” to ponowne wywołanie metody „get” typu „DataType”, aby dowiedzieć się, jakiego typu jest tablica. Niestety, w tym miejscu moja implementacja parsera nie powiedzie się, ponieważ to zachowanie powoduje pętlę! ### Pytanie Czy istnieją jakieś _dobre/lepsze_ alternatywy dla tego projektu?


title: Standard kodowania C# - Pozycja atrybutu w stosunku do celu

text: Myślałem, że jest to jeden z niewielu _rozwiązanych problemów_ w standardach/stylu kodowania C#; `Atrybuty` zawsze pojawiają się w wierszu powyżej elementu, do którego są stosowane _a la_ [SomeClassAttribute] class SomeClass { [SomeFieldAttribute] bool someField; [SomeEnumAttribute] SomeEnum { SomeValue } [SomeMethodAttribute] void SomeMethod() { } } Ale ostatnio zacząłem widzieć `Attributes` w połączeniu z rzeczą, do której są stosowane: [SomeClassAttribute] class SomeClass { [SomeFieldAttribute] bool jakieśPole; [SomeEnumAttribute] SomeEnum { SomeValue } [SomeMethodAttribute] void SomeMethod() { } } Na przykład w witrynie firmy Microsoft iw projekcie Open Source FileHelpers. Czy to tylko _lenistwo_ ze strony autora przykładowego kodu, czy coś, z czego ludzie faktycznie korzystają na co dzień, a jeśli tak, to dlaczego?


title: Idealny sposób na zdefiniowanie tabeli lub siatki w XML?

text:
## HTML

 Miesiąc	 Oszczędności

 Styczeń	 100 zł

 luty	 80 zł

 ## XAML <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> <RowDefinition Height="28" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width ="Auto" /> <ColumnDefinition Width="200" /> </Grid.ColumnDefinitions>    <TextBox Grid.Column ="1" Grid.Row="0" Margin="3" /> <TextBox Grid.Column="1" Grid.Row="1" Ma rgin="3" /> <TextBox Grid.Column="1" Grid.Row="2" Margin="3" /> <Button Grid.Column="1" Grid.Row="3" HorizontalAlignment="Do prawej " MinWidth="80" Margin="3" Content="Wyślij" /> </Grid> W języku HTML istnieje pewna niejednoznaczność dotycząca sposobu ustawiania szerokości kolumny. Musisz to określić w th/td, ale w tej samej kolumnie jest ich wiele. WPF rozwiązuje ten problem, wprowadzając „definicje”, ale następnie musisz jawnie określić, do której komórki chcesz wstawić każdy element, dodając wiele dodatkowych znaczników. Co się stanie, jeśli przegapisz komórkę lub spróbujesz umieścić dwa elementy w tej samej komórce? A co z czymś takim? <grid> <coldefs> <coldef width="150" /> <coldef width="100" /> </coldefs> <rowdefs> <rowdef height="50" /> <remainingrowdef height="auto" /> < /rowdef> <cell>Miesiąc</cell> <cell>Oszczędności</cell> <cell>Styczeń</cell> <cell>100 USD</cell> <cell>Luty</cell> <cell>80 USD</cell > </grid> Gdzie komórki wypełniają się od lewej do prawej, od góry do dołu? Za I przeciw? Inne opcje? * * * Co więcej, możesz również określić kolejność realizacji! Wystarczy dodać dodatkowy argument `<grid fill_order="left-right,top-bottom">`


title: Przekonaj kogoś, że aplikacji nie da się zrobić

text: Jestem głęboko zaniepokojony prośbą o opracowanie aplikacji na iPada do pomiaru rzeczywistego rozmiaru obiektu za pomocą aparatu. To po prostu niepraktyczne. Tłumaczenie obiektu 2D na 3D nigdy nie jest łatwe. Albo potrzebuję dodatkowego sprzętu, albo muszę poczynić wiele założeń (co prawie nigdy się nie sprawdzi). Niezależnie od tego będę potrzebował czasu. Jednak osoba, która poprosiła mnie o stworzenie aplikacji, jest nieugięta w swojej wizji. I stara się pokazać, że ma rację, wymieniając kilka istniejących aplikacji, które wykonują podobne zadania. Nie zdaje sobie sprawy, że wszystkie aplikacje, do których się odnosi, mają ocenę niższą niż trzy gwiazdki, co oznacza, że prawdopodobnie nie wykonują swojej pracy. Jak mogę przekonać tę osobę, że takiej aplikacji po prostu nie da się zrobić w praktyczny sposób, przez jednego programistę? Czy istnieje praca doktorska, którą mogę wykorzystać jako swoją obronę?


title: Czy powinienem używać metod abstrakcyjnych czy wirtualnych?

text: Jeśli założymy, że nie jest pożądane, aby klasa bazowa była klasą czystego interfejsu i korzystając z 2 przykładów poniżej, co jest lepszym podejściem, korzystając z definicji klasy metody abstrakcyjnej czy wirtualnej? * Zaletą wersji "abstrakcyjnej" jest to, że prawdopodobnie wygląda czyściej i zmusza klasę pochodną do podania sensownej implementacji. * Zaletą wersji „wirtualnej” jest to, że można ją łatwo pobrać przez inne moduły i wykorzystać do testowania bez dodawania wielu podstawowych frameworków, których wymaga wersja abstrakcyjna. Wersja abstrakcyjna: public abstract class AbstractVersion { public abstract ReturnType Method1(); public abstract ReturnType Method2(); . . public abstract ReturnType MethodN(); ////////////////////////////////////////////// Inna klasa implementacja jest tutaj //////////////////////////////////////////// } Wersja wirtualna: public class VirtualVersion { public virtual ReturnType Method1() { return ReturnType.NotImplemented; } public wirtualny ReturnType Method2() { return ReturnType.NotImplemented; } . . public virtual ReturnType MethodN() { return ReturnType.NotImplemented; }              //////////////////////////////////////////////         // Inny tu jest implementacja klasy /////////////////////////////////////////// / }


title: Dlaczego nie napisać wszystkich testów naraz podczas TDD?

text: Cykl czerwony – zielony – refaktoryzacja dla TDD jest dobrze ugruntowany i zaakceptowany. Piszemy **jeden** nieudany test jednostkowy i sprawiamy, że przechodzi on tak prosto, jak to tylko możliwe. Jakie są korzyści z tego podejścia w porównaniu z pisaniem **wielu** nieudanych testów jednostkowych dla klasy i sprawianiem, że wszystkie zdają za jednym razem. Pakiet testowy nadal chroni Cię przed pisaniem nieprawidłowego kodu lub popełnianiem błędów na etapie refaktoryzacji, więc co złego? Czasami łatwiej jest napisać wszystkie testy dla klasy (lub modułu) najpierw jako formę „zrzutu mózgu”, aby szybko zapisać wszystkie oczekiwane zachowania za jednym razem.


title: Używanie Ogórka z obiektami Page

text: W naszej aplikacji używamy Ogórka, ale wcześniej używaliśmy Selenium. Ogórek jest znacznie lepszy niż Selenium, ale może wydawać się skomplikowany, ponieważ trzeba napisać ogórka, definicje kroków mogą być obiektami strony. Używamy Celerity z Jrubym. Przepływ jest następujący: „korniszon” wywołuje „Definicję kroku” wywołuje „Obiekty strony”. Z jednej strony każdy tester QA piszący testy Cucumbera będzie musiał znać Ruby, aby używać obiektów strony, ale z drugiej strony możemy uniknąć duplikacji kodu i wielokrotnie łamanych testów. Jakie są plusy i minusy używania obiektów strony z Cucumberem? Czy powinniśmy przestać martwić się duplikowaniem kodu w testach i trzymać się definicji kroków zamiast obiektów strony?


title: Czy mogę utworzyć aplikację desktopową w języku Python z graficznym interfejsem użytkownika i uruchomić ją jako aplikację internetową?

text: Pracuję nad projektem, w którym wielu (kilkaset) użytkowników będzie musiało zdalnie uruchomić aplikację. Pomyśleliśmy, że uruchomienie aplikacji internetowej będzie najlepszym rozwiązaniem. (Uwaga: kiedy mówię o aplikacji internetowej, mam na myśli program, w którym użytkownik może wpisać adres URL, który następnie pozwoli użytkownikowi uruchomić aplikację, nad którą pracujemy zdalnie, bez żadnych instalacji lub ograniczonych instalacji w przeglądarce, z której korzysta) Mój problem polega na tym, że nie wiem, od czego zacząć tworzenie aplikacji internetowej. Sposób, w jaki to widzę (i popraw mnie, jeśli się mylę), istnieją dwa rodzaje aplikacji internetowych. Bogata aplikacja internetowa, która: > ma wiele cech charakterystycznych dla oprogramowania aplikacji komputerowych, zazwyczaj > dostarczana za pośrednictwem przeglądarki specyficznej dla danej witryny, za pośrednictwem wtyczki przeglądarki, > niezależnych piaskownic, intensywnego korzystania z Javascript lub maszyn wirtualnych. wiki lub „zwykłą” aplikację internetową podobną do Gmaila. Jestem bardzo zaznajomiony z Pythonem i tworzeniem graficznego interfejsu użytkownika przy użyciu wxPython. Czy można napisać program w Pythonie, a następnie uruchomić go jako webapp? Jeśli tak to jak?


title: Zarządzanie referencjami w projekcie open source .NET?

text: Jaka jest najlepsza praktyka zarządzania odwołaniami w projekcie open source .NET? Piszę małą bibliotekę, która będzie używać Json.NET. Czy powinienem sprawdzić bibliotekę DLL Json.NET bezpośrednio w kontroli źródła?


title: Czy używanie MVVM jest powszechne/poprawne, aby oczekiwać wielu widoków i odpowiadających im modeli widoków dla określonego modelu?

text: Rozważ nieco wymyślny model, który wygląda mniej więcej tak: class Player { public int Health; publiczna amunicja wewnętrzna; publiczna broń bieżąca broń; public PhysicalState State { get { if (this.speed <= 0.1) return PhysicalSpeed.Standing; /* i tak dalej dla Strafe_left, Running, itp. */ } } } W oczekiwanym grafice dla takiej gry wiadomo, że wyświetlacz heads-up (HUD) będzie wyświetlał takie rzeczy jak zdrowie i amunicja, podczas gdy awatar będzie pokaż broń i animację opartą na stanie fizycznym. Tak więc, zakładając, że masz HUD_View i Player_View, które rysują odpowiednio HUD i odtwarzacz, czy jest poprawne, w ramach MVVM, aby mieć 2 modele widoku dla modelu odtwarzacza, które są przeznaczone tylko do ujawnienia podzbioru informacji w modelu, czy też oczekuje się, że model zostanie również podzielony na dwie części? Czy jest coś, czego mi brakuje? Czy ktoś może mi wskazać lub podać bardziej konkretny przykład prawidłowego rozwiązania (nawet jeśli moje myślenie jest prawidłowe, abym mógł tutaj utrwalić swoje zrozumienie)?


title: Wiadomość Objective-C przekazująca powiązane zapytania

text: Uczę się Object-C po dobrej znajomości C/C++. Mam 2 pytania: 1. Czy przekazywanie komunikatów Obj-C i C++ vtable to dwa różne sposoby implementacji polimorfizmu, czy też są to dwie bardzo różne koncepcje, które błędnie zinterpretowałem w różnych implementacjach tej samej koncepcji? 2. Przeczytałem następujący wiersz z tego pliku PDF http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf > Polimorfizm przyjmuje pluralistyczny punkt widzenia i zauważa, że kilka > klas może mieć metodę o tej samej nazwie. Przeciążanie argumentów > przyjmuje punkt widzenia nazwy metody i zauważa, że może mieć > różne efekty w zależności od rodzaju obiektu, którego dotyczy. Jaka jest więc różnica?


title: Czy powinienem ujawnić IObservable<T> na moich interfejsach?

text: Mój kolega i ja mamy spór. Piszemy aplikację .NET, która przetwarza ogromne ilości danych. Otrzymuje elementy danych, grupuje ich podzbiory w bloki według pewnego kryterium i przetwarza te bloki. Załóżmy, że mamy elementy danych typu `Foo`, które docierają do jakiegoś źródła (na przykład z sieci) jeden po drugim. Chcemy zebrać **podzbiory** powiązanych obiektów typu `Foo`, skonstruować obiekt typu `Bar` z każdego takiego podzbioru i przetworzyć obiekty typu `Bar`. Jeden z nas zaproponował następujący projekt. Jego głównym tematem jest eksponowanie obiektów IObservable bezpośrednio z interfejsów naszych komponentów. // ********* Interfejsy ********** interface IFooSource { // strumień zdarzeń obiektów typu Foo IObservable<Foo> FooArrivals { get; } } interface IBarSource { // to jest strumień zdarzeń obiektów typu Bar IObservable<Bar> BarArrivals { get; } } / ********* Implementacje ********* class FooSource : IFooSource { // Tutaj umieszczamy logikę, która odbiera obiekty Foo z sieci i publikuje je w strumieniu zdarzeń FooArrivals. } class FooSubsetsToBarConverter : IBarSource { IFooSource fooSource; IObservable<Bar> BarArrivals { get { // Wykonaj kilka fantazyjnych operatorów Rx na fooSource.FooArrials, takich jak Buffer, Window, Join i inne, i zwróć IObservable<Bar> } } } // ta klasa zasubskrybuje źródło paska i wykona przetwarzanie class BarsProcessor { BarsProcessor(IBarSource barSource); nieważny Subskrybuj(); } // ******************** Główna ************************* klasa Program { public static void Main(string[] args) { var fooSource = FooSourceFactory.Create(); var barsProcessor = BarsProcessorFactory.Create(fooSource) // spowoduje to utworzenie FooSubsetToBarConverter i BarsProcessor barsProcessor.Subscribe(); fooSource.Run(); // to wchodzi w pętlę nasłuchiwania obiektów Foo z sieci i powiadamiania o ich przybyciu. } } Drugi zasugerował inny projekt, którego głównym motywem jest używanie naszych własnych interfejsów wydawcy/subskrybenta i używanie Rx wewnątrz implementacji tylko wtedy, gdy jest to potrzebne. //********** interfejsy ********** interface IPublisher<T> { void Subscribe(ISubscriber<T> subskrybent); } interface ISubscriber<T> { Akcja<T> Callback { get; } } //********** implementacje ********* class FooSource : IPublisher<Foo> { public void Subscribe(ISubscriber<Foo> Subscriber) { /* ... */ } // tu umieszczamy logikę, która odbiera obiekty Foo z jakiegoś źródła (sieci?) publikuje je zarejestrowanym subskrybentom } class FooSubsetsToBarConverter : ISubscriber<Foo>, IPublisher<Bar> { void Callback(Foo foo) { // tutaj umieść logikę, która agreguje obiekty Foo i publikuje Bars, gdy otrzymamy podzbiór Foos, który spełnia nasze kryteria // może używamy tutaj Rx wewnętrznie. } public void Subscribe(ISubscriber<Bar> subskrybent) { /* ... */ } } class BarsProcessor : ISubscriber<Bar> { void Callback(Bar bar) { // tutaj umieszczamy kod przetwarzający obiekty Bar } } // ********** program ********* class Program { public static void Main(string[] args) { var fooSource = fooSourceFactory.Create(); var barsProcessor = barsProcessorFactory.Create(fooSource) // spowoduje to utworzenie BarsProcessor i wykonanie wszystkich niezbędnych subskrypcji fooSource.Run(); // to wchodzi w pętlę nasłuchiwania obiektów Foo z sieci i powiadamiania o ich przybyciu. } } Jak myślisz, który z nich jest lepszy? Ujawnianie IObservable i sprawienie, by nasze komponenty tworzyły nowe strumienie zdarzeń z operatorów Rx, czy też definiowanie własnych interfejsów wydawcy/subskrybenta i używanie wewnętrznie Rx w razie potrzeby? Oto kilka rzeczy do rozważenia na temat projektów: * W pierwszym projekcie użytkownik naszych interfejsów ma całą moc Rx na wyciągnięcie ręki i może wykonywać dowolne operatory Rx. Jeden z nas twierdzi, że to zaleta, a drugi, że to wada. * Drugi projekt pozwala nam na użycie dowolnej architektury wydawcy/subskrybenta pod maską. Pierwszy projekt wiąże nas z Rx. * Jeśli chcemy wykorzystać moc Rx, wymaga to więcej pracy w drugim projekcie, ponieważ musimy przetłumaczyć implementację niestandardowego wydawcy/subskrybenta na Rx iz powrotem. Wymaga napisania kodu kleju dla każdej klasy, która chce przetwarzać zdarzenia.


title: Jaki jest dobry wzorzec dla połączonego buforowania i ponownej inicjalizacji?

text: Mam sytuację, w której mam trzy wymagania: 1. **Opóźniona inicjalizacja** \- nie twórz kolekcji, dopóki nie zostaniesz o to poproszony 2. **Caching** \- zachowaj kolekcję w pamięci na obiekcie 3. * *Ponowna inicjalizacja** \- w razie potrzeby możesz ponownie zainicjować kolekcję, zamiast po prostu pobierać istniejące wyniki. Jest to po prostu optymalizacja wewnątrz pojedynczej klasy - nie ładuje niczego z bazy danych, a najlepiej by było do tego celu po prostu dobry wzorzec projektowania metody, a nie wieloklasowy projekt. Zwykle dla leniwej inicjalizacji mam to: Collection getCollection() { if (collection != null) { // wygeneruj i ustaw kolekcję } return collection; } Ale teraz mam problem z podjęciem decyzji o najlepszym sposobie zapewnienia ponownej inicjalizacji nowej kolekcji i pobrania tej kolekcji. Świeży parametr logiczny zadziałałby, ale dodanie parametru do gettera nie wydaje się właściwe (być może to jest Java, którą mówię - mógłbym być przekonany).