title: Jak zaprogramować sposób tworzenia formuł matematycznych?

text: Dla jednego z moich pomysłów na projekt chcę stworzyć aplikację do rzucania kostką. Umożliwiłoby to ludziom konfigurowanie nieco skomplikowanych kombinacji kaskad rzucania kośćmi w wizualny sposób. Mam całkiem niezły pomysł na to, jak zaprogramować logikę dla kości, a mianowicie tak, jakbyś tworzył formułę matematyczną; Klasa: Formuła Właściwości: Formuła po lewej Formuła po prawej Funkcja Tak więc dodanie `X = A + B` składałoby się z formuły `X`, z lewym `Formułą A`, prawym `Formułą B` i funkcją `Dodaj`. Formuła A i B składałaby się z lewego „a” lub „b”, prawego „null” i funkcji „Stała”. Takie podejście wydaje mi się w porządku, ale lubię próbować znaleźć rozwiązania, które wymyślili inni. Jednakże, ponieważ „programowanie matematyki” prowadzi do zupełnie innych pytań (np. „Czy muszę nauczyć się matematyki, aby programować” lub „Jak zaprogramować tę formułę”), mam trudności ze znalezieniem innych podejść.


title: Projektowanie OOP: związek między klasami encji

text: Na pierwszy rzut oka mam prosty problem, ale nie mogę sobie wyobrazić, jak go rozwiązać. Mam klasę abstrakcyjną `Związek`. „Związek” składa się z „Struktur”. Jest też „Kontener”, w którym znajduje się 1 „Związek”. „Specjalna” implementacja `Związku` ma `Wersje`. W przypadku tego typu „Związek” chcę, aby „Kontener” zawierał „Wersję” „Związku”, a nie sam „Związek”. Możesz powiedzieć „po prostu stwórz interfejs `Containable`”, a `Container` zawiera 1 `Containable`. Jednak to nie zadziała. Powodem jest to, że tworzę framework, a główną częścią tego frameworka jest uproszczenie przechowywania, a zwłaszcza wyszukiwania specjalnych typów danych przechowywanych przez obiekty `Structure`. Dlatego wyszukiwanie „Kontenerów” zawierających „Złożenie” składające się z określonej „Struktury” wymaga, aby „Ścieżka” od „Kontenera” do „Struktury” była dobrze zdefiniowana (liczba relacji lub złączeń). Mam nadzieję, że to zrozumiałe. Moje pytanie brzmi, jak zaprojektować zajęcia i relacje, aby móc robić to, co nakreśliłem. EDIT: Rodzaj problemu z tłumaczeniem. z wersją nie chodziło mi o „wersjonowanie”, ale bardziej o „inną różnorodność”, ale zasadniczo to samo. Brak aktywnych/nieaktywnych. Wszyscy są aktywni. EDYCJA 2: Należy również pamiętać, że te klasy są klasami jednostek, a zatem złożone dziedziczenie i hierarchie mogą być problematyczne. EDYCJA 3: Po prostu nie widzę, jak może działać każdy wzór (kompozyt, dekorator). Próbowałem, ale problemem jest „przemierzanie ścieżki”, np. wdrożenie go w kontekście Spring-data i QueryDSL. Stworzyłem diagram klas z komentarzami, które mogą pomóc w zrozumieniu problemu. Partia = Wersja. ![Diagram klas](http://i.stack.imgur.com/s3Mgf.png)


title: Wdrażanie serwera oAuth 2

text: Czy masz jakieś wskazówki, jak należy zaimplementować sam protokół oAuth2? To znaczy strona serwera czy aspekt „dostawcy” protokołu OAuth2? Jeśli próbowałeś (częściowo) go wdrożyć, podziel się problemami i rozwiązaniami. Zauważ, że jest to całkowicie niezależne od technologii i języka programowania - oczywiście z wyjątkiem de facto standardowych technologii kryptologicznych, które mogą być zaangażowane. Wersja robocza IETF (v23) dla oAuth2 znajduje się tutaj


title: Refaktoryzacja istniejącej bazy kodu MVC w celu usunięcia logiki biznesowej i dostępu do danych z kontrolerów

text: Produkt, który odziedziczyłem, ma następujący skład: * Witryna MVC, na której kontrolery wykonują wywołania do Repozytoriów w celu pobrania, wstawienia i aktualizacji pobranych obiektów, które są zdefiniowane w: * Warstwa dostępu do danych napisana przy użyciu Linq2SQL Oznacza to, że obecnie kontroler dla akcja /Account/Add wykona następujący pseudokod: * Pobranie aktualnego użytkownika * new() obiekt AccountItem * Ustawienie pól UserId, AccountItemTypeId i Value na AccountItem * Pobranie instancji Repository * Wywołanie repozytoriów InsertOnSubmit(AccountItem item) metoda * Wywołaj repozytoria Metoda SubmitChanges() * new() element EmailQueue * Ustaw odpowiednie właściwości elementu EmailQueue (to, subject, body, itd.) na podstawie wstawionego elementu konta * Uzyskaj instancję Repozytorium * Wywołaj metodę InsertOnSubmit(EmailQueue item) repozytoriów * Wywołaj metodę SubmitChanges() repozytoriów Wykonałem już pierwsze przejście przez bazę kodu i wstrzyknąłem, używając Castle Win dsor, repozytorium jest w (właściwie wstrzykuje instancję typu, który implementuje `IRepositoryResolver`, który ma metodę o nazwie `GetRepository<T>`, dzięki czemu mogę oddzielić kontrolery od repozytoriów zależnych od Linq2SQL. Zacząłem też pisać testy jednostkowe, oparte na bieżącym zachowaniu kontrolerów (aby mieć pewność, że kiedy wprowadzę dalsze zmiany, będę mógł zidentyfikować, kiedy robię to strasznie źle), ale jest to nieodłączne od mojego faktycznego pytania. Zidentyfikowałem wiele miejsc, w których akcje kontrolera wykonują identyczne akcje wobec różnych repozytoriów, takie jak uzyskanie łącznej wartości `Value` dla wszystkich `AccountItem` dla danego użytkownika i rozważam teraz wyodrębnienie całej tej wspólnej logiki do firmy/usługi warstwa. Moje pytanie brzmi, czy następującą strukturę można uznać za „najlepszą praktykę”: * `AccountService`: Zapewnia metodę `AddAccountItem` (plus inne, takie jak `GetAccountValue`) * `EmailService`: Dostarcza metodę `AddEmailToQueue` Czy powinienem refaktoryzować kontroler tak to robi: accountServiceInstance.AddAccountItem(userToCredit, userCrediting, AccountItemType.Bonus, 300); emailServiceInstance.AddEmailToQueue(userToEmail, EmailType.AccountCreditBonus); Lub, czy moja usługa „AccountService” powinna przyjąć „EmailService” jako zależność (którą spełnia Castle Windsor), a usługa „AccountService” powinna wywoływać funkcję „EmailService.AddEmailToQueue”?


title: Nazewnictwo: objectAction czy actionObject?

text: Pytanie, Stored Procedure Naming Conventions? i doskonały artykuł Joela Making Wrong Code Look Wrong są najbliższe odpowiedzi na moje pytanie, ale szukam bardziej ogólnego zestawu kryteriów, które można zastosować przy podejmowaniu decyzji, jak nazywać moduły zawierające kod (klasy, obiekty, metody, funkcje, widżety lub cokolwiek). Angielski (mój jedyny ludzki język) jest skonstruowany jako obiekt akcji (tj. closeFile, openFile, saveFile), a ponieważ prawie wszystkie języki komputerowe są oparte na języku angielskim, jest to najczęstsza konwencja. Jednak starając się trzymać powiązany kod blisko siebie i nadal móc znajdować rzeczy, odkryłem, że działanie obiektu (tj. fileClose, fileOpen, fileSave) jest bardzo atrakcyjne. Całkiem wiele nieanglojęzycznych języków ludzkich również podąża za tą strukturą. Wątpię, czy jedna forma jest uniwersalnie lepsza, ale kiedy należy użyć każdej z nich, aby pomóc w upewnieniu się, że zły kod wygląda źle?


title: Bezpieczna aplikacja na iPhone'a ↔ komunikacja z serwerem

text: Jakie byłoby najlepsze podejście do uzyskania prywatnej komunikacji między moją aplikacją na iOS a jej komponentem serwerowym? Czy wystarczy jeden niezmienny „tajny klucz” wypiekany w źródle aplikacji, czy też muszę w jakiś sposób dynamicznie konfigurować generacje takich kluczy „uścisku dłoni”? Sam serwer nie ma dostępu do żadnych poufnych danych, więc nawet jeśli użytkownik trafi na niektóre prywatne punkty końcowe, nigdzie ich nie dostanie, ale chcę tylko, aby były ukryte przed opinią publiczną. Zasadniczo chcę zignorować wszystkie żądania trafiające na określone trasy, chyba że pochodzą z mojej aplikacji na iOS. Komponent serwera działa na RoR, jeśli to ważne.


title: Decyzja projektowa — po co generować <p> bez </p>?

text: **tl;dr** Niektóre powszechnie używane programy generujące html będą generować tylko otwierające znaczniki akapitów, a nie zamykające, zakładając, że przeglądarka poprawnie zamknie akapity. Na pierwszy rzut oka wydaje mi się, że założenie, że przeglądarki będą poprawnie zamykać akapity, nie jest poprawne. Czy moja interpretacja jest prawidłowa? Mówiąc bardziej ogólnie, jakie kompromisy wiążą się z tego rodzaju decyzją? * * * Przeglądając kod źródłowy Moinmoin, moją uwagę zwrócił następujący wiersz kodu: # Otwieramy tylko te tagi i pozwalamy przeglądarce na ich automatyczne zamknięcie: _auto_closing_tags = set(['p']) (źródło) Po przeczytaniu przez w pozostałej części implementacji przekonałem się, że tak, rzeczywiście, gdy moinmoin generuje kod html dla jednej ze swoich stron, w razie potrzeby wygeneruje poprawnie znaczniki otwarcia akapitu, jednocześnie celowo unikając jakichkolwiek znaczników zamykających akapit (pomimo tego, że mogę to zrobić w trywialny sposób). W moim konkretnym, raczej nietypowym przypadku użycia, to zachowanie nie jest poprawne. Kusi mnie, aby zgłosić błąd i/lub zmienić zachowanie. Wygląda jednak na to, że ta decyzja projektowa została podjęta przemyślanie. Nie jestem wystarczająco zorientowany w zawiłościach standardu html lub różnych implementacji przeglądarek, aby móc stwierdzić, czy jest to ogólnie poprawne zachowanie, i mam wrażenie, że mój instynkt poprawiania/zmiany tego zachowania może być błędnie. Czy ten kod zawiera prawidłowe założenie dotyczące implementacji przeglądarki? Czy wygenerowany html jest poprawny? Bardziej ogólnie, jakich kompromisów mógłbym tutaj pominąć?


title: Jak właściwie komentować i licencjonować zestaw plików kodu przed publicznym udostępnieniem?

text: Napisałem przyzwoity kawałek kodu w ciągu ostatnich kilku dni i jestem gotowy, aby go `gitować` i wrzucać na github. Ale zanim to zrobię, chcę to zrobić w „poprawny” sposób na wypadek, gdyby ktoś inny chciał użyć mojego kodu. Myślę więc, że muszę wybrać licencję (prawdopodobnie MIT) i zaimplementować ją, a na górze każdego pliku napisać jakiś komentarz. Jaki komentarz w dobrym stylu należy umieścić na górze pliku? Jakie informacje powinien zawierać, jak powinien wyglądać? I czy mam umieścić licencję w folderze LICENSE w katalogu głównym, czy na górze każdego pliku źródłowego, czy coś takiego? I czy są jakieś inne kroki, których mi brakuje, zanim wrzucę to na github?


title: Dlaczego nie wszystkie programy są przekształcane w aplikacje internetowe?

text: Aby rozszerzyć od pytania rzeczy takie jak googledocs mogą obsługiwać Word, Excel i PowerPoint, więc dlaczego nie wszystkie programy są przenoszone do aplikacji internetowych za pomocą smartfonów (jeżyny, iphone'y i androidy) i tabletów (ipad) rośnie dlaczego nie jest istnieje ruch, aby każdy program był oparty na przeglądarce? Przy zwiększonych możliwościach CSS i javascript nie ma to sensu dla niezgrabnych programów java, które mają 10 lat, które po prostu zapisują do bazy danych, że aplikacja rails/django mogłaby prawdopodobnie działać szybciej i kosztować mniej pieniędzy w utrzymaniu.


title: Wyniki zapisane w sesji – dobry pomysł?

text: Aby dać trochę tła, powiedzmy, że jest to ogólna strona wyników, która jest podzielona na strony, więc jest X wyników na stronę. Generalnie w tym celu mam na stronie dwa zapytania: 1. aby uzyskać sumaryczną liczbę wyników 2. aby uzyskać wyniki, ograniczając przez prawidłowy zestaw wyników strony Jednak ostatnio staram się ograniczyć liczbę zapytań strona się tworzy i pomyślałem, że jednym ze sposobów na to byłoby wykonanie zapytania tylko wtedy, gdy zmieniły się jakiekolwiek parametry strony (z wyjątkiem oczywiście numeru strony)? Spowoduje to buforowanie wszystkich identyfikatorów wyników w sesji, które można podzielić, gdy potrzebuję zwrócić poprawny zestaw wyników dla tej strony. Próbowałem rozejrzeć się po sieci, aby sprawdzić, czy nie ma wad tej metody, ale znalazłem bardzo mało informacji na jej temat. Czy ktoś to zrobił wcześniej? Czy to dobry pomysł?


title: Jaka jest różnica między certyfikatami Microsoft MCSD i MCPD?

text: Zaglądam na stronę, ale różnica między nimi nie jest wyjaśniona. Aby skomplikować sprawy, wyszukiwarka Google mówi mi, że programiści powinni skoncentrować się na kwalifikacjach MCPD, ale badanie sekcji witryny MCPD mówi mi, że egzaminy z aplikacji internetowych wygasną w lipcu 2013 r.! Wydaje się nieaktualny. Tymczasem egzamin MCSD wydaje się być dużo bardziej aktualny z odniesieniami do aplikacji HTML5/ASP.net 4.5 MVC! Co za różnica? Czy certyfikaty MCPD zostaną zaktualizowane po lipcu?


title: Lua i programowanie wieloparadygmatyczne: zakres i możliwości

text: Mimo że zacząłem uczyć się programowania w Pascalu i C, po przejściu do OO (C++, Java) straciłem poczucie paradygmatu programowania strukturalnego. Zacząłem uczyć się Lua i przejrzałem wiele samouczków, ale wszystkie obejmują tylko podstawowe operacje oraz funkcje i możliwości języka. Czują się bardziej jak dokument referencyjny niż przewodnik programisty. Teraz, próbując pracować z codziennymi zadaniami, w jaki sposób przechodzi się przez najpopularniejsze wzorce projektowe, takie jak obserwator lub programowanie wielowątkowe, tworzenie elementów interfejsu użytkownika i odpytywanie wywołań systemowych dla klawiatury lub czujników? Czy jest to w ogóle wykonalne w tym języku, czy też musisz pracować z wiązaniem C, bibliotekami i programowaniem niskopoziomowym, aby zrobić większość rzeczy? Czy źle pobrałem lunetę Lua?


title: Czy powinniśmy powiązać widok z właściwością modelu, czy ViewModel powinien mieć swój własny…?

text: Zaczynam projekt z następującym środowiskiem technicznym : .Net 4.0, Entity Framework 4.0, WPF z **MVVM Architecture** Widziałem wiele przykładów w sieci, kilka książek z tym środowiskiem. W niektórych przykładach autorzy mieli ten pomysł: 1. Viemodel będzie miał instancję klasy Model (Entity Framework Entity, np. Person) 2. Powiąż kontrolki widoku WPF z właściwościami modelu właściwości modelu. 2. Powiąż kontrolki widoku WPF z właściwościami ViewModel, a nie bezpośrednio z modelem. Czy więc dobrym pomysłem jest pozwolenie widokowi na powiązanie właściwości z modelem, a nie wyświetlanie modelu widoku własnego? Lub co jest bardziej preferowane?


title: Mobilne/globalne uwierzytelnianie użytkownika? (poza domeną i bez przedsiębiorstwa)

text: Jaki jest obecny sposób uwierzytelniania użytkowników w sposób mobilny/globalny? Innymi słowy, załóżmy aplikację mobilną. A jeśli w zapleczu znajduje się serwer bazy danych, w jaki sposób ci użytkownicy zwykle rejestrowaliby się/logowali? Czy istnieje aktualny standard uwierzytelniania bez domeny i przedsiębiorstwa? Myślałem tylko o posiadaniu **podstawowej kombinacji nazwy użytkownika/hasła** i **haszowaniu** (i soleniu) hasła podczas rejestracji i logowania, a następnie przekazaniu go do bazy danych w chmurze. To staje się trochę niejasne przy resetowaniu hasła, wysyłaniu e-maili itp. Czy istnieje _łatwiejszy sposób_ (API, metodologia itp.) lub _bardziej akceptowany sposób_, aby to zrobić? To proste, ale ta prostota to dobra rzecz, jak sądzę. Nie potrzebuję zawiłości innych ram członkowskich. Jestem bardziej ciekaw, czy jest to akceptowane i bezpieczne podejście. Jestem świadomy modelu członkostwa ASP.NET, ale złożoność jest po prostu zbyt duża dla jednowymiarowego modelu zabezpieczeń (użytkownicy i uwierzytelnianie, bez ról, autoryzacji itp.). Nie wspominając, co byłoby używane poza aplikacją ASP.NET?


title: Projekt bazy danych: odniesienie cykliczne, ale tworzone dynamicznie

text: Staram się zaprojektować bazę danych dla tego przypadku: 1. Przydziały mają wektory, relacja 1:N 2. Przydziały mają zgłoszenia, relacja 1:N 3. Zgłoszenia mają wykonania, relacja 1:N 4. Każde wykonanie ma jeden wektor . ![Diagram EER bazy danych](http://i.stack.imgur.com/MEHHW.png) Logika biznesowa 1. nauczyciel tworzy zadania i definiuje wektory testowe 2. uczeń przesyła swoje rozwiązanie, więc tworzony jest zapis w zgłoszeniach 3. Po pomyślna kompilacja zgłoszenia, zgłoszenie jest wykonywane ze zdefiniowanymi wektorami testowymi. Każde wykonanie to jeden rekord w wykonaniach (jedno wykonanie na wektor). Tak więc cykliczne odwołanie jest tworzone po pomyślnym wykonaniu, ale jeśli kompilacja nie powiodła się, w wykonaniach nie jest tworzony żaden rekord. Połączenie pomiędzy wektorami i wykonaniami jest potrzebne w procesie obliczania punktacji, gdzie wynik odniesienia z wektorów jest porównywany z wynikiem wykonania. Więc w moim przypadku odwołanie cykliczne nie jest trwałe, ale zależy od czasu wykonania, więc jest to zły projekt?


title: Zrozumieć JavaScript w interfejsie i zapleczu?

text: Ostatnio zauważyłem, że po raz pierwszy bawiłem się javascript, HTML5 i node.js, że javascript wydaje się być językiem, który jest używany bardzo różnie (i z inną składnią) w zależności od tego, gdzie jest używany w. Moja obserwacja dotycząca javascript jest następująca: - Front end javascript znajduje JS osadzony na stronach HTML5, gdzie jest używany do budowania dynamicznych stron internetowych i reagowania na zdarzenia zachodzące na stronie. - Back end JS jest używany jako język solowy z node.js i powiązanymi z nim pakietami do obsługi żądań stron internetowych, przesyłania danych i ogólnych zadań serwera. Czy dokładnie podsumowałem frontend kontra backend JS?


title: Opublikuj problemy programistyczne z wywiadów

text: Czytałem w kilku miejscach, że publikowanie problemów programistycznych/zagadek/ćwiczeń z wywiadów nie jest miłe dla firmy, ale ostatnio miałem kilka wywiadów, w których napotkałem kilka interesujących problemów, które bardzo chciałem omówić z tymi, którzy mogli je rozwiązać lepiej. Czy uważasz, że to w porządku, jeśli nie będę kopiować i wklejać tych ćwiczeń, ale spróbuję „stworzyć własną wersję”, na przykład przepisać ją trochę, aby cała kwestia była taka sama, ale w innym formacie? Również gdybym nie wspomniał o samej firmie, nawet o tym, że problem został zadany podczas rozmowy kwalifikacyjnej, czy nadal byłoby to złe? Z góry dziękuję!


title: Czy warto mieć mistrza?

text: Wiem, że jest już kilka pytań dotyczących uzyskania tytułu magistra informatyki, ale moje pytanie jest nieco inne. Zacząłem programować, gdy byłem dość młody. Otrzymałem licencjat z CIS w Cal Poly Pomona ponad 4 lata temu. Od tego czasu zarabiałem na życie jako programista zarówno dla Boeinga, jak i Disneya (gdzie obecnie pracuję). Czuję, że zrobiłem bardzo duże postępy, ponieważ szybko zostałem programistą poziomu starszego w obu firmach w ciągu roku. Przez kilka lat rozważałem uzyskanie tytułu magistra iw końcu zacząłem go kilka miesięcy temu w Claremont Graduate w ich programie MSIS (http://www.cgu.edu/pages/201.asp). Ukończyłam tylko kilka kursów, ale już czuję, że znam się na tym i pracuję na co dzień. Zastanawiam się nawet, czy warto zdobyć kolejny stopień "IS" i czy zamiast tego powinienem spojrzeć na stopień z informatyki. Miałem kilka powodów, dla których nie poszedłem na CS na studiach, 1) nie jestem dobry z matematyki, 2) chciałem mieć dyplom z biznesu, aby otworzyć moje opcje. Czuję, że jestem bardzo kompetentnym programistą i potrafię pracować w różnych językach, rozumiem proces tworzenia oprogramowania itp. Próbuję tylko dowiedzieć się, czy marnuję czas na bieżący program, w którym się znajduję Przepraszam za długi post, ale chciałem opowiedzieć o historii dla lepszego zrozumienia.


title: Jestem zmuszony napisać zły kod. Jak mogę uratować twarz?

text: Jestem tylko młodszym programistą, ale moja praca zmusza mnie do pracy z naprawdę okropnym kodem PHP (pomyśl o najgorszym kodzie PHP, jaki widziałeś, a potem pomyśl o kodzie dwa razy gorzej). Zwykle staram się naprawiać błędy i walczyć z kodem, aby dodać nowe funkcje. Czasami mam rozkaz, aby wszystko działało JAK NAJSZYBCIEJ, co najczęściej wiąże się z brudnymi hackami. Produkt był wcześniej open source i obawiam się, że w przyszłości może stać się open source. Wstydziłbym się, gdyby ktoś (zwłaszcza potencjalni pracodawcy) znalazł moje nazwisko obok niektórych zestawów zmian. Co mogę zrobić, aby chronić swoje dobre imię? Nie jestem pewien, czy to jest istotne, ale dodam, że ani mój szef, ani moi koledzy nie chcą przyznać, że kod jest zły, ale nie jestem pewien, czy mogę ich za to winić – dla wielu z nich to jest ich pierwsza praca.


title: Jak mogę się upewnić, że faktycznie uczę się programowania, a nie tylko poznaję szczegóły języka?

text: Często słyszę, że prawdziwy programista może z łatwością nauczyć się dowolnego języka w ciągu tygodnia. Mówiono mi, że języki to tylko narzędzia do załatwiania spraw. Programowanie to najważniejsza umiejętność, której należy się nauczyć i opanować. Jak mogę się upewnić, że faktycznie uczę się **jak programować**, a nie tylko poznaję szczegóły języka? Jak mogę rozwinąć umiejętności programowania, które można zastosować we wszystkich językach, a nie tylko w jednym?


title: Czy Twoje projekty zostały ukończone na czas lub po terminie?

text: Czy Twoje projekty są realizowane na czas? Jeśli nie, jakie problemy powodują, że nie dotrzymujesz terminów? Jak można je pokonać? Czy Twoi klienci je rozumieją?


title: modelowanie wyszukiwania dostępności restauracji

text: Zastanawiam się nad znalezieniem wydajnego sposobu, który mógłby skalować do tysięcy restauracji, na wyszukiwanie rezerwacji. Najlepiej byłoby odpowiedzieć na pytania, takie jak znalezienie restauracji, która jest dostępna dla 6 osób o godzinie 19:00. Przedziały czasowe oparte są na 15-minutowych interwałach, np. 19:00, 19:15, 19:30, ... korzystam z bazy dokumentów (RavenDB), ale sprawa jest bardziej koncepcyjna i nie sądzę, aby była zależne od bazowego źródła danych. Każda restauracja może mieć inną pojemność, na przykład restauracja A może pomieścić 40 osób, a restauracja B może pomieścić 60. Moim pierwszym odruchem było posiadanie kolekcji „Restaurant” i kolekcji „Reservations”. Nie potrafię jednak wymyślić sposobu, w jaki można skutecznie przeprowadzić zapytanie dotyczące kolekcji restauracji/rezerwacji, aby faktycznie uzyskać wynik dla restauracji tylko wtedy, gdy w danym momencie ma ona wystarczająco dużo miejsca na rezerwację. Przykładowe obiekty danych poniżej: Restauracja ---------- Identyfikator Nazwa Rezerwacja pojemności ----------- Identyfikator DataGodzina RestaurantId NoOfPeople Inną opcją, która przyszła mi do głowy, było faktyczne śledzenie każdego dzień i wszystkie przedziały czasowe w ciągu dnia (co 15 minut). Następnie przy każdej rezerwacji aktualizowana jest odpowiednia przedział czasowy. W związku z tym zapytanie będzie prostym wyszukiwaniem w przedziałach czasowych. To zadziała (jeszcze tego nie próbowałem), ale wymaga więcej _'konserwacji'_. Czy to najlepszy sposób na rozwiązanie takiego problemu, czy może jest jakaś jego strona, której nie widzę? ## Obliczanie dostępności na rezerwacjach Mój pomysł na drugą opcję obliczania dostępności dla rezerwacji jest taki, że dodałbym kolejny obiekt danych, jak poniżej RestaurantTimeSlot ------------------ RestaurantId DateTime (np. 18.02.2014 17:00) AvailableBookings MaxBookings Zadanie w tle tworzyłoby nowe przedziały czasowe dla restauracji na kolejne dni, na przykład tworzenie do 90 dni wcześniej, aby użytkownicy mogli zarezerwować maksymalnie 90 dni od dzisiaj. Każdy dzień miałby różne przedziały czasowe, na przykład 00:00, 00:15, 00:30 itd. Początkowo `RestaurantTimeSlot` byłoby ustawione jako `AvailableBookings`=0, `MaxBookings`=maksymalne rezerwacje tej restauracji (np. 60). Powodem `MaxBookings` jest to, że dostępność restauracji może być oparta na czasie, a w 2012 roku może mieć 60, a w 2013 może wzrosnąć do 80. Wtedy, gdy rezerwacja dla powiedzmy 4 osób jest dokonywana o 18/ 02/2014 17:00, że odpowiednie „Rezerwacje” dla danego przedziału czasowego zostaną dodane o 4. Następnie, gdy trzeba przeprowadzić wyszukiwanie, można łatwo przeszukać „RestaurantTimeSlot”. Czy to ma sens? Mój problem polega na tym, że muszę stale tworzyć te nowe obiekty danych, aby były dostępne do wyszukiwania i utrzymywać je zsynchronizowane po dokonaniu nowej rezerwacji. Wygląda na to, że może to prowadzić do tego, że system będzie bardziej podatny na błędy.


title: Wyrównanie w pionie: tak czy nie?

text: Na przykład wyrównane niew pionie: Nazwa: Hamt Wersja: 0.1.0 Cabal-Version: >= 1.2 Licencja: BSD3 Autor: Jason Baker Lub wyrównane w pionie: Nazwa: Hamt Wersja: 0.1.0 Cabal-Version: >= 1.2 Licencja : BSD3 Autor: Jason Baker Który wolisz i dlaczego?


title: Jak zarządzać przypadkową złożonością w projektach oprogramowania

text: Kiedy zapytano Murraya Gell-Manna, w jaki sposób Richardowi Feynmanowi udało się rozwiązać tak wiele trudnych problemów, Gell-Mann odpowiedział, że Feynman ma algorytm: 1. Zapisz problem. 2. Myśl naprawdę ciężko. 3. Zapisz rozwiązanie. Gell-Mann próbował wyjaśnić, że Feynman był innym rodzajem rozwiązywania problemów i nie można było uzyskać żadnych spostrzeżeń, studiując jego metody. Tak samo myślę o zarządzaniu złożonością w średnich/dużych projektach oprogramowania. Ludzie, którzy są dobrzy, są w tym z natury dobrzy i jakoś udaje im się układać i układać różne abstrakcje, aby całość była możliwa do opanowania bez wprowadzania jakichkolwiek obcych bodźców. Czy zatem algorytm Feynmana jest jedynym sposobem zarządzania przypadkową złożonością, czy też istnieją rzeczywiste metody, które inżynierowie oprogramowania mogą konsekwentnie stosować, aby oswoić przypadkową złożoność?


title: Jakiego algorytmu przechodzenia przez wykres powinienem użyć?

text: Chciałbym napisać algorytm, który może przemierzać wykres i mam nadzieję, że później uda mi się go zaimplementować do wewnętrznego systemu nawigacji. Wykres pochodziłby z planów pięter budynku, a węzły wykresu reprezentują obiekty budowlane, takie jak drzwi, korytarze, schody, pokoje itp. System nawigacji zaakceptuje różnych użytkowników z różnymi możliwościami, te możliwości są przechowywane w profilu użytkownika. Dla każdego indywidualnego użytkownika (lub grupy użytkowników tego samego typu, np. członka personelu) system zwraca ścieżkę specyficzną dla tego użytkownika/ów biorąc pod uwagę jego osobistą funkcjonalność. Na przykład, jeśli użytkownik systemu porusza się na wózku inwalidzkim, system powinien wykluczyć ze ścieżki wszystkie węzły schodów (zostaną one oznaczone jako nieprzejezdne). Podobnie, jeśli aby wejść do pomieszczenia, użytkownik musi mieć klucz lub być pracownikiem, ale NIE jest, system powinien zaznaczyć węzeł (np. drzwi wymagające klucza) jako nieprzejezdny i poszukać te ścieżki, które nie wymagają tych specyficznych wymagań. To była pierwsza część i tutaj używam funkcji do sprawdzenia tych warunków dla danego użytkownika. Dane wejściowe do tej funkcji to węzeł i użytkownik. Jeśli warunki wymagane przez węzeł NIE są spełnione (oznacza to, że profil użytkownika nie jest zgodny z warunkiem wymaganym przez węzeł), funkcja zwraca false=nie można przejść. Jeśli warunek jest spełniony, węzeł pozostaje przejezdny i zostanie gdzieś zapisany i zostanie uwzględniony przy ostatecznym obliczeniu ścieżki. Druga część jest taka, że mam listę zawierającą wszystkie węzły, przez które można przejść, a teraz najkrótsza ścieżka zostanie obliczona na podstawie 3 różnych kosztów: energii, czasu i pieniędzy. Ostateczny koszt może być kombinacją tych kosztów i określa wagę krawędzi. Mój problem dotyczy pierwszej części. Chcę wiedzieć, jak mogę stworzyć algorytm, który tworzy podwykres (listę z przejezdnymi węzłami w nim). A później, jak mogę użyć tego algorytmu do zmodyfikowania Dijkstry, aby pasował do tego systemu. Czy ktoś może pomóc w napisaniu pseudokodu dla algorytmu, abym mógł zrozumieć, jak to będzie działać w jasnych krokach lub jakieś wskazówki, jak mogę przekształcić te kroki w pseudokod? Proszę zauważyć, że na tym etapie występ nie jest dla mnie zbyt ważny.


title: Czy dobry kod jest niemożliwy we współczesnym tworzeniu oprogramowania?

text: Wydaje się, że nawet jeśli narzędzia programistyczne stały się solidniejsze i solidniejsze, pisanie dobrego kodu stało się wyzwaniem. Nawet jeśli narzędzia są potężniejsze, jakość kodu nie uległa poprawie. Dochodzą do mnie dwa ważne czynniki, jest mniej czasu i projekty są bardziej złożone. Ponieważ narzędzia, których dzisiaj używamy, są bardziej wydajne, łatwiej jest pisać bardziej złożony kod, ale brak czasu na planowanie i bez patrzenia wstecz obniża jakość kodu i zwiększa liczbę błędów i konserwacji. Nie chodzi o to, że wcześniej nie pisaliśmy skomplikowanego kodu. Chodzi o to, że piszemy bardziej złożony kod. Moje pytanie jest następujące: Biorąc pod uwagę, że mamy potężniejszy język i narzędzia. * **Dlaczego pisanie dobrego kodu jest trudniejsze?** * **Czy przyczyniają się do tego czynniki, czas i złożoność?** * **Czy metodologie nie są właściwie praktykowane?** Uważam, że typ projektu to aplikacja korporacyjna z dużym złożoność i logika biznesowa. Definicja „dobrego kodu” jest indywidualna, proszę nie tkwić w interpretacji „dobrego kodu”.


title: Najlepsza praktyka — obsługa obrazów na stronie internetowej

text: Przenoszę starą witrynę eCommerce do MVC 3 i chciałbym skorzystać z ulepszeń projektu. Na stronie znajdują się obecnie zdjęcia produktów przechowywane w 3 rozmiarach: miniatura, średnia (do wyświetlania na liście) i rozwinięta w celu uzyskania powiększonego wyglądu. W tej chwili musimy przesłać 3 oddzielne obrazy, które mają dokładnie odpowiedni rozmiar, podać 3 różne nazwy, które odpowiadają oczekiwaniom witryny itp. To jest uciążliwe. Chciałbym przesłać tylko 1 plik, duży, a następnie pozwolić witrynie zmniejszyć go do potrzebnych rozmiarów i chciałbym mieć możliwość zmiany rozmiaru miniatur i listy w zależności od preferencji użytkownika, współczynnika kształtu (np. telefon komórkowy, iPad , desktop) itp., więc może być potrzebnych wiele kopii tego samego obrazu. Moje pytanie brzmi, czy obraz powinien zostać zmniejszony, a następnie zapisany kilka razy po przesłaniu, a jeśli tak, jaka jest dobra konwencja przechowywania/nazewnictwa? Innym pomysłem jest przechowywanie tylko jednego obrazu, ale programowa zmiana jego rozmiaru przed udostępnieniem go klientowi. Czy ktoś to zrobił i jakie są kompromisy poza kilkoma dodatkowymi cyklami maszyny? Jak przekazać klientowi tymczasowy obraz w pamięci (nie ma adresu URL)?


title: Wyjaśnij mi, czym jest programowanie zorientowane na interakcję

text: W bloku pojawił się nowy dzieciak o nazwie Programowanie zorientowane na interakcję (IOP). Czy ktoś może wyjaśnić, jak to działa? Jak to się ma do programowania obiektowego. Czy zastąpi to programowanie obiektowe, czy będzie to tylko rzecz niszowa? Co to właściwie jest i do czego służy.


title: GMail API dla małej aplikacji (Rails? JavaScript? PHP?)

text: Chcę utworzyć aplikację, która uzyskuje dostęp do interfejsu API Gmaila, ale stwierdzam, że nie jest to tak proste, jak myślałem. Mam nadzieję, że ktoś ze społeczności może mieć pewne doświadczenie w pracy z jednym z tych interfejsów API i może nie tylko polecić właściwe rozwiązanie, ale także pokazać mi kilka samouczków lub przykładów, które pomogą mi rozpocząć pracę. Oto niektóre z wymagań tej aplikacji: * Najlepiej w Railsach lub JavaScript, a nawet PHP. Jestem również otwarty na inne technologie, ale mam nadzieję, że będą one łatwe do wdrożenia. * Łączy się z Gmailem przez Oauth * Może odczytać, do kogo e-maile zostały wysłane i od kogo. Zasadniczo chciałbym przeprowadzić analizę, do kogo wysyłane są e-maile, kiedy i jak często. Czytałem, że jednym z powodów, dla których nie jest to łatwe i dlaczego nie ma oficjalnego interfejsu API JavaScript dostarczanego przez Gmaila, jest to, że Google obawia się, że ich usługa będzie mniej wydajna dla swoich użytkowników.


title: Czy kod do porzucania oprogramowania kiedykolwiek właściwie umiera?

text: Mam wrażenie, że z biegiem czasu coraz więcej kodu open source jest generowane, dodawane do różnych darmowych lub częściowo darmowych repozytoriów, a następnie generalnie porzucane. Czy istnieją ogólnie przyjęte standardy usuwania porzuconego kodu? Czy powinno to być wymuszane przez repozytoria, czy też należy to do oryginalnych autorów kodu?


title: Czy responsywne projektowanie stron internetowych jest sprzeczne z zasadą Separations Of Concerns?

text: Zastanawiam się, jak projektowanie responsywne współgra z zasadą Separations of Concern, jeśli chodzi o to, jak pozwalamy na zachowanie pojedynczej implementacji dla wielu urządzeń do prezentacji (telefony komórkowe, tablety, rozmiary przeglądarek itp.). Czy to łamie zasadę? Jeśli wprowadzam zmiany na stronie internetowej, o której wiem, że działa responsywnie i powinna działać na przykład na 5 urządzeniach, czy nie utrudniam rozwoju z powodu możliwej regresji, która może wystąpić z jednego miejsca w oprogramowaniu? Jasne, że sprawia to, że piszę mniej kodu i pracuję dużo szybciej na wielu urządzeniach, ale teraz każda z moich stron wymaga potencjalnie znacznie dokładniejszych testów, co jest kosztem, na który mógłbym się przenieść, nie używając responsywnego frameworka internetowego i utrzymywanie oddzielnych implementacji strona.


title: Czy powinienem się martwić o przejście z IPv4 na IPv6?

text: Skoro musisz mieć świadomość, że adresy IPv4 już prawie się skończyły, a przejście na IPv6 jest nieuchronne, czy jako programista powinienem się martwić o cokolwiek, aby moje aplikacje działały z nowym systemem? Proszę wybacz moją ignorancję. Zawsze lepiej jest pytać i uczyć się niż udawać, że wiesz wszystko.


title: Jaki jest najskuteczniejszy sposób komunikowania potencjalnych opóźnień w rozwoju oprogramowania?

text: Jaki jest najlepszy sposób na zarządzanie opóźnieniami w fazie rozwoju? Na przykład, gdy wykonujesz zadanie, pojawiają się nowe wymagania/coś, co jeszcze bardziej zwiększa krzywą uczenia się czegoś, czego trzeba się nauczyć od razu, i musisz przekazać to kierownikowi projektu/kierownikowi. Jaki jest najskuteczniejszy sposób na zrobienie tego?


title: Czy sesja internetowa to „zły projekt”? Czemu?

text: pewnego dnia dyskutowałem z kolegą i wyszedł mówiąc, że używanie sesji użytkownika w aplikacji internetowej jest po prostu złe. Odpowiedziałem, że może być źle w zależności od przechowywanych informacji, w przeciwnym razie dlaczego usługa sesji sieci Web miałaby być dostarczana przez Microsoft (mówiliśmy o ASP.NET). Odpowiedział mi ponownie, że nawet w stwardnieniu rozsianym mogliby łatwo odpowiedzieć, że to zły projekt. I że może mi pokazać kilka dokumentów, które to potwierdzają. Niestety nie mam już możliwości kontaktu z tym facetem, ale naprawdę chciałbym lepiej zrozumieć jego punkt widzenia. Czy ktoś ma tutaj informacje/punkty widzenia na ten temat?


title: JSP uwzględnij: jedna duża fasola lub fasola dla każdego to

text: Chcę dokonać refaktoryzacji aplikacji internetowej, która składa się z bardzo zniekształconych stron JSP i serwletów. Ponieważ nie możemy łatwo przełączyć się na framework webowy, musimy zachować JSP i serwlety, a teraz mamy wątpliwości, jak dołączać strony do innych i jak skutecznie skonfigurować use:bean-directives. W pierwszym kroku chcemy rozdzielić kod akcji podstawowych i tworzenia ziaren na aplety. Serwlety powinny przekazywać do odpowiednich stron, które powinny używać fasoli. Problem polega na tym, że każdy jsp składa się z różnych pod- i pod-sub-jsp, które są zawarte w innym. Oto skrót (bo rzeczywistość jest bardziej złożona): * nagłówek * nagłówek * góra * nawigacja * panel akcji * główny * nagłówek * panel akcji * stopka * stopka Ponadto każdy plik jsp (także nagłówek i stopka) używa danych dynamicznych. Na przykład tytuł i panel działań mogą się zmieniać przy każdym przeładowaniu strony lub zawierać łącza i etykiety, które zależą od przetwarzania przez poprzedzający serwlet. Wiem, że dyrektywy jsp-include powinny być używane tylko w przypadku zawartości statycznej i należy ich unikać w przypadku zawartości dynamicznej. Ale tutaj mamy bardzo duże strony, które składają się z wielu części. Teraz podstawowe pytania: Czy powinienem używać jednego big bean dla każdej strony, aby każdy bean zawierał również dane dla nagłówka i stopki obok swoich podstawowych danych, tak aby każdy następny zawarty plik jsp używał tej samej dyrektywy bean? Na przykład: * DirectoryJSP <-> DirectoryBean * CompareJSP <-> CompareBean Czy powinienem używać jednego ziarna dla każdego pliku JSP, tak aby każdy ziarna zawierał dane tylko dla jednego pliku JSP i jego własnego celu. Na przykład: * DirectoryJSP <-> DirectoryBean HeaderJSP <-> HeaderBean FooterJSP <-> FooterBean * CompareJSP <-> CompareBean HeaderJSP <-> HeaderBean FooterJSP <-> FooterBean W drugim przypadku: czy kolejne ziarna powinny być Fasola nadrzędna, aby tylko ten ziarno nadrzędny był dołączony jako atrybut do żądania? A może każda fasolka powinna być dołączona do prośby?


title: Dlaczego linker uniksowy nazywa się "ld"

text: Próbowałem przeszukać internet i nie mogłem znaleźć odpowiedzi. Może to mieć coś wspólnego z „ładowaniem”, ale to nie ma dla mnie większego sensu. Oczywiście „ln” zostało już zabrane, ale skąd się bierze to „d”?


title: Zaznaczanie punktu wewnątrz niewypukłego wielokąta

text: Istnieje wiele algorytmów, które powiedzą Ci, czy dany punkt znajduje się wewnątrz wielokąta. Zamierzam napisać algorytm, który mając niewypukły wielokąt, zwróci punkt znajdujący się wewnątrz wielokąta. Nie potrzebuję, aby punkt znajdował się w jakimś konkretnym miejscu wewnątrz wielokąta, ale wolę otrzymać punkt, który nie jest bardzo blisko krawędzi, ale to nie jest łamanie umowy. Jest to tylko oznaczenie tego wielokąta płaskiego grafu prostoliniowego (PSLG) jako wewnętrznego kształtu do użycia z biblioteką Trójkątów Shewchucka dla niektórych skomplikowanych, ograniczonych triangulacji Delaunaya. Moje początkowe myślenie to: 1. Oblicz obramowanie 2. Rzuć promień z jednego rogu w kierunku przeciwległego rogu lub ze środka krawędzi obwiedni do środka przeciwnej krawędzi. 3. Wtedy punkt dokładnie pomiędzy pierwszym i drugim przecięciem znajdzie się wewnątrz wielokąta. Czy istnieje lepsze podejście?


title: Architektura dla konsumenta REST

text: Czy istnieją dobre przykłady aplikacji internetowych, które korzystają z niezawodnych usług internetowych? Opracowuję aplikację internetową ze sprężyną i doszedłem do punktu czytania list elementów i szczegółów elementów z interfejsu API RESTful JSON. Zacząłem rozwijać się tak, jakbym korzystał z bazy danych, tworząc usługi, elementy modelu plus DAOS, ale teraz utknąłem w tym, jak zrobić tutaj poprawny projekt. Czy obiekty modelu powinny zawierać metodę fromJson/toJson i hermetyzować informacje o serializacji? Co powinny robić obiekty DAO? Gdzie powinienem przechowywać szczegółowe informacje WS (adresy URL, klucze API, nazwy elementów itp.)? Przydałaby się każda dobra aplikacja typu open source.


title: Jak zaktualizować istniejący plik Excela za pomocą programu java?

text: Zrobiłem przeglądarkę plików w javie, która otwiera i odczytuje już utworzone pliki Excela. (przy użyciu biblioteki Apache poi 3.9) program odczytuje te pliki doskonale, ale chcę zaktualizować niektóre z tych plików. jak mogę zaktualizować te pliki za pomocą mojego programu. czy istnieje jakaś biblioteka lub funkcja/klasa, która może być pomocna, a także jakikolwiek inny język, który obsługuje tę funkcję (wśród c/c++, python)..???


title: Jaki jest średni czas pracy na stanowiskach inżyniera oprogramowania?

text: Byłem tylko ciekaw, czy to było ostatnio zmierzone. Jak długo ludzie spodziewają się pozostać w nowej pracy? Jak długo ludzie faktycznie pozostają w organizacji lub na stanowisku?


title: Znajdź indeks pozycji najbliższej wartości, ale jest również mniejszy od wartości

text: Załóżmy, że mam posortowaną tablicę wartości typu int: int[] numbers = new[] { 10, 20, 27, 30, 55, 70 }; Jaki jest najskuteczniejszy sposób, przy danej wartości, aby znaleźć wartość w tej tablicy (lub jej indeksie), która jest najbliższa wartości, ale nie jest od niej większa? Na przykład przy podanej wartości 26 zwróci 20. Należy pamiętać, że wartości w tablicy są przypisywane dynamicznie raz podczas uruchamiania programu, ale nie zmieniają się w czasie trwania programu. Proste rozwiązanie, którego teraz używam, to: int GetNumber(int value) { foreach (int liczba w liczbach) { if ((wartość -= liczba) <= 0) return liczba; } return -1; } Działa, ale nie jest ekstremalnie szybki. Mam nadzieję, że istnieje jakiś algorytm, który pozwoli mi „mapować” wartości na zakresy lub coś, co przyspieszy wyszukiwanie. Jeśli warto wiedzieć, w moim przykładzie użyłem prostych int, ale rzeczywisty projekt, nad którym pracuję, jest rodzajem podzielonej na segmenty przestrzeni pamięci, w której każdy z segmentów jest połączony, ale ma różne rozmiary. Ten algorytm pozwoliłby mi przekazać adres pamięci i odzyskać odpowiedni segment pamięci. Oto aktualnie używana metoda: public MappedMemoryArea GetArea(int address) { foreach (obszar MappedMemoryArea in _areas) { if (adres < area.Size) return area; adres -= obszar.Rozmiar; } zwraca null; } Mam pełną kontrolę nad typem MappedMemoryArea, więc jeśli dodanie do niego właściwości byłoby w tym celu korzystne, jest to całkowicie wykonalne.


title: Algorytm synchronizacji

text: Chcę zrobić synchronizację. Jaki jest na to algorytm w skrócie? 1) Klient odczytuje dane lokalne i **potem** wysyła je na serwer. Serwer porównuje je z rzeczywistymi danymi, decyduje, co jest nowsze i nadpisuje swoje dane danymi otrzymanymi w przypadku, gdy otrzymane dane są nowsze. lub 2) Klient **najpierw** odczytuje dane z serwera, porównuje je ze swoimi danymi lokalnymi iw przypadku, gdy dane z serwera są nowsze, nadpisuje je danymi z serwera. A czy kolejność ma znaczenie?


title: Jak obsługiwać złożone widoki (składające się z kilku części) w aplikacji internetowej MVC

text: Powiedzmy, że piszę aplikację sieci Web bloga przy użyciu wzorca MVC. Typowy układ strony głównej aplikacji blogowej to - rodzaj indeksu postów w głównej części, a poza tym są dodatkowe części, takie jak oś czasu, panel nawigacji po tagach, panel subskrybowania itp. Te kontrolki pojawiają się również na pojedynczym widok posta i może pojawić się w innych moich widokach. Moje pytanie brzmi - jak mam obsługiwać te panele na bok w moich widokach i kontrolerach. Widzę tutaj trzy podejścia: 1. Utwórz dużą klasę viewmodelu, która zawiera wszystkie informacje wymagane do renderowania widoków (indeks lub pojedynczy post). W takim przypadku mógłbym uczynić te panele boczne widokami częściowymi i wywołać je z renderowanego widoku przechodzącego przez część tego dużego modelu widoku. Wadą jest to, że widok modelu wypełniającego kod będzie rozłożony na różne metody kontrolera, co oznacza, że kod jest duplikowany. Co jest bardzo złe. 2. Utwórz kolejną warstwę renderowania widoku. Powiedzmy, że najwyższa warstwa renderowania otrzymuje już wyrenderowane części html lub funkcje, które po wywołaniu wyświetlają html. Warstwa pod tą „łączącą warstwą częściową” dawałaby tylko częściowe widoki dla każdego panelu, który chcę, zawierała główną treść. Wada tutaj - zużycie pamięci. Większość nowoczesnych frameworków renderuje kody html bezpośrednio do strumienia wyjściowego, ale w tym podejściu częściowe widoki byłyby najpierw renderowane do obiektów ciągów - co prowadzi do obciążenia pamięci. 3. Użyj czegoś takiego jak „RenderAction” z asp.net mvc, który wywołuje metodę kontrolera z widoku. Myślę, że jest to najgorsze rozwiązanie z podanych 3, ponieważ odrzuca podejście MVC. Pytanie nie jest związane z żadnymi konkretnymi ramami, chcę zrozumieć ogólny sposób robienia takich rzeczy. **AKTUALIZACJA** Po udzieleniu odpowiedzi dowiedziałem się, że post nie jest jasny. Więc rozsądna aktualizacja tutaj: Pod terminem _viewmodel_ rozumiem obiekt, który zawiera wszystkie dane wymagane do renderowania określonego widoku. Wszystkie trzy podejścia obejmują budowanie częściowych widoków z ich własnym modelem widoku. Na przykład (używając składni C#): class SinglePostViewModel { string Tekst {get;set;} string Tytuł {get;set;} string Slug {get;set;} DateTime PublishedDate {get;set;} ... } class TagNavigationPanelViewModel { string TagText {get;set;} int PostsCount {get;set;} } class CalendarNavigationPanelViewModel { DateTime YearAndMonth {get;set;} int PostsCount {get;set;} } Moje pytanie brzmi - jak ładnie połączyć ze sobą te częściowe widoki.


title: Doświadczenie RTOS

text: Przez ostatnie pięć lat pracowałem jako inżynier oprogramowania wbudowanego głównie nad oprogramowaniem 8-bitowym mikrokontrolera i tworzeniem aplikacji desktopowych/mobilnych. Moja praca nad projektem WinCE (w którym zostałem wprowadzony do .NET CF) trwała krótko. Użyłem podstawowych interfejsów API do przetwarzania przerwań, komunikacji peryferyjnej itp., Ale znowu nie jest to czyste środowisko RTOS. Aby zebrać solidniejsze doświadczenie w rozwijaniu się w dziedzinie systemów wbudowanych, chcę więcej pracować z RTOS. Czy zakup tablicy ewaluacyjnej z RTOS i przygotowanie projektu w domu będzie dobrym doświadczeniem, czy też kurs online będzie bardziej przydatny? Po prostu nie wiem, co będzie uważane za dobre doświadczenie. Wszelkie sugestie lub wskazówki bardzo mi pomogą. Mam pasję do tej dziedziny, ale potrzebuję tylko punktu we właściwym kierunku.


title: Wstrzykiwanie zależności a mieszanie poziomów abstrakcji

text: Czytałem Clean Code: A Handbook of Agile Software Craftsmanship autorstwa Roberta C. Martina. Jedna uwaga: > G34 Funkcje powinny schodzić tylko o jeden poziom abstrakcji Zastanawiam się jednak nad funkcjami, które faktycznie tworzą obiekty dla aplikacji. Powiedzmy, że mamy zależności App -> Book -> Database Następnie używając wstrzykiwania zależności, App musiałby utworzyć instancję Book i Database oraz wstrzyknąć instancję bazy danych do Book. * Czy jest to dopuszczalne złamanie zasady mieszania poziomu abstrakcji? * Jeśli tak / nie, dlaczego?


title: Algorytm przypomnień o spotkaniach

text: Mój program umożliwia użytkownikom przechowywanie spotkań w kalendarzu. Poproszono mnie o możliwość wysyłania przypomnień SMS do ludzi, aby przypomnieć im o ich spotkaniu. SMS musiałby zostać wysłany około 2 dni przed wizytą. Pomyślałem, że najlepszym sposobem na osiągnięcie tego jest wybranie pory dnia (np. południe), aby oprogramowanie sprawdziło, które spotkania są za 2 dni, a następnie wyśle przypomnienia SMS do osób, które mają te spotkania. Czy byłoby to słuszne podejście do tego problemu? Czy wskazane jest, aby to się działo o jednej porze dnia, czy lepiej byłoby jakoś rozłożyć to na dłuższy czas? Zakładam w tym momencie, że wątek w tle byłby dobrym pomysłem dla tego typu aktywności.


title: Wyświetlaj zawartość z serwera do zdalnego osadzania HTML

text: Tytuł jest bardzo zły, więc wyjaśnię, co muszę wiedzieć. Mam serwer z, powiedzmy, różnymi obrazami. To, co chcę osiągnąć, to móc osadzić ramkę w dowolnej witrynie HTML i być serwerem, który określa, jaki obraz ma być wyświetlany w tej zdalnej ramce. Wyobraź sobie sytuację, w której chcesz dodać reklamę do swojej witryny, ale wystarczy wkleić fragment kodu JS lub HTML do kodu HTML i być sprzedawcą reklam, który będzie odpowiedzialny za wyświetlanie tego, co chce, w rozmiarze ramki . Moje pytanie brzmi: jak nazywa się ta technika/technologia? Co powinienem wiedzieć, czy to websockets?, czy to osadzanie? Jak mogę to osiągnąć? Dziękuję !


title: Żywotność zespołu deweloperskiego bez *dedykowanej* roli testera

text: Ostatnio dużo myślałem o tym, jak zbudować szczupły zespół programistyczny. Docelowo chciałbym otworzyć swój własny mały software house z niewielką liczbą podobnie myślących ludzi. Celem nie będzie bogacenie się, ale raczej zdrowe środowisko pracy. Do tej pory definiuję zespół Lean w następujący sposób: * Mały; * Samoorganizacja; * Wszyscy członkowie muszą mieć na uwadze kontrolę jakości; * Członkowie muszą być zdolni do pełnienia wielu ról Ostatnim punktem jest to, że trochę się martwię, ponieważ, jak mówi mantra... > Deweloperzy są złymi testerami. Chociaż rozumiem, że często programiści są „zbyt blisko” swojego kodu lub kodu kolegi, aby dokonywać wyższych ocen jakości, nie jestem przekonany, że są _de-facto_ złymi testerami. Wręcz przeciwnie, uważam, że cechy dobrego programisty w dużym stopniu pokrywają się z cechami dobrego testera. Zakładając, że to prawda, zastanawiałem się nad różnymi sposobami obejścia problemu deweloperów/testerów i uważam, że wymyśliłem realny model. Mój model wymaga: * Małego software house'u z ponad 2 projektami * Agile (iteracyjnego) podejścia do rozwoju i dostarczania * 1 zespołu na projekt * Wszyscy członkowie zespołu będą programistami * Ich opis stanowiska będzie jasno określał ** Rozwój** , **Zapewnienie jakości** , **Testowanie** i **Dostawa** jako obowiązki Jeśli wszystkie te warunki zostały spełnione, projekty można zorganizować w następujący sposób (ten przykład będzie odnosić się do dwóch projektów, _A_ i _B_ ): * Każdy członek zespołu będzie na przemian z rolą Dewelopera i Testera * Jeśli członek zespołu jest Deweloperem w projekcie _A_ , będzie Testerem w projekcie _B_ * Członkowie będą pracować tylko nad 1 projektem na raz, a zatem są oczekuje się, że będzie działał jako _albo_ programista _albo_ tester. * **Cykl ról** składa się z 3 iteracji jako programista i 2 iteracji jako tester (ponownie, w dwóch różnych projektach) * Zespoły projektowe zawsze miały 3 programistów i 2 testerów. * Cykle ról członka powinny być przesunięte w fazie o 1 iterację. * Minimalizuje to gwałtowność zmian w zespole. W każdej iteracji 2 programistów i 1 tester pozostaną takie same, jak w poprzedniej iteracji. Biorąc pod uwagę powyższe, widzę następujące plusy i minusy: **Zalety** * Rozpowszechnia wiedzę projektową w całej firmie. * Zapewnia, że członkowie zespołu nie testują kodu, który pomogli napisać. * Cykle ról poza fazą oznaczają, że żaden projekt nigdy nie ma 100% zmiany członków. * Naprzemienne role przełamują monotonię nudnych projektów. **Wady** * Iteracje obu projektów są ściśle powiązane. Jeśli jeden projekt miałby anulować iterację w połowie i zacząć od nowa, oba projekty nie byłyby zsynchronizowane. Utrudniłoby to zarządzanie cyklem ról. * Zawiasy dotyczące zatrudniania programistów otwartych również jako testerów. Otrzymałem mieszane recenzje podczas omawiania tego podejścia z przyjaciółmi i współpracownikami. Niektórzy uważają, że niewielu programistów chciałoby kiedykolwiek zamienić się takimi rolami, podczas gdy inni mówią mi, że osobiście chcieliby tego spróbować. **Więc moje pytanie brzmi:** Czy taki model może się sprawdzić w praktyce? Jeśli nie, czy można by go zmienić w działający model? _Uwaga:_ Ze względu na zwięzłość skupiłem się tylko na rolach dewelopera i testera. W razie potrzeby rozwinę inne role.


title: Co jest potrzebne napisać interfejs do usług internetowych Microsoft Dynamics GP?

text: Poszliśmy do przodu i kupiliśmy Microsoft Dynamics (dlaczego zobacz historię edycji), aby napisać 2 funkcje do interakcji z jedną małą częścią, aby spełnić jedną wielką potrzebę. Chcę się dowiedzieć od innych programistów, którzy zintegrowali swoje oprogramowanie z MS Dynamics GP. Czy istnieje sposób na połączenie się z nim (w pełni) bez konieczności pisania interfejsu w C#? Chcemy używać usług GP SOAP, abyśmy mogli komunikować się z nim z Delphi i ewentualnie Javy, ale wydaje się, że jedynym sposobem, w jaki będziemy w stanie zmaksymalizować jego użyteczność, jest napisanie jakiegoś rodzaju oprogramowania pośredniczącego w C#.


title: Jak wyjaśnić różnicę między zmienną a kluczem w parze klucz-wartość?

text: Zmienne i klucze w parach klucz-wartość są identyfikatorami wartości, więc na poziomie koncepcyjnym są to bardzo podobne pomysły. Jak wyjaśniłbyś różnicę między tymi dwoma pojęciami? * Czy w kolekcjach są używane pary klucz-wartość? * Czy to zmienne wskazują na lokalizację w pamięci? * Albo coś innego? (Jeśli patrzę na kod, instynktownie dostrzegam różnicę, pytanie dotyczy bardziej tego, jak to wyjaśnić, co nie wydaje się zbyt oczywiste, biorąc pod uwagę, że robią podobne rzeczy.)


title: Czy prawo Moore'a (empirycznie) jest takie samo dla pojemności pamięci i szybkości przetwarzania?

text: Innymi słowy, czy pamięć i moc obliczeniowa rosły z biegiem czasu w zasadzie w tym samym tempie, czy też moglibyśmy powiedzieć, że jedno lub drugie zwiększyło się bardziej? Czy koszt spadł w tym samym tempie? A co z najbliższą przyszłością? Zdaję sobie sprawę, że to pytanie nie jest _bezpośrednio_ związane z programowaniem, ale pomyślałem, że lepiej zadać je tutaj z kilku powodów: 1. Pracuję jako programista, a nie teoretyk informatyki (więc prawdopodobnie nie uznałbym za bardzo pomocne rodzaj pytania, które otrzymałbym na przykład ze strony Theoretical Computer Science). 2. Wolę odpowiedzi oparte na prawdziwym doświadczeniu programisty. 3. A ja martwię się prawdziwymi problemami związanymi z programowaniem, zwłaszcza debatą funkcjonalną x imperatywną. O trzeciej pozycji: obecnie widzimy wiele argumentów na temat tego, w jaki sposób wzrost wykorzystania technik programowania funkcjonalnego jest powiązany z popularnymi obecnie maszynami wielordzeniowymi i jak zakończył się darmowy lunch [pdf]. Ale wydaje mi się, że paradygmat funkcjonalny znacznie bardziej pochłania pamięć (ale to opinia, a nie fakt) i nie wydaje mi się, aby wiele argumentów dotyczyło przyszłego wzrostu potrzeb pamięciowych. PS: Przepraszam za niezbyt dobry angielski, ale chyba wyraziłem się jasno (tak jakby).


title: Czy istnieje problem z utrzymaniem dużej liczby połączeń z otwartym gniazdem przez dłuższy czas?

text: Aplikacja, o której myślimy, to serwer przekaźnikowy. Celem jest zaakceptowanie dużej liczby połączeń przychodzących (przynajmniej tysiące), które pozostaną otwarte przez dłuższy czas (godziny, a może dni). Będą wymieniać skromne ilości danych i potrzebują rozsądnie małych opóźnień. Projekt techniczny jest prosty i mamy wdrożenie testowe. Preferujemy korzystanie z hostingu Windows i .NET, ponieważ jest to technologia, którą znamy. Jednak ten rodzaj użycia wykracza daleko poza to, co znamy. Pytanie brzmi, czy istnieją określone ograniczenia lub ograniczenia, o których należy pamiętać, które są nieodłączne lub wspólne dla oprogramowania, które to robi, i które powinniśmy uwzględnić w naszym projekcie i/lub testowaniu przed wdrożeniem. Znalazłem to pytanie (Obsługa dużej ilości gniazd) i ten link (http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-1), które sugerują że nasze rozwiązanie powinno działać. \-- Komentatorzy sugerowali otwieranie i zamykanie portów lub użycie jakiegoś protokołu, nie sugerując, jak. Problem polega na tym, że w dowolnym momencie wiadomość może zostać przekazana do konkretnego znanego miejsca docelowego z oczekiwaniem, że zostanie odebrana szybko (powiedzmy najwyżej 1 sekundę, najlepiej wcześniej). Miejsce docelowe znajduje się (ogólnie) za zaporą sieciową o nieznanych właściwościach, więc nie może (ogólnie) uruchomić serwera ani akceptować połączeń przychodzących. Może wykonywać tylko połączenia wychodzące. Uważamy, że potrzebuje trwałego połączenia wychodzącego, aby odbierać pakiety w dowolnym momencie bez powiadomienia. Interesujące byłyby alternatywne sugestie, chociaż ściśle nie na temat tego pytania. Inni komentatorzy sugerowali, że istnieją ograniczenia systemu operacyjnego, ale nie określono żadnych. Zakładając, że jest to jakaś wersja serwera Windows i pewna (być może duża) ilość pamięci, czy ograniczenia mogą stanowić problem? Jakie będą z grubsza? Czy Windows to zły pomysł?


title: Jak zmodyfikować algorytm ELO, gdy liczba gier jest niska, aby zmniejszyć wartości odstające?

text: Opracowałem standardową implementację ELO, którą można znaleźć tutaj, ale problem, na który natrafiam, polega na tym, że moi gracze będą mieli tylko od 10 do 40 gier w „sezonie”. Ponieważ mój pierwszy sezon już się zakończył (właśnie zaczynam swój WŁASNY system ocen dla mojej gry), wiem, jaka powinna być ranga moich graczy ELO, a przynajmniej bardzo zbliżona. Mój problem polega na tym, że po zaimplementowaniu tego podstawowego algorytmu mam pewne odstające wartości. Ponieważ mam tylko 10 do 40 gier, moją pierwszą myślą, aby zaradzić tej sytuacji, było zaimplementowanie pętli wokół tego procesu, pobranie końcowej oceny ELO z jednego cyklu i użycie jej jako punktu wyjścia do następnego cyklu (dla każdego z osobna). gracz). Następnie powtarzaj te cykle, aż średnie lub maksymalne odchylenie ocen ELO od poprzednich do obecnych cykli nie będzie większe niż X. Pomogło to rozwiązać niektóre z dużych wartości odstających. Wciąż jest kilka mniejszych postaci odstających, z którymi nadal nie czuję się komfortowo... Na przykład mam 7 dywizji, w dywizji 1, facet, który powinien zająć pierwsze miejsce w oparciu o jego ELO, kończy na 5 miejscu, ponieważ dywizja 2, facet, który powinien zająć pierwsze miejsce, jest trzeci. Około 10 najlepszych w każdej dywizji jest w rzeczywistości dość blisko, z wyjątkiem tego rodzaju odstających punktów. Jak mogę zmodyfikować swój algorytm lub jakie podejście mogę podjąć, aby spróbować zredukować wartości odstające? Notatka poboczna #1. W dywizji 1 facet, który powinien być na pierwszym miejscu, który kończy na piątej, w rzeczywistości zajmuje pierwsze miejsce przez cały sezon według innego systemu ocen. Po prostu nie wiem, jak to jest obliczane (i może nie być obliczane, może być oparte na tym, że x gracz jest tak dobry, więc zajmuje pierwsze miejsce). Notatka poboczna #2. Dokonałem modyfikacji algorytmu. Chcę „zważyć” wygrane/przegrane według ich dominacji. Jeśli gracz A pokonuje gracza B 20-0, chcę, aby to miało większą wagę, zwłaszcza jeśli jego oceny są bardzo zbliżone, ale jeśli ich oceny są bardziej od siebie oddalone (gdzie a jest już większe niż B), zmiana ELO nie powinna być tyle, ponieważ oczekiwano, że wygrają w pierwszej kolejności. Tak więc zamiast używać współczynnika/wartości k równego 400, jak w oryginalnej formule, zmieniłem go na „100 + ((różnica wyniku) * 2)”. Zatem maksymalny współczynnik k wynosiłby 140 (20-0 to największa wygrana, pomnóż przez 2, dodaj do 100). Jaką inną strategię mógłbym wdrożyć, aby uwzględnić wyniki wagi, a także skorygować niektóre z tych wartości odstających? * * * Nie mając danych przed sobą (wszystko jest w domu), spróbuję podsumować scenariusz... ### Dywizja I #1 Elo Rating 2250 #2 Elo Rating 2200 #3 Elo ocena 2190 #4 Ocena Elo 2175 #5 Ocena Elo 2170 Gdzie facet #5 po prostu pokonał #1, aby wygrać turniej, a jego "dorobek pracy" wydaje się bardziej kompletny niż facet #1 (czyli grał przeciwko, i pokonaj silniejszych przeciwników niż facet nr 1). Może dzieje się tak dlatego, że „ważony” czynnik k odrzuca to, ponieważ #5 miał wiele zwycięstw, które były tylko o 2 do 5 punktów, gdzie zwycięstwa #1 były z wyższym marginesem, powiedzmy 5 do 10 punktów. Może po prostu muszę pobawić się moim „ważonym” współczynnikiem k, aby zobaczyć, czy mogę zbliżyć moje obliczone wyniki do rzeczywistych…


title: Odrocz przedmioty podczas sprintu lub na końcu sprintu

text: Kiedy zadania trwają dłużej niż oczekiwano, dlaczego lepiej odkładać przedmioty podczas sprintu, niż po prostu odkładać wszystko, czego nie ukończyłeś ostatniego dnia sprintu?


title: Jak sprawić, by życie nowego pracownika było wygodne?

text: Jako starszy członek zespołu programistycznego, który niestety ma niewiele dokumentacji z powodów związanych ze starszymi wersjami, co można zrobić, aby nowy pracownik był wygodny? Planowałem sesje debugowania z daną osobą na temat konkretnych defektów/prośby o funkcje, aby zapoznać ją z bazą kodu. Jednak baza kodu jest naprawdę duża i jest to tylko ustalona ilość kodu, na który mogę w ten sposób narazić daną osobę. Szukam sugestii w obu przypadkach, gdy nowy pracownik jest świeżo upieczonym absolwentem lub doświadczonym profesjonalistą.


title: Jaki format „ebooka” do digitalizacji/kodowania projektu?

text: Czy ktoś ma propozycję digitalizacji + OCR'owania wydrukowanego korpusu z obrazami? Mam 1200 stron tekstu posypanego niezbędnymi zdjęciami. Zakładając, że mam doskonałe skany stron, jakie mam opcje zachowania układu oryginalnego tekstu i umożliwienia przekazania go do programu?


title: Korzystanie z własności publicznej ORAZ pola publicznego

text: Tam, gdzie pracuję, odradzam korzystanie z właściwości. Mamy narzędzia do generowania kodu, aby „przyspieszyć działanie”. Wszystkie dane obiektu stają się polami publicznymi. Jeśli mimo wszystko zażądasz właściwości, otrzymasz coś takiego: Public sFoo as String Właściwość publiczna Foo as String Get Return sFoo End Get Set(ByVal value as String) sFoo = wartość End Set End Property Nie mogę wymyślić rozsądnego argumentu Zrób to. Czy są jakieś dobre powody, aby używać zarówno własności publicznej, jak i pola publicznego?


title: Jak mogę koncepcyjnie modelować wyszukiwanie Craigslist?

text: Próbuję zrozumieć, jak coś takiego działa, ale nie mam doświadczenia i próbuję zrozumieć, jak działa ten proces. Załóżmy, że masz dziesięć kategorii, tysiąc kodów pocztowych i dziesięć tysięcy pozycji wymienionych w każdej kategorii, z których każda ma opis. Co dalej, gdy użytkownik wyszukuje (np.) „bohater gitarowy xbox” w kategorii „gry wideo” w promieniu „50 mil”? Czy baza danych najpierw porówna kody pocztowe, aby znaleźć wszystko w zakresie, a następnie wykonaj `SELECT items WHERE category="gry wideo" i zipcode=A OR B OR C OR D`, a następnie wykonaj wyszukiwanie według opisu każdego wpis w zestawie wyników? Jak to działa? Nie szukam dokładnych odpowiedzi na temat CL, szukam ogólnego pomysłu, jak to działa wszędzie/wszędzie.


title: Czy termin „architektura zorientowana na usługi” stał się bezsensownym żargonem?

text: Zapytano mnie dzisiaj, czy mam doświadczenie z „Architekturą zorientowaną na usługi” i chociaż myślę, że mam. Koncepcja wydaje mi się tak pogmatwana, że nie wiem, jak uczciwie odpowiedzieć na to pytanie. Uciekałem się do terminu Googling, aby uzyskać zwięzłą definicję pojęcia i tego, jak różni się od innych architektur. Po przeczytaniu wielu artykułów na ten temat jedynym wspólnym wątkiem, jaki wydaje mi się, że jestem w stanie znaleźć, jest system z wieloma komponentami, które komunikują się ze sobą za pomocą jakiegoś interfejsu, z być może niewielką preferencją dla XML/SOAP. Wygląda na to, że prawie każdą aplikację można zdefiniować jako SOA, zwłaszcza aplikację internetową. Czy ten termin wpadł w pułapkę „Web 2.0” i stał się terminem oznaczającym cokolwiek chcesz? Czy jestem tutaj daleko od bazy? Kiedy słyszycie ten termin, czy oznacza on dla was coś konkretnego? Jeśli tak, chciałbym zwięzłą definicję, która jasno pokazuje, co jest, a co konkretnie NIE jest SOA.


title: Czy rozwidliłbyś projekt open source, ponieważ jest „źle zarządzany”

text: Jeśli znasz projekt open source, którego organizator * był naprawdę zajęty, że nie utrzymuje go tak bardzo * i jest typem faceta, który nie akceptuje wkładów dopiero kilka miesięcy później (chyba zajęty), jeśli w ogóle * a projekt zaczyna się walić, czy mógłbyś rozwidlić ten projekt, nadać mu nową nazwę i kontynuować ciężką pracę nad nim i zbudować wokół niego nową społeczność, która będzie bardziej zachęcająca do współtworzenia kodu? Zasadniczo lepiej zarządzany projekt, ponieważ teraz problemem jest złe zarządzanie.


title: Ocena właściciela produktu

text: Jak oceniasz właściciela produktu? A dokładniej, jak przeprowadzić ocenę wydajności właściciela produktu? Na jakie cechy lub cechy należy zwrócić uwagę, oceniając właściciela produktu?


title: Czy umieszczenie wątku/pracownika w tle w klasie jest „złe”/złe?

text: Mam klasę, która będzie czytać z Excela (C# i .Net 4) i w tej klasie mam pracownika w tle, który załaduje dane z Excela, podczas gdy interfejs użytkownika może pozostać responsywny. Moje pytanie jest następujące: czy to zły projekt, aby mieć pracownika w tle na zajęciach? Czy powinienem utworzyć klasę bez tego i użyć pracownika działającego w tle do działania na tej klasie? Nie widzę żadnych problemów z tworzeniem mojej klasy w ten sposób, ale z drugiej strony jestem nowicjuszem, więc pomyślałem, że upewnię się, zanim będę kontynuował. Mam nadzieję, że to pytanie jest tutaj istotne, ponieważ uważam, że nie powinno być na stackoverflow, ponieważ mój kod działa, to tylko problem projektowy.


title: Badania przesiewowe dla stażystów - oprogramowanie 'Quiz'

text: Zajmuję się wyborem nowego stażysty programistycznego dla firmy, z którą współpracuję. Chciałem rzucić w kandydatów mały „quiz”, zanim ruszyłem z rozmowami kwalifikacyjnymi, aby trochę odsiać grupę i znaleźć ludzi, którzy mogą wykazać się pewnymi umiejętnościami. Przygotowałem poniższy quiz, który chcę wysłać aplikantom, skupia się on tylko na PHP, ale to dlatego, że około 95% pracy zostanie wykonane. Mam nadzieję, że uzyskam informację zwrotną na temat A. jeśli jest dobry pomysł, aby wysłać to do wnioskodawców? B. czy można to poprawić? # 1. FizzBuzz # Napisz małą aplikację, która wykonuje następujące czynności: # Liczy od 1 do 100 # Dla wielokrotności 3 wypisz "Fizz" # Dla wielokrotności 5 wypisz "Buzz" # Dla wielokrotności 3 i 5 wypisz "FizzBuzz" # Dla liczb, które nie są wielokrotnościami 3 ani 5 wypisz liczbę. <?php ?> # 2. Tablice # Utwórz wielowymiarową tablicę, która zawiera # klucze dla 'id', 'lot', 'car_model', 'color', 'price'. # Wstaw trzy zestawy danych do tablicy. <?php ?> # 3. Porównania # Bez wykonywania kodu, powiedz czy poniższe wyrażenia zwrócą prawdę czy fałsz. <?php if ((strpos("a","abcdefg")) == PRAWDA) echo "Prawda"; w przeciwnym razie echo "Fałsz"; //Prawda czy fałsz? if ((012 / 4) == 3) echo "Prawda"; w przeciwnym razie echo "Fałsz"; //Prawda czy fałsz? if (strcasecmp("abc","ABC") == 0) echo "Prawda"; w przeciwnym razie echo "Fałsz"; //Prawda czy fałsz? ?> # 4. Sprawdzanie błędów # Poniższy kod jest wadliwy. Napraw to tak, aby kod # działał poprawnie bez generowania błędów, ostrzeżeń # lub powiadomień i zwracał odpowiednią wartość. <?php //Określ ile części jest potrzebnych do stworzenia piramidy 3D. function find_3d_pyramid($rows) { //Przejdź w pętlę przez każdy wiersz. for ($i = 0; $i < $wiersze; $i++) { $ostatniRow++; //Dołącz ostatni wiersz do sumy bieżącej. $całkowita = $całkowita + (pow($lastRow,3)); } //Zwróć sumę. zwróć sumę $; } $i = 3; echo "Piramida składająca się z $i wierszy będzie miała w sumie ".find_3d_pyramid($i)." sztuk."; ?> # 5. Szybkie przykłady # Utwórz mały przykład, aby wykonać zadanie # dla każdego z poniższych problemów. # Utwórz skrót md5 "Hello World"; # Zamień wszystkie wystąpienia "_" na "-" w łańcuchu "Welcome_to_the_universe." # Uzyskaj bieżącą datę i godzinę w następującym formacie RRRR/MM/DD GG:MM:SS AM/PM # Znajdź sumę, średnią i medianę poniższego zestawu liczb. 1, 3, 5, 6, 7, 9, 10. # Losowo rzuć kostką sześciościenną 5 razy. Umieść 5 rolek w tablicy. <?php ?>


title: Jak nazywasz kolejkę, gdy kolejka słów jest zarezerwowana?

text: Pracuję nad aplikacją rails, a w kolejce `queue` jest słowem zastrzeżonym. Muszę utworzyć model kolejki dla mojej aplikacji i utknąłem, ponieważ nie wiem, jak to inaczej nazwać. Czy ktoś inny natknął się na to wcześniej, a jeśli tak, jak nazwałeś swoją kolejkę, której nie można nazwać kolejką?


title: Małe, samodzielne technologie aplikacji Windows na komputery stacjonarne?

text: Po pierwsze, nie jestem w tym nowy. Pisałem aplikacje desktopowe dla Windowsa od 1991 roku w Visual Basic 3.0. Użyłem C/C++ i Win32 API, VB3-6, C# 1.0-4.0, a obecnie wybijam aplikacje webowe w ASP.Net MVC. Jednak nie dotykałem elementów pulpitu od 2000 roku na pasku głębokości, bawiąc się niektórymi elementami WPF wdrożonymi ClickOnce w C#. Jednak ostatnio natknąłem się na wymóg wyrzucenia małej, samodzielnej, standardowej aplikacji Windows na komputery z rozszerzeniem .exe. Nie chcę z nim wysyłać żadnych większych zależności. Właściwie wolałbym, aby był w stylu uTorrent, tj. mały, samowystarczalny i bez mas crud wokół niego i być może wypełniony UPX. To część manifestu oprogramowania: prostota i możliwość instalacji w folderze użytkownika LocalAppData. Jest to narzędzie diagnostyczne, które będzie używane przez naszych użytkowników i będzie skanować system i zgłaszać różne fragmenty określonych informacji z powrotem do naszych serwerów internetowych. To musi działać na prawie wszystkim z powrotem do win2k. Naprawdę nie chcę wracać do Win32, jeśli to możliwe. Teraz, kiedy się rozglądam, wszystko zamieniło się w zagmatwaną papkę MFC, ATL, Managed C++, WTL, WPF, Metro i różnych innych kawałków sznurka i taśmy klejącej. Albo to, albo ciężkie frameworki, takie jak Qt, Gtk i Wx. Pytanie jest proste: co, poza Win32, jest najlepszym punktem wyjścia dla aplikacji tego typu? A może powinienem po prostu napisać wrapper "jeszcze kolejny win32"?


title: Porównywanie siebie z innymi podczas rozmów kwalifikacyjnych

text: Często na pewnym etapie rozmowy kwalifikacyjnej jestem proszony o porównanie się z moimi rówieśnikami. Na przykład w jednej z moich pierwszych prac po ukończeniu studiów poprosiłem mnie o porównanie się z kolegami z klasy. Praca, w której ostatnio rozmawiałam, poprosiła mnie o porównanie się z moimi współpracownikami. Zawsze trochę to bagatelizuję. Zawsze się martwię, że „jestem daleko ponad wszystkimi wokół mnie” brzmi zbyt arogancko. Kiedy naciska się na pchnięcie, chociaż to prawda. Ukończyłem szkołę jako najlepszy w swojej klasie. Miałem 3,99, najwyższy GPA w tym roku. Moi koledzy ze studiów narzekali i narzekali na takie rzeczy, jak używanie konsoli do pisania „javac xxx.java” i kompilowania programów, zamiast po prostu naciskać przycisk budowania w VS. Większość z nich była kompletnie nieudolna i nie chciałbym zobaczyć, co się z nimi stało w prawdziwym świecie. Inni znajdowali się mile wyżej od tych ludzi. Było nas około 3-5 osób, które naprawdę się przejmowały, prowadziły własną edukację, jakby to miało znaczenie, i posiadało wszelkie geny potrzebne do myślenia jak programista lub matematyk (jedyny facet, o którym powiedziałbym, że był mądrzejszy ode mnie, był w rzeczywistości magister matematyki – ukończył szkołę o rok przed mną, inaczej wziąłby mój tytuł). Nawet wśród tych kilku „wielkich hitów” byłem jednym z, jeśli nie najlepszym (niektórzy jednak dzięki większemu doświadczeniu). Dla około 90% innych uczniów uważam, że nie jestem tak dobry, ale naprawdę są tacy źli. Często byłem osłupiały nie tylko ich ignorancją, ale także ich niechęcią do zrobienia tego, czego potrzeba, aby ją stracić. Moi rówieśnicy w college'u byli leniwi, lamentujący, nieodpowiedzialni, workami głupoty, którzy woleliby biegać i rzygać od tak dużej ilości alkoholu, niż wkładać najmniejszy wysiłek w nauczenie się czegokolwiek. Następnie obwiniali profesorów za swoją nieudolność. Gdy wszedłem na rynek pracy, stwierdziłem, że ten trend się utrzymał. Kiedy jestem w Internecie, rozmawiając ze światową populacją wspaniałych ludzi, jestem raczej przeciętny. Jestem mądry, podekscytowany, itp... Nadal jestem bardzo dobry, ale o wiele bardziej potrafię zobaczyć siebie jako mniejszą rybę w większym oceanie. Jednak lokalnie, w osobistym doświadczeniu z prawdziwego życia... to, co uważam za łatwe, innym sprawia trudność, nawet wśród tych, których nazwałbym najlepszymi programistami, z którymi pracowałem. Wiem więcej o projektowaniu, ogólnym rozwoju i konkretnym języku, którego używam, więcej niż ktokolwiek inny, kogo znam. Częścią tego jest to, że dobrze znam miejsca, w których się uczyłem i gdzie pracowałem (kto nie ma pieniędzy, żeby mi zapłacić tyle, ile jestem warta). Mimo to, gdybym miał uczciwie porównać się z moimi współpracownikami, a w minionych latach z moimi kolegami z pracy... czy nie wypadłbym jako trochę arogancki? Inni też widzą mnie w ten sposób. Właściwie zajęło mi trochę czasu, zanim zdałem sobie sprawę, że jest coś wyjątkowego w sposobie, w jaki podchodzę do programowania (bardzo mi zależy), etyki pracy i dodatkowo mojego szczęśliwego rzutu w grze genetycznej. Od czasu do czasu widziałem, jak to przychodzi mi do głowy i staram się tego unikać, ale szczerze mówiąc, jestem po prostu lepszy niż większość. Jedna rzecz, która wydaje się odróżniać mnie bardziej niż cokolwiek innego, to fakt, że nadal zdobywam większą wiedzę w domu, poza godzinami pracy. Jestem jednym z najlepszych, bo chcę być i to wyraźnie widać. Odkryłem, że w prawdziwym świecie zdarza się to dość rzadko, chociaż wielu internautów kazało mi też tu pobić. Wiedząc, że z pewnością jest dużo więcej takich osób, w rzeczywistości znam wielu ludzi na SE, którzy są znacznie mądrzejsi ode mnie, jak podchodzisz do tego pytania? Czy odpowiadasz szczerze? „Jestem pieprzonym Bogiem, który ogłupia wszystko, co robią dla małych ludzi! Jedynym sposobem, w jaki mogę pociągnąć resztę za sobą, jest powiedzenie wszystkiego 20 razy na 5 różnych sposobów”. A może lekceważysz siebie, aby upewnić się, że nie wypadniesz jako ktoś tak cholernie arogancki, że nie może współpracować z innymi? Edycja: Tak, popełniam błędy gramatyczne i dodatkowo wiele innych. Lubię też spawać, chociaż bardzo się starałem. Bardzo trudno mi też utrzymać przy życiu rośliny domowe. Niektórzy ludzie są w tym po prostu lepsi. Po prostu jestem lepszy w programowaniu.


title: Czy ciąg „1.2.3f4” jest standardowym formatem numerów wersji?

text: Pakiet rozwoju gry Unity używa następującego schematu numerowania wersji: {major}.{minor}.{patch}{type}{number} Z następującymi znanymi typami: * **a** = alfa * **b** = beta * **f** = final Kilka przykładów: * 1.2.3a27 * 1.2.3b4 * 1.2.3f2 Czy to jest standardowe formatowanie numerów wersji?


title: Czy narzędzie pywebsocket nadaje się do produkcji?

text: Czy dobrym pomysłem jest używanie **pywebsocket** w środowisku produkcyjnym, ponieważ jest on tak powszechnie używany, ale ich strona programisty Google zawiera informację „ _pywebsocket jest przeznaczony do celów testowych lub eksperymentalnych_ ”. Ponieważ Mozilla i Google używają go do testowania swoich implementacji websocket i było to sugerowane (dla produkcji) w wielu wątkach SO, pomyślałem, że jest to dość stabilna podstawa, dopóki nie spojrzałem na ich stronę. Czy może coś źle interpretuję i ma to być _szczególnie_ pomocne w testowaniu, a także odpowiednie w produkcji? Co więcej, czy wiesz, jakie byłyby konkretne wady korzystania z niego? * Czy są wady wydajności? * Czy nie jest w pewien sposób stabilny lub niepewny?


title: Automake - jak utrzymać drzewo źródłowe w czystości?

text: Mam projekt, który używa GNU autotools do samodzielnego budowania. Próbuję zmodyfikować tak, aby autotools generowało wszystkie niewersjonowane pliki kontrolne w osobnym katalogu, dzięki czemu mogę utrzymać drzewo źródłowe w czystości z plików tymczasowych. Czy ktoś ma jakieś pomysły jak to zrobić?


title: Testy RSpec + Selenium dla platformy .NET w systemie Windows

text: Jestem programistą Rails i robię TDD na Macu z webdriverami RSpec, Capybara i Selenium. Teraz moja firma poprosiła mnie o zastosowanie tego podejścia do środowiska .NET w środowisku Windows. Jaki jest najlepszy sposób na zrobienie tego? Mógłbym po prostu zainstalować Rubiego i użyć webdrivera RSPEC, Capybara i Selenium do testowania integracji. A co z testami jednostkowymi? Zajrzałem też do NSpeca, ale nie jestem pewien, czy mogę to połączyć z Capybarą lub Selenium do testów integracyjnych. Jakie byłoby dobre podejście tutaj?


title: Jak zmniejszyć opóźnienia geograficzne w aplikacji internetowej (MVC ASP.net) wspieranej przez pojedynczą bazę danych?

text: Pracuję nad skromną aplikacją internetową, która otrzymuje około 30 000 unikalnych użytkowników dziennie, jest to aplikacja MVC C# hostowana na 3 serwerach internetowych i wspierana przez jeden serwer SQL, wszystko jest hostowane w jednym centrum danych. Problem polega na tym, że w niektórych częściach świata obserwujemy całkowity czas nawet 3 razy wolniej. Zrobiliśmy wszystkie zwykłe "szybkie zwycięstwa", jak sugeruje yslow \- i teraz szukamy zmian w architekturze. Naszym początkowym planem jest stworzenie internetowego interfejsu API, który obejmie naszą warstwę serwerową, a następnie hostowanie warstwy internetowej w drugim centrum danych w innej części świata, bliżej użytkowników o niskim opóźnieniu. Mamy nadzieję, że w połączeniu z buforowaniem pomoże to zmniejszyć opóźnienia. Przypuszczam, że między warstwą usług interfejsu API a warstwą WWW wystąpi opóźnienie, ale mam nadzieję, że będą to lekkie wywołania http. Czy to ma sens?


title: Interfejs użytkownika w czystej architekturze z modelem klient/serwer

text: Czytałem (i oglądałem prezentacje) na tematy takie jak: DDD, TDD, BDD, SOLID (zasady), wzorce projektowe, czysty kod, czysta architektura, zwinne metodologie projektów. Podsumowując, mam dość jasny pogląd na to, jak podejść do zwinnego tworzenia oprogramowania. Szczególnie część DDD naprawdę pomaga w komunikowaniu się ze wszystkimi zaangażowanymi w zespół (interesariuszami, właścicielami produktów, członkami zespołu itp.). Tworzenie dobrego oprogramowania jest trudne i bardzo cenię opinie doświadczonych programistów. Mówią jednak takie rzeczy jak: „Interfejs użytkownika (lub baza danych) to szczegół implementacji”. Jeśli szukasz podstawowej wartości produktu, to z pewnością jest to prawda. W rzeczywistości jednak użytkownik końcowy zajmuje się wyłącznie interfejsem użytkownika. Aby nasz produkt był naprawdę użyteczny, musimy zapewnić doskonałe wrażenia użytkownika. Załóżmy, że mamy jednostronicowego klienta html/css/javascript. Projektowanie i tworzenie wszystkich rzeczy związanych z „tylko interfejsem użytkownika” jest całkiem wykonalne. Mam kłopoty z następującymi rzeczami: * _Logika domeny_ \- Żyje w moim modelu domeny na serwerze. Duplikowanie go u klienta jest kruche. Wystawienie tych części modelu domeny na serwerze może być opcją, ale prawdopodobnie spowodowałoby to wiele żądań (problem z wydajnością). Jednak wymaganie od użytkownika wprowadzenia wartości z zakresu od 0 do 42 jest oczywiście regułą biznesową. * _Historie użytkowników / Scenariusze / Zachowanie / Przypadki użycia_ \- Jakkolwiek to nazwiesz. Serwer jest w stanie obsłużyć przypadki użycia, jeśli zrobiliśmy to dobrze, są one ładnie określone przez specyfikacje behawioralne. Interfejs użytkownika powinien implementować „widok” lub „przewodnik” dla tych scenariuszy. Powinniśmy prawdopodobnie użyć ich ponownie, prawda? Nie mogłem znaleźć nic o połączeniu tych rzeczy. Czy masz jakieś zasoby lub pomysł na ten temat? Musi być jakaś mądra osoba, która powiedziała coś bardzo pouczającego na ten temat, w przeciwnym razie: oto twoja szansa


title: Najlepsze praktyki programowania funkcjonalnego w Scala lub Clojure

text: Zrobiłem dużo samodzielnej nauki kodowania, mam trochę doświadczenia z modelami programowania równoległego: aktorzy, pamięć transakcyjna oprogramowania, przepływ danych. Kiedy próbuję zastosować te architektury w prawdziwym życiu - w aplikacji sieci Web o dużym obciążeniu - żaden model nie obsługuje trwałości i trwałości danych. Zadania z prawdziwego życia wymagają na końcu zapisania danych. Oznacza to, że nadal muszę używać DB i trapping synchronizacji DB, możliwych wąskich gardeł skalowalności itp. Czy ktoś zna dobry przykład architektury (src lub text lub diagram lub blueprints), która używa _Akka_ Aktorzy **lub** Software Transaction Memory i implementuje wytrwałość na końcu? Każdy dobry przykład/pomysł dotyczący pamięci transakcyjnej, aktorów, przepływu danych, przestrzeni krotek w rzeczywistych aplikacjach jest mile widziany.


title: Modułowe struktury baz danych

text: Badałem bazę kodu, której używamy w pracy i martwi mnie rozmiar, do którego urosły pakiety. Rzeczywisty kod jest modułowy, procedury zostały podzielone na małe funkcjonalne (i testowalne) części. Problem, który widzę, polega na tym, że mamy 100 procedur w jednym pakiecie \- prawie cały model domeny. Myślałem o rozbiciu tych pakietów - aby stworzyć subdomeny, które są skoncentrowane wokół relacji procedur z innymi obiektami. Pogrupuj kilka procedur, które mają 80% ich relacji do trzech tabel itp. W efekcie końcowym byłoby znacznie więcej pakietów, ale pakiety byłyby mniejsze i czuję, że cała baza kodu byłaby bardziej czytelna - gdy procedury krzyżują się między dwoma modele domen, łatwiej jest ustalić, do którego pakietu należy. Problem, jaki mam teraz, polega na tym, jaka byłaby rzeczywista korzyść z tego wszystkiego. Przyjrzałem się ogólnym zaletom modułowości: 1. Możliwość ponownego wykorzystania 2. Programowanie asynchroniczne 3. Utrzymanie Jednak kiedy rozważam nasz najnowszy rozwój, procedury zawarte w pakietach są już wielokrotnego użytku. Na tym zaawansowanym etapie rzadko wymagamy rozwoju asynchronicznego – a kiedy jest to wymagane, po prostu drabinujemy historie w kolejnych iteracjach. Więc myślę, że moje pytanie brzmi, czy ludzie znają powody, dla których rozkładasz klasy, a nie tylko metody wewnątrz klas? W tej chwili wierzę, że istnieje problem z tworzeniem się tych megapakietów, ale jedyną korzyścią, jaką mogę naprawdę określić, aby je rozbić, jest czytelność - coś, co rozwiązałoby doświadczenie zdobyte podczas pracy z nimi.


title: Czy mogę używać wtyczek licencji MIT na mojej komercyjnej stronie internetowej?

text: Jeśli tak, jakie środki ostrożności powinienem podjąć?


title: Testy na sucho, sznurkowe i jednostkowe

text: Mam powtarzające się pytanie podczas pisania testów jednostkowych dla kodu, który obejmuje stałe wartości ciągu. Weźmy przykład metody/funkcji, która wykonuje pewne przetwarzanie i zwraca ciąg _zawierający_ predefiniowaną stałą. W pythonie byłoby to coś takiego: STRING_TEMPLATE = "/jakaś/stała/ciąg/z/%s/to/potrzeby/interpolacja/" def process(some_param): # Wykonujemy pewną sensowną pracę, która daje nam wynik wartości = _some_meaningful_action() return STRING_TEMPLATE % wyniku Jeśli chcę przeprowadzić test jednostkowy `procesu`, jeden z moich testów sprawdzi wartość zwracaną. Tutaj zastanawiam się, jakie jest najlepsze rozwiązanie. W moim teście jednostkowym mogę: 1. zastosować DRY i użyć już zdefiniowanej stałej 2. powtórzyć się i przepisać cały łańcuch def test_foo_should_return_correct_url(): string_result = process() # Stosowanie DRY i używanie już zdefiniowanej stałej asercji STRING_TEMPLATE % " 1234" == string_result # Powtarzam się, powtarzam asercję "/jakaś/stała/ciąg/z/1234/to/potrzeby/interpolacja/" == url Zaletą tego pierwszego jest to, że mój test się zepsuje, jeśli wstawię zła wartość ciągu w mojej stałej. Niewygodne jest to, że mogę przepisywać ten sam ciąg w kółko w różnych testach jednostkowych.


title: Gdzie najwięcej się uczę - chodząc do przemysłu lub robiąc doktorat?

text: Lubię uczyć się nowych rzeczy, dlatego chcę kontynuować karierę, w której mogę to robić dalej. Obecnie robię pracę magisterską i skończę studia na początku przyszłego roku. Potem jestem na rozdrożu, co dalej. Mój egzaminator chce, abym kontynuował studia akademickie i złożył podanie o stopień doktora i nie mogę powiedzieć, że jestem temu całkowicie przeciwny; gdzie możesz dowiedzieć się więcej niż poprzez badania? Jednocześnie jednak wyobrażam sobie, że więcej praktycznych doświadczeń zdobędziesz, jeśli pójdziesz do przemysłu. Z drugiej strony zawsze istnieje ryzyko, że skończysz w kole świnek morskich i wykonasz bezmyślną pracę i nigdy nie zrobisz postępu. A w badaniach możesz tylko badać tylko to i nigdy nie patrzeć na nic innego. I nie zapominajmy o wyższych zarobkach w przemyśle (przynajmniej jeśli porównasz zarobki w Szwecji, ale jestem gotów pracować za mniej, jeśli dowiem się więcej). Więc co robić?


title: Rozwiązanie dla strony PHP bez frameworka

text: Jeden z naszych klientów poprosił nas o dodanie dynamicznej funkcjonalności do istniejącej strony internetowej, składającej się z kilku statycznych stron HTML. Zwykle pracujemy z frameworkiem MVC (głównie CodeIgniter), ale w tym przypadku przeniesienie wszystkiego do frameworka wymagałoby zbyt dużo czasu. Ponieważ nie jest to duży projekt, nie posiadanie pełnej funkcjonalności frameworka nie stanowi problemu. Ale pytanie brzmi, jak zachować czystość kodu. Rozwiązanie, które wymyśliłem, to podzielenie kodu na biblioteki (API aplikacji) i modele. Tak więc wewnątrz HTML będą tylko wywołania API, a czytelność nie zostanie poświęcona. Zaimplementowałem to za pomocą pewnego statycznego rejestru (przepraszam, jeśli się mylę, nie jestem ekspertem od wzorców projektowych): <?php class Custom_framework { //Globalna instancja bazy danych private static $db; //Zarejestrowane modele private static $models = array(); //Zarejestrowane biblioteki prywatne statyczne $libraries = array(); //Zwraca instancję klasy bazy danych static public function get_db(){ if(isset(self::$db)){ //Jeżeli instancja istnieje, zwraca ją return self::$db; } else { //Jeśli instancja nie istnieje, tworzy ją samodzielnie::$db = new DB; zwróć self::$db; } } //Zwraca statyczną funkcję publiczną instancji modelu get_model($model_name){ if(isset(self::$models[$model_name])){ //Jeśli instancja istnieje, zwraca ją zwracane self::$models[$model_name ]; } else { //Jeśli instancja nie istnieje, tworzy ją if(is_file(ROOT_DIR . 'aplikacja/modele/' . $nazwa_modelu . '.php')){ include_once ROOT_DIR . „aplikacja/modele/”. $nazwa_modelu . '.php'; self::$models[$model_name] = nowy $model_name; return self::$models[$model_name]; } else { zwróć FAŁSZ; } } } //Zwraca statyczną funkcję publiczną instancji biblioteki get_library($library_name){ if(isset(self::$libraries[$library_name])){ //Jeśli instancja istnieje, zwraca ją zwracamy::$libraries[$ nazwa_biblioteki]; } else { //Jeśli instancja nie istnieje, tworzy ją if(is_file(ROOT_DIR . 'aplikacja/biblioteki/' . $nazwa_biblioteki . '.php')){ include_once ROOT_DIR . „aplikacja/biblioteki/”. $nazwa_biblioteki . '.php'; self::$libraries[$library_name] = nowa $library_name; zwróć self::$biblioteki[$nazwa_biblioteki]; } else { zwróć FAŁSZ; } } } } Wewnątrz HTML, metody API są dostępne w następujący sposób: <?php echo Custom_framework::get_library('My_library')->my_method(); ?> Wygląda to na praktyczne rozwiązanie. Ale zastanawiam się, jakie są jego wady i jakie są możliwe alternatywy.


title: Jak odciążasz pracę z bazy danych?

text: Przynajmniej w dziedzinie tworzenia stron internetowych, serwery internetowe są wszędzie, ale są wspierane przez bardzo niewiele serwerów baz danych. Gdy serwery WWW otrzymują żądania, wykonują duże zapytania w bazie danych, powodując duże obciążenie serwera. Podczas gdy serwery WWW są bardzo łatwe do skalowania, serwery db są znacznie trudniejsze (przynajmniej z tego, co wiem), co czyni je cennym zasobem. Jednym ze sposobów, w jaki usłyszałem z niektórych odpowiedzi, aby odciążyć bazę danych, jest przeniesienie pracy na serwer WWW. To proste, dopóki nie zdasz sobie sprawy, że teraz masz mnóstwo wewnętrznego ruchu, ponieważ serwer sieciowy próbuje uruchomić SELECT TOP 3000 (prawdopodobnie po to, aby samodzielnie zepsuć wyniki), co nadal spowalnia działanie. Jakie są inne sposoby na odciążenie bazy danych?


title: Jak możemy poprawić ogólną edukację i szkolenia programistów?

text: W zeszłym tygodniu oglądałem właśnie ten niesamowity wywiad Kevina Rose z Phillip Rosedale z Second Life. Odbyli niesamowitą dyskusję o tym, jak znaleźć, zatrudnić i zidentyfikować dobrych programistów oraz jak trudno jest znaleźć dobrych. Co skłoniło mnie do zastanowienia się nad sposobem uczenia się programistów. Dla większości z nas, łącznie ze mną, jesteśmy samoukami. Co jest świetne w byciu programistą, każdy może uczyć się i rozwijać umiejętności. Ale oznacza to również, że nie ma prawdziwych standardów tego, kim jest/jest dobry programista i jakie środowisko sprzyja rozwojowi umiejętności programistycznych. To nie tyle pytanie, co chęć zobaczenia, jak możemy zmienić kulturę programowania i menedżera programowania, aby zachęcać do edukacji i samodoskonalenia. Istnieje wiele możliwości kontynuowania edukacji, filmy na youtube, książki, konferencje, ale ze względu na empiryczną naturę tego, co robimy, nie zawsze jest jasne, co jest ważne do nauczenia się i opanowania. Spójrzmy na 12 kroków Joela. Test Joela Czy używasz kontroli kodu źródłowego? Czy potrafisz wykonać kompilację w jednym kroku? Czy codziennie budujesz? Czy masz bazę błędów? Czy naprawiasz błędy przed napisaniem nowego kodu? Czy masz aktualny harmonogram? Czy masz specyfikację? Czy programiści mają ciche warunki pracy? Czy korzystasz z najlepszych narzędzi, jakie można kupić za pieniądze? Czy masz testerów? Czy nowi kandydaci piszą kod podczas rozmowy kwalifikacyjnej? Czy przeprowadzasz testy użyteczności korytarza? Myślę, że wszystkie z nich mają ważną wartość, ale z powodu czegoś, co nazywam Luką Doświadczeń, jeśli programista lub menedżer nigdy nie doświadczył żadnych negatywnych konsekwencji braku zrobienia pozycji na liście, nigdy nie zobaczy potrzeby zrobienia czegokolwiek. z nich. Luka Doświadczalna to moja podstawowa teoria, że każdy z nas ma inną pracę i inne doświadczenia. Tak więc dla niektórych z nas, którzy zawsze pracowali z dziesiątkami programistów, kontrola źródeł jest koniecznością. Ale dla ludzi, którzy zawsze byli jedynymi programistami, nie wyobrażają sobie potrzeby kontroli źródeł. I to z powodu tej poważnej wady w sposobie uczenia się, oceniamy ludzi według tego, jakie najlepsze praktyki stosują, a czego nie, i powodem może być wybuch wojny. Zawsze oceniamy ludzi w naszej dziedzinie na podstawie tego, co robią i myślimy: „Och, jeśli ten facet / dziewczyna nie stosuje najlepszych praktyk xyz, nie może być dobrym programistą, więc nie marnujmy czasu ani energii na rozmawianie z nimi ”. Właśnie dlatego mamy tak wiele programowych ognistych wojen, że z powodu Luki Doświadczalnej nie możemy sobie wyobrazić ludzi, którzy nie podjęli decyzji, które my musieliśmy podjąć. To skłoniło mnie do myślenia, że musimy całkowicie przemyśleć, jak szkolimy, edukujemy i zarządzamy programistami. Na przykład, jaki procent z was został zachęcony przez kierownika do chodzenia na konferencje, a nawet kazał mu za to zapłacić? Dla mnie i wielu ludzi jest to niezwykle rzadkie, wielu z nas chciałoby chodzić na konferencje, aby dowiedzieć się więcej, ale nie ma na to pieniędzy. Tak więc celem tego pytania jest naprawdę wywołanie wielu sposobów na lepsze szkolenie, naukę i zarządzanie? Jak możemy stworzyć nową kulturę uczenia się, która nie obraża ludzi za to, że nie mają takich samych doświadczeń zawodowych. Tak, wszyscy mamy pracę i pracę do wykonania, ale nasza zdolność do dobrego wykonywania naszej pracy zależy od naszego pragnienia, zainteresowania i wsparcia w doskonaleniu naszych umiejętności. W tej chwili widzę, że nasza kultura jest raczej zdezorganizowana, wspieramy elitę, ale ci, którzy chcą być lepsi, po prostu nie mają wystarczającego wsparcia, aby się uczyć i doskonalić. Chodzi mi o to, czy my, jako branża, chcemy być postrzegani jako tylko wymienne trybiki? Dziękuję Ci...


title: Czy lepiej skoncentrować się na jednym lub dwóch projektach badawczych w trakcie studiów?

text: Obecnie na 4 semestrze inżynierii na indyjskiej uczelni. Chodzi o to, czy lepiej robić tyle krótkotrwałych projektów/prac badawczych dotyczących różnych tematów informatyki, czy trzymać się jednego/dwóch projektów konsekwentnie przez całe moje studia licencjackie? Przykład: obecnie pracuje nad projektem obróbki obrazu, który zapowiada się na około rok (według prof.). Czy to wydaje się być nadmierną specjalizacją na zbyt wczesnym poziomie? Chociaż wzięcie na siebie zbyt wielu rzeczy rozproszy mnie i najprawdopodobniej nie zakończy się żadną sensowną pracą. Zwłaszcza, że mam nadzieję ubiegać się o studia podyplomowe w USA. Naprawdę doceniłbym wszelkie opinie i sugestie na ten temat.


title: Wspólna rozmowa kwalifikacyjna: elastyczność w teście kodu?

text: Szukam swojej pierwszej pracy, a jutro mam pierwszą rozmowę kwalifikacyjną, podczas której przetestują moje umiejętności programistyczne, robiąc trochę kodu. Chcę wiedzieć, czy zwykle umożliwiają wyszukiwanie w Internecie, jeśli nie pamiętasz określonej nazwy metody lub czegoś związanego ze składnią?. Jeśli jest to nietypowe, to co powinienem zrobić w przypadku zapomnienia czegoś związanego ze składnią?


title: Czy należy oznaczyć zmienne diagramu klas jako prywatne czy publiczne?

text: W moim programie mam kilka zmiennych klasowych, których specyfikator dostępu jest znany jako pakiet prywatny. Domyślny specyfikator akcesora w Javie jest znany jako pakiet prywatny, gdzie jest dostępny w pakiecie, do którego należy klasa. Czy w przypadku diagramu klas UML należy oznaczyć te zmienne jako publiczne czy prywatne? Nie mogę się zdecydować z powodu tej koncepcji pakietu prywatnego.


title: Po co używać klas podczas programowania interfejsu użytkownika tkinter w pythonie?

text: Programuję głównie w Pythonie i zaprogramowałem kilka GUI za pomocą Tkinter, każdy samouczek, jaki kiedykolwiek widziałem, zalecał definiowanie i używanie klasy dla GUI, ale mój GUI działa bezbłędnie przy użyciu tylko procedur, bez klasy. Dlaczego warto korzystać z zajęć? Z mojej perspektywy wydaje się to po prostu dodatkową warstwą złożoności i niepotrzebnego kodu.


title: Czy lepiej Show() + Hide() czy SetVisible(bool visible)?

text: Co jest lepsze i dlaczego? (Z punktu widzenia projektowania interfejsu) : a) Posiadanie dwóch funkcji `Show()` i `Hide()` b) Posiadanie jednej funkcji `SetVisible(bool visible)` EDIT: Na przykład jakiś obiekt ma stan widoczności i ta funkcja służy do jej zmiany. c) Mieć wszystkie trzy funkcje `Show()`, `Hide()`, `SetVisible(bool visible)`


title: Czy możesz używać UML w projekcie TDD?

text: Jeśli tak, na jakim etapie? czy jest to również proces iteracyjny? Jeśli iteracyjny, jak formalny? Ponadto, jak użyteczny jest UML dla programisty solo, który robi open source? Chociaż lubię oglądać obraz systemu, wydaje mi się, że jest to tak formalny i króliczy ślad dla TDD. Dziękuję.


title: Kompilacja tego samego kodu źródłowego w różnych językach

text: Jak nazywasz kod źródłowy ważny w kilku językach? Było na to konkretne słowo i naprawdę szalone przykłady.


title: Jak mam obsługiwać dwie bazy danych ze starszą aplikacją PHP?

text: Mam przestarzałą aplikację PHP, która została napisana w 2004 roku i używa MSSQL jako zaplecza bazy danych. Na tym etapie MSSQL jest nadal obsługiwany przez PHP, ale tylko poprzez sterownik Microsoft. Przyglądałem się konwersji do mysql za pomocą zautomatyzowanych narzędzi, które działają całkiem dobrze, ale mam dość złożone widoki, które wymagają wiele indywidualnej pracy, aby je przekonwertować. Nie mam na to dużo czasu. Wiele narzędzi, z których chciałbym korzystać i frameworków, do których chciałbym przenieść aplikację, nie obsługuje MSSQL, więc zastanawiałem się nad dodaniem nowych funkcji przy użyciu nowej bazy mysql i zastanawiałem się, czy ktoś ma opinie na temat zalet i wad używania dwóch oddzielnych backendy baz danych w jednej aplikacji?


title: Jak udostępnić niestandardowe biblioteki?

text: Próbuję skompilować i zainstalować każdy niestandardowy moduł we własnym, wyznaczonym folderze. (np. `/myApps/myLinux/compiled_app`) Do tej pory miałem szczęście z Pythonem, gdzie mój Python jest skompilowany ze źródeł i mieszka w: `/myApps/myLinux/python2.5` i "python2.5" -> ` /myApps/myLinux/python2.5.6-gcc463` Mogę więc uzyskać dostęp do tego Pythona za pomocą skryptu opakowującego, który ustawia odpowiednie środowisko. Pytanie brzmi, że ostatnio musiałem skompilować i dodać coś o nazwie gperf3.0.4. Więc teraz żyje: `/myApps/myLinux/gperf3.0 i "gperf3.0" -> /myApps/myLinux/gperf3.0.4-gcc463 ` Pytanie brzmi: Jak wskażę tę bibliotekę, jeśli jakaś inna aplikacja tego wymaga Uzyskać dostęp do niego? Czy odbywa się to poprzez zmienną LD_LIBRARY_PATH?


title: Jak wykrywasz kłamliwe Stubs/Mocks?

text: Rozważ ten fragment kodu z podręcznika PHPUnit (używam PHP tylko jako przykładu): class StubTest extends PHPUnit_Framework_TestCase { public function testStub() { // Utwórz skrót dla klasy SomeClass, który może być później wstrzyknięty do innej klasy, ale usunięte tutaj dla uproszczenia. $stub = $this->getMock('SomeClass'); // Skonfiguruj kod pośredniczący. $stub->expects($this->any()) ->method('doSomething') ->will($this->returnValue('foo')); // Wywołanie $stub->doSomething() zwróci teraz 'foo'. $this->assertEquals('foo', $stub->doCoś();); } } Teraz po prostu odciąłem metodę `doSomething()`, aby zwrócić `foo`. Co jeśli jakiś czas później w przyszłości zdecyduję się zaimplementować `SomeClass` w ten sposób: class SomeClass{ function doSomething(){ return 'bar'; } } Oczywiście mam testy dla `SomeClass`, które testują `bar`, ale zupełnie zapomniałem przetestować `foo`. Teraz mam test kłamstwa. Jak TDD radzi sobie z tą sytuacją?


title: Przechowywanie danych w elasticsearch vs mongodb

text: Staramy się stworzyć aplikację przypominającą zakupy online, w której musimy przechowywać ogromną ilość danych, ponieważ dane, które będą przechowywane, to w większości dane dokumentowe, zasugerowano, aby przechowywać dane w mongodb i użyć elasticsearch do dodania funkcji wyszukiwania, ale wiem też, że sam elasticsearch może być używany jako baza danych do przechowywania danych, ale nie jestem pewien, czy to jest właściwe. Czy możecie mi pomóc?


title: Czy powinienem zaimplementować funkcję czy metodę?

text: Od czasu do czasu napotykam funkcję C w kodzie moich kolegów. Przeważnie jest to w pewnych przydatnych kategoriach obiektywnych, a te funkcje są najczęściej wewnętrznym obliczeniem czegoś lub porównaniem wartości. Ponieważ ci faceci nie są już częścią firmy, nie mogę ich zapytać, dlaczego zdecydowali się na funkcję C zamiast właściwej metody celu C. Pytanie więc brzmi: po co implementować pewne algorytmy jako funkcję C, a nie metodę celu C? Jakie są rozważania?


title: Dla kogo tak naprawdę jest CMS?

text: Ostatnio zacząłem odkrywać „Systemy zarządzania treścią” i zastanawiałem się, dla kogo tak naprawdę jest **CMS**? Co mam przez to na myśli: czy tylko dla „firm”, „małych firm” czy „osób fizycznych”, płaci kontrahentowi za stworzenie strony internetowej, aby jej użytkownicy mogli po prostu przesyłać treści za pomocą prostego interfejsu. A może wykorzystują go również programiści do budowania własnych stron internetowych, projektów? Czy _Facebook_ , _Tweeter_ , `StackExhange` kiedykolwiek zacząłby działać przy użyciu **CMS** , na przykład bardzo wydajnego? Czy jako programista zbudowałbyś własną "wymyślną" stronę internetową na bazie **CMS**, na przykład Typo3, czy też zbudowałbyś ją od podstaw? PS Aby było bardziej jasne jest podsumowanie: _`Na początek mam na myśli to, czy jako programista wybrałbym CMS do stworzenia strony internetowej, która może być skalowana z dużą bazą użytkowników, utknąłbym, jeśli zdecyduję się zacząć od system CMS. Co jeśli zbuduję stronę internetową za pomocą CMS, a strona eksploduje popularnością, a potem będę chciał dodać znacznie więcej funkcjonalności, które zaplanowałem, czy jest możliwe, że CMS ograniczy rozwój, ponieważ mógł nie zostać zbudowany do tego rodzaj skali?`_


title: Czy programista powinien być także testerem?

text: Jesteśmy zespołem scrumowym składającym się z 3 programistów, 1 projektanta, mistrza scrum i właściciela produktu. W naszym zespole nie mamy jednak oficjalnego testera. Problem, który zawsze nam towarzyszy, polega na tym, że testowanie aplikacji i przechodzenie tych testów oraz usuwanie błędów zostało zdefiniowane jako jedno z kryteriów uznania PBI (elementu Backlogu produktu) za wykonane. Ale problem polega na tym, że bez względu na to, jak bardzo (3 programistów i 1 projektant) próbujemy testować aplikację i zaimplementowane przypadki użycia, wciąż nie widać błędów, które psują naszą prezentację (prawo Murphy'ego) dla interesariuszy. Jako środek zaradczy zarekomendowaliśmy firmie zatrudnienie nowego testera. Ktoś, kto miałby zajmować się testowaniem i tylko testowaniem. Oficjalny profesjonalny tester. Problem polega jednak na tym, że scrum master i interesariusze uważają, że programista (lub projektant) również powinien być testerem. Czy mają rację? Czy my programiści (także projektanci) też powinniśmy być testerami?