title: Leniwe przetwarzanie strumieni

text: Mam następujący scenariusz problemu: * Mam plik tekstowy i muszę go przeczytać i podzielić na wiersze. * Niektóre wiersze mogą wymagać usunięcia (zgodnie z kryteriami, które nie są ustalone). * Wiersze, które nie są usuwane, muszą zostać przetworzone na niektóre predefiniowane rekordy. * Nieważne rekordy muszą zostać usunięte. * Mogą istnieć zduplikowane rekordy iw takim przypadku następują po sobie. Jeśli istnieją zduplikowane/wiele rekordów, należy zachować tylko jedną pozycję. * Pozostałe rekordy należy pogrupować według wartości zawartej w jednym polu; wszystkie rekordy należące do tej samej grupy pojawiają się jeden po drugim (np. AAAABBBCCDEEEFF itd.). * Rekordy każdej grupy powinny być ponumerowane (1, 2, 3, 4, ...). Dla każdej grupy numeracja zaczyna się od 1. * Rekordy muszą być następnie gdzieś zapisane/skonsumowane w tej samej kolejności, w jakiej zostały wyprodukowane. Muszę to zaimplementować w Javie lub C++. Moim pierwszym pomysłem było zdefiniowanie funkcji / metod takich jak: * Jedna metoda, aby pobrać wszystkie linie z pliku. * Jedna metoda filtrowania niechcianych linii. * Jedna metoda analizowania przefiltrowanych wierszy w prawidłowe rekordy. * Jedna metoda usuwania zduplikowanych rekordów. * Jedna metoda grupowania rekordów i ich numerowania. Problem polega na tym, że dane, które zamierzam odczytać, mogą być zbyt duże i mogą nie zmieścić się w pamięci głównej: więc nie mogę po prostu skonstruować wszystkich tych list i zastosować moje funkcje jedna po drugiej. Z drugiej strony wydaje mi się, że nie muszę od razu wpasowywać wszystkich danych w pamięci głównej, ponieważ gdy rekord zostanie zużyty wszystkie jego dane bazowe (w zasadzie wiersze tekstu między poprzednim rekordem a bieżącym rekordem oraz rekordem sam) można zutylizować. Mając niewielką wiedzę na temat Haskella, od razu pomyślałem o jakiejś leniwej ocenie, w której zamiast stosować funkcje do całkowicie obliczonych list, mam różne strumienie danych, które są budowane jeden na drugim, a na w każdej chwili tylko potrzebna część każdego strumienia materializuje się w pamięci głównej. Ale muszę to zaimplementować w Javie lub C++. Więc moje pytanie brzmi, który wzorzec projektowy lub inna technika pozwoli mi zaimplementować to leniwe przetwarzanie strumieni w jednym z tych języków.


title: Jak wytłumaczyć, że pełna automatyzacja źródeł danych w arkuszach kalkulacyjnych nie jest dobrym pomysłem?

text: Przygotuj arkusz kalkulacyjny Excel, który podsumowuje różne kluczowe wskaźniki dla firmy. Dane źródłowe dla tych wskaźników pochodzą z różnych źródeł, w tym z innych arkuszy kalkulacyjnych i systemów internetowych/ERP. Zasugerowano, aby całkowicie zautomatyzować pobieranie/pobieranie danych w arkuszu kalkulacyjnym. W przypadku tego typu narzędzia (tylko kilku użytkowników) wolę podejście kopiuj-wklej, aby użytkownicy faktycznie patrzyli na dane i upewniali się, że są poprawne. Jakie mogę podać powody, dla których pełna automatyzacja nie jest dobrym pomysłem? * łączenie arkuszy kalkulacyjnych Excel wymaga, aby arkusz źródłowy się nie zmieniał * Excel może eksportować pliki CSV z systemu ERP, ale wymagałoby to makra -> czy użytkownicy mogą zachować makro * ? **AKTUALIZACJA1:** Zapomnij wspomnieć, że ten proces jest przerwą, dopóki nie zostanie zbudowana hurtownia danych jeszcze w tym roku. Zgodnie z sugestią zaakceptowanego respondenta wydaje się, że w pełni automatyczna odpowiedź zajęłaby tygodnie więcej wysiłku niż kilka godzin miesięcznie, które zajęłoby metoda kopiuj-wklej.


title: Przepływ pracy Gitlab, wymuszający przegląd kodu lub żądanie scalenia w oddziale

text: Pracuję nad wdrożeniem Gitlab w mojej firmie ze strategią przepływu pracy. Mój pomysł jest taki, że programiści będą mieli dostęp do repozytoriów, ale za każdym razem, gdy próbują zatwierdzić, ich kod musi zostać przejrzany. Wiem, że mogę kazać im utworzyć gałąź przed zatwierdzeniem, a następnie utworzyć żądanie scalania po przekazaniu go do repozytorium. Wciąż nie jestem pewien, co do pewnych rzeczy... Pomysł, że polegamy na ludziach, aby utworzyć gałąź, a następnie żądanie scalenia wydaje się wadliwe, czy istnieje rozwiązanie, które wymusza jakąś politykę, aby gałąź główna mogła pozostać czysta, chyba że " admin” zatwierdza kod, który ma się z nim połączyć. Przeczytałem "przepływ pracy zespołu github", ale wydaje się, że nie oferuje to realnego rozwiązania. Wszelkie porady dotyczące procesu lub własnych najlepszych praktyk są mile widziane. Dziękuję!


title: Naprawienie błędu, który do tej pory nie powodował problemu

text: Niedawno wprowadziłem zmianę, która powodowała, że niektóre kody były uruchamiane znacznie częściej niż kiedyś. Doprowadziło to do odkrycia błędu. Ten błąd mógł wystąpić za każdym razem, gdy ten kod był uruchamiany, ale ponieważ był uruchamiany tak rzadko, nigdy się nie pojawił. Kiedy zwróciłem na to uwagę głównego programisty, chciał, abym cofnął zmianę, która ujawniła błąd, zamiast naprawić błąd cytując powiedzenie: „Jeśli to nie jest zepsute, nie naprawiaj tego”. Jest dla mnie jasne, że do tej pory mieliśmy szczęście, ale on nie chce słuchać rozsądku. Czy mimo to powinienem to naprawić? **Aktualizacja** Technicznie rzecz biorąc, prowadzący nie ma nade mną żadnej władzy. Tylko kadencja. Był jedynym deweloperem projektu przez kilka lat, aż do roku temu i myślę, że nie znosi zbyt dobrze konstruktywnej krytyki. Co jest warte, nie krytykowałem go. Wskazałem tylko, że tylko dlatego, że błąd się nie pojawił, nie oznacza to, że go tam nie było.


title: Czy pisanie oprogramowania w przypadku braku wymagań to umiejętność, którą należy posiadać, czy sytuacja, której powinienem unikać?

text: Uważam, że niektórzy programiści są w tym bardzo biegli i często są chwaleni za umiejętność dostarczenia działającej koncepcji z abstrakcyjnymi wymaganiami. Szczerze mówiąc, to doprowadza mnie do szału i nie lubię „zmyślać” na bieżąco. Kiedyś myślałem, że jest to problematyczne, ale zacząłem wyczuwać zmianę i zastanawiam się, czy muszę dostosować mój proces myślenia (i programowania), gdy nadano mu bardzo niewielki kierunek. Czy powinienem zacząć zdobywać tę umiejętność jako umiejętność, czy trzymać się pomysłu, że gromadzenie wymagań i zasady biznesowe są priorytetem?


title: Dlaczego problemem jest to, że liczba 10 w postaci dziesiętnej zajmuje 2 cyfry?

text: Używamy więc liczby szesnastkowej, która ma tę zaletę, że dochodzi do 15 w pojedynczych cyfrach od A do F, ale dlaczego problemem jest to, że 2 cyfry reprezentują liczbę 10 w postaci dziesiętnej? Czytałem o systemie szesnastkowym i natknąłem się na te 2 wiersze: > Podstawa 16 sugeruje cyfry od 0 do 15, ale problemem, z którym się spotykamy, jest to, że > wymaga 2 cyfr do reprezentowania 10 do 15. Szesnastkowy rozwiązuje ten problem, > używając litery od A do F. Moje pytanie brzmi, dlaczego powinno nas obchodzić, ile cyfr zajmuje liczba? - Czy komputer wolniej radzi sobie z liczbą dwucyfrową w porównaniu z liczbą jednocyfrową?


title: Czy jako programista potrzebny jest branding osobisty?

text: Pracuję jako programista/programista Ruby w małej firmie typu start-up. W końcu dzielę swój czas między pisanie kodu, pomagam zespołowi w stosowaniu bardziej zwinnej metodologii i współpracuję z menedżerem produktu, aby przygotować historie dla zespołu programistów. Lubię swoją pracę i ogólnie oceniam moją satysfakcję z pracy według następujących kryteriów: * Dobry szef (brak kierowników o ostrych włosach) * Czas na utrzymanie bazy kodu (refaktoryzacja kodu/napisywanie testów jednostkowych/itd.) * otrzymywanie konkurencyjnej pensji * nie głupie terminy * praca w normalnych godzinach Nie spieszy mi się ze zmianą pracy, ale przynajmniej w społeczności Ruby wydaje się, że każdy i ich brat mają własnego bloga, projekty open source lub inną formę brandingu osobistego. Po prostu nie mogę wejść w te rzeczy. Naprawdę lubię swoją pracę, ale kiedy wracam do domu, jestem gotów zrobić coś innego i nie spędzać godzin na pisaniu blogów lub pisaniu większej ilości oprogramowania. Czy wymagane jest pisanie, blogowanie lub angażowanie się w inne formy osobistej marki, aby utrzymać się na rynku?


title: Czy frameworki internetowe MVC faworyzują anemiczny model domeny w celu uniknięcia duplikacji?

text: Bezpośrednie powiązanie formularza z modelem bardzo pomaga w pozbyciu się kodu tabliczki znamionowej, ale oznacza to, że Twój model musi mieć funkcję pobierającą/ustawiającą dla każdej właściwości, w przeciwnym razie nie byłoby to możliwe. Innym wyborem byłoby utworzenie kolejnej warstwy (DTO) tylko do przenoszenia danych do/z formularza, a następnie możesz mieć bogaty model domeny, niekoniecznie z funkcją pobierania/ustawiania dla każdego atrybutu, ale oznacza to duplikację pól i kodu walidacji. Na przykład teraz robię aplikację poczty internetowej. Wiemy, że mamy już Java Mail API, dobry bogaty model domeny. Jednak sposób, w jaki jest zaprojektowany, uniemożliwia powiązanie mojego formularza internetowego z tym modelem. Jestem zmuszony utworzyć DTO, aby przechwycić dane, a następnie przekazać je do Java Mail API. Podobnie jak w tym przykładzie, gdyby mój model domeny był podobny do tego, to samo by się stało. Z dokumentacji Spring MVC: > Zamiast tego często preferowane jest bezpośrednie powiązanie z obiektami biznesowymi. >> Kod biznesowy wielokrotnego użytku, bez konieczności powielania. Użyj istniejących obiektów > biznesowych jako obiektów poleceń lub formularzy zamiast dublowania ich w celu > rozszerzenia określonej klasy bazowej struktury. Czy frameworki internetowe MVC, takie jak **Spring MVC i Struts 2**, faworyzują model domeny anemicznej, aby uniknąć duplikacji?


title: C odpowiednik Perla Unpack & Pack

text: Mam trochę kodu Perla, który używa pack and unpack do przekształcania danych w sposób, którego nie rozumiem. $unpacked_data = pack('b*', join('', unpack('(b7)*', $packed_data))) Gdzie $packed_data = tablica bajtów powiedzmy, 2341 bajtów, i z powyższą instrukcją perl, rozpakowuje do 2048 bajtów danych. Czy ktoś może mi wytłumaczyć to stwierdzenie w kategoriach C? Do tej pory wiem to: * b = ciąg bitów (rosnący porządek bitów wewnątrz każdego bajtu, jak vec()). * Jeśli liczba powtórzeń wynosi * , przesunięcie odnosi się do początku pakowanego łańcucha.


title: Utrzymywanie strumienia dziennika po zmianie nazwy pliku

text: Próbuję zalogować się do pliku i przenieść go co około 30 sekund. Używam funkcji os.rename (którą robię z procesu nadzorowanego) w Pythonie, aby przenieść bieżący dziennik do dziennika ze znacznikiem czasu (który zostanie następnie przetworzony przez inny skrypt Pythona), a następnie kontynuuję logowanie do starego strumienia z mojego serwera uwsgi. Próbowałem również RotatingFileHandler i wersji czasowej, ale wydaje się, że nie działają poprawnie. Nie byłem pewien, czy to była funkcja używania go z serwerem uwsgi, czy nie. Moje pytanie brzmi, jaki jest najprostszy i najskuteczniejszy sposób, aby kontynuować logowanie do pliku o tej samej nazwie po przeniesieniu pliku, na który „wskazywał”?


title: Czy ktoś może zaproponować mi projekt, który pomoże mi zrozumieć wątki?

text: Obecnie jestem programistą C# z dość niepewnym zrozumieniem wątków. Oba te linki zostały zasugerowane w innych postach: http://www.yoda.arachsys.com/csharp/threads/ http://www.albahari.com/threading/ Czy powinienem wrócić do podstaw i może przyjrzeć się niektórym teksty informatyki na ten temat? Naprawdę czuję, że jeśli wskoczę i użyję bibliotek c#, tak naprawdę nie będę miał solidnych podstaw wiedzy, na których można by budować. Myślę, że muszę nauczyć się tego przedmiotu od podstaw jak student com sci, a następnie korzystać z bibliotek C#. Czy ktoś może zaproponować podejście do nauki wątków, może jakieś linki i pomysły na projekty? Z góry dziękuję! Edytuj, dzięki za wszystkie odpowiedzi. Niektórzy wspominali, że książka może być dobrym pomysłem, czy ktoś może coś zaproponować? Wolałbym coś agnostycznego. Czy ktoś wie, w jakiej klasie te rzeczy byłyby omówione na studiach z informatyki? Próbuję poszukać w Google darmowych notatek i zadań online.


title: Jak powinienem dokonać refaktoryzacji, aby odpowiedzialność za usługę geokodowania była odpowiednio dzielona?

text: Najpierw trochę tła. Mam aplikację, która wymaga korzystania z kilku zewnętrznych dostawców geokodowania, których nie kontroluję. Wykorzystuje centralną warstwę usług wewnątrz aplikacji do wysyłania do odpowiedniego dostawcy. Mam kilka klas ułożonych w ten sposób: * **GeocodingService** : Odpowiada za wysłanie żądania geokodowania do odpowiedniego dostawcy. * Ma jedną publiczną metodę `geocode`, która akceptuje **GeocodingService::Request** i zwraca **GeocodingService::Response**. * Każda odpowiedź zawiera: szerokość geograficzną geokodowanego zapytania, długość geograficzną geokodowanego zapytania oraz listę składników adresu dla adresu, pod którym znaleziono zapytanie (np. składnik adresu dla „123”, jeden dla „Główna ulica” , jeden dla „Paryża” i tak dalej). * **GeocodingService::AddressComponent** : Pojedynczy segment adresu zawierający nazwę segmentu, jego skrót i rodzaje. Na przykład Francja ma nazwę „Francja” (skrót od „FR”) i jest segmentem „kraj” i „polityczny”. * AddressComponent jest odpowiedzialny za sprawdzenie, czy typy, z którymi jest ustawiona instancja, nie znajdują się poza granicami niektórych śledzonych typów. * **Adres** : Model domeny dla adresów, zawierający zarówno preferowany adres pocztowy (lista ciągów znaków), jak i listę składników adresu (lista GeocodingService::AddressComponents). Moje pytanie brzmi: **gdzie powinien znajdować się AddressComponent — jako klasa usług (tak jak teraz) czy z innymi modelami domen?** * Jeśli znajduje się **w usłudze** , życie jest proste. Ale wydaje się to błędne, ponieważ teraz model domeny musi zależeć od definicji adresu usługi i wydaje się, że powinny one być niezależne. * Jeśli działa jako **pełnowartościowy obiekt domeny** , to czy nie oznacza to, że usługa jest teraz połączona z obiektem domeny? To również wydaje się niepożądane. Jak rozwiązać ten impas?


title: Czy programiści potrzebują okularów komputerowych?

text: Jestem programistą o świetnym wzroku, który wpatruje się w wiele ekranów komputerów 8-10 godzin dziennie, zwykle w głębokiej koncentracji. Nie minie dzień, w którym moje oczy nie płoną i nie są zaczerwienione. Wiedziałem, że to z codziennej ekspozycji na monitory LCD, które powodują problemy, ponieważ w weekendy nie będę miał tego samego doświadczenia. Czy ktoś próbuje okularów komputerowych? Czy to działa?


title: Java lub Python dla Google App Engine nie znasz żadnego języka?

text: Mam kilka pomysłów na projekty, które chciałbym wdrożyć na GAE. Jestem zainteresowany tworzeniem aplikacji do logowania dla amatorskich kontaktów radiowych, krótkofalowych i monitoringu mediów. Bardziej złożone projekty obejmują śledzenie satelitarne, strumieniowe przesyłanie dźwięku z wielu radiotelefonów oraz zdalne sterowanie radiowe, w tym nadawanie i odbieranie. Uczę języków Java i Python przez moją lokalną szkołę średnią, więc nie wiem, który język jest odpowiedni dla tych projektów. Jakie są mocne i słabe strony każdego języka w przypadku programowania w GAE, zwłaszcza przetwarzania dźwięku i liczb w aplikacji śledzącej? Nie proszę o ogólne porównanie między tymi dwoma językami, tylko dlatego, że są one używane w GAE. Efektem końcowym jest powiązanie ich z moją witryną hostowaną w Google, z niektórymi aplikacjami dostępnymi publicznie, a niektórymi prywatnie dostępnymi dla znajomych. Jeśli to pomaga, mam największe doświadczenie z Perlem, bashem, a następnie C.


title: Nauka Arlgorithms, w szczególności algorytmów grafowych (java)

text: Mam trudności z uczeniem się algorytmów (w szczególności algorytmów graficznych). Czy znasz jakieś dobre darmowe zasoby, które czynią niektóre z bardziej wstrząsających koncepcji algorytmów, takich jak NP-Complete, Traveling salesman i inne algorytmy, heurystyki A*, zwłaszcza algorytmy graficzne, prostszymi do opanowania?


title: Jaki procent pracy na kursach uniwersyteckich to kod testowany jednostkowo?

text: Czy jako studentka piszesz testy jednostkowe dla kodu projektu, który piszesz? Czy wiesz, jak prawidłowo korzystać z TDD? Czy nauczono Cię używać frameworków testowych (na przykład jUnit)? Niedawno usłyszałem, że zespół projektowy dużej firmy dostarczał oprogramowanie do grupy User Acceptance Testing, która miała tylko 7% pokrycie kodu linii dla testów jednostkowych. Chociaż to mnie szokuje, to po prostu mówi mi, że praktyka inżynierii oprogramowania tej firmy jest niedojrzała. Zastanawiam się jednak, czy mogliby po prostu zatrudnić kilku świeżo upieczonych absolwentów i podnieść poprzeczkę w praktykach zespołów – zakładając, że ci świeżo upieczeni programiści zostali przeszkoleni w zakresie najlepszych praktyk. Czy jesteś absolwentem CS w latach 2008 - 2010 i korzystasz z najlepszych praktyk testowania jednostkowego Twojego kodu?


title: Rozwiązywanie relacji równoważności

text: Piszę funkcję do oznaczenia połączonego komponentu na obrazie (wiem, że na zewnątrz jest kilka bibliotek, chciałem tylko pobawić się algorytmem). Aby to zrobić, oznaczam połączone regiony różnymi etykietami i tworzę tabelę równoważności, która zawiera informacje o etykietach należących do tego samego połączonego komponentu. Na przykład, jeśli moja tabela równoważności (wektor wektora) wygląda mniej więcej tak: 1: 1,3 2: 2,3 3: 1,2,3 4: 4 Oznacza to, że na obrazku są 2 różne regiony, jeden wykonany elementów, które są oznaczone 1,2,3, a inny złożony z elementów oznaczonych 4. Jaki jest łatwy i skuteczny sposób na rozwiązanie równoważności i otrzymanie czegoś, co wygląda tak: 1: 1,2,3 2: 4 to Czy mogę użyć do „scalenia” różnych połączonych regionów należących do tego samego połączonego komponentu? Wielkie dzięki za pomoc!


title: Czy zmiana wielu tabel w jednym pliku migracji Railsów jest złą formą?

text: Napisałem plik migracji z następującym kodem: class AddScheduleIdToPlayers < ActiveRecord::Migration def change add_column :players, :schedule_id, :integer add_column :schedules, :coach_id, :integer end end Czy źle jest nie tworzyć dwóch plików migracji, po jednym na każdą zmianę, czy to dobrze?


title: A więc „Czy wzorce projektowe nie zawierają funkcji językowych”?

text: Widziałem tutaj na Programistach odpowiedź na to pytanie: Jak myślenie o wzorcach projektowych i praktykach OOP zmienia się w dynamicznych i słabo typowanych językach? Tam znalazłem link do artykułu o wyraźnym tytule: Czy wzorce projektowe nie mają funkcji językowych. Ale tam, gdzie znalazłem fragmenty, które wydawały mi się bardzo chwytliwe i które prawdopodobnie można zweryfikować na podstawie doświadczenia, biorąc pod uwagę, że istnieje do tego zachęta, na przykład: > PaulGraham powiedział: „Peter Norvig odkrył, że 16 z 23 wzorów w Design > Patterns było„niewidocznych lub prostsze” w Lisp”. lub inne zdanie, które potwierdza to, co ostatnio widziałem u ludzi próbujących symulować klasy w JavaScript: > Oczywiście, nikt nigdy nie mówi o wzorcu „funkcja” lub wzorcu „klasa” > o wielu innych rzeczach, które przyjmujemy za pewnik, ponieważ > większość języków udostępnia je jako wbudowane funkcje. OTOH, programiści w czysto > PrototypeOrientedLanguage? może wygodniej będzie symulować zajęcia > za pomocą prototypów... Biorę też pod uwagę, że wzorce projektowe są narzędziem komunikacji. Ponieważ nawet przy moim ograniczonym doświadczeniu w budowaniu aplikacji mogę postrzegać jako anty-wzorzec (nieefektywny i/lub nieproduktywny) na przykład zmuszanie małego zespołu PHP do uczenia się wzorców GoF dla małych i średnich aplikacji intranetowych. Zdaję sobie sprawę, że skala, zakres i cel mogą decydować o tym, co jest skuteczne i/lub produktywne, ale nadal nie udało mi się znaleźć technicznego przeglądu na ten temat. Widziałem małe komercyjne aplikacje, które mieszały funkcjonalność z OOP i nadal były utrzymywane, i nie wiem, czy wielu potrzebowałoby na przykład w pythonie do napisania singletona, ale dla mnie prosty moduł robi to samo. ### Czy są więc opracowania, wyczerpujące artykuły lub inne formy prezentacji, które uwzględniają wzorce projektowe, obejścia lub prostsze sposoby ich wykonania, lub zastąpienie cechami językowymi?


title: Miary złożoności architektury

text: Tak jak możemy mierzyć złożoność kodu i algorytmu, czy istnieją jakieś metryki do pomiaru złożoności architektury/projektu/przestrzeni rozwiązań.


title: Jak zdobyć szacunek członków zespołu jako lidera zespołu

text: Jeśli zostałeś zatrudniony w nowej firmie jako kierownik zespołu (powiedzmy, że zespół 10 osób), jedną z ważnych rzeczy do zrobienia jest zdobycie szacunku członków zespołu. Na początku nowy lider zespołu może nie wiedzieć nic o kulturze zespołu, bazie kodu i domenie biznesowej: innymi słowy, jest kompletnym neofitą. Jak się do tego zabrać? Jakie są nakazy i zakazy?


title: Narzędzia ORM i zalety cyrkularnych odwołań w podmiotach

text: Pozwólcie, że zademonstruję prosty przykład, > Organizacja klasy > > * Typ ID Numer, > * Typ nazwy String, > * MA A -> Kolekcja > > > Obiekt klasy > > * Typ ID Numer, > * Typ nazwy String, > * Location String , > * MA -> Organization > Demonstruję proste cykliczne odniesienie między dwoma obiektami anemicznego modelu danych. Zakładając, że są one zmapowane do narzędzia ORM, zbiór obiektu można leniwie pobrać z organizacji, podobnie jak organizację można leniwie pobrać z obiektu. Rozumiem wygodę tego, przynajmniej na środkowym poziomie. Mając jeden Obiekt mogę natychmiast uzyskać informacje o jego Organizacji z kodu. Moje pytanie brzmi więc: _Czy istnieją JAKIEKOLWIEK inne zalety odniesień cyklicznych w jednostkach mapowanych za pomocą ORM? _ Pomimo moich intensywnych emocji w tej chwili, staram się nie ładować tego pytania... Główna irytująca wada, przez którą cierpię w tej chwili próbuję serializować te obiekty w XML i wysyłać je przez usługę sieciową, z dala od wzniosłych wygód jego dobroczynnej sesji ORM. Nie mogę ich serializować, ponieważ nie można wysłać serwerów proxy ORM, muszę albo gorliwie pobrać jednostki podrzędne i wysłać MASOWE drzewo obiektów, albo usunąć serwery proxy z wykresu. Wystarczająco uczciwe, więc napisałem narzędzie, które po prostu usuwa serwery proxy. Świetnie! Serializuje i wydajność jest bardzo dobra, jednak gdy odzyskam ten obiekt z usługi internetowej UpdateEntity, brakuje reszty wykresu obiektów, a teraz, gdybym miał zaktualizować tę encję za pomocą ORM, wydaje mi się, że usunąłem wszystkie tych obiektów brakuje na drzewie. Nie dobrze. Nie mogę oprzeć się wrażeniu, że odwołania cykliczne stanowią ogromną wadę w tym scenariuszu i naprawdę nie mogę wymyślić dobrego sposobu na przezwyciężenie tego problemu i paraliżujących problemów z wydajnością, które mam rozwiązać bez przeprojektowania modelu danych i masowa refaktoryzacja. Jakie są twoje opinie na ten temat? Czy to rzeczywiście zapach designu?


title: W jaki sposób można wiarygodnie przetestować obsługę funkcji HTML5, takich jak geolokalizacja, w przeglądarkach?

text: HTML5 wprowadza szeroką gamę narzędzi, takich jak Geolokalizacja. Wiele przeglądarek je obsługuje, ale niektóre jeszcze nie. Czy twórcy stron internetowych powinni na nich polegać przy tworzeniu profesjonalnych aplikacji dla przemysłu? Funkcje są potężne, ale nie wszystkie przeglądarki obsługują te funkcje. Jakie są sposoby (być może biblioteki Javascript?) na niezawodne testowanie obsługi przeglądarek pod kątem funkcji HTML5, takich jak Geolokalizacja?


title: GPL i licencja zamkniętego źródła na sprzedaż mojego skryptu

text: Pracuję nad skryptem PHP, który planuję sprzedać, nie dając użytkownikowi możliwości rozpowszechniania go innym osobom. Słyszałem, że GPL jest wirusowe i mam sporo bibliotek, które są używane w moim skrypcie, które są objęte GPL. (na przykład: jquery, phpthumb itp.) Czy to oznacza, że jeśli użytkownik, który kupił mój kod, może go swobodnie rozpowszechniać, ponieważ część mojego kodu jest na licencji GPL, więc staje się wirusowa, a cały mój projekt staje się GPL? **Czy nie mogę użyć żadnego kodu GPL w moim projekcie?** Dzięki za pomoc.


title: Jakie środki ostrożności należy podjąć, dołączając do firmy programistycznej?

text: Wkrótce dołączam do firmy programistycznej jako nowicjusz. Ale obawiam się, że nikt mnie nie zna i też wszyscy będą profesjonalni. Więc chcę wiedzieć, jakie środki ostrożności należy podjąć w komunikacji, zachowaniu i innych rzeczach?


title: Dlaczego programiści używają lub polecają Mac OS X?

text: Przez jakiś czas pracowałem zarówno na Macu, jak i Windowsie. Jednak wciąż nie mogę zrozumieć, dlaczego programiści entuzjastycznie wybierają Mac OS X zamiast Windows i Linux? Wiem, że są programiści, którzy preferują Windowsa i Linuxa, ale pytam programistów, którzy używaliby tylko Mac OS X i niczego więcej, ponieważ uważają, że Mac OS X jest najlepszym rozwiązaniem dla programistów. Niektórzy mogą twierdzić, że Mac OS X ma piękny interfejs użytkownika i jest oparty na nix, ale Linux może to zrobić. Chociaż system Windows nie jest oparty na nix, możesz programować na dowolnej platformie lub języku, z wyjątkiem Cocoa/Objective-C. Czy są to aplikacje dostępne tylko w systemie Mac OS X? Czy to naprawdę sprawia, że warto? Czy chodzi o tworzenie aplikacji na iPhone'a? Czy to dlatego, że musisz aktualizować system Windows co 2 lata (mniejsza kompatybilność wsteczna)? Rozumiem, dlaczego ludzie, którzy pracują w branży multimediów/rozrywki, mieliby używać Mac OS X. Nie widzę jednak, jakie zalety ma Mac OS X nad Windowsem. Jeśli codziennie programujesz na Macu i wolisz Maca od czegokolwiek innego, czy możesz dać mi zasługę, jaką Mac ma nad Windows/Linuksem? Może coś, co możesz zrobić na Macu, czego nie można zrobić w systemie Windows/Linux z taką samą łatwością? Nie próbuję tutaj zrobić innego Maca kontra Windows. Próbowałem znaleźć rzeczy, które można zrobić na Macu, ale nie na Windowsie z taką samą łatwością, ale nie mogłem. Więc proszę o pomoc.


title: Długoterminowy plan ataku na naukę matematyki?

text: Jestem programistą internetowym, który chce poszerzyć swoje umiejętności o matematykę związaną z programowaniem. W drugiej karierze utknąłem na studiach, wykonując niektóre wymagania podczas pracy. Miałem nadzieję, że moja edukacja nauczy mnie umiejętności potrzebnych do zastosowania matematyki, jednak szybko stwierdzam, że jest to zbyt łatwe do przetestowania podejście oparte na szerokości, bardzo nieefektywne w zainwestowanym czasie. Na przykład na moich zajęciach z rachunku różniczkowego 2, jedynym zdalnie użytecznym doświadczeniem rozszerzającym umysł, jakie miałem, były objętości i obszary pod krzywą. Reszta była po prostu monotonną, gloryfikowaną algebrą, która, choć wydaje mi się łatwa, może być wykonana przez oprogramowanie takie jak wolfram alpha w ciągu kilku sekund. To nie jest mój pomysł na naukę matematyki. Więc tutaj jestem sfrustrowanym studentem szukającym sposobu na poprawę mojego rozumienia matematyki w sposób, który skupia się na zastosowaniu, zrozumieniu i maksymalnym usunięciu niepotrzebnej nudy. Jednak nie mogę znaleźć dobrej długoterminowej strategii studiów, mając na uwadze to podejście. Więc dla tych, którzy mają podobny umysł, jak moglibyście nauczyć się niezbędnej matematyki bez zbytniego martwienia się o to, co komputer może zrobić znacznie lepiej?


title: Programowanie mobilne — pozyskiwanie sprzętu programistycznego — najlepsze praktyki?

text: Zamierzam zająć się rozwojem smartfonów, ale jest teraz sporo opcji dla platform. (iOS/Android/WebOS/Bada/Symbian/MeeGo/WindowsMobile/JavaME) Chciałbym mieć sprzęt programistyczny do testowania mojego kodu i ogólnej funkcjonalności urządzeń. Jaki jest najlepszy sposób na uzyskanie i/lub wypożyczenie sprzętu do programowania i testowania? Czy istnieją praktyczne zasady, których należy przestrzegać, które dotyczą wszystkich firm i platform? W tej sytuacji jestem samodzielnym programistą. Czy ten proces zmienia się dla startupu? Hackerspace? Mała firma? Duży biznes?


title: Przechowuj wartości arbitralne związane z rekordem mysql

text: Stworzyłem aplikację, która zarządza przepływem pracy czyszczenia danych. Każdy importowany wiersz musi przechowywać dowolną liczbę par klucz-wartość oprócz naszego standardowego schematu mysql. Kluczowe wartości muszą być dostępne do wyszukiwania. Obecnie używam rails + mysql. Jakie mam opcje? W tej chwili po prostu dodaję nowe pola do schematu rails, gdy pojawiają się nowe wymagania, potrzebuję sposobu na przechowywanie dodatkowych danych dla każdego wiersza, które mogą nie mieć zastosowania do żadnych innych wierszy.


title: MVC, WCF, EF, LINQ – czy to tylko ja?

text: ...a może sprawy się komplikują? Wydaje mi się, że w dzisiejszych czasach trzeba wiedzieć wiele rzeczy, aby „prawidłowo” opracować aplikację internetową dla MS. W dawnych złych czasach, kiedy nie wiedzieliśmy lepiej, mieliśmy tabele baz danych, ASP.NET, ADO.NET, a Ty zbudowałeś aplikację internetową przy użyciu stosunkowo prostych koncepcji. W dzisiejszych czasach wydaje się, że istnieje wiele ram, które „pomagają” zrobić to „dobrze”, ale nie jestem przekonany, że to wszystko ułatwia i poprawia. Mam wrażenie, że z tym odczuciem będę w niewielkiej mniejszości, ale czy jest ktoś inny, kto uważa, że sprawy potoczyły się trochę szaleńczo?


title: Nulls w każdym typie i sprawdzone wyjątki w Javie?

text: Wiem, że dodawanie wartości null do każdego typu w Javie jest źródłem wielu frustracji związanych z systemem typów języka. Jednocześnie generalnie słyszę narzekanie na sprawdzone wyjątki - zaśmiecają interfejsy, zachęcają do połykania wyjątków itp. Wydaje mi się, że zamieszkiwanie przez null każdego typu jest sposobem na obejście języka - jakbym chciał, aby to był typ `X `, ale w rzeczywistości jest to `X lub null`; po prostu tak nie wygląda i łatwo o tym zapomnieć. Czy zaznaczone wyjątki nie zapewniają sposobu na to, aby typem czegoś był `X` lub zgłasza Exception` zamiast wyglądać jak `X`? Zapewnia sposób w kodzie, aby określić, w jaki sposób coś może się nie powieść. Null w każdym typie i niesprawdzone wyjątki wydają się być podwójnymi koncepcjami, ale jedno jest pogardzane, a drugie chwalone. Dlaczego?


title: Czego się nauczyć, aby zostać freelancerem?

text: Mam około 8 lat doświadczenia w tworzeniu oprogramowania. Przez te wszystkie lata pracowałem nad tworzeniem aplikacji przy użyciu C++ /win32. Za kilka lat chcę zostać freelancerem. Próbowałem zajrzeć do niektórych niezależnych witryn i nie mogę znaleźć żadnych projektów na C++/win32. Czuję, że C++/Win32 niewiele mi pomoże i muszę nauczyć się nowych umiejętności. Ale moja praca wymaga ode mnie pracy w C++ , więc nie mogę nauczyć się żadnych nowych umiejętności. Wciąż mogę nauczyć się nowych umiejętności, ale bez dobrego projektu nie będzie to miało sensu. Mam kilka umiejętności na krótkiej liście 1. php 2. jquery 3. perl 4. python 5. android Nadal jestem zdezorientowany, który z nich zacząć i jak uzyskać w nich wiedzę. Jakieś sugestie?


title: Utrzymywanie pomocy technicznej w najnowszej wersji oprogramowania

text: Jestem jedynym programistą utrzymującym podzbiór produktów w małej firmie. Głównym produktem, którym się tutaj zajmuję, jest aplikacja internetowa, która jest instalowana na komputerach różnych klientów, z bazą danych i procesami w tle. W ramach tego programu wprowadzam zmiany w zależności od potrzeb. Nie jest to flagowy produkt firmy, nie jest to mój główny projekt, ale wymaga konserwacji. Mam 2 i pół techników wsparcia, którzy odpowiadają na pytania klientów. Kiedy nie wiedzą, jak coś naprawić, jestem ich wsparciem. Ponieważ tu i tam robię pewne prace konserwacyjne, publikuję aktualizacje nieregularnie. Jednak chodzi o to, że naprawiam oprogramowanie, a na życzenie klienta technicy pomocy technicznej mogą zaktualizować to oprogramowanie, aby rozwiązać problem lub jako dobry środek (nie ma wbudowanej funkcji aktualizacji). Technicy pomocy technicznej przechowują również kopię na swoim komputerze, a raczej różne kopie poprzednich wersji. Tutaj robi się brzydko. Od czasu do czasu otrzymuję raporty o błędach dotyczących rzeczy, które mogłem już naprawić w poprzednich wersjach. Gdy znajdą błąd, technicy wsparcia spędzają dużo czasu na przechodzeniu _do tyłu_ w wersjach, próbując dostać się do wersji, w której błędu nie ma. W tym momencie albo rzucają mi to w twarz („Dlaczego to zepsułeś?”) albo instalują starsze wersje u klientów. **Co oczywiście może zepsuć inne rzeczy**. Aby rozwiązać ten problem: * błagałem ich * błagałem ich przełożonego * błagałem prezesa * odmówiłem pracy nad starszymi wersjami, dopóki nie zostaną zainstalowane nowe wersje, nawet jeśli wykażą, że błąd jest nadal obecny * zagroziłem usunięciem wsparcia całkowicie (co jest dyskusyjne, bo to wciąż moja praca) Bez kości. Ostatnią opcją, jaką widzę, jest skonfigurowanie czegoś z SVN, gdzie będą mogli pobrać tylko najnowszą wersję i nie będą przywracać (jeśli to możliwe)... I mam nadzieję, że nie nauczą się tworzyć kopii. Czy jest jakieś inne podejście, ludzkie, organizacyjne, techniczne lub inne, które może mi pomóc i utrzymać tych gości w najnowszej wersji?


title: Czy to zły nawyk nieużywania interfejsów?

text: Rzadko używam interfejsów i znajduję je w kodzie innych. Rzadko tworzę sub i super klasy (podczas tworzenia własnych klas) w swoim kodzie. * Czy to zła rzecz? * Czy sugerujesz zmianę tego stylu? * Czy ten styl ma jakieś skutki uboczne? * Czy to dlatego, że nie pracowałem przy dużych projektach?


title: Jak bezpieczna jest pamięć lokalna?

text: Pytanie mówi wszystko naprawdę. Chcę świadczyć usługę, ale nie chcę sam przechowywać żadnych danych w bazie danych. Ze wszystkimi ostatnimi wiadomościami o hakowaniu itp. wydaje mi się, że przyjemniej jest, gdy klienci mają pełną kontrolę nad swoimi danymi. Problem polega na tym, że przechowywane dane są potencjalnie wrażliwe. To, co zamierzałem zrobić, to… gdy klient odwiedza stronę internetową, pojawia się pytanie „czy jesteś na komputerze osobistym, czy na komputerze publicznym”. Jeśli znajdują się na publicznym komputerze, witryna odmówi dostępu. Gdyby byli na komputerze osobistym, poprosiłby ich o ustawienie hasła. Wszystkie ich dane zostaną następnie zaszyfrowane tym hasłem. Teraz oczywiście nie jest to zbyt bezpieczne. Metoda szyfrowania byłaby w JavaScript, a hasło w postaci zwykłego tekstu, więc zakładam, że doświadczony użytkownik będzie mógł zlokalizować hasło w localStorage i uzyskać dostęp do danych. Czuję jednak, że to nie jest duży problem. Jeśli używasz komputera osobistego, szanse na to są odległe, ponieważ... ktoś inny potrzebowałby dostępu do swojego konkretnego konta użytkownika na komputerze, ktoś inny musiałby wiedzieć o witrynie... ktoś inny musiałby to zrozumieć localStorage i jak uzyskać do niego dostęp. Poufne dane nie są takie, które zagrażają ich tożsamości ani wielu innym. Po prostu nagrywa coś, czego większość ludzi nie chciałaby opublikować publicznie. Tak naprawdę pytanie brzmi, czy localStorage jest wystarczająco bezpieczny? Dodatkowe pytanie... jak trudno jest wyczyścić localStorage? Nie chciałbym, aby użytkownicy przypadkowo wyczyścili swoje dane. Wreszcie - czy warto w ogóle zaszyfrować / odszyfrować swoje dane, tak jakbyś miał hasło, dzięki któremu możesz uzyskać dostęp do strony..


title: Jakie algorytmy charakteryzują moc Lispa?

text: Tutaj podobne pytanie (ale nie to samo), ponieważ interesuje mnie, które konkretnie algorytmy działają szczególnie dobrze w Lispie. Samouczki Lispu zawsze podają przykład znajdowania silni, ale chęć znalezienia silni nie jest wystarczająco dobrą motywacją do używania Lispu. Słyszałem, że Quicksort ma szczególnie elegancką implementację w Lispie. Czy możesz podać przykłady (i próbki kodu) przykładów algorytmów, które najlepiej zaimplementować w języku takim jak Lisp?


title: Gdzie zapisać coś między inwokacjami?

text: Przy drugim uruchomieniu tego programu chciałbym, aby uruchomił się w tej samej lokalizacji dysku twardego, co poprzednia instancja. Jak zapisać lub zapamiętać, gdzie byłem, aby program uruchamiał się w tym samym miejscu? Chciałbym zachować moją poprzednią lokalizację w ten sam sposób w systemach MAC, Linux, Windows, ... Gdzie jest dobre miejsce do zapisania mojej lokalizacji, aby była dostępna dla mnie przy następnym uruchomieniu?


title: hosting strony internetowej z domu

text: Jeśli chcę hostować witrynę z mojego domu, kupuję nazwę domeny. Następnie otrzymuję statyczny adres IP od mojego dostawcy usług internetowych. Następnie wskazuję adres IP mojego systemu domowego. Mogę nawet korzystać z serwera SQL zainstalowanego w moim systemie i nie martwić się o rozmiar. Nie mówię tutaj o stosach serwerów. Tylko jeden serwer. Zastanawiałem się, czy to takie proste, dlaczego by tego nie zrobić? Czy jest coś, czego mi tutaj brakuje? Mówię o umiarkowanie prostej stronie. Ale czy to ma znaczenie?


title: Powiązanie danych z Entity Framework w WPF

text: Czy dobrze jest używać powiązania danych z jednostką Entity Framework w WPF? Stworzyłem ramowy kontekst encji singletonowych: 1. Aby mieć tylko jedno połączenie, które nie będzie się otwierać i zamykać cały czas. 2. Tak więc mogę przekazać Entity do dowolnej klasy i mogę modyfikować Entity i wprowadzać zmiany w bazie danych. Wszystkie ViewModels wyprowadzające encję z tego samego kontekstu i powiązanie danych z Widokiem oszczędza mi czas na mapowanie nowego obiektu, ale teraz wyobrażam sobie, że jest problem z nieużywaniem najnowszego kontekstu: powiązanie danych ViewModel z encją, a następnie ktoś inny zaktualizował dane . ViewModel nadal będzie wyświetlać stare dane, ponieważ kontekst nigdy nie jest usuwany do odświeżenia. Zawsze tworzę nowy kontekst, a potem go pozbywam. Jeśli chcę przekazać Byt, to wystąpią konflikty między Kontekstem a Bytem. Jaki jest sugerowany sposób na zrobienie tego?


title: Czy Node.js jest właściwym wyborem dla parsowania JSON i sterowanego IO?

text: Mój program powinien wykonać następujące zadanie: Po otrzymaniu żądania nasłuchuje na porcie http, wykonuje następujące czynności. 1. Połącz z gearmanem 2. Przeanalizuj ładunek gearmana do JSON (do 100 bajtów) 3. Połącz z Redis 4. Przeanalizuj ładunek redis do JSON (256 bajtów do 10 KB. W 80% przypadków będzie to ~256 bajtów) 5. Umieść trochę danych w MySQL 6. Umieść dane na serwerze Redis Ponieważ mój program wydaje się być napędzany IO. Wybrałem nodesjs do opracowania. Ale po opracowaniu mam do czynienia z problemem związanym z podwyżką procesora z nodejs. Mój program pobierający 70%-100% procesora z 20 równoległymi klientami. Najpierw pomyślałem, że problemem może być parsowanie JSON. Celowałem w około 1K-3K żądania. Ponieważ mój serwer redis jest w stanie przetworzyć, może zażądać w ciągu jednej sekundy. Ale do profilowania zacząłem od jednego przykładowego serwera http w węźle Przykładowy kod: var http = require('http'); var adres URL = wymagaj("adres URL"); http.createServer(function (req, res) { var uri = url.parse(req.url).pathname; var body = ""; req.on('data', function (fragment) { body += chunk; } req.on('end', function () { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('hi vivek'); }); }) .listen(9097, "127.0.0.1"); **Teraz moje obawy dotyczą tego serwera http hello world. Użycie procesora przez węzeł gwałtownie rośnie 17%-20%.** Wersja mojego węzła to v0.10.0 Mój system operacyjny to ubuntu 12.04 Informacje o moim procesorze to procesor : 0 id_dostawcy : GenuineIntel rodzina procesorów : 6 model : 23 nazwa modelu : Intel( R) Core(TM)2 Duo CPU E8400 @ 3.00GHz stepping : 10 mikrokod : 0xa07 cpu MHz : 2992.491 rozmiar pamięci podręcznej : 6144 KB fizyczne id : 0 rodzeństwo : 2 rdzenie id : 0 rdzenie cpu : 2 apicid : 0 początkowy apicid : 0 fpu : tak fpu_exception : tak cpuid level : 13 wp : tak flagi : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 m ssbe scbscalm stała rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dtherm tpr_shadow vnmi flexpriority bogomips : 5984.98 clflush rozmiar : 64 _wyrównanie : 64 rozmiary adresów : 36-bitowe fizyczne, 48-bitowe wirtualne zarządzanie energią: procesor : 1 identyfikator_dostawcy : GenuineIntel rodzina procesorów : 6 model : 23 nazwa modelu : Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz stepping : 10 mikrokod : 0xa07 cpu MHz : 2992.491 rozmiar pamięci podręcznej : 6144 KB id fizyczny : 0 rodzeństwo : 2 id rdzenia : 1 rdzenie cpu : 2 apicid : 1 początkowy apicid : 1 fpu : tak fpu_exception : tak cpuid level : 13 wp : tak flagi : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts a rep_ plx pl sse2 ss ht tm pbe syscall nx lm constant_tsc xsave lahf_lm dtherm tpr_shadow vnmi flexpriority bogomips : 5984.96 clflush size : 64 cache_alignment : 64 adres rozmiary : 36 bitów fizyczne, 48-bitowe wirtualne zarządzanie energią: Moje pytania to: 1. Czy węzeł jest właściwym wyborem dla opisu mojego problemu? 2. Jeśli nodejs nie jest właściwym wyborem dla mojego opisu problemu. Jaka będzie lepsza alternatywa? Ponieważ podejście oparte na wątkach nie będzie skalowane dla aplikacji opartych na IO. 3. Jak dowiedzieć się, co powoduje tak duże obciążenie procesora w kompletnej zintegrowanej aplikacji i prostym programie http? 4. Według niektórych blogów o węzłach, mogę obsługiwać równoległe żądania do 10K z nodejs. Ale jeśli tylko z prostym węzłem serwera http zwiększa się 20% cpu w trybie czarno-białym. Jak będę mógł obsługiwać użytkownika 10K?


title: jak przekonać zespół i kierownika projektu, że wdrożenia po uruchomieniu są w porządku dla nowych funkcji

text: Mamy witrynę, która została uruchomiona i jest „kompletna”, zrobiliśmy wszystko, o co poprosił klient i naprawiliśmy kilka błędów po uruchomieniu. Zauważyłem jednak, że strona główna naszej witryny używa 100 zapytań SQL i _brak_ buforowania. Zajęło mi pół dnia, aby dodać pamięć podręczną i zrobiłem to w oddziale. Teraz zastanawiam się, jak mogę przekonać kierownika projektu i innych członków zespołu i uzyskać wsparcie dla wdrożenia tej optymalizacji po uruchomieniu. Jakie mogę podać powody, dla których nie zaszkodzi to projektowi? A może po prostu czekam, aż kolejny projekt zostanie uruchomiony, aby wprowadzić tego rodzaju ulepszenia? Więcej szczegółów: * Nie mogę powiedzieć przyszłym pracodawcom, że wdrożyłem buforowanie i zauważyłem wzrost wydajności bez faktycznego wdrożenia go i uchwycenia poprawy (za pomocą Google Analytics, Page Speed lub innej metody), czy też mogę? * To jest środowisko agencyjne, żaden z naszych projektów nie używa buforowania ani żadnej innej optymalizacji wydajności * Witryna ma 50 tys. strona (witryna kampanii marketingowej) * lokalne testy redukujące wczytywanie strony z ~3 sekund do ~700ms


title: Tworzenie podklas zestawu lub zezwalanie na konfigurację zewnętrzną

text: Mam klasy `TriggerCaller` i `TriggerAction`. Caller "wywołuje" metodę `do()` na akcji, która jest ustawiana za pomocą metody `setAction()` `TriggerCaller`. Reszta programu powinna zajmować się klasą `Trigger`, która zawiera wywołanie i akcję. Mam dwie możliwości: 1) Nadaj klasie `Trigger` metody `setAction` i `setCaller`. Wydaje się to mieć sens, ponieważ oznacza to, że nie będę musiał przedefiniowywać rzeczy dla każdej podklasy (patrz opcja 2) i nie będę faworyzować jednego obiektu nad drugim (patrz opcja 3). 2) Potrafię zdefiniować podklasy `Trigger` dla każdej kombinacji Caller-Action. Wydaje się, że to „czuje się” lepiej z jakiegoś powodu, którego nie potrafię wyrazić, ale jest to niepraktyczne. Jest po prostu zbyt wiele kombinacji TriggerCallers i TriggerActions do wykonania. 3) Zdefiniuj podklasę `Trigger` dla każdego `TriggerCaller`, na przykład `TriggerMIDI` dla `MIDICaller` i nadaj tej klasie `setAction()`. Wydaje się to mieć sens z perspektywy GUI, ponieważ w interfejsie ludzie wybierają typ `TriggerCaller` z menu "Utwórz", a następnie konfigurują go za pomocą akcji w oknie dialogowym (wraz z innymi rzeczami). Czuję, że (1) ma największy sens, ale jakoś to po prostu wydaje się… złe. Wydaje mi się, że zbyt mocno eksponuję wewnętrzne działanie zajęć. Ja również nakładam ciężar na kod GUI związany z konfiguracją klasy (w pewnym sensie). Czy jest lepsze rozwiązanie? Który powinienem wybrać?


title: Buduję firmę i chcesz wiedzieć, jak etyczne jest umieszczanie próbek z projektów, które robiłem wcześniej na nowej stronie internetowej firmy

text: W swoim życiu zbudowałem wiele stron i aplikacji, mogę je umieścić w następujących kategoriach: * Zrealizowałem cały projekt jako freelancer -> Dla innych firm * Zrealizowałem część projektu jako freelancer -> Dla innych firm * Zrobiłem cały projekt sam, gdy pracowałem dla innej firmy * Zrealizowałem projekt z członkami zespołu, gdy pracowałem dla innej firmy * Zrealizowałem cały projekt sam i dla siebie Teraz tworzę firmę z nową marką i mam własnych pracowników , Moje pytanie brzmi: czy to etyczne i normalne, że umieszczam na nowej stronie firmowej zrzuty ekranu i informacje o tych projektach, które wcześniej stworzyłem? które umieścić, a które nie z poprzednich kategorii?


title: Weryfikacja wymagań w systemie zamkniętym

text: Jestem na moim pierwszym prawdziwym projekcie oprogramowania po całym SDLC i jestem trochę zdezorientowany. Mamy wymaganie, które mówi coś w rodzaju „Bateria będzie monitorowana co sekundę”, co należy zweryfikować. To jest coś, czego tak naprawdę nie da się sprawdzić w systemie, bo dzieje się to „wewnątrz”, czyli nie ma wyjścia, które pokazywałoby, że bateria była sprawdzana co sekundę. Rozumiem, że w tej fazie weryfikacja odbywa się w systemie zamkniętym, więc nie można po prostu użyć debuggera do zweryfikowania czegoś takiego. Czy to założenie jest błędne? Czy też wymóg można uznać za niejednoznacznie zdefiniowany.


title: W jakich obszarach programowania czas wykonywania algorytmów jest tak naprawdę ważną kwestią?

text: Czasami słyszę, jak ludzie mówią, że ze względu na szybkość procesorów i ilość dostępnej pamięci wydajność algorytmu i czas działania nie są w praktyce głównym problemem. Ale wyobrażam sobie, że są jeszcze obszary, w których takie rozważania mają pierwszorzędne znaczenie. Dwa, które przychodzą mi na myśl, to handel algorytmiczny, gdzie tysiące transakcji musi być przeprowadzanych w ułamkach sekundy, oraz programowanie systemów wbudowanych, gdzie pamięć i moc są często ograniczone. Czy mam rację co do tych przykładów? a jakie inne obszary również byłyby przykładami?


title: Schemat bazy danych do wyceny produktów (pakiety, promocje, ilości, oferta ograniczona czasowo...)

text: Pracuję nad nowym punktem sprzedaży dla firmy oferującej produkty w różnych cenach w zależności od asortymentu. Wszystkie produkty mają cenę bazową. Do wyjaśnienia mojego problemu posłużę się następującymi informacjami: Produkt Kategoria Cena A 1 45 B 1 70 Q 2 20 R 2 27 S 2 15 X 3 17 Y 3 22 Z 3 16 Firma posiada Pakiety np. Pakiet "Combo" : w przypadku produktu A lub B, jeśli wybierzesz 1 z Q lub R i 1 z X, Y lub Z, otrzymasz rabat w wysokości 20 USD. **Przypadek A:** Czasami klienci dodają produkt podstawowy podczas składania zamówienia, na przykład: nie chcą jednego z Produktu A i dodają do niego Produkt Q i Produkt P, aby utworzyć pakiet ze zniżką Cena £. Następnie mogą dodać, że chcą 1 produktu B z 1 R i 1 Z. **Przypadek B:** Czasami klienci dodają 1 A i 2 B, 2 Q, 1 S, 2 X i 1 Z. Zgodnie z zasady określone w pakiecie „Combo”, miałyby zastosowanie tylko 2 kombinacje, ponieważ S nie jest przedmiotem kombinowanym. Inne promocje są zależne od ilości, więc jeśli kupisz 2 z B, otrzymasz 20% zniżki i/lub zależy od czasu, jest ważna tylko po 17:00 lub przed 10% zniżki, jeśli przed 10 rano. Kolejna promocja może zależeć od tego, kiedy dokonano ostatniego zakupu lub czy kupiłeś więcej niż X USD w przedziale czasowym Y. **Moje problemy:** 1) Jak zorganizować tabele, aby tworzyć różne pakiety lub promocje w bardzo elastyczny sposób, dodając różne rodzaje promocji o różnych wymaganiach? 2) Kiedy zamawiają, tak jak w przypadku B (lub kombinacji przypadku A i przypadku B), w jaki sposób ustrukturyzować moje zapytanie, abym mógł przetestować, jakie zestawy produktów znajdują się w zamówieniu, i odpowiednio zaktualizować ceny/opisy ? Ostatecznie najlepszy wynik dla tego zapytania zwróci, które pakiety i promocje mają spełnione wymagania, w kolejności, w której klient otrzymuje najwięcej korzyści (tzn. może to, co zamówił, spełnia wymagania promocji 1 i 3, ale promocja 3 jest tańsza). musi współpracować z wieloma promocjami). Z góry dziękuję za pomoc! **AKTUALIZACJA #1** Aby lepiej opisać istniejące problemy i zaktualizować wykonaną dotychczas pracę w celu ich rozwiązania, dołączam ERD Modelu Produktu ograniczony do jednostek i atrybutów, które mają wpływ na problem (tj. zapasy nie są w grze, więc nie ma żadnych jednostek inwentarzowych). ![tutaj podaj opis obrazka](http://i.stack.imgur.com/JaKxi.png) Dołączam również przykładowe dane z encji i atrybutów, które mają wpływ na to pytanie (aby uprościć odczytywanie danych, wstawianie nazwy/opisu w miejsce kluczy obcych): Oto link do schematu blokowego z przykładowym combo, szybkim i wizualnym sposobem zrozumienia struktury tabeli. PRODUKT --------- ID Nazwa ================================ 1 Hamburger 2 Cheeseburger 3 Boczek Hamburger 4 Cheeseburger z bekonem 5 Sok pomarańczowy 6 Sok jabłkowy 7 Kawa 8 Cola 9 Frytki 10 Krążki cebulowe 11 Soup du Jour 12 Zestaw hamburgerów 13 Zestaw CheeseBurger 14 Zestaw hamburgerów z bekonem 15 Zestaw Cheeseburgera z bekonem 16 Zestaw łączony 17 Napoje łączone 18 Mały sok pomarańczowy 19 Duży Sok pomarańczowy 20 Mały sok jabłkowy 21 Duży sok jabłkowy 22 Dodaj dodatkowy kotlet 23 Dodaj awokado SKŁADNIK PRODUKTU ------------------ productFrom productTo =========== ======================================== Kombinacja hamburgerów Kombinacja hamburgerów Kombinacja z boku Kombinacja hamburgerów Napoje CheeseBurger Combo Cheeseburger CheeseBurger Combo Boczne CheeseBurgery Combo Combo Napój Bekon Hamburger Combo Bekon Hamburger Bekon Hamburger Combo Combo Side Bekon Hamburger Combo Combo Napoje Bekon Cheeseburger Combo Bekon Cheeseburger Bekon Cheeseburger Combo Combo Side Bekon Cheeseburger Combo Napój CECHY PRODUKTU ---------------- ID Opis ======================= 1 Opcja strony łączonej 2 Napój łączony 3 Sok 4 Wielkość soku pomarańczowego 5 Wielkość soku jabłkowego 6 Dodatki CECHY PRODUKTU ZASTOSOWANIE --- --------------------------- produkt productFeature ProductFeatureApplicabilityType ==================== =========================================================== ====== Kombinacja hamburgerów Wymagana kombinacja Hamburger Combo Smak soku Wymagana kombinacja Cheeseburger Combo Wymagana kombinacja Cheeseburger Combo Smak soku z bekonem urger Combo Combo Wymagane strony Bekon Hamburger Combo Smak Soku Wymagany Bekon Cheeseburger Combo Combo Wymagane strony Bekon Cheeseburger Combo Wymagany Smak Soku CECHY PRODUKTU ZASTOSOWANIE ------------------------ ------ productFeature produkt ProductFeatureApplicabilityType ========================================= =================================== Kombinacja Kombinacja z boku Hamburger Wymagana kombinacja Napoje Kombinacja z hamburgerami Wymagane dodatki Kombinacja z hamburgerami Opcjonalna kombinacja Side Cheeseburger Combo Wymagane combo Napoje Cheeseburger Combo Wymagane dodatki Cheeseburger Combo Opcjonalne Combo Side Bacon Hamburger Combo Wymagane combo Napój Bacon Hamburger Combo Wymagane dodatki Bacon Hamburger Combo Opcjonalne Combo Side Bacon Cheeseburger Co mbo Wymagana kombinacja Napój Bekon Cheeseburger Combo Wymagane dodatki Bekon Cheeseburger Combo Opcjonalna FUNKCJA OPCJONALNA ------------------ productFeatureFrom Product ProductFeatureTo ============== ====================================================== Opcja boczna combo Frytki Combo Opcja Boczna Krążki Cebulowe Opcja Boczna Soup du Jour Combo Napój Sok Combo Napój Sok Kawowy Wielkość Soku Pomarańczowego Sok Jabłkowy Wielkość Soku Pomarańczowego Wielkość Soku Pomarańczowego Sok Jabłkowy Pomarańczowy Wielkość Soku Jabłkowego Pomarańczowy Wielkość Soku Jabłkowego Małe Jabłko Dodatki do soku Dodaj dodatkowe dodatki do pasztecików Dodaj awokado Tak więc, dzięki badaniom i wsparciu zapewnionemu przez społeczność do momentu poznania, udało mi się rozwiązać problem em #1. W rzeczywistości zrobiłem to z większą elastycznością, niż sądziłem, że mogę to zrobić przy pierwszym wdrożeniu systemu. Mimo że nastąpił postęp w przypadku problemu 2, nie został on rozwiązany w sposób zadowalający. Pojawiło się kilka pomysłów, jak to zrobić, Neil McGuilgan zadał świetne pytanie prowadzące do możliwego rozwiązania za pomocą Relational Division (dba.stackexchange.com/questions/45829/co-jest-nazwa-tego-typu- of-zapytanie-i-co-jest-wydajnym-przykladem) i ta książka (www.amazon.com/books/dp/0471380237) bardzo pomogła. Jednak to rozwiązanie na dzień dzisiejszy, jak rozumiem, działa tylko z „jedną” płytą (combo) na raz. Jeśli klient podejdzie i powie, że chce 2 cheeseburgery, 1 hamburger, 1 mały sok jabłkowy, 1 colę, 1 frytki i 2 krążki cebulowe, potrzebuję sposobu na wykrycie, że w mieszance jest tylko jedna kombinacja i dodaję drugą produkty w cenie bazowej. Jeśli istnieje wiele kombinacji combo, szukam (najlepiej dla zapytania sql), które mogą priorytetyzować kombinacje combo przez największe oszczędności. Jednym z pomysłów, jaki wpadłem na rozwiązanie problemu drugiego, jest dodanie i przypisanie do KOMPONENTU PRODUKTU flagi głównego produktu zestawu (tj. hamburgera). Następnie uruchamiając proces wyceny zapytaj, które produkty w zamówieniu są głównymi produktami w „paczce”, odnosząc zapytanie do rabatu podanego przez tabelę PRICE COMPONENT i zamawiając według tej wartości (malejąco) i w tej kolejności opakowań sprawdź aby sprawdzić, czy możesz utworzyć „pakiet” z pozostałymi produktami niegłównymi za pomocą zapytania i zapętlić proces, aż nie będzie więcej produktów głównych lub nie będzie więcej produktów innych niż główne w pozostałych.


title: Jaki jest właściwy sposób przejścia z CVCS do DVCS w dużej firmie?

text: **Główna edycja: Dodano więcej informacji o tym, jak programiści są skonfigurowani i jak DVCS może pomóc, więc nie musisz zgadywać DVCS (ale nadal możesz to zrobić =P).** Właśnie zacząłem nową pracę i obecnie próbuję wprowadzić system DVCS (mercurial, ale rzeczywisty DVCS nie jest w tym momencie przedmiotem dyskusji, może to być również git) w firmie (duża, międzynarodowa). Jak dotąd nie spotkałem się z niczym poza pozytywną uwagą, nawet na poziomie kierowniczym i kierowniczym, ale chcę się upewnić, że w ogóle nie zakłócam pracy organizacji ani czyjejkolwiek pracy. ** Sposób, w jaki programiści są konfigurowani, to pokój zespołowy, więc jest dużo komunikacji. Jest też integrator, który na co dzień komunikuje się dwa lub trzy razy z liderem zespołu. Ponadto w innych częściach świata jest więcej zespołów programistów, może 20 biur w 6 lub 7 krajach.** Kultura firmy jest otwarta i nie byłoby problemu z pilotażowym testowaniem narzędzia (dzięki za odpowiedź poniżej, już +1d) ...ale **prawdziwe pytanie** (wielkimi literami): **JAK PRZEKONASZ KIEROWNICTWO _WSZYSTKICH BIUR NA ŚWIECIE_, ŻE JEST ROZSĄDNA RZECZ DO ZROBIENIA I PRZYNIESIE SZCZĘŚCIE I WYDAJNOŚĆ DEWELOPEROM?* * (powiedzmy, że testowanie pilotażowe i pokazanie, że działa to tylko jedna część odpowiedzi). Rozwijanie kontekstu... Czy zmiana ma sens?, tak (uwaga: obecny SCM to Perforce). Byłem świadkiem kilku klasycznych źródeł frustracji związanych ze scentralizowanym zarządzaniem kontrolą źródła, w tym: * Ludzie przypadkowo łamią kompilacje innych osób lub nadepną sobie nawzajem podczas przesyłania poprawek kodu. **Nie zdarza się to często, ponieważ osoba odpowiedzialna musi nosić różową czapkę (zabawne rzeczy), dopóki kompilacja nie zostanie naprawiona, ale czapka nadal istnieje, a gdy kompilacja się zepsuje, wpływa to na inne biura na całym świecie.** **DVCS na ratunek** : kompilacje są teraz zepsute w jednym biurze, ludzie tracą strach przed używaniem kontroli wersji i mogą się domyślać lub sprawdzać z partnerem, dzieląc się swoimi zmianami łatwiej i niekoniecznie z resztą grupy . * Niepotrzebna biurokracja, jeśli chodzi o przyznawanie dostępu (np. wygląda na to, że każdy ma dostęp do większości kodu). **Istnieje dedykowana grupa administratorów, którzy potrzebują od 1 do 3 dni, aby przyznać dostęp do kodu, podczas gdy inni deweloperzy muszą poprosić swoich kolegów o kod tylko po to, aby go obejrzeć… ale AFAIK, często zamiast tego czekają.** **DVCS na ratunek:** Administracja nie musi być scentralizowana na małej grupie przytłoczonych ludzi, nowi pracownicy otrzymują kod od osoby odpowiedzialnej za projekt (1. poziom) lub współpracownika z dostępem do repozytorium (2. poziom), który mógłby nawet przejrzyj swój kod i prześlij go wraz ze zmianami. * Skargi dotyczące spowolnienia spowodowanego opóźnieniem sieci. **Nie tak bezpośrednio, ale czasami a) serwer Perce nie działa, b) Internet nie działa, c) Internet lub serwer Perce działa wolno. Tak, nie tak często, ale czasami jest to na tyle irytujące, że odrywasz się od toku myślenia.** **DVCS na ratunek** : Kiedy używasz DVCS, oczywiście nie potrzebujesz połączenia z siecią. Najgorszy scenariusz? udostępnij swoje zmiany przez LAN lub sneakernet (z kolejkami poprawek). * Problemy przy próbie współpracy z zewnętrznymi dostawcami, którzy niekoniecznie należą do organizacji. **Zdarza się to dość często i bezpieczeństwo jest tutaj problemem AFAIK, a klienci cierpią z powodu biurokracji dostępu**. **DVCS na ratunek** : Tak więc przyznanie dostępu do subrepo byłoby tutaj idealnym rozwiązaniem ... również sami klienci mogliby używać kontroli wersji między sobą bez konieczności konfigurowania własnego serwera i byliby w stanie lepiej się zintegrować do wewnętrznego przepływu pracy, ponieważ obecnie Perforce ma dostęp do sieci lokalnej, a tym samym więcej biurokracji, co niekoniecznie jest tutaj bezpieczeństwem, ponieważ zewnętrzni współpracownicy nadal mają dostęp do pamięci flash i poczty e-mail. Prawdziwym zabezpieczeniem byłoby posiadanie zewnętrznych pracowników na miejscu... w lochach czy coś w tym rodzaju, i obmacywanie ich à la TSA w drodze do wyjścia, aby upewnić się, że nie dostaną kodu. * Obejście do integracji modułów z innych repozytoriów. Wymaga dodatkowej konserwacji/wysiłku ze strony programistów. * _Ci faceci faktycznie napisali sami (chyba) wtyczkę, która umożliwia wymuszone pobieranie plików z innych repozytoriów w innych częściach *_ **DVCS na ratunek** : Ich rozwiązanie wygląda bardzo podobnie do funkcji mercurial subrepo, która używa pliku ( .hgsub), aby wskazać, dokąd trafia kod, ale muszą utrzymywać stany innych repozytoriów w tym samym pliku (co jest wykonywane oddzielnie i automatycznie przez mercurial w pliku .hgsubstate). * Praca z kodem źródłowym wymaga wcześniejszego zaznaczenia plików do edycji. To dodaje irytujący dodatkowy krok IMHO. **Jeśli tego nie zrobisz, plik będzie w trybie tylko do odczytu i nie będziesz mógł go edytować w swoim IDE, również ten IMHO sprawia, że lokalna kopia jest podatna na niską integralność. Ta cecha wydajności sprawia, że myślę, że był leniwy programista, który nie chciał zmuszać klienta do sprawdzania plików w repozytorium przed wersjonowaniem zmian. Sprawia też, że myślę/personifikuję Perforce jako idiotę paranoika, który mówi** _** „NIE ZMIENIAJ PLIKÓW BEZ POINFORMOWANIA MNIE ALBO MNIE PRZYJDĄ I ZJEdzą!!!” _**. **DVCS na ratunek** : Cóż... Chyba każde inne oprogramowanie SCM wie, że nie ma mięsożernych wiewiórek. * Mała integralność projektu na maszynach programistów (patrz poprzedni punkt; trudniej jest dodać zmiany bez wcześniejszego wskazania ich Perforce). **Nie potrzebujesz do tego DVCS... ale jeśli dokonasz zmian lokalnie iz jakiegoś powodu zapomnisz je dodać, będziesz miał trudności z wykryciem tego**. Po wykryciu jest tam dwuetapowa instrukcja wiersza poleceń, którą widziałem gdzieś, aby wykryć zmiany, które zrobiłeś bez informowania Perforce. Biorąc pod uwagę ten kontekst **co Twoim zdaniem jest najlepszym sposobem na... ?** : 1. Dowiedz się/zademonstruj, czy migracja rzeczywiście przyniosłaby korzyści pracownikom i firmie. 2. Ułatw przyjęcie zmian lub przynajmniej spraw, aby wyglądało na to, że jest to warte wysiłku. 3. Nie komplikuj pracy innym. 4. Przekonaj zarządzanie na całym świecie. 5. Unikaj robienia z pracy integratora królewskiego bólu. Moje drugie pytanie (i skupiając się na ostatnim punkcie) Zawsze byłem ewangelistą DVCS, głównie dlatego, że ułatwia to pracę i współpracę między programistami… ale do tego momentu nigdy nie musiałem brać pod uwagę integratorów. perspektywę (odpowiedzialną za koordynację kodu źródłowego zespołów, tworzenie i wydawanie kompilacji… z całego świata), która w pewnym momencie może stanąć przed dwoma źródłami SCM lub przynajmniej z samą migracją. Następnie **jak proces migracji może w najmniejszym stopniu wpłynąć na integratorów?**.


title: Najpierw czy później rozwijać bezpieczeństwo?

text: Pytanie Czy podczas kodowania aktywnie myślisz o bezpieczeństwie? pyta o nastawienie na bezpieczeństwo podczas programowania. Oczywiście programista musi myśleć o bezpieczeństwie podczas kodowania – wstrzykiwanie SQL, zabezpieczenie hasłem itp. Jednak jeśli chodzi o prawdziwe, w pełni sformułowane zabezpieczenia, zwłaszcza trudne problemy, które mogą nie być od razu oczywiste, jeśli mam się martwić z zajmowaniem się nimi przez cały proces rozwoju, czy też powinien to być samodzielny krok w późniejszym rozwoju? Słuchałem podcastu na Security Now i wspomnieli o tym, jak wiele problemów bezpieczeństwa znalezionych we Flashu było, ponieważ kiedy Flash został opracowany po raz pierwszy, nie został zbudowany z myślą o bezpieczeństwie (ponieważ nie musiał) -- dlatego Flash ma w swojej istocie poważne luki w zabezpieczeniach. Wiem, że nikt nie chciałby aktywnie sprzeciwiać się „najpierw myśl o bezpieczeństwie” jako najlepszej praktyce, ale wiele firm nie stosuje najlepszych praktyk. **Jakie jest zatem właściwe podejście do zachowania równowagi między koniecznością wykonania produktu a jego bezpiecznym rozwojem?**


title: Czy moja mała biblioteka oprogramowania powinna unikać korzystania z innych bibliotek?

text: Właśnie wydałem małą bibliotekę Java, która oferuje tylko kilka klas i metod. Ponieważ zbudowałem projekt za pomocą Mavena, od razu skorzystałem z kilku zewnętrznych bibliotek, aby osiągnąć swoje cele, w szczególności: * **commons-lang3** (dla niektórych ogólnych rzeczy w Javie) * **slf4j-api** (do logowania) * **commons-io** (dla odrobiny rzeczy z plików - myślę, że dosłownie przeczytałem plik raz) Nie chcę, aby moja biblioteka wydawała się rozdęta w oczach innych. Czy powinienem spróbować usunąć moje uzależnienie od tych bibliotek, aby zminimalizować mój ślad? Jakieś porady dotyczące tego, jakich typów bibliotek najlepiej byłoby unikać, rozważając korzystanie z większej liczby w przyszłości?


title: W MVC, czy podstawowe pobieranie danych z modelu może być wykonywane w widoku?

text:
Biorąc pod uwagę koncepcję „chudych kontrolerów, grubych modeli”_ i ogólną akceptację, że widoki mogą bezpośrednio odwoływać się do modeli, gdy wymagają danych do wyjścia, należy rozważyć obsługę części „pobierz i wyświetl” żądań w widokach, a nie w kontrolerze ? Na przykład (próba, aby kod był dość ogólny): **Controller** <?php class Invoice extends Base_Controller { /** * Pobierz wszystkie faktury za ten miesiąc */ public function current_month() { // ponieważ nie ma danych wejściowych użytkownika niech kontroler będzie bardzo chudy, // NIE pobieraj danych z modelu tutaj, po prostu załaduj widok $this->load->view('invoice/current_month'); } } **View** <?php // bezpośrednio pobierz tutaj faktury z bieżącego miesiąca $invoices = $this->invoice_model->get_current_month(); // pobierz inne dane tylko do wyświetlania, np. lista użytkowników dla osobnej listy gdzieś na stronie $users = $this->user_model->get_users(); ?>
Faktury za ten miesiąc

 <?php foreach ($faktury jako $faktura) { ?>
<?php echo $faktura['ref']; ?>
 <?php } ?>
 Dla mnie ma to przynajmniej jakiś sens w przypadkach, gdy żądanie jest zasadniczo tylko Widokiem. Dlaczego Kontroler miałby zbierać i przekazywać dane do Widoku, skoro sam może je pobrać? To pozostawia Kontrolera otwartego na przetwarzanie czysto „poziom aplikacji” (np. obsługa żądań GET/POST, zarządzanie prawami dostępu i uprawnieniami itp.), a także utrzymywanie modeli wielokrotnego użytku i wszystkich innych dobrych rzeczy. Gdyby ten przykład został rozszerzony, aby umożliwić użytkownikowi filtrowanie wyników, kontroler po prostu obsłuży POST z formularza i przekaże filtry do widoku, który następnie zażąda danych ponownie, tym razem z filtrami. Czy to prawidłowe podejście do tworzenia aplikacji MVC? A może przeoczam ważną rolę, jaką powinien odgrywać kontroler?


title: Jak ruszyć do przodu w zarządzaniu projektami/produktami po 3 latach doświadczenia w programowaniu?

text: Aby być lepszym programistą, możesz zacząć: 1. Zdobądź jakiś projekt open source i zacznij w nim uczestniczyć. 2. Rozwiąż jakieś ćwiczenie „Projekt Euler” lub „Yodacode”. Ale jeśli ktoś chce iść w kierunku `Project/Product Management`, to w jakim kierunku powinien się poruszać i jakie są dostępne opcje, aby zacząć w tym kierunku. Tło: Jestem programistą średniego poziomu z 3 letnim doświadczeniem w programowaniu i chcę rozpocząć pracę na stanowisku `Zarządzanie projektami/Zarządzaniem produktem`, ale moje CV pokazuje doświadczenie w programowaniu, więc moje pytanie brzmi, jak włamać się do linii zarządzania projektami/produktami w wieku 3 lat doświadczenia w programowaniu. Czy mamy podobne opcje dostępne dla `Zarządzania Projektami/Produktami`, jak w przypadku programowania, jak ta wspomniana powyżej? _Wiem, że to sytuacja z kurczakiem i jajkiem, ale jak najlepiej się z tego wydostać?_


title: Zasada Liskova: naruszenie przez podpowiedź typu

text: Zgodnie z zasadą Liskova konstrukcja taka jak ta poniżej jest nieważna, ponieważ wzmacnia warunek wstępny. Wiem, że przykład jest bezcelowy/bezsensowny, ale kiedy ostatnio zadałem takie pytanie i użyłem bardziej skomplikowanego przykładu kodu, wydawało się, że zbytnio odciąga to ludzi od rzeczywistego pytania. //Modele danych abstract class Argument { protected $value = null; funkcja publiczna getValue() { return $this->value; } abstrakcyjna funkcja publiczna setValue($val); } class Numeric extends Argument { public function setValue($val) { $this->value = $val + 0;//zmuszanie do liczby return $this; } } //tutaj: abstract class Output { public function printValue(Argument $arg) { echo $this->format($arg); zwróć $to; } format abstrakcyjnej funkcji publicznej (argument $arg); } class OutputNumeric extends Output { public function format(Numeric $arg)//<-- NARUSZENIE! { $format = is_float($arg->getValue()) ? '%.3f' : '%d'; return sprintf($format, $arg->getValue()); } } Dlaczego tego rodzaju _"naruszenie"_ miałoby być uważane za szkodliwe? Tak bardzo, że niektóre języki, takie jak ten, którego użyłem w tym przykładzie (PHP), nawet na to nie pozwalają? Nie wolno mi wzmacniać podpowiedzi typu abstrakcyjnej metody, ale przez nadpisanie metody `printValue` mogę _am_ napisać: class OutputNumeric extends Output { final public function printValue(Numeric $arg) { echo $this- >format($arg); } public function format(Argument $arg) { $format = is_float($arg->getValue()) ? '%.3f' : '%d'; return sprintf($format, $arg->getValue()); } } Ale to oznaczałoby powtarzanie się dla każdego potomka `Output` i sprawiałoby, że moje obiekty byłyby trudniejsze do ponownego użycia. Rozumiem, dlaczego istnieje zasada Liskova, nie zrozum mnie źle, ale trochę trudno mi zrozumieć, dlaczego podpis metody _abstrakcyjnej_ w klasie _abstrakcyjnej_ musi być przestrzegany o wiele bardziej rygorystycznie niż metoda nieabstrakcyjna. Dlaczego nie wolno mi przeszkadzać na zajęciach dla dzieci, na zajęciach dla dzieci? Z mojego punktu widzenia klasa potomna `OutputNumeric` jest szczególnym przypadkiem użycia `Output`, a zatem może potrzebować konkretnego wystąpienia `Argument`, mianowicie `Numeric`. Czy naprawdę źle z mojej strony jest pisanie kodu w ten sposób, kiedy _jestem_ wolno napisać to: abstract class Output { public function printValue(Argument $arg) { echo $this->format($arg); } public function(Argument $arg) { wrzuć nowy RuntimeException(__METHOD__. 'Musi być nadpisany przez klasę potomną'); } } class OutputNumeric extends Output { końcowy format funkcji publicznej(Numeryczny $arg) { $format = is_float($arg->getValue()) ? '%.3f' : '%d'; return sprintf($format, $arg->getValue()); } } Ten rodzaj osiąga to samo, ale jest to po prostu zwariowany i, moim zdaniem, okropny kod...


Ogólnie rzecz biorąc, czy lepiej jest zrobić wszystkie funkcjonalne części, czy najpierw uruchomić interfejs użytkownika – czy może połączenie tych dwóch? Zakładając, że pracujesz nad czymś dużym, czy ogólnie przyjętą praktyką jest uruchamianie wszystkich funkcjonalnych obiektów blob zbierających dane przed jakimkolwiek interfejsem użytkownika, uruchamianie całego interfejsu użytkownika po jednym kawałku na raz, czy coś pośrodku? Wszyscy wiemy, jak podzielić pracę na łatwe do zarządzania fragmenty, ale ostatecznie pytanie brzmi, czy interfejs użytkownika jest zawarty w łatwych do zarządzania fragmentach, jak przypuszczam. W przykładzie rozważmy aplikację GUI z jednym oknem głównym, ale z kilkunastoma zakładkami w różnych dokach, aby oddzielić różne składniki danych. Każda pojedyncza zakładka ma za sobą stosunkowo złożony zestaw ruchomych części z perspektywy jednostek funkcjonalnych. Przykładowa aplikacja w tym konkretnym pytaniu znajduje się tutaj wraz z towarzyszącym blogiem i oryginalnym produktem komercyjnym.


title: Jak wyjaśnić, dlaczego wybory projektowe są dobre?

text: Ponieważ stałem się lepszym programistą, odkryłem, że większość moich umiejętności projektowych pochodzi bardziej z intuicji niż z analizy mechanicznej. To jest świetne. Pozwala mi czytać kod i szybciej go wyczuć. Pozwala mi to znacznie łatwiej tłumaczyć projekty między językami i abstrakcjami. Pozwala mi to szybciej załatwić sprawy. Minusem jest to, że trudniej mi wytłumaczyć kolegom z zespołu (i co gorsza kierownictwu), dlaczego dany projekt jest korzystny; zwłaszcza koledzy z zespołu, którzy są opóźnieni w stosowaniu najlepszych praktyk. „Ten projekt jest bardziej testowalny!” lub „Powinieneś przedkładać kompozycję nad dziedziczenie”. przejść nad ich głowami i wprowadzić mnie do króliczej nory, próbując naprowadzić wszystkich na ostatnią dekadę postępów w inżynierii oprogramowania. Oczywiście będę w tym lepszy z praktyką, ale w międzyczasie wiąże się to z dużą ilością straconego czasu i/lub złego projektu (co doprowadzi do zmarnowania czasu na późniejsze naprawienie). Jak lepiej wyjaśnić, dlaczego dany projekt jest lepszy, skoro korzyści nie są do końca oczywiste dla odbiorców?


title: Czy możliwe jest utrzymanie tylko jednej bazy danych zarówno dla aplikacji webowych, jak i desktopowych?

text: Mam problem z moim modelem biznesowym, pozwól, że wyjaśnię lepiej. Tworzę oprogramowanie na 1 rok i kilka miesięcy, przeznaczone dla branży spożywczej, a dokładniej oprogramowanie do: _Dostawa, Take Way, Rezerwacja stolika, POS, Rozliczenia Zobowiązań, Druków (paragon), Monitory Kuchenne Zamówienia, Klienci Kontrola zamówień i obszar fiskalny._ Cóż, rozdzieliłem oprogramowanie głównie na dwa obszary, jeden to obszar WWW, a drugi to obszar pulpitu (używany tylko przez administratorów) i zainstalowany lokalnie. 1 - Obszar WWW (Zasadniczo wykonaj następujące czynności:) * Pokaż katalog z produktami * Klienci dokonują zamówień * Klienci płacą za zamówienia * itd ... jak wspomniano powyżej 2 - Obszar pulpitu * Zarządzaj zamówieniami * Zarządzaj klientami * Zarządzaj dostawcami * Zarządzaj Rachunki Zobowiązań i Należności * itp. ... jak wspomniano powyżej Obszar sieci jest utrzymywany na serwerze sieciowym online (skrypty i baza danych są dostępne online). Obszar Pulpit jest hostowany lokalnie na komputerze z systemem Linux z lokalną bazą danych i lokalnymi plikami skryptów. Moje pytanie brzmi: Czy można zachować **tylko jedną bazę danych** dla obu aplikacji? Jeśli TAK, proszę, jakie jest najlepsze podejście? ## Postępuj zgodnie z moim środowiskiem specyfikacji technicznej _Baza danych: Właściwie mam dwie działające bazy danych i chciałbym zachować tylko jedną._ System operacyjny: Linux (Kernel 2.6.X i nowsze) lub Windows (XP i nowsze) Dla obszaru Web * Apache , PHP, Python, Java Script, Shell Script i MySQL. Dla obszaru pulpitu: * PHP-GTK2, Apache, PHP, MySQL i skrypt powłoki. * * * ## Dodatkowe informacje o systemie [ZMIENIONO] Głównymi celami posiadania środowiska Desktopowego są: 1. Muszę wydrukować i wydać Kupon Podatkowy przy każdym nowym zamówieniu. 2. Mam szufladę. 3. Mam czytnik szeregowy (kod kreskowy). 4. Mam terminal do zapytania o informacje. 5. i kilka innych rzeczy, które są tak trudne, jeśli nie niemożliwe do zrobienia w środowisku sieciowym. **Schemat relacyjny pulpitu: 104 tabele. Schemat relacyjny sieci Web: 42 tabele.** 1. Uprawnienia są przydzielane na podstawie: Domyślnie odrzuć wszystkie i przypisuj je w razie potrzeby. 2. (Walidacja / Sanityzacja) została już wykonana w aplikacji internetowej. 3. Do tej pory wydajność nie stanowiła problemu, ponieważ w każdym roku obrotowym część mojej bazy danych będzie archiwizowana. (Również klienci, dostawcy i wszystkie powiązane dane na ich temat zostaną zarchiwizowane po 3 latach braku aktywności). Moim prawdziwym problemem jest to, że mam dzisiaj 2 środowiska i chciałbym mieć tylko 1. Następnie "połącz" oba światy w jeden jest opcją, ale nie jestem pewien. Bardzo chciałbym tu przeczytać wiele pomysłów na ten temat. **Obserwacja procesu:** Dziś działa i działa dobrze, ale mam ochotę zmarnować czas na jakiś proces. Spójrz na scenariusz: 1. Zamówienie składane jest w Internecie, a następnie przechowywane w mojej internetowej bazie danych. 2. „Zamówienie” jest wysyłane do kuchni i przygotowywane. 3. Wydrukuj paragon (Kupon Podatkowy), dołącz go do zamówienia i dostawy do klienta. 4. Kupon podatkowy jest generowany przez moje środowisko pulpitu i wymaga wywołania tabeli zamówień, ale nie jest to tabela zamówień sieci Web, ale tabela zamówień pulpitu. _W kilku słowach muszę ponownie wygenerować zamówienie, aby wypełnić Kupon Podatkowy. To samo dzieje się z Rejestrem Klientów, Rejestrem Dostawców i kilkoma innymi rzeczami._ Mam nadzieję, że dzięki tym informacjom moje pytanie będzie bardziej czytelne. Dzięki jeszcze raz!


title: Czy odręczny montaż zniknie?

text: W zeszłym tygodniu zastanawiałem się, czy kompilatory są coraz lepsze w optymalizacji, czy nadejdzie moment, w którym nie będzie potrzeby ręcznego asemblowania? Czy nadal istnieją wyspecjalizowane dziedziny, w których kompilatory nie są wystarczająco inteligentne, aby tworzyć kod, który może konkurować z ręcznie pisanym asemblerem?


title: W jaki sposób można dostosować Scrum, aby uwzględniał obowiązki wsparcia?

text: Scrum świetnie nadaje się do nowych zadań rozwojowych i proaktywnych. Ale nigdy nie byłem pewien, jak z niego korzystać, gdy obowiązki działu obejmują również analizę/odpowiadanie/naprawianie pytań obsługi klienta, które pojawiają się w sposób nieprzewidywalny, zazwyczaj mają wystarczająco wysoki priorytet, aby przerwać to, co planowaliśmy zrobić, a ich złożoność waha się od trywialnych. do majora. Książki, które do tej pory widziałem, nie opisują tej sytuacji. Więc jak radzą sobie z tym inni ludzie?


title: Czy miejsce, do którego trafia link, jest częścią przypadku użycia widoku?

text: Załóżmy, że mam minimalny przypadek użycia, taki jak „wyświetl stronę główną” lub „wyświetl baner reklamowy”. Czy powinien być uwzględniony, czy wykluczony w przypadku użycia, który faktycznie podąża za linkiem? Chodzi mi o to, czy należy do przypadku użycia „wyświetl stronę 1”, jeśli raport mówi, że „Link ze strony 1 do strony 2 nie działa” w typowym przypadku „link nie działa”.


title: Jaka jest wartość OOP w ASP.NET MVC?

text: Jako programista C++ z lat 90. podczas wielkich wojen OOP, przywiązuję dużą wagę do OOP jako podstawy zatrudniania nowych programistów C# do firmy. Jednak obecnie istnieje wiele struktur, takich jak ASP.NET MVC, które obsługują większość ciężkich zadań związanych z OOP. Programiści bez głębokiej wiedzy z zakresu OOP mogą równie łatwo postępować zgodnie z paradygmatem i nadal być w stanie realizować swoje projekty. OOP może nie być tak atrakcyjne jak wcześniej dla nas, twórców aplikacji, zwłaszcza z frameworkiem takim jak MVC. Widzę kilka przypadków, w których OOP będzie naprawdę przydatny, jak na przykład opracowanie typu workflow projektu. Lub te z wymaganiami maszyny stanowej. Ale tak naprawdę większość projektów, które naprawdę przychodzą (przynajmniej do nas tutaj) to tylko funkcjonalności CRUD. Poniżej znajduje się moja lista przy zatrudnianiu. Czy to uczciwe, aby mieć tam OOP jako przedmiot numer jeden? 1. OOP i projektowanie 2. Programowanie po stronie serwera: C#, ASP.NET MVC i EF 3. Programowanie po stronie klienta: JQuery, CSS, HTML, itp. 4. Projektowanie baz danych


title: Narzędzie do monitorowania wydajności i wydajności płótna HTML5 dla JavaScript

text: Stworzyłem program w JavaScript i HTML5 canvas i zastanawiam się, co się stanie, gdy narysujesz kształt w określonym miejscu na płótnie, a następnie narysujesz inny kształt na tym samym obiekcie. Czy zużywa więcej pamięci, ponieważ rysuję nowy obiekt jeden na drugim? (Obecnie proces renderowania mojego programu nie jest tak szybki, zakładam, że jest to spowodowane rysowaniem nowego obiektu na starym obiekcie, prawda?). Ponadto chcę wiedzieć, jakie narzędzia do monitorowania wydajności są dostępne dla programów JavaScript. Chcę dowiedzieć się, który fragment mojego programu zużywa najwięcej pamięci, aby zoptymalizować ten konkretny proces, aby był szybszy. Dziękuję Ci.


title: Czy istnieje odpowiednik „FizzBuzz” w wyborze klientów?

text: To jest dla freelancerów. W moim poprzednim życiu jako pełnoetatowy pracownik zajmowałem się zatrudnianiem i przeprowadzaniem wywiadów z dużą liczbą programistów. Dowiedziałem się, że o wiele bardziej wartościowe jest przyglądanie się programiście rozwiązującemu problem, nawet najmniejszy, niż rozmowa o doświadczeniu itp. Teraz pracuję jako freelancer/konsultant. Jedną z przyjemniejszych rzeczy jest wolność wyboru tego, nad czym chcę pracować. Ale teraz, po kilku latach, nauczyłem się (na własnej skórze), że niektórzy klienci nie są warci tych pieniędzy. Mogą być zmienne, nierozsądne, wymagające i trudne w pracy w bardzo demoralizujący sposób. Zastanawiałem się więc: czy istnieje lepszy sposób na „przeprowadzanie wywiadów” z klientami? Oczywiście każda metoda musiałaby być subtelna, ponieważ klient prawdopodobnie nie oczekuje testów. Ale czy istnieje odpowiednik „FizzBuzz”, który powie mi, czy powinienem się wpisać, czy powoli wycofywać?


title: Czy możemy zilustrować potok procesora za pomocą diagramu sekwencji UML?

text: Studiuję wielordzeniowe potoki, a diagramy nie są na przykład diagramami sekwencji UML! nie jest to bardziej jasne, abyśmy mogli zobaczyć zarówno postęp czasu, jak i ścieżki danych, ponieważ nie sądzę, aby było wyraźne rozróżnienie między ścieżką danych a czasem? W UML czas idzie w dół, a ścieżka danych biegnie w prawo iw lewo. Czy możesz skomentować lub odpowiedzieć, dlaczego potokowanie generalnie nie jest ilustrowane za pomocą UML?


title: W jaki sposób można sensownie zmierzyć pielęgnowalność?

text: Kontekst: Jestem programistą korporacyjnym w sklepie wyłącznie dla MS. Czy ktoś może polecić dobry sposób **obiektywnego pomiaru łatwości utrzymania** fragmentu kodu lub aplikacji? **Dlaczego konserwowalność** : Mam dość metryk „jakości” w mojej grupie, które skupiają się tylko na liczbie błędów i pokryciu kodu. Obie metryki są łatwe do opisania, zwłaszcza jeśli nie mierzysz łatwości konserwacji. Krótkowzroczność i terminy skutkują ogromnymi kwotami długu technicznego, których tak naprawdę nigdy nie rozwiązujemy. **Dlaczego umiejętność obiektywnego mierzenia** : Pracuję w dużej grupie przedsiębiorstw. Jeśli nie możesz tego obiektywnie zmierzyć, nie możesz pociągać za to ludzi do odpowiedzialności ani sprawić, by byli w tym lepsi. Subiektywne pomiary albo się nie zdarzają, albo nie odbywają się konsekwentnie. Patrzę na metryki kodu VS2010, ale zastanawiam się, czy ktoś ma inne zalecenia.


title: Ciekawe lub unikalne typy w językach programowania?

text: Wszyscy widzieliśmy liczby całkowite, zmiennoprzecinkowe, łańcuchowe i sporadyczne typy dziesiętne. Jakie są niektóre z najbardziej dziwnych, unikalnych lub użytecznych typów, jakie napotkałeś, przydatne czy nie?


title: Przegląd kodu w obecności silnego wnioskowania typu i podstawowych edytorów

text: Jestem ciekaw, jak ludzie radzą sobie z porównawczymi recenzjami kodu (wersja x względem y pliku) w obecności wnioskowania o silnym typie, czyli gdy „var” (w C#) lub „auto” (w C++ 0x) jest używane zamiast starszej, bardziej szczegółowej (jawnej) deklaracji typu. Gdy funkcja IntelliSense jest dostępna, można po prostu najechać myszą na słowo kluczowe, aby określić (w razie potrzeby) wywnioskowany typ — ale co robią ludzie podczas przeglądania takich źródeł w Notatniku lub Współpracowniku kodu itp. Oczywiście wnioskowanie o silnym typie poprzedza C# i C++ o dekady , więc jak radzą sobie ludzie w innych językach, którzy mają tę funkcję od lat? Skłonny jestem sądzić, że po prawej stronie wyrażenia przypisania znajduje się większość błędów.


title: Niejednoznaczne wymagania programowe

text: wydaje się, że większość ćwiczeń programistycznych, które obecnie wykonuję, jest trochę niejednoznaczna, jeśli chodzi o określenie, co powinienem zrobić. Kiedy programiści pracują z klientami, czy klienci również nie mają wątpliwości, czego chcą, a ja powinienem nauczyć się zgadywać?


title: Czy jest miejsce, w którym można znaleźć samouczki dotyczące rzeczywistego użytkowania języków programowania?

text: Spojrzmy prawdzie w oczy. Jeśli chcesz nauczyć się czegoś zupełnie nowego, czy to matematyki, czy języków obcych, najłatwiej jest się tego nauczyć, gdy masz przed sobą scenariusze z prawdziwego świata, z zastosowaną teorią. Na przykład trygonometria może być niezwykle interesująca w przypadku tworzenia gier platformowych 2D. Nauka języka norweskiego może być naprawdę interesująca, jeśli mieszkasz w Norwegii. Kiedy próbuję spojrzeć na nowy język programowania, zawsze uważam, że te kroki są najtrudniejsze: 1. Jakich narzędzi potrzebuję do skompilowania i jak to zrobić 2. Wprowadzenie-krok: Dlaczego ten język programowania jest taki fajny? Gdzie i jak jest używany? (Krok, którego szukam, scenariusze ze świata rzeczywistego) Reszta, głębokie zanurzenie się w języku, czysta teoria i tym podobne, jest często znacznie łatwiejsze, jeśli wykonałeś krok 1 i 2. Ponieważ teraz wiesz, o co w tym wszystkim chodzi, i możesz po prostu przeczytać specyfikację, kiedy zajdzie taka potrzeba. Pytam, czy macie jakieś rekomendacje, gdzie mogę znaleźć taki materiał dla języków programowania? Czy to strony internetowe, czy firmy sprzedające książki w tym stylu, jestem zainteresowany. Ponadto interesują mnie wszystkie języki. (Gdybym znalazł wyjaśnienie "rzeczywistego użycia" nawet dla INTERCAL, byłbym zainteresowany). W innym wątku znalazłem książkę pod tytułem „Siedem języków w siedem tygodni”. Tego właśnie szukam, ale uważam, że musi być „więcej takich”.


title: Małe refaktoryzacje na słabej bazie kodu?

text: W ciągu ostatnich dwóch lat pracowałem z kiepsko napisanym kodem składającym się z prawie 40 tys. linijek kodu. Przez ten czas dokonałem wielu małych refaktoryzacji, aby go ulepszyć i powiększyłem, jeśli czas na to pozwoli. Niestety nadal uważam, że kod źródłowy jest kiepsko napisany. Jakie masz doświadczenie? Czy uważasz, że wiele drobnych poprawek może mnie gdzieś zabrać, czy też muszę się zatrzymać i przeznaczyć dużą część czasu na naprawę (oczywiście kierownictwo nie będzie zadowolone, jeśli zrobię to, gdy pracujemy nad bieżącym „bardzo ważna” nowa funkcja).


title: Jaki jest najlepszy kod Open Source, jaki kiedykolwiek widziałeś?

text: Częścią wartości Open Source jest zapewnienie świetnego przykładowego kodu osobom rozpoczynającym pracę z nową platformą lub językiem. Jaki jest najlepszy kod Open Source, jaki napotkałeś i dlaczego podoba Ci się Twój wybór? Każdy język się nada, ale szczególnie interesują mnie najlepsze przykłady Objective-C, jakie możesz wskazać. Oczywiście jest to pytanie otwarte, więc zostawię je na chwilę otwarte i zobaczę, jakie odpowiedzi otrzymamy. Dziękuję! EDIT: Dla "najlepszego" myślałem o kodzie zgodnym z idiomami w danym języku lub platformie, a także o częściach, które sprawiają, że kod jest "profesjonalny" - dobra dokumentacja, zestaw testowy itp. Kod jest zwięzły, ale niezbyt sprytny jest preferowany od bardzo zwięzłego lub gadatliwego kodu.


title: Co myślisz o GWT?

text: Ponieważ uczę się Java w tym okresie i właśnie skończyłem tutoriale, myślę, że jestem gotowy, aby zacząć współtworzyć projekt (ponieważ wiem z doświadczenia, że jest to najlepszy sposób, aby naprawdę się uczyć). Widziałem GWT, wygląda interesująco, więc pomyślałem, że powinienem spróbować. Zastanawiam się jednak, skoro GWT wdraża aplikacje Java w JavaScript, dlaczego miałbym uczyć się GWT, skoro mógłbym zamiast tego nauczyć się rzeczy samej (jest to JavaScript). Moje pytanie: czy warto? Czy ktoś nie byłby lepszy w nauce JavaScript, jeśli chce budować aplikacje JS, zamiast używać Javy i GWT? Zdaję sobie sprawę, że może być łatwiej budować pewne rzeczy za pomocą GWT, ale w końcu czy warto? Dziękuję.


title: Co to jest biblioteka klas?

text: Pracuję nad pozwem i potrzebuję definicji „biblioteki klas”, do której mogę się odwołać. Każda książka i cała dokumentacja, jaką mogę znaleźć, zakłada, że czytelnik już wie, czym jest biblioteka. Nawet wpis w Wikipedii na temat „Biblioteka (komputery)” ma mało odniesień. A odniesienia, które ma, pochodzą z lat 80. lub wcześniejszych. Czym więc w kontekście C# jest biblioteka klas? (z referencjami) Otrzymuję przyzwoitą liczbę definicji z „Wzorców projektowych: elementy oprogramowania obiektowego wielokrotnego użytku”, ale zakłada się również, że czytelnik wie, czym jest biblioteka.


title: Jak zostać programistą bez błędów?

text: Mój szef zawsze mi powtarzał, że dobry programista powinien być w stanie zapewnić, że zmieniany przez niego kod jest wiarygodny, poprawny i dokładnie samozweryfikujący; że powinieneś w pełni zrozumieć wszystkie wyniki i wpływy, jakie wywołają Twoje zmiany. Próbowałem być tego rodzaju programistą – testując raz za razem – ale błędy wciąż istnieją. Jak mogę być programistą bez błędów i wiedzieć, co spowoduje i wpłynie każdy znak mojego kodu?


title: Kodowanie do interfejsów

text: Rozumiem, dlaczego dobrym pomysłem jest kodowanie do interfejsu, a nie do konkretnej klasy. Trudno mi to zaimplementować, ponieważ inne metody zazwyczaj muszą wykorzystywać właściwości danego obiektu. Czy mam zły koniec kija?


title: Paradygmaty programowania a programista utrzymania ruchu

text: Czytałem Fakty i błędy inżynierii oprogramowania, które mają sekcję konserwacji. Ponieważ od lat zajmuję się utrzymaniem ruchu, przedstawiłem bardzo ciekawe fakty. Oto trzy. * Fakt 41: Konserwacja zwykle pochłania od 40 do 80 procent (średnio 60 procent) kosztów oprogramowania. Dlatego jest to prawdopodobnie najważniejsza faza cyklu życia oprogramowania. * Fakt 42: Enhancement odpowiada za około 60 procent kosztów utrzymania oprogramowania. Korekcja błędów wynosi około 17 procent. Dlatego konserwacja oprogramowania polega głównie na dodawaniu nowych możliwości do starego oprogramowania, a nie na jego naprawie. * Fakt 45: Lepszy rozwój inżynierii oprogramowania prowadzi do większej, a nie mniejszej konserwacji. To było sprzeczne z intuicją, okazuje się, że dobre oprogramowanie wymaga większej konserwacji, ponieważ łatwo je zmienić. W związku z tym pozostaje w użyciu dłużej, prowadząc do, tak, więcej zmian. Który paradygmat (taki jak funkcjonalny, zorientowany obiektowo, proceduralny) ma najlepszą pielęgnowalność i czy są jakieś badania, które to potwierdzają?


title: Metodologie powszechnie stosowane do tworzenia oprogramowania wbudowanego?

text: Prowadzę badania nad metodologiami tworzenia oprogramowania, które są powszechnie używane do tworzenia oprogramowania wbudowanego i czym różnią się od ich odpowiedników nieosadzanych. Trudno mi znaleźć dobre materiały na ten temat, więc jeśli możesz mi polecić jakieś artykuły, strony internetowe lub inne materiały, będę bardzo wdzięczny.


title: Mając n różnych kluczy, ile różnych 2-3/czerwono-czarnych drzew można zbudować?

text: ## Odświeżanie pamięci/Moje zrozumienie: Drzewo 2-3 to zrównoważone drzewo wyszukiwania, które pozwala na dwa typy węzłów. 1. 2-węzeł: normalny węzeł z dwójką dzieci. * Dziecko Dziecko < Rodzic i Dziecko Dziecko > Rodzic 2. 3-węzeł: Węzeł z dwojgiem rodziców i trojgiem dzieci. * Rodzic1 < Rodzic2 * L-Dziecko < Rodzic1, Rodzic1 < M-Dziecko < Rodzic2, RCChild > Rodzic2 Drzewo 2-3 jest zawsze zrównoważone i rośnie, gdy korzeń podnosi wysokość drzewa o jeden. http://en.wikipedia.org/wiki/2%E2%80%933_tree Moje pytanie brzmi następująco: **Mając n różnych kluczy, ile różnych 2-3 drzew można zbudować?** Moje umiejętności matematyczne są biedny, więc jeśli ktoś wie, jak powinienem "z matematyki" podejść do odpowiedzi, to byłoby super! :)


title: parsowanie terminologii: komentarze + spacje vs rzeczywisty kod

text: W językach takich jak c/c++ odstępy i komentarze są ignorowane i tylko rzeczywisty kod trafia do kompilatora. Ciekawi mnie, czy istnieje akceptowany sposób nazywania tych dwóch rzeczy? * komentarze i odstępy * wszystko inne (rzeczywisty kod) Odwoływanie się do komentarzy i odstępów jako „komentarze i odstępy” jest dość denerwujące. Jakieś pomysły?


title: Czy są obecnie dostępne popularne języki ogólnego przeznaczenia inne niż Turing?

text: Języki niekompletne z Turingiem oferują wielką przewagę nad językami z kompletną liczbą Turinga, ponieważ są znacznie bardziej analizowalne, a tym samym oferują znacznie szersze możliwości optymalizacji. Jednak są one rzadko używane, a kompletność Turinga jest faktycznie sprzedawana jako dobra funkcja. Czy są obecnie dostępne główne języki niekompletne z Turingiem, które są przeznaczone do programowania ogólnego przeznaczenia?


title: Wdrażanie zasady segregacji interfejsów

text: Czy ten interfejs IConvertible spełnia zasadę segregacji interfejsów (tj. „I” w SOLID)? Oto definicja: interfejs publiczny IConvertible { TypeCode GetTypeCode(); bool ToBoolean (dostawca IFormatProvider); bajt ToByte (dostawca IFormatProvider); char ToChar (dostawca IFormatProvider); DateTime ToDateTime (dostawca IFormatProvider); dziesiętny ToDecimal (dostawca IFormatProvider); short ToInt16 (dostawca IFormatProvider); int ToInt32 (dostawca IFormatProvider); long ToInt64 (dostawca IFormatProvider); sbyte ToSByte (dostawca IFormatProvider); float ToSingle (dostawca IFormatProvider); string ToString (dostawca IFormatProvider); obiekt ToType (Typ konwersji typu, dostawca IFormatProvider); krótki ToUInt16 (dostawca IFormatProvider); uint ToUInt32 (dostawca IFormatProvider); ulong ToUInt64 (dostawca IFormatProvider); } Więc jeśli chciałbym mieć klasę, która zaimplementuje ten interfejs `IConvertible`, muszę zaimplementować wszystkie te metody, prawda? Lub jeśli nie zaimplementuję ich wszystkich, to muszę przynajmniej zrobić pustą metodę lub zgłosić Wyjątek, prawda?. Moim zdaniem lepszym sposobem jest stworzenie większego interfejsu za pomocą mniejszej liczby metod, na przykład: interfejs publiczny IConvertibleInt { short ToInt16(IFormatProvider provider); int ToInt32 (dostawca IFormatProvider); long ToInt64 (dostawca IFormatProvider); } Lub nawet: interfejs publiczny IConvertibleInt16 { short ToInt16 (dostawca IFormatProvider); } interfejs publiczny IConvertibleInt32 { int ToInt32 (dostawca IFormatProvider); } interfejs publiczny IConvertibleInt64 { long ToInt64 (dostawca IFormatProvider); } Czy moje rozumowanie jest poprawne?


title: Dobry sposób na tworzenie plików XML w czasie wykonywania

text: Proszę spojrzeć na tę strukturę przez chwilę :) ![tutaj podaj opis obrazka](http://i.stack.imgur.com/uZaWg.png) Powinienem stworzyć taką rzecz w czasie wykonywania. Jakie wartości przekazujemy w czasie wykonywania? wartości ciągu widoczne po znaku „#” są przekazywane, na przykład AnimalBio, ClinBio, HumanGenome itp. Zastanawiam się więc nad zadeklarowaniem niektórych metod, takich jak void AddDeclaration(string str) ; void AddSubClass(ciąg nadrzędny, ciąg potomny); tak, że kiedy je wywołam, utworzą dla mnie te znaczniki XML z wartościami, które przekazuję, takimi jak HumnaBio. To jest około 15000 pozycji, które zamierzam dodać... Jakie jest najlepsze podejście, jakie sugerowalibyście, aby to zrobić? Czy uważasz, że najlepszym sposobem na to jest użycie klasy XMLDocument? czy uważasz, że powinienem przejść z klasą StringBuilder i dodać je jako ciągi lub inne sposoby na zrobienie tego? Dziękuję.


title: Co to jest licencja i jak mogę używać kodu w ramach licencji?

text: (Pozwólcie, że zmienię to pytanie, aby lepiej zrozumieć to, o co pytam.) Nie rozumiem, czym jest licencja i jak mogę jej „używać”. Z tego, co rozumiem, są dwie sytuacje: 1. Jeden pisze program/kod źródłowy i _wstawia_ na niego licencję. Licencja mówi, w jaki sposób inne osoby mogą (są dozwolone) korzystać z programu/kodu źródłowego. 2. Znalazłem program/kod źródłowy i chciałbym go użyć. Program jest dostarczany z licencją, a licencja mówi mi, w jaki sposób mogę korzystać z programu/kodu źródłowego. To jest ten drugi punkt, co do którego jestem zdezorientowany. Nie mam doświadczenia z „używaniem” licencji. Widzę kilka wcześniejszych pytań dotyczących zamykania licencji, więc żeby było jasne: nie proszę o poradę prawną. Chcę się tylko upewnić, że robię to „dobrze”. Chcę tylko wiedzieć, jak można wykorzystać licencję. Aby podać konkretny przykład z rzeczywistego świata, o co proszę: chcę użyć biblioteki CryptoJS 3.1 do stworzenia strony internetowej (umieszczonej w Internecie, aby cały świat mógł ją zobaczyć) przy użyciu tej biblioteki, ale nie jestem pewien, jak mogę to zrobić ten. Z tego co rozumiem: zgodnie ze stroną o bibliotece, biblioteka jest oferowana na licencji zwanej Nową Licencją BSD. Ale nie rozumiem, co ta licencja mówi mi o tym, jak mogę używać kodu źródłowego. W szczególności byłbym wdzięczny, gdyby ktoś mógł wyjaśnić (tak jakbym miał 12 lat): _Co muszę zrobić, aby korzystać z tej biblioteki na mojej stronie internetowej?_ Na przykład: Czy muszę oddać hołd za pomocą linku lub czegoś tak? Jedną konkretną rzeczą, która mnie dezorientuje, jest to, że na stronie CryptoJS 3.1 tak naprawdę nie mówi mi, czym jest licencja dosłownie. Mówi, że licencja jest licencją New BSD. Jest link do tej strony. A ta strona jest _szablonem_ licencji. Więc jak mam to zrozumieć? Podsumowując: chciałbym używać CryptoJS 3.1, ale nie wiem jak to zrobić. * * * (Poznałem wymagania przepisów eksportowych, więc nie stanowi to dla mnie problemu.)


title: W przypadku wyciągów z bazy danych csv, jak klucze map nie tworzą zależności?

text: Duża część mojej pracy jest wykonywana na wyciągach (raportach) .csv z baz danych. Ponieważ programowałem w Clojure, otrzymałem komentarze, że poleganie na indeksach wektorowych tworzy zależności. Rozumiem dlaczego i zgadzam się. Przepisuję jeden z moich programów, aby skorzystać z faktu, że pierwszy wiersz każdego raportu zawiera nagłówki kolumn i mogę przejść po każdym wierszu danych, który chcę, za pomocą klucza mapy. Przepisuję kod, aby zmapować nagłówki w klucze mapy i jeden wiersz danych (naraz), aby uzyskać dostęp do żądanych danych. Oto przykład. (def bene-csv-inp (fetch-csv-data "benetrak_roster.csv")) (def bene-csv-cols (pierwszy bene-csv-inp)) (def bene-csv-data (rest bene-csv-inp) )) (def zm1 (zipmap (map #(keyword %1) bene-csv-cols) (first bene-csv-data)))) (zm1 :EmploymentStartDate) "21-Jun-82" Czy istnieje wyższy poziom ekstrakcji , a jeśli tak, co pozwoliłoby mojemu kodowi nie musieć na stałe kodować `:EmploymentStartDate` ? Jeśli mój kod musi znać te klucze, to dlaczego nie jest to również zależność, taka jak indeks? Osobiście lubię szukać danych za pomocą klawiszy mapy, ponieważ jest to mniej zagmatwane i bardziej pouczające niż indeksy. Uważam jednak, że nadal mam uzależnienie. Dziękuję.