title: Jak skutecznie chronić część aplikacji licencją?

text: Pracuję nad aplikacją, która ma wiele funkcjonalnych części. Kupując aplikację klient kupuje standardową funkcjonalność, ale może też dokupić dodatkowe elementy aplikacji za dodatkową opłatą. Wszystkie elementy są częścią tego samego pliku wykonywalnego aplikacji. Klucz licencyjny służy do wskazania, który z elementów powinien być dostępny w aplikacji. Niektóre elementy można łatwo wyłączyć, jeśli użytkownik nie zapłacił za to. Są to zazwyczaj moduły, do których można uzyskać dostęp za pośrednictwem menu aplikacji. Jednak niektóre elementy stwarzają więcej problemów: * Co jeśli część modelu danych jest powiązana z częścią opcjonalną? Czy mam budować te struktury danych w mojej aplikacji, aby reszta mojej aplikacji mogła po prostu założyć, że zawsze tam są? A może nie buduję ich i dodaję czeki w pozostałej części majowej aplikacji? * Co zrobić, jeśli jakaś opcjonalna część jest nadal przydatna do wykonywania niektórych zadań wewnętrznych, ale nie chcę ujawniać jej użytkownikowi z zewnątrz? * Co jeśli odpowiedzialny za marketing chce, aby część standardowa stała się częścią opcjonalną? We wszystkich moich aplikacjach zakładam, że ta część jest obecna, ale jeśli stanie się ona opcjonalna, powinienem dodać sprawdzenie jej wszędzie w aplikacji. Mam kilka pomysłów, jak rozwiązać niektóre problemy (np. interfejsy z podwójnymi implementacjami: jedna działająca implementacja i ta, która jest aktywowana, jeśli opcjonalna część nie jest aktywowana). Czy znasz jakieś wzorce, które można wykorzystać do rozwiązania tego rodzaju problemu? A może masz jakieś sugestie, jak poradzić sobie z tym problemem licencyjnym? Dziękuję.


title: Zagnieżdżanie JavaScript i wywołań zwrotnych

text: Wiele bibliotek JavaScript (zwłaszcza jQuery) używa łańcuchów, co pozwala to zredukować: var foo = $(".foo"); foo.stop(); foo.pokaż(); foo.animate({ góra: 0 }); do tego: $(".foo").stop().show().animate({ top: 0 }); Myślę, że przy odpowiednim formatowaniu jest to całkiem niezła zdolność syntaktyczna. Często jednak widzę wzór, który mi się szczególnie nie podoba, ale wydaje się być złem koniecznym w modelach nieblokujących. To jest wszechobecne zagnieżdżenie funkcji zwrotnych: $(".foo").animate({ top: 0, }, { callback: function () { $.ajax({ url: 'ajax.php', }, { wywołanie zwrotne: function () { ... } }); } }); I nigdy się nie kończy. Mimo że uwielbiam łatwość, jaką zapewniają modele nieblokujące, nienawidzę dziwnego zagnieżdżania literałów funkcji, które wymusza to programiście. Interesuje mnie napisanie małej biblioteki JS jako ćwiczenia i chciałbym znaleźć lepszy sposób na zrobienie tego, ale nie wiem, jak można to zrobić bez poczucia hańby. Czy są jakieś projekty, które wcześniej rozwiązały ten problem? A jeśli nie, jakie są alternatywy dla tej brzydkiej, bezsensownej struktury kodu?


title: Jakiego znacznika czasu użyć podczas pobierania plików z systemu VCS?

text: Wczoraj kolega zapytał mnie, jak skonfigurować nasz VCS tak, aby lokalna kopia plików wyciągniętych z repozytorium była stemplowana czasem modyfikacji w repozytorium. Zawsze uważałem, że powinny być opatrzone znacznikiem czasu z czasem, w którym zostały ściągnięte, aby jeśli dokonasz zmiany, zbudujesz, a następnie wycofasz się, nadpisując zmieniony plik kopią repozytorium, wszystko, co zależy od tego pliku, zbuduje się poprawnie. Myślałem o tym z dnia na dzień, ale nie mogłem wymyślić dobrego powodu, aby umieścić znacznik czasu z czasem modyfikacji repozytorium. Jakie byłyby korzyści z robienia tego w ten sposób? (Pytanie dodatkowe: czas modyfikacji repozytorium i czas modyfikacji lokalnej to jedyne znane mi strategie znakowania czasem. Czy systemy VCS używają innych?)


title: Narzędzia, które powinien znać każdy absolwent?

text: Niedawno rozpocząłem przygodę ze studiami magisterskimi i niedawno zapoznałem się z LaTeXem. Równolegle się tego uczę i zastanawiam się, jakie inne |narzędzia językowe są absolutnie niezbędne dla studentów studiów magisterskich|doktoranckich? Chcę kontynuować studia doktoranckie w dalszej karierze.


title: Jaki jest politycznie poprawny sposób refaktoryzacji cudzego kodu?

text: Obecnie pracuję w rozproszonym geograficznie zespole w dużej firmie. Wszyscy są skupieni na dzisiejszych zadaniach i wykonywaniu zadań, ale to oznacza, że czasami trzeba coś zrobić szybko, a to powoduje problemy... no wiesz, ten sam stary, ten sam stary. Wpadam na kod z kilkoma zapachami, takimi jak: duże funkcje bezsensowne funkcje/metody użytkowe (zasadniczo tylko po to, aby zaoszczędzić na pisaniu słowa), zbyt skomplikowane algorytmy, wyjątkowo duże pliki, które powinny być podzielone na różne pliki/klasy (ponad 1500 linii) , itd. Jaki byłby najlepszy sposób na ulepszenie kodu bez powodowania przez innych programistów złego/niewłaściwego poczucia jakichkolwiek proponowanych ulepszeń?


title: Czy stół może być zarówno faktem, jak i wymiarem?

text: Ok, jestem nowicjuszem i tak naprawdę nie myślę jeszcze "wymiarowo", mam większość mojego początkowego schematu, ale ciągle przewracam się na jednym stole. Mam tabelę kontraktów i zawiera ona kolumnę ilości (w tonach) i kolumnę ceny netto, którą należy zsumować na kilka różnych sposobów, a kontrakt ma wiele kluczy obcych (producent, towar, miesiąc futures itp. ) i daty, aby wyglądała na tabelę faktów. Również umowa nigdy nie jest aktualizowana, jeśli to robi różnicę. Tworzymy jednak bilety gotówkowe, których używamy do wypłaty części lub całości kontraktu i mają na sobie identyfikator kontraktu, więc kontrakt wygląda jak wymiar w schemacie gwiazdy biletu gotówkowego. Czy to problem? Wszelkie pomysły dotyczące procesu rozwiązania tego problemu, ponieważ wydaje się, że ludziom nie podoba się pomysł połączenia dwóch tabel faktów. Czy powinienem umieścić identyfikator producenta i identyfikator towaru na kwicie kasowym? Wydawałoby się naprawdę dziwne, gdyby nie było na nim identyfikatora kontraktu.


title: Czy powinienem oczekiwać, że mój zespół będzie miał więcej niż podstawową biegłość w zakresie naszego systemu kontroli źródeł?

text: Moja firma przeszła z Subversion na Git jakieś trzy miesiące temu. Przed zmianą mieliśmy zawiadomienie z tygodniowym wyprzedzeniem. Ponieważ nigdy wcześniej nie korzystałem z Gita (ani żadnego innego DVCS), przeczytałem Pro Git i spędziłem trochę czasu na rozkręcaniu własnych repozytoriów i zabawie, tak aby po przejściu mogłem kontynuować pracę z minimalnym bólem. Teraz domyślnie jestem 'Git guy'. Poza kilkoma wyjątkami większość mojego zespołu nadal nie ma pojęcia, jak działa Git. Na przykład nadal myślą o gałęziach jako o kompletnych kopiach kodu źródłowego, a nawet posuwają się do klonowania repozytorium do wielu folderów (po jednym na gałąź). Zazwyczaj postrzegają Gita jako przerażającą czarną skrzynkę. Biorąc pod uwagę fundamentalny charakter kontroli źródeł w naszej codziennej pracy (nie wspominając o absurdalnej ilości mocy, jaką daje nam Git), jestem zdania, że każdy programista, który nie osiągnie określonego poziomu biegłości w tym zakresie, jest ** obciążenie**. Czy powinienem oczekiwać, że mój zespół będzie miał przynajmniej pewną wiedzę o tym, jak Git działa wewnętrznie i jak go używać poza najbardziej podstawowymi operacjami ściągania/scalania/wypychania? Czy po prostu robię coś z niczego?


title: Alternatywy dla baz danych typu sql

text: W dzisiejszych czasach komputery mają zwykle 2 GB lub 4 GB pamięci. Lubię używać pewnego modelu bezpiecznego klienta-serwera i prawdopodobnie jest to baza danych sql. Z drugiej strony mam tylko około 8000 rekordów, które nie będą często czytane lub zapisywane, w sumie zużyją mniej niż 16 megabajtów. I to sprawiło, że zacząłem się zastanawiać, jakie byłyby dobre bezpieczne opcje w środowisku Windows do przechowywania danych, pracuj z nim w modelu z wieloma klientami i jednym serwerem, bez użycia SQL lub mysql? Czy dla tak małej ilości danych może być lepszych inne pomysły? Ponieważ lubię utrzymać jak najprostszą konserwację (żaden administrator nie musiałby znać konserwacji sql, ponieważ nie znają baz danych w moim docelowym środowisku). Może przechowywanie w plikach xml lub... coś innego. Jak poszliby inni, gdyby głównym celem była łatwość administracji? Aha i powinno być bezpieczne, dane serwera klienta muszą być nieco bezpieczne (może pliki NTLM współdzielą https lub ... itp.) Może powinienem powiedzieć coś o użyciu, to byłoby tak, jakby klient poprosił o pojedynczy rekord i pobiera odpowiedź zwracana jest w postaci jednego bajta, klienci nie będą uruchamiać złożonych pytań, tylko strona serwera obsługi może wymagać edycji rekordów, klienci będą tylko pytać, a nie zmieniać rekordów. A klienci nie będą wykonywać zaawansowanych zapytań.


title: Czy następujące Poziomy Przypadków Użycia zostały poprawnie określone?

text: Jestem zdezorientowany co do poziomów przypadków użycia. Wszystko, co mogłem zrozumieć, to to, że przypadki użycia zawarte w innym przypadku użycia należą do poziomu, który jest poniżej poziomu przypadku użycia kontenera. Zidentyfikowałem następujące przypadki użycia dla sklepu e-commerce i chciałbym wiedzieć, czy ich poziomy są poprawnie określone, czy nie. Proszę podać opis różnic między poziomami, jeśli zrobiłem tutaj coś złego. ![Zidentyfikowane poziomy przypadków użycia](http://i.stack.imgur.com/QijX0.png)


title: Czy mysql_* jest przestarzały po wprowadzeniu PDO?

text: Od dawna zauważyłem na Stack Overflow, że większość użytkowników zaleca używanie PDO zamiast `mysql_*`, ponieważ PDO jest bezpieczniejsze niż `mysql_*`. Ale moje pytanie brzmi, czy strony, które już działają z `mysql_*` przestaną działać? Albo co dokładnie oznacza tutaj „deprecjonowanie”? Czy nie powinniśmy więc nigdy używać `mysql_*`? Z której wersji PHP jest przestarzała?


title: Wyjaśnij kontroler widoku modelu

text: Moje doświadczenie z tworzeniem dynamicznych stron internetowych ogranicza się głównie do serwletów Java. Używałem Tomcata do tworzenia różnych serwletów Java i nie zawaham się powiedzieć, że jestem dość biegły w tej technologii, jak również w HTML/CSS/Javascript po stronie klienta. Kiedy myślę o „dynamicznej witrynie”, myślę: użytkownik żąda adresu URL z ciągiem zapytania, serwer otrzymuje zapytanie, a następnie dynamicznie generuje kod HTML, aby odpowiedzieć na zapytanie. Często wiąże się to z komunikacją z bazą danych w celu pobrania żądanych danych do wyświetlenia. Jest to w zasadzie idea stojąca za metodą `doGet` w Java `HttpServlet`. Ale w dzisiejszych czasach coraz częściej słyszę o nowszych frameworkach, takich jak Django i Ruby on Rails, z których wszystkie wykorzystują architekturę "Model View Controller". Czytałem różne artykuły, które wyjaśniają MVC, ale naprawdę mam problem ze zrozumieniem korzyści. Rozumiem, że ogólną ideą jest oddzielenie logiki biznesowej od logiki interfejsu użytkownika, ale nie widzę, jak to naprawdę różni się od normalnego programowania internetowego. Programowanie WWW, ze swej natury, zmusza do oddzielenia logiki biznesowej (programowanie po stronie serwera zaplecza) od programowania interfejsu użytkownika (HTML po stronie klienta lub JavaScript), ponieważ te dwie dziedziny istnieją w całkowicie różnych sferach programowania. **Pytanie:** Co oferuje MVC w porównaniu z serwletem Java, a co ważniejsze, czym dokładnie _jest_ MVC i czym różni się od tego, co zwykle robisz, aby stworzyć dynamiczną witrynę internetową przy użyciu bardziej tradycyjnego podejścia, takiego jak Java serwlet (lub nawet coś starszego, jak CGI)? Jeśli to możliwe, wyjaśniając MVC, podaj _przykład_, który ilustruje, w jaki sposób MVC jest stosowany w procesie tworzenia stron internetowych i jak jest to korzystne.


title: Projekt bazy danych z „szkicową” wersją danych

text: Baza danych, którą obecnie buduję, jest dość tradycyjną relacyjną bazą danych, ale istnieje jedno wymaganie, które nie jest dla mnie jasne, jak właściwie modelować. Istnieje wiele reguł biznesowych, które są tłumaczone na sprawdzanie spójności bazy danych (np. data A musi znajdować się między datą B a C lub to pole nie może być puste, gdy inne pole ma określoną wartość). Mój problem pojawia się, ponieważ użytkownik musi być w stanie pracować na „szkicowej” wersji danych, mając możliwość zapisania swoich zmian, nawet jeśli kontrola spójności się nie powiedzie. Ostatecznie użytkownik może zatwierdzić swoją wersję roboczą, ale dopiero po przejściu wszystkich kontroli spójności. Głównym powodem, dla którego klient chce korzystać z tej funkcji, jest to, aby mógł bezpośrednio odpytywać bazę danych o raporty i mieć pewność, że używa najnowszej wersji danych, która jest „spójna”, ale nie ogranicza użytkownikowi możliwości wprowadzania częściowych danych. Bawiłem się przechowywaniem zestawu zmian danych w JSON w magazynie dokumentów, a następnie stosowaniem zestawu zmian w kodzie, gdy użytkownik ma do czynienia z danymi roboczymi, ale to utrudnia zarządzanie takimi rzeczami, jak relacje i tworzenie /usunięcie rekordów. Czy istnieje wspólny sposób na osiągnięcie tego celu? A może ktoś ma jakieś sugestie, jak mogę inaczej podejść do tego problemu?


title: Wydałem oprogramowanie — jak zmaksymalizować ekspozycję, biorąc pod uwagę brak budżetu i ograniczony czas?

text: W tej sprawie chciałbym skontaktować się ze społecznością. Jako programista nie jestem ekspertem od sprzedaży ani guru marketingu - myślę w kodzie i niewiele więcej. Większość programistów, z którymi się spotykam, jest właśnie takich, a także są poważnymi szczypcami. Powiedzmy, że jako programista niedawno wypuściłem nowe oprogramowanie, które z pewnością będzie hitem, JEŚLI ludzie tylko o nim wiedzieli. Przyjmij budżet w wysokości 0,00 USD i ograniczony czas każdego dnia (tj. 30 do 60 minut). Co mogę zrobić w ramach tych ograniczeń, aby zmaksymalizować ekspozycję? Jeśli to możliwe, poproś o kopię zapasową co najmniej dwóch przykładów działania.


title: Jak być dobrym obywatelem podczas przeszukiwania witryn internetowych?

text: Będę rozwijać funkcjonalność, która będzie przeszukiwać różne publiczne witryny internetowe i przetwarzać/agregować na nich dane. Nie ma nic złowrogiego, jak szukanie adresów e-mail - w rzeczywistości jest to coś, co może faktycznie zwiększyć ruch na ich stronach. Ale robię dygresję. Poza honorowaniem pliku „robots.txt”, czy istnieją jakieś zasady lub wytyczne, napisane lub niepisane, których powinienem przestrzegać, aby (a) uniknąć wyglądania na złośliwego i potencjalnego zbanowania oraz (b) nie powodować żadnych problemów dla właściciele witryn/webmasterzy? Kilka przykładów, które mogę wymyślić, które mogą, ale nie muszą mieć znaczenia: * Liczba równoległych żądań * Czas między żądaniami * Czas między całym indeksowaniem * Unikanie potencjalnie destrukcyjnych linków (nie chcę być Pająkiem Zagłady - ale kto wie, czy to jest nawet praktyczne). czy istnieje jakaś wypróbowana i sprawdzona mądrość, która ma szerokie zastosowanie dla każdego, kto zamierza napisać lub wykorzystać pająka?


title: Czy moje nazwy metod lub zmiennych są za długie?

text: Więc aktualnie byłem w trakcie kodowania, niestety dla mnie, byłem w "Strefie" i pomyślałem sobie, czy moje nazwy metod/zmiennych są za długie? **POP** poza strefą, do której chodzę! Więc przyszedłem tutaj zapytać, czy moje nazwy metod/zmiennych są za długie? Ty będziesz sędzią! Dodatkowe punkty dla każdego, kto może zrozumieć, co piszę, chociaż jestem pewien, że guru szybko to zrozumie! W każdym razie, oto niektóre z moich nazw metod i zmiennych. Metody : searchBlockedListForBlockedSquares(), isCurrentSquareNextToAtLeastOneBlockedSquare(), searchBlockedListForBlockedSquares() Zmienne: isNextToBlockedSquares; Wydaje mi się, że była tylko jedna zmienna, która wydawała się za długa.


title: Jaka jest różnica między zmiennoprzecinkową liczbą dziesiętną a stałą liczbą dziesiętną?

text: Proszę wyjaśnić w kategoriach laika.


title: Czy długa lista sprawdzeń parametrów jest antywzorcem?

text: Tło: Pracuję nad aplikacją, która będzie zarządzać generatorami kopii zapasowych. Te generatory muszą mieć możliwość „powiązania” ze sobą. Na przykład Generator B może służyć jako kopia zapasowa dla Generatora A. Jeśli A ulegnie awarii, oprogramowanie włączy B. Mogą też być połączone w konfiguracji współdzielenia obciążenia, w której Generatory A i B pracują razem i dzielą obciążenie. Tworzę funkcję, która utworzy link, biorąc pod uwagę 2 generatory i żądany typ linku. public void LinkGenerators(Generator A, Generator B, Typ linkType); Pisząc moje testy, mam dużą liczbę nieprawidłowych konfiguracji parametrów. Moja funkcja `LinkGenerators` wygląda tak: public void LinkGenerators(Generator A, Generator B, Type linkType) { if (linkType.BaseType != typeof(Link)) { throw new ArgumentException("linkType nie jest prawidłowym typem łącza") ; } if (linkAlreadyExistsFor(A, B)) { throw new InvalidOperationException("Link dla A i B już istnieje"); } if (A.Equals(B) || B.Equals(A)) { throw new InvalidOperationException("A i B nie mogą być tym samym generatorem"); } if (A == null || B == null || linkType == null) { throw new ArgumentException("Nie można przekazać argumentu o wartości null"); } ..... //Właściwie utwórz link po upewnieniu się, że wszystkie argumenty są prawidłowe. } Większość funkcji LinkGenerator polega na sprawdzeniu, czy parametry są dobre. Samo utworzenie linku zajmuje 2 linijki kodu. Jest trochę logiki biznesowej (sprawdzanie, czy link już nie istnieje i czy generatory nie są takie same) zmieszane z bitową logiką funkcjonalną (upewniając się, że linkType pochodzi od `Link`, argumenty nie są puste.. .) i sprawia, że .......niekomfortowo. Czy długa lista sprawdzanych parametrów to antywzór lub zapach kodu? A jeśli tak, co można z tym zrobić? (Aby wyjaśnić to bliskim głosującym, prawdopodobnie źle zrozumieją pytanie: nie jest to pytanie o „styl kodowania dla warunków” takich jak ten).


title: Standaryzacja i oficjalne wytyczne dotyczące nazewnictwa parametrów szablonów C++

text: Jakie są jawne i oficjalne wytyczne lub standardy dotyczące nazewnictwa parametrów szablonów w C++? Zrobiłem coś takiego w przeszłości: template<typename TContainer, typename TKey> void AddKeyToMap(TContainer& the_map, TKey const& the_key); Widziałem też nazwy takie jak `container_t` i `key_t`. Zgodziłbym się również z radą przeciwko standaryzacji, jeśli ma to sens.


title: Podświetlanie składni Pythona w Codeplex

text: Moje pliki .py w repozytorium Codeplex (opartym na hg) nie wyświetlają się z ładnym podświetlaniem składni, tak jak w przypadku C i C++, kiedy przeglądam kod w Internecie. Czy istnieje sposób na zmianę ustawień podświetlania składni w Codeplexie?


title: Jak mogę zniechęcić do korzystania z programu Access?

text: Załóżmy, że bardzo duża firma (liczba przychodów powyżej 8 cyfr) chce odświeżyć system oprogramowania, w szczególności pulpit nawigacyjny używany przez pracowników. System ten został pierwotnie opracowany na początku lat 90-tych w celu obsługi śledzenia i przechowywania zapasów w różnych obiektach (10+). Ponieważ ta duża firma jest obecnie w trakcie wdrażania niektórych z tych procesów inwentaryzacyjnych za pomocą SAP, potrzebuje ona gruntownego odświeżenia. Istniejący system: * Projekt Microsoft Access wykonuje zadania na desce rozdzielczej * Unikalne konfiguracje wysyłki/odbioru w różnych obiektach wymagają unikalnych formularzy i zapytań w ramach projektu Access * Wykorzystuje biblioteki innych firm, do których odwołuje się Access, aby bezpośrednio łączyć się z systemem sterowania (czytaj: silniki, przenośniki i liczniki) * Poszczególne instancje programu SQL Server 2000 (niektóre ślady dokumentów przed aktualizacją programu SQL Server 6.0) w każdym zakładzie Problem: * Ten system został uruchomiony jako system śledzenia inwentaryzacji domowej produkcji z jednym wewnętrznym sponsorem, który nadal odpowiada za kierunek techniczny. Pierwotny sponsor zlecający pożądane rezultaty, które są wymagane w aktualnym zapytaniu ofertowym. * RFP opisuje system oparty na jednym projekcie Access. * Wszelkie sugestie, że program Access nie nadaje się do projektu o takim zakresie, są odrzucane z uzasadnieniem, że „teraz działa w tym zakresie”. Czy istnieją jakieś studia przypadków, zawiadomienia lub stwierdzenia, które można wykorzystać, aby odwieść potencjalnego klienta od powtórzenia błędu? Czy firma Microsoft składa bezpośrednio jakiekolwiek oświadczenia dotyczące _bardzo_ zalecanego porzucenia programu Access? **EDYTUJ:** Aby odpowiedzieć na niektóre z poniższych komentarzy, system zostaje przepisany bez względu na wszystko ze względu na potrzebę integracji jeszcze większego nacisku na wdrożenie rozwiązania ERP. Problemy z obecnym rozwiązaniem obejmują dodatkowe utrzymanie połączeń ODBC, wdrożenia Office, rozmieszczenie pliku Access na setkach stacji roboczych i około 15 lat kogoś, kto nie umie programować, generując ogromne kwoty długu technicznego.


title: jak przenieść aplikację Silverlight do HTML5?

text: Od jakiegoś czasu pracuję z aplikacją Silverlight 5. Podobała mi się ta technologia i byłem urzeczony do tego stopnia, aby uzyskać certyfikat w rozwoju Silverligt. Jednak Html5 nabrał rozpędu w tym momencie, nowej fali myślenia o nowych aplikacjach. Teraz zastanawiam się, czy rozwijać się w Sl czy html5. Przeczytałem tysiące postów na ten temat i nie mogę się dowiedzieć, czy jest jakiś sposób na migrację aplikacji do HTML5 SL, wiesz, czy jest jakieś narzędzie, które pomoże w tym procesie?


title: Rozdzielenie projektów/DLL problemów w ASP.NET MVC

text: Pochodzę z n-warstwowego tła formularzy internetowych do projektów ASP.NET MVC i zastanawiam się, jakie są najlepsze praktyki w zakresie rozdzielania składników MVC na różne biblioteki (lub nie) w sposób, w jaki można to zrobić model n-warstwowy. Większość przykładowych aplikacji, które widziałem, miała tylko jeden plik projektu, a obiekty były oddzielone tylko folderami. Dziękuję


title: Ujawnienie zainteresowania innymi firmami w rozmowie kwalifikacyjnej

text: Kończę szkołę pod koniec tego roku i ostatnio byłam na kilku rozmowach kwalifikacyjnych. Prawie we wszystkich pytano mnie: „do jakich innych firm aplikowałeś?”. Dlaczego jest to dla nich ważne? Jak najlepiej odpowiedzieć na to pytanie? FYI, zostałem złapany przez to q, a moje odpowiedzi zawierały jakieś kłamstwa.


title: Plik płaski w teście jednostkowym

text: Czy używanie płaskiego pliku podczas testów jednostkowych jest uważane za złą praktykę? Jeśli aplikacja odczytuje pliki płaskie i analizuje je, czy byłoby to lepsze podejście niż twarde kodowanie łańcuchów w samych testach jednostkowych?


title: Sprawdzanie integralności domeny w aplikacji

text: Czy lepiej jest sprawdzić dozwolone wartości domeny na froncie, czy pozwolić aparatowi bazy danych na obsługę integralności domeny. Na przykład, jeśli masz formularz wprowadzania danych dla pracownika, lepiej sprawdzić dozwolone wartości w formularzu wprowadzania danych przed przesłaniem danych do bazy danych, zakładając, że IO sieci nie jest dużym problemem. A co, jeśli jest wiele sprawdzeń do wykonania, czy silnik byłby szybszy, czy też sprawdzenie wartości na przednim końcu przejęłoby obciążenie silnika dB?


title: Czy buforowanie obiektów jest przestarzałą techniką?

text: Bardzo dobrze znam pojęcie puli obiektów i zawsze staram się z niej jak najwięcej korzystać. Dodatkowo zawsze uważałem, że łączenie obiektów jest standardową normą, ponieważ zauważyłem, że sama Java oraz inne frameworki wykorzystują łączenie w jak największym stopniu. Ostatnio jednak przeczytałem coś, co było dla mnie zupełnie nowe (i sprzeczne z intuicją?). To tworzenie puli faktycznie pogarsza wydajność programu, zwłaszcza w aplikacjach współbieżnych, i zaleca się zamiast tego tworzenie instancji „nowych” obiektów, ponieważ w nowszych maszynach JVM tworzenie instancji obiektu jest naprawdę szybkie. Przeczytałem to w książce: „Java Concurrency in Practice” Teraz zaczynam się zastanawiać, czy czegoś tu nie rozumiem, ponieważ pierwsza część książki zalecała użycie „Executorów”, które ponownie wykorzystują „Thread” zamiast tworzyć nowe instancje. Czy łączenie obiektów stało się obecnie przestarzałe?


title: Wzorzec adaptera w celu uwidocznienia różnych aspektów obiektu — czy jest to prawidłowe użycie?

text: Dość często używam projektu podobnego do adaptera, aby eksponować różne aspekty obiektów danych. Na przykład w aplikacji do modelowania 3D używam hierarchii obiektów do reprezentowania modeli 3d w scenie. Ta hierarchia zawiera wiele informacji wewnętrznych i jest dość skomplikowana do przeglądania. Do eksportowania danych modelu 3D do różnych formatów plików (co wiąże się z dość znaczną transformacją i pomijaniem lub konwertowaniem niektórych obiektów) mam osobną klasę o nazwie ModelAdapter. Wyodrębnia ważne informacje z modelu 3D i udostępnia je w innym formacie, który można wykorzystać do eksportu. Wtyczki eksportujące z kolei odczytują dane z ModelAdapters i nie mają nic wspólnego z wewnętrzną strukturą danych sceny. Na przykład: class 3DModelAdapter { private 3DModel internal_model; public List GetTriangles() { model_wewnętrzny.Do_Some_Complex_Thing_To_Retrieve_The_Triangles(); } ... } ` Czy jest to prawidłowe użycie wzorca adaptera? Czy istnieje lepszy sposób na osiągnięcie tego samego?


title: CakePHP - Element Overkill

text: Realizując portal z grami flashowymi postanowiłem "skomponować" swoje poglądy. Powtarzające się elementy były oczywiste, a szablony dla nich zostały umieszczone w elementach. Przekazuję dane z kontrolera do elementu za pomocą widoku za pomocą helpera Html. To wszystko działa dobrze i poza bardzo drobnym podzbiorem elementów, nie miałem zbyt wielu problemów ze skomplikowaną logiką w widoku w celu masowania parametrów - innymi słowy wszystkie zostały całkowicie przerzucone i dlatego bardzo przezroczyste dla żywiołów. W tym tkwi mój problem. Zdaję sobie sprawę, że mam ponad 20 elementów, co znacznie przyćmiewa moje marne 8-10 widoków i 3 kontrolery. Miałem też ochotę zamienić prawie wszystko w „komponent” i przekształcić go w element. Na przykład mam kontrolkę oceny, która jest używana tylko na jednej stronie — stronie z grą — i ostatnio rozważałem przekształcenie jej w element. Zastanawiam się, czy w tym momencie przesadziłem. Podsumowując, moje pytanie sprowadza się do tego, jakie są najlepsze praktyki podczas korzystania z helpera CakePHP Html i co sprawia, że kawałek html jest kandydatem na element (poza oczywistością polegającą na napisaniu go tylko raz). Przeczytałem instrukcję cakePHP i zawiera ona „szorstkie” wytyczne, ale szukam jakiegoś „poziomu pola” lub doświadczenia w świecie rzeczywistym, aby gildować moje decyzje. TIA


title: Jak zachęcić do przyjęcia kontroli wersji

text: Niedawno zacząłem pracować w zespole, w którym nie ma kontroli wersji. Większość członków zespołu nie jest przyzwyczajona do jakiejkolwiek kontroli wersji. Używam mercurial prywatnie do śledzenia mojej pracy. Chciałbym zachęcić innych do jego przyjęcia, a przynajmniej zacząć wersjonować swój kod w miarę opracowywania zmian. Czy ktoś może mi udzielić porady, w jaki sposób mogę zachęcić do przyjęcia rozproszonej kontroli wersji, takiej jak mercurial. Wszelkie porady, jak pozyskać ludzi, w tym menedżerów, do DVCS byłyby mile widziane.


title: Czy warto czytać stare książki o programowaniu w Javie?

text: Wiele moich książek o Javie ma 5-10 lat. Czy czytanie ich nadal pomaga, czy powinienem użyć czegoś w ciągu 2 lat.


title: Jakie jest lepsze słowo na wyrównywanie zagnieżdżenia?

text:
Nauczył mnie stary programista, który nazwał ten zagnieżdżony kod if(condition){
 text text

 a	 b

 } else { log(); } w przeciwieństwie do tego kodu, który został uznany za niezagnieżdżony if(condition){
 text text

a	b

 } else {log();} Kiedy zacząłem czytać samouczki, wcześnie odkryłem, że mam złą definicję do zagnieżdżenia. Brudny vs czysty nie jest do tego wystarczający, ponieważ niechlujny kod obejmuje inne problemy, o których nie mówię, na przykład zagmatwany przepływ logiki, niewłaściwe użycie statycznych inicjatorów, złe użycie nazw zmiennych, użycie podwójnego kodu do wykonania zadania w bardziej zagmatwany sposób itp. Jakie jest właściwe słowo na to, gdy pierwszy przykład to ..., a drugi przykład to nie ...?


title: Jakie funkcje powinien zawierać następny język systemów?

text: Wygląda na to, że nadal uciekamy się do C lub C++, gdy zamierzamy programować „poważne” systemy. Mamy kilka małych języków, które próbują wymyślać nowe rzeczy w programowaniu systemów, takich jak Go i D (mam małe doświadczenie z D i jak dotąd bardzo go lubię), ale nie są one zbyt szeroko stosowane (Go jest z 2009 roku, więc nie powinno to dziwić, ale D jest z 2001 roku). Istnieją pozajęzykowe powody, dla których nie są one tak popularne, na przykład nie ma wielu zadań, frameworków itp., ale wykluczaj takie rzeczy i zamiast tego skupiaj się na tym, jakie funkcje powinien zawierać język programowania systemów nowej generacji? Czego Ci, jako programistom systemów, brakuje w „tradycyjnych językach programowania systemów” (czyli C, C++ itp.)? Dlaczego te rzeczy mają teraz znaczenie w dzisiejszym świecie (przypuszczam, że współbieżność itp. miałaby znaczenie)?


title: Która strefa czasowa jest używana dla permalinków postów

text: Chciałem dodać obsługę stref czasowych do mojej aplikacji blogowej, ale utknąłem z problemem projektowym. Każdy post ma pole publication_on, które przechowuje datę publikacji w formacie uwzględniającym strefę czasową (UTC przekonwertowany na strefę czasową użytkownika). Na razie w porządku. Ale link bezpośredni do postu jest również tworzony od daty publikacji. Ma format: /rok/miesiąc/dzień/ślimaczek. To oczywiście **nie** uwzględnia strefy czasowej i musi być takie samo dla wszystkich użytkowników na całym świecie. Więc muszę zdefiniować strefę czasową do użycia dla **permalink**. Istnieją trzy opcje, które mają sens: * Strefa czasowa autora * UTC * Domyślna strefa czasowa serwera. Który byłby najbardziej odpowiedni?


title: W jaki sposób warstwa interfejsu użytkownika powinna przekazywać dane wejściowe użytkownika do warstwy BL?

text: Buduję aplikację n-warstwową, mam projekty UI, BL, DAL & Entities (zbudowane z POCO). (Wszystkie projekty mają odniesienie do Podmiotów). Moje pytanie brzmi - jak powinienem przekazać dane wejściowe użytkownika z interfejsu użytkownika do BL, ponieważ kilka ciągów przekazywanych do metody BL, a BL zbuduje obiekt z parametrów, czy też powinienem zbudować obiekty wewnątrz interfejsu użytkownika submit_function i wysłać obiekty jako parametry? EDYCJA: Napisałem „aplikację n-warstwową”, ale tak naprawdę chodziło mi o warstwy.


title: Co sprawia, że Python jest bardziej używany jako język implementacji niż inne?

text: Perl i Python są często porównywane do siebie (nie zapominajmy o Ruby) i prawie zawsze te dyskusje kończą się praktycznie wszystkim, co można zrobić w jednym lub drugim. Nie wchodząc w to, zauważyłem, że Python jest jednak często używany jako język implementacji (uhmm, może termin tutaj jest niepoprawny technicznie - język, którego używasz, na przykład, aby umożliwić pewien stopień pisania skryptów w dużej aplikacji . .. Tecplot, Rhinoceros itp.; to są z dziedziny naukowej, są na pewno inne), a Perl nigdy (no cóż, przynajmniej według mojej wiedzy). Zastanawiałem się więc - co sprawia, że Python jest bardziej odpowiedni do czegoś takiego? Jakie szczegóły sprawiają, że język jest bardziej odpowiedni do wdrożenia jako część większej aplikacji. ogólnie do pisania skryptów? Czy tylko to, że 10 lat temu nie było tak powszechne (skrypty w aplikacjach), a Python jest w tej chwili akurat u szczytu, ... czy coś innego?


title: jako zespół: wiele projektów vs jeden projekt?

text: Zastanawiałem się przez chwilę. Wydaje mi się, że dostosowywałem się do okoliczności, ale desperacko potrzebuję jasno określonych przepływów pracy. Ok, powiedzmy, że pracuję z jeszcze jedną osobą i mam 2 projekty, oba równie duże, z LUŹNYMI terminami. Co powinienem zrobić: > a) odrzucić jeden, pracować wyłącznie nad drugim > > b) przyjąć oba i rozwijać je jednocześnie > > c) przypisać jedną osobę do każdego projektu, który wykonałem c w przeszłości, co działa dobrze. Jako menedżer też po prostu musiałem zarządzać tym projektem, podczas gdy pracuję nad innym. Nie ma sprawy. Ale jaka jest idealna opcja powyżej? Nie chciałbym zrobić, ponieważ odmawiam pracy, chociaż termin pozwoli na pracę nad obydwoma projektami. Jakieś wejście? Należy wziąć pod uwagę następujące rzeczy: > -) wszyscy członkowie mają taką samą wiedzę w zakresie projektowania i rozwoju i mogą > efektywnie funkcjonować jako freelancerzy > > -) strefy czasowe mogą nie być takie same, więc nie będą pracować w tym samym > czasie


title: Tworzenie stron internetowych: czy zawsze trzeba pisać, czy może pisać na żądanie?

text: Zdaję sobie sprawę, że ten pomysł może wydawać się bardzo obcy, ale zacząłem o tym myśleć trochę wstecz. Jeśli chodzi o strony internetowe, przynajmniej z mojego doświadczenia, jest o wiele więcej czasu spędzanego na przepisywania rzeczy do String niż na odwrót. Na przykład: Załóżmy, że masz model użytkownika: user int UserId I chciałem zalogować użytkownika w: View -> string do int -> kontroler -> int do dbInt -> baza danych -> dbint do int -> kontroler -> int to string -> View W żadnym momencie tej całej wymiany nie potrzebowałem int. Jedyne, czego potrzebowałem, dotyczyło bazy danych, ale tego się po prostu spodziewałem. Teraz, gdybym chciał pokazać listę użytkowników na podstawie identyfikatora grupy, dzieje się to samo, z wyjątkiem tego, że konwersja UserId odbywa się dla tego, ile jest ich na liście, a na końcu będzie po prostu reprezentowana jako ciąg w interfejsie użytkownika. Teraz rozumiem, że ciąg może mieć większą pamięć niż niektóre typy (na przykład bool), ale czy jest to bardziej kosztowne niż całe wpisywanie, które się dzieje? Czy bardziej produktywne byłoby pisanie tylko wtedy, gdy jest to potrzebne (Weryfikacja liczby, daty, itp.) i pozostawienie ich w większości jako ciągi?


title: Jak duże powinny być pakiety OSGi?

text: Lub bardziej kompletnie „Jakie kompromisy i pytania należy postawić, próbując zdecydować o strukturze pakietu aplikacji OSGi?” Nasze istniejące pakiety OSGi były dość obszerne: w zasadzie pakiet API i pakiet implementacyjny, ale z dużą funkcjonalnością. Ma to zalety pod względem złożoności projektu i budowy, ale może nie zapewnia nam wszystkich pożądanych możliwości ponownego wykorzystania i elastyczności. Tak więc w ostatnim projekcie celowo wykonaliśmy dość cienkie pakiety. Zrobiliśmy przegląd tej AM i zastanawialiśmy się, czy nie posunęliśmy się za daleko. W tej dość małej usłudze mieliśmy 7 pakietów, z których kilka miało tylko 1 klasę domeny. Postawione pytanie brzmiało: „To prawie tak, jakbyśmy dążyli do pakietu na pakiet. Ale _mamy_ klasy i pakiety już w tym języku, czy nie posuwamy się za daleko z szczegółowością naszych pakietów?” Mówiąc konkretnie, jest to usługa sieciowa, która wykonuje obliczenia na zagregowanych wynikach innych zapytań internetowych (w szczególności odpytujemy kilka astronomicznych baz danych o obiekty na danym obszarze, a następnie filtrujemy wyniki na podstawie własnych kryteriów i następnie szacujemy prawdopodobieństwo odpowiedniej obserwacji na podstawie przefiltrowanych wyników). Skończyło się na 7 pakietach, co wydaje się dużo jak na coś, co jest zasadniczo „serwletem, który wykonuje obliczenia”. Czy taka bardzo drobna ziarnistość jest dobra (duża elastyczność w czasie wykonywania) czy zła (zbyt skomplikowana)? Jak możemy rozwinąć naszą intuicję dotyczącą „właściwej” szczegółowości naszych pakietów OSGi?


title: Co to jest OpenCL?

text: Rozglądałem się, ale nadal nie jestem pewien, czym jest OpenCL. Inne niż wieloprocesorowe... Czy jest to inny graficzny interfejs API, taki jak OpenGL i DirectX? Lub coś, co działa obok OpenGL? Planuję wkrótce nauczyć się OpenGL (z java, jeśli to robi różnicę), więc chcę wiedzieć, jak / w którym kierunku się tego nauczyć. Poza tym słyszę rzeczy o CUDA, które jeszcze bardziej mnie dezorientują. Po prostu szukam prostych wyjaśnień. Dziękuję.


title: Czy interfejs C Pythona jest szybszy niż JNI?

text: Czytałem Co sprawia, że wywołania JNI są wolne? i zastanawiałem się, czy interfejs C Pythona jest lepszy niż JNI. Słyszałem, że jeśli chcesz przyspieszyć pewne części swoich programów w Pythonie lub jeśli jakaś część programu naprawdę szkodzi wydajności twojego programu, piszesz je w C i sprawiasz, że Python je wywołuje. Czy interfejs C ponosi takie same koszty, jak JNI? dlaczego lub dlaczego nie?


title: Co można / należy zrobić z wyrażeniami regularnymi?

text: Niedawno nauczyłem się wyrażeń regularnych i uwielbiam je pisać/używać. Szukam pomysłów i możliwości ich wykorzystania, jednak nie chcę ich nadużywać jako uniwersalnego narzędzia, jak często ostrzegają ludzie. Do jakich rzeczy powinienem używać wyrażeń regularnych i gdzie ich nie używać? (Oprócz oczywistego: parsowania HTML).


title: Wzór interakcji i potwierdzenia użytkownika

text: Załóżmy, że klasa FileWriter wymaga sprawdzenia, czy nie usunie już istniejącego pliku, jeśli taki zostanie znaleziony. Miałby dwie funkcje: public bool FileExists(string filePath) //... public bool WriteFile(string filePath, string text) //... Głównym problemem jest to, aby nie usuwać już istniejącego pliku. Pierwszy interfejs jest właściwie po prostu interakcją za pośrednictwem konsoli: public void Save() { FileWriter fileWriter; //... if (fileWriter.FileExists(filePath)) { Console.WriteLine("Plik już istnieje. Kontynuować? Naciśnij 'y' dla tak"); if (Console.ReadKey().KeyChar != 'y') return; } fileWriter.WriteFile(ścieżka_pliku, tekst); } A jakiś czas później pojawia się drugi interfejs, ten z graficznym interfejsem użytkownika, który wymaga tej samej interakcji użytkownika: public void SaveButton_click(object sender, EventArgs e) { FileWriter fileWriter; //... if (fileWriter.FileExists(filePath)) { if (DialogResult.Yes != MessageBox.Show("Plik już istnieje. Kontynuować?", "", MessageBoxButtons.YesNo)) return; } fileWriter.WriteFile(ścieżka_pliku, tekst); } Z wyjątkiem sposobu, w jaki odbywa się interakcja, logika jest taka sama. Jakiego wzorca można użyć, aby nie powielać tej logiki? Czy najlepszym podejściem jest funkcja wywołania zwrotnego do przeprowadzenia kontroli? Sformatowany jako C#, ale nie musi być specyficzny dla C#.


title: Chroniona zmienna i chroniona metoda w erze TDD

text: Rozumiem, że metoda chroniona jest dobra do testowania jednostkowego, ponieważ można łatwo kpić z klasy, zastępując metodę chronioną na potrzeby testowania. Jednak zmienna chroniona jest tylko zmienną globalną (choć ograniczoną) i należy jej w ogóle unikać. Zwłaszcza jeśli zadeklarowałeś wszystkie niezbędne funkcje pobierające/ustawiające, powinieneś mieć zmienną chronioną przez zero i nie powinna ona wpływać na nic innego. Więc w przyszłości, jeśli mam zamiar wyeliminować wszystkie chronione zmienne w moich kodach, czy jest jakieś zastrzeżenie, którego nie jestem świadomy?


title: Jakie jest Twoje podejście do debugowania przejściowego problemu?

text: Pracuję w systemie, który steruje drukarką etykiet i czasami drukarka etykiet wydrukuje tę samą etykietę 2,3,...,10 razy. Błąd jest przejściowy, występujący raz na 3000-4000 (raz w miesiącu) lub mniej więcej etykiet. Dodaję śledzenie do pliku dziennika, aby zobaczyć, jakie polecenia są wysyłane do drukarki i stan drukarki (mamy maszynę stanów definiującą dozwolone polecenia). Ale ponieważ jest to przejściowy problem, który może mi powiedzieć, że wystąpił błąd, ale nie dlaczego mieliśmy błąd, więc mogę go naprawić. Próbuję również uzyskać pliki zadań drukowania dla błędnych zadań, aby móc emulować zadanie w moim środowisku testowym. Mam nadzieję, że dzięki nim mogę niezawodnie spowodować wystąpienie błędu. Jestem ciekawy, jak inni mogą podejść do diagnozowania tego typu przejściowych błędów.


title: Sporadyczne testy jednostkowe czy TDD?

text: Przeczytałem kilka podstaw o testach jednostkowych i TDD, ale trudno mi się przekonać, dlaczego TDD może mieć przewagę nad tylko wybranymi testami jednostkowymi. Czytałem wspólne argumenty dla TDD, ale nie widzę poprawy w porównaniu z prostymi testami jednostkowymi. Może mógłbyś pomóc wyjaśnić: * TDD pozwala na luźno powiązany, testowalny projekt -> Myślę, że mogę sobie wyobrazić, czy klasa jest teoretycznie testowalna, bez konieczności pisania testów; Luźne sprzężenie to podstawowy wymóg, który można oceniać bez odwoływania się do TDD?! * TDD daje pewność w refaktoryzacji -> Czy nie jest bardziej efektywne dodawanie wybranych testów jednostkowych zaraz po rozpoczęciu refaktoryzacji? Chociaż musisz zastanowić się, co obejmuje test, nadal oszczędzasz na pisaniu wielu testów. * TDD każe najpierw zdefiniować interfejs -> Wydaje mi się, że niektóre drobne kwestie są łatwiejsze do rozstrzygnięcia podczas kodowania (co również zgadza się z agile?). Trudno jest nawet przewidzieć zagnieżdżoną strukturę danych zwrotnych, ale po kodowaniu często mogę sprawdzić, czy otrzymałem to, czego oczekiwałem. Wymyśliłem zagnieżdżone dane podczas kodowania (mała jednostka) i obserwowałem zachowanie. Zaoszczędziłbym dużo czasu, pisząc najpierw metodę i używając sprawdzonego wyniku a posteriori do podłączenia do testu jednostkowego. * z tego, co przeczytałem, wiele (oczywiście nie wszystkie) źródeł stwierdza, że TDD wymaga więcej czasu na rozwój, nawet biorąc pod uwagę korzyści z debugowania; poprawia się jedynie jakość kodu -> Czy to możliwe, że niektórzy programiści popełniają różnego rodzaju błędy, a dla niektórych TDD i tak nie obejmuje rodzaju błędów, które popełniają? Więc jeśli moje typowe błędy nie są dostępne w przewidywalnych testach, to nie dla mnie? * TDD pomaga zmieniać zespoły i większe zespoły współdziałające -> Czy to duży problem? Wyobrażam sobie, że tak, ale na razie sam programuję, nie potrafię tego ocenić. W jaki sposób TDD pomaga zespołom w sposób, który… i tutaj jest ważna kwestia: inne sposoby nie? Może wymusić dyscyplinę na mniej doświadczonych członkach zespołu, ale poza tym jakieś zalety?


title: Testowanie zawartości strony za pomocą wykresów

text: Szukam sposobu na przetestowanie moich stron internetowych, które mają dynamicznie generowane wykresy (za pomocą takich rzeczy jak Google Graphs). Czy ktoś wie, czy istnieją takie narzędzia (być może Selenium by to zrobiło). Dziękuję


title: Jakie są naprawdę trudne książki o programowaniu?

text: Zastanawiałem się, jakie naprawdę trudne książki o programowaniu skłoniłyby mnie do myślenia. Mówię o językach niskiego poziomu, takich jak c itp. oraz o algorytmach, punktach, funkcjach itp. Wielkie dzięki.


title: Jak reprezentować stowarzyszenie w programach

text: Czy ktoś mógłby mi pomóc we wdrożeniu stowarzyszenia w cpp. Staram się zaimplementować grę w kości, w której mam dwie klasy: diegame i kości.


title: Jak zdefiniować dyrektywy szablonowe (z perspektywy API)?

text:
## Przedmowa Piszę język szablonów (nie próbuj mnie wyperswadować), aw nim są dwa rodzaje węzłów, które mogą być rozszerzane przez użytkownika. TemplateTags i TemplateDirectives. TemplateTag jest ściśle powiązany z tagiem HTML -- może wyglądać jak div(class="green") { "content" } I będzie renderowany jako
content
 tj. zajmuje kilka atrybutów, plus trochę treści i wypluwa trochę kodu HTML. TemplateDirectives są nieco bardziej skomplikowane. Mogą to być pętle „for”, „ifs”, „includes” i inne. _Wyglądają_ bardzo podobnie do TemplateTag, ale muszą być przetwarzane inaczej. Na przykład @for($i in $items) { div(class="green") { $i } } Spowoduje zapętlenie `$items` i za każdym razem wyświetli zawartość z podstawioną zmienną `$i`. Więc.... Próbuję teraz zdecydować o sposobie zdefiniowania tych dyrektyw. ## Tagi szablonów Tagi szablonów są dość łatwe do napisania. Wyglądają mniej więcej tak: [TemplateTag] static string div(string content = null, object attrs = null) { return HtmlTag("div", content, attrs); } Gdzie `content` pobiera zawartość między nawiasami klamrowymi (wstępnie renderowanymi, jeśli są w nim zmienne itp.), a `attrs` jest albo `Słownikiem<string,object>` atrybutami, albo typem anonimowym używanym jak słownik. Po prostu zwraca kod HTML, który zostaje umieszczony na swoim miejscu. Prosty! Możesz pisać tagi w zasadzie w 1 linii. ## Dyrektywy szablonów Sposób ich zdefiniowania wygląda teraz tak: [TemplateDirective] static string @for(string @params, string content) { var tokens = Regex.Split(@params, @"\sin\s") .Select(s => s.Trim()).ToArray(); string NazwaPozycji = tokens[0].Substring(1); string enumName = tokeny[1].Substring(1); var enumerable = data[enumName] jako IEnumerable; var sb = nowy StringBuilder(); var szablon = nowy Szablon(treść); foreach (pozycja var in enumerable) { var templateVars = new Dictionary<string, object>(data) { { itemName, item } }; sb.Append(szablon.Render(Zmienne_szablonu)); } return sb.ToString(); } (Przykład roboczy). Zasadniczo elementy pomiędzy `(` i `)` _nie_ są automatycznie dzielone na argumenty (tak jak robią to znaczniki szablonu), a `treść` również nie jest wstępnie renderowana. Powodem, dla którego nie jest on wstępnie renderowany, jest to, że możesz chcieć najpierw dodać lub usunąć niektóre zmienne szablonu lub coś innego. W tym przypadku dodajemy zmienną `$i` do zmiennych szablonu, var templateVars = new Dictionary<string, object>(data) { { itemName, item } }; I _następnie_ wyrenderuj zawartość ręcznie, sb.Append(template.Render(templateVars)); ## Pytanie Zastanawiam się, czy jest to najlepsze podejście do definiowania niestandardowych dyrektyw szablonów. Chcę, żeby było to jak najłatwiejsze. Co zrobić, jeśli użytkownik nie wie, jak renderować szablony lub nie wie, że powinien? Może zamiast tego powinienem przekazać instancję „Szablon” z wstępnie wypełnionym „treścią”? A może tylko pozwolić mu manipulować zmiennymi szablonu, a na końcu automatycznie wyrenderować treść? OTOH, w przypadku rzeczy takich jak „jeśli”, jeśli warunek nie powiedzie się, szablon w ogóle nie będzie musiał być renderowany. Więc muszę tutaj pozwolić na dużą elastyczność. Myśli?


title: Jak działa upiększanie kodu Google?

text: Używam upiększania kodu Google. Po wyrenderowaniu strony postanowiłem sprawdzić, jak manipulowano tagami `<code>` i `<pre>` oraz ich zawartością. Ale w źródle widoku nie wprowadzono żadnych zmian (w przeciwieństwie do podświetlaczy składni online, które generują kod w stylu css z tekstem kodu). Więc jak/gdzie są przechowywane i przetwarzane informacje o słowach kluczowych, zmiennych, komentarzach itp. (z tekstu znacznika kodu)?


title: Co powiesz na wydajność wielu bitów we wspólnych bazach danych?

text: Jeśli istnieją kolumny 20-bitowe (wartość logiczna o wartości innej niż null), czy lepiej jest jawnie przechowywać je w typie całkowitym (int32)? A może bazowa baza danych połączy je w jedną liczbę całkowitą? Używam jednak PostgreSQL. Ogólnie, czy używanie maski bitowej w bazach danych SQL jest rodzajem antywzorca? Tła: Użycie tych kolumn bitowych jest pozostawione do zdefiniowania przez użytkownika końcowego, wraz z kilkoma innymi kolumnami typu int, float, double, varchar, aby tabela była nieco bardziej rozszerzalna. Nie zamierzam też w praktyce używać tabeli właściwości niestandardowych jeden-do-wielu. Dodanie kolumny liczb całkowitych jest tanie, ale jeśli podstawowa baza danych może przechowywać kilka kolumn bitowych w jednym polu int32, nie muszę samodzielnie ich jawnie scalać.


title: Logika w seterach a getterach?

text: Okey dokey, następny gówniany-kod-w-pracy-rant-zamieniony-w-prawdziwe-pytanie (mam nadzieję): Więc debuguję trochę kodu i mamy coś takiego: objFoo.TabIndex = 5 'Właściwość VB.NET z setterem wywołanym niejawnie, a TabIndex jest właściwością, której seter jest początkiem drzewa wywołań _szalony_, z podprogramami i XML oraz specjalnymi przypadkami zależnymi od kontekstu (np. tryby) i tak dalej. (Gack. Możesz zobaczyć, co robi ze mną praca tutaj. Właśnie poprzedziłem Foo przedrostkiem "obj". :( ) Ok, jasne, musimy zarządzać stanem i wykonywać obliczenia i tak dalej. Nasz stan jest albo w bazie danych (ale może być kosztowny do wyciągnięcia) lub nie jest jeszcze gotowy do zapisania w bazie danych (np. jest tylko w połowie upieczony), więc nie możemy po prostu wybiegać do d/b za każdym razem, gdy potrzebujemy trochę informacji, ale. .. Czy lepiej zarządzać tym stanem w setterach, czy lepiej robić to w getterach?Myślałbym, że zrobienie tego w getterach (czyli leniwie) oznaczałoby, że obliczamy (i prawdopodobnie buforujemy) tylko to, czego potrzebujemy, podczas gdy robienie tego w setterach oznacza, że zasadniczo przeliczamy, przewidując, jakie gettery mogą być wywołane w przyszłości i wstępnie obliczamy ich wyniki (poza tym, są elementy danych, które w ogóle nie mają getterów, są tylko zmiennymi globalnymi w klasie 6000 wierszy.) Czy nie powinniśmy po prostu, co do zasady, ustawić wskazanego elementu danych, może ustawić kilka flag wskazujących, że inne dane są teraz nieprawidłowe (c unieważnienie bólu) i czekać na wywołanie różnych getterów do przeliczenia? Mogę sobie wyobrazić, że jednym argumentem przemawiającym za zrobieniem tego w setters jest to, że nasz obiekt jest tak złożony, że naprawdę musimy poprawnie skonfigurować jego stan, używając wielu złożonych elementów danych. Ale czy nie jest to sama w sobie czerwona flaga, wskazująca, że lepszym podejściem byłoby rozbicie obiektu na mniejsze obiekty, a nie napisanie skomplikowanego setera? (Teraz wiem, że istnieją różne rodzaje wyjątków, które ludzie z pewnością wskażą, ale szukam ogólnej zasady praktycznej i logiki, która się za nią kryje, lub stwierdzenia, że taka ogólna zasada nie jest możliwa, towarzyszy przez przekonujący argument.) Dzięki. Jan.


title: Jak przetestować kod przetwarzania obrazu?

text: Zajmuję się przetwarzaniem obrazu (głównie OCR) i zastanawiam się, jak zintegrować testy jednostkowe w moim rozwoju. Używam już testów jednostkowych dla bardziej "powszechnego" typu kodu, ale kiedy mam do czynienia z kodem przetwarzania obrazu, nie jestem pewien, jak sobie z tym poradzić. Ten rodzaj kodu zawsze wymaga wejścia/wyjścia danych obrazu, a kpinie z tego nie jest oczywiste. Na razie zajmuję się głównie testami integracyjnymi, ale ich uruchomienie zajmuje trochę czasu i chciałbym mieć kilka pomysłów na rozbicie tego rodzaju kodu na testy jednostkowe, abym mógł je szybciej uruchamiać. Edycja: Analiza postaci może przejść przez wiele etapów obejmujących wielokrotne obracanie, skalowanie i operacje morfologiczne. Te kroki zmieniają się często w miarę opracowywania algorytmu. W ten sposób dane wejściowe i oczekiwane wyniki mogą znacznie ewoluować podczas testowania. Każdy znak może mieć rozmiar 100x100 pikseli, więc zakodowanie go na sztywno w kodzie lub praca z wygenerowanymi danymi nie wchodzi w rachubę.


title: liczniki czasu z wątkami w kolejce

text: Więc zadawałem złe pytania przez ostatnie trzy dni i po wielu poszukiwaniach myślę, że mam pomysł na to, czego potrzebuję, moje pytanie brzmi, jak używać timerów z dwoma wątkami pisania i czytania w jednej kolejce. Innymi słowy, mam jedną kolejkę (lub dowolną inną strukturę danych) i dwa wątki, producenta i konsumenta, więc producent zapisuje wartości w kolejce, z czasem dla każdej wartości (powiedzmy 10 sekund), a konsument odczytuje kolejkę , oba używają mechanizmu blokady, potrzebuję funkcji timera, która sprawdza, która wartość minęła 10 sekund i usuwa ją z kolejki. Wiem, jak zaimplementować wątki producenta/konsumenta, ale nie wiem, gdzie to umieścić, czy to trzeci wątek, czy co? i czy muszę wpisywać czas wartości po wejściu do kolejki, aby funkcja timera mogła to sprawdzić, czy po prostu napisać 10, a funkcja timera będzie zmniejszać o 1 co sekundę?


title: Atmosfera + długie sondowanie: brak dystrybucji wiadomości?

text: Mam dziwne zachowanie z Atmosphere + Long Polling. Chciałbym mieć nadawcę na użytkownika, więc zarejestrowałem nadawcę z zawieszeniem zasobu o id : /user/. Używam Atmosphere w środowisku klastrowym, więc skonfigurowałem do korzystania z zewnętrznego nadawcy, który używa Hazelcast. (Nie ma szans dla Redis, korporacyjna sztywność). Wydaje się, że wszystko działa, ALE wszystkie nadawane wiadomości nigdy nie docierają do przeglądarki. Future<Object> f = BroadcasterFactory.getDefault().lookup("/user/foo").broadcast("moja cudowna wiadomość"); f.get() Widzę moje oczekujące żądanie w każdej przeglądarce (Chrome/Firefox), ale nie ma wznowienia ani odpowiedzi do czasu przekroczenia limitu czasu gniazda, aby odnowić połączenie. Moje środowisko : * Servlet 3.0 * JBoss AS7 7.20 * Spring 3.2 + MeteorServlet * Atmosphere 1.1.0RC1 (tak samo z najbardziej stabilną wersją) + jQuery Atmosphere


title: Potrafię pisać kod... ale nie potrafię dobrze projektować. Jakieś sugestie?

text: Czuję, że jestem dobry w pisaniu kodu w kawałkach i kawałkach, ale moje projekty są naprawdę do kitu. Pytanie brzmi, jak mogę ulepszyć swoje projekty - i z kolei stać się lepszym projektantem? Myślę, że szkoły i uczelnie wykonują dobrą robotę, ucząc ludzi, jak stać się dobrymi w rozwiązywaniu problemów matematycznych, ale przyznajmy, że większość aplikacji tworzonych w szkole ma zazwyczaj około 1000-2000 linii, co oznacza, że jest to głównie ćwiczenie akademickie co nie oddaje złożoności oprogramowania świata rzeczywistego - rzędu kilkuset tysięcy do milionów linijek kodu. W tym miejscu wierzę, że nawet projekty takie jak topcoder / projekt euler również nie będą zbyt pomocne, mogą wyostrzyć twoją zdolność rozwiązywania problemów matematycznych - ale możesz zostać programistą akademickim; kogoś, kto jest bardziej zainteresowany przyjemnymi, czystymi rzeczami, kto jest całkowicie niezainteresowany codziennymi przyziemnymi i włochatymi rzeczami, z którymi ma do czynienia większość programistów aplikacji. Więc moje pytanie brzmi, jak poprawić swoje umiejętności projektowe? Czyli zdolność do projektowania aplikacji na małą/średnią skalę, które zmieszczą się w kilku tysiącach linijek kodu? Jak mogę nauczyć się umiejętności projektowania, które pomogą mi zbudować lepszy zestaw edytora html lub jakiś program graficzny, taki jak gimp?


title: Java - Jakie metody umieścić w interfejsie, a czego unikać

text: Projektuję interfejs obsługi plików: interfejs publiczny FileHandler { public void openFileHandler(String fileName); public void closeObsługa Plików(); public String readLine(); public String [] parseLine(linia String); public String [] checkLine(String line[]); public void incrementLineCount(); public void incrementLineSuccessCount(); public void incrementLineErrorCount(); public int getLineCount(); public int getLineSuccessCount(); public int getLineErrorCount(); } Wkrótce stało się dla mnie jasne, że tych metod **nie można uczynić prywatnymi**. Nie chcę, aby incrementLineCount był publiczny. Jaki jest właściwy sposób zaprojektowania takiego interfejsu?


title: Obsługa żądania ściągnięcia sms z kontrolera sprężyny

text: Używam mapowania spring xml i muszę obsłużyć żądanie pochodzące z bramki sms i chcę wysłać odpowiedź jako SMS. Mój scenariusz jest jak 1. użytkownik wysyła sms z telefonu komórkowego w formacie `subcode XXXXX`. 2. Bramka sms wygeneruje żądanie i wyśle na mój zarejestrowany adres URL w formacie `url??mobileNumber=99999999&timeStamp=2014-01-06 16:10:20&operatorName=&areaCode=&message=code subcode xxxxxxx` Chcę obsłużyć to żądanie z mojego kontrolera wiosny. W tej chwili stworzyłem kontroler i obsługiwałem go z danych referencyjnych. Jakieś inne lepsze rozwiązania?


title: Młodsi programiści w zdalnym środowisku pracy

text: Nasza firma chce wprowadzić pracę zdalną jako opcję dla swoich programistów. Ta książka (Remote: Office niewymagane) zawiera cenne wskazówki. Jednak jedną z kwestii, która nie została rozwiązana, jest zatrudnienie i zarządzanie programistami na niższym poziomie. W jaki sposób można zapewnić młodszym programistom w środowisku pracy zdalnej takie same wskazówki i doświadczenie, jakie uzyskaliby przebywając w środowisku starszych programistów w środowisku biurowym?


title: Jak sprzedać swoją pracę?

text: Jestem freelancerem, firma, z którą współpracuję (która ma rząd jako klient) poprosiła mnie o napisanie aplikacji (internetowej i/lub systemowej), aby umożliwić im archiwizację dokumentów i umożliwienie ich pobrania przez określonych użytkowników/ grupy. Planuję zrobić to z interfejsami API i stworzyć lekki interfejs sieciowy i wieloplatformową aplikację komputerową. Moje pytanie brzmi: Ile mogę to sprzedać? W oparciu o rozwój czasu? Bardzo lekka, bezpłatna i naga aplikacja (taka sama jak dropbox), a następnie każe im płacić za każdą funkcjonalność (użytkownicy/grupy/ssl/wznów pobieranie/aplikacja na komputery...)? Albo ustal cenę globalną, opartą na przybliżonym koszcie, na podstawie nie wiem co ? To mój pierwszy projekt z zamkniętym kodem źródłowym.


title: Czy synchronizacja systemu plików ze zdalnym serwerem za pomocą HTTP to zły pomysł?

text: Rozpocząłem projekt, który będzie powielał zachowanie Dropbox lub Dysku Google, ale używał Amazon S3 az backendu. Pomysł jest bardzo prosty, serwer Node.js, który obserwuje katalog pod kątem zmian plików i umieszcza je na S3. Lub spojrzy na S3 w poszukiwaniu zmian i zastosuje je do struktury systemu plików. Dostaję bardzo wczesną wersję mojej aplikacji na Github. Znajdziesz go tutaj. Ponieważ jestem web developerem, do rozwiązania problemu używam technologii webowych. Boję się mojego ograniczonego sposobu myślenia i wybierania niewłaściwych narzędzi do pracy. Istnieją inne rozwiązania tego problemu. Jednym z nich jest S3FS, który jest systemem plików FUSE dla systemów Unix. Moim zdaniem jest to bardzo trudne w obsłudze i ograniczone do platformy. Moje rozwiązanie używa Node.js do przezwyciężenia problemów międzyplatformowych. Mogę spakować moją aplikację Node.js z App.js i uczynić ją łatwym w użyciu oprogramowaniem. Aby wyjaśnić, mam następujące pytania: * Czy protokół HTTP/HTTPS jest wystarczająco dobry do przesyłania plików? * Czy Node.js jest wystarczająco dobry do pracy z systemem plików? * Skalowalność: czy to podejście może zawieść w przypadku dużych rozmiarów plików?


title: Czy programista powinien znać Linuksa?

text: Jestem programistą PHP/Python uczącym się Javy i C#(.NET). Moim głównym systemem operacyjnym jest Windows 7, ale używałem Linuksa i obecnie korzystam z podwójnego rozruchu z Ubuntu. Moja wiedza o Linuksie jest jednak dość ograniczona. Mogę pracować z wierszem poleceń w prostych zadaniach, ale to prawie wszystko. Nie robię żadnych skryptów powłoki, nie znam zbyt dobrze najważniejszych poleceń ani ogólnie systemu. Interesuję się tworzeniem stron internetowych, aplikacjami mobilnymi i być może w przyszłości niektórymi elementami wbudowanymi. Czy powinienem lepiej zapoznać się z Linuksem? Nawet jeśli w tej chwili nie jestem tym zainteresowany? Czy jest to konieczne na przyszłych stanowiskach pracy, biorąc pod uwagę moje zainteresowania? Dziękuję Ci.


title: Jak nauczyć się UML do wykorzystania w projektowaniu?

text: 10 lat temu na studiach miałem kilka wykładów UML. Z tego pamiętam i wykorzystuję tylko podstawową część diagramów klas i sekwencji oraz to, jak nasz nauczyciel próbował nas przekonać, że w przyszłości nie będziemy kodować, ale będziemy używać (rozdętych wówczas) narzędzi UML do generowania oprogramowanie ! Co za śmiech ! Dzisiaj myślę, że mogę lepiej wykorzystać UML niż tylko inżynierię wsteczną mojego kodu, aby mieć kilka ładnych diagramów ilustrujących dokumentację. Czuję, że mogę go użyć do zaprojektowania jakiejś części mojego kodu i uniknięcia późnych problemów. Ale za każdym razem, gdy chcę naprawdę użyć UML do zaprojektowania czegoś, gubię się: za dużo diagramów, za dużo niejasnego żargonu, za dużo pól tekstowych i opcji w edytorze UML o ciemnych znaczeniach... Chcę więc wiedzieć, jak się nauczyłeś UML, aby wiedzieć wystarczająco dużo, aby używać go w fazie projektowania bez rysowania przez jego złożoność. Uwaga: Mam już tę książkę: UML Distilled: A Brief Guide to the Standard Object Modeling Language od M. Fowlera. Brakuje mi bardziej praktycznego podejścia z jednym lub wieloma przykładami ze świata rzeczywistego, jak modelować rzeczywisty projekt za pomocą UML.


title: Wskazówki dotyczące rozmowy kwalifikacyjnej z gospodarzem?

text: Pokonałem więc techniczne rozmowy kwalifikacyjne dla firmy, a teraz mam rozmowę kwalifikacyjną z moim potencjalnym gospodarzem na staż w okresie letnim. Jakie są wskazówki dotyczące takich rozmów kwalifikacyjnych? Wiem, że nie są tak naprawdę techniczne, ale nie jestem pewien, co dokładnie mają mierzyć. Jakieś wskazówki, co powiedzieć, jak wyrazić zainteresowanie projektem, pytania, które powinienem zadać itp.? * * * Edytuj: Pytanie poboczne: Jaki jest dobry synonim słowa „interesujący” lub „zainteresowany”? Uważam, że zbyt często używam tych słów (np. „Zdecydowanie jestem zainteresowany pracą nad front-endem!” lub „Tak, to brzmi naprawdę interesująco, chciałbym dowiedzieć się więcej o tym” lub „Te wszystkie brzmią naprawdę interesująco, zdecydowanie interesują mnie wszystkie!”, itd.)... ale nie mogę znaleźć dobrych synonimów. (Witryny internetowe nie dają mi dobrych synonimów.) Jakieś pomysły?


title: Czy Agile może być efektywnie wykorzystany do początkowego rozwoju dużego projektu?

text: Myślę, że krótka odpowiedź na to pytanie brzmi prawdopodobnie „tak”, ale pomyślałem, że i tak zapytam! Jesteśmy w trakcie przejmowania ** wielu istniejących podobnych, ale różnych aplikacji** i, w ramach tego, co jest dla nas prawdopodobnie największym projektem rozwojowym w historii, próbujemy ** je zastąpić i wszelkie kolejne podobne, ale różne aplikacje z jednym nadrzędnym, superkonfigurowalnym systemem**, aby nimi wszystkimi rządzić. W pełni spodziewam się, że Syndrom Trudnego Drugiego Systemu przysporzy nam wielu problemów z dostarczeniem tego behemota, ale nie chcę, aby nasz wybór metodologii pogarszał sprawę. Zajmowaliśmy się zwinnością, od czegoś głównie wodospadu, ale to byłby nasz pierwszy poważny projekt wykorzystujący nową, ulepszoną metodologię. Mamy Wielkie Plany dla nowego systemu i chociaż nie wszystko musi być dostarczane od razu ** będziemy musieli wdrażać duże jego części od samego początku, aby umożliwić klientowi przekazanie wszystkiego, co by nawet Rozumiesz**. Obawiam się, że ponieważ zmieniamy się tak bardzo na raz, nie ma miejsca na małe fragmenty pracy, które prowadzą do przydatnych/demowalnych elementów wynikowych. Martwię się, że nawet jeśli udałoby nam się znaleźć sposób na zrobienie tego małymi kawałkami, potrzebowalibyśmy tych kawałków, aby dobrze pasowały do większego obrazu, a więc trudno byłoby opracować je w izolacji z tego powodu także. Naszym celem jest dość oddzielone podejście SOA, a to jest coś. **Ramy czasowe są napięte** , a reputację postawiono na terminową dostawę. Chciałbym więc wiedzieć, czy w tym przypadku: * wskazane jest, aby wykonać mnóstwo projektów z góry, złożyć ogólny kształt aplikacji i uzyskać kluczowe moduły działające jednym dużym naciśnięciem (co może być możliwe do sprintowania w chodzi o śledzenie pracy, ale nie tyle w zakresie informacji zwrotnych, ulepszania projektu i tak dalej), zanim może odtąd zaczniesz być bardziej zwinny, lub... * postaraj się być tak zwinny, jak to możliwe od samego początku - uzgodnij rzeczy takie jak standardy kodowania, może niektóre podstawy API, ogólne podziały modułów, a następnie zaufaj niezależnemu kodowaniu, pamiętając o elastyczności, aby inne rzeczy stopniowo się rozwijały; może niektóre rzeczy muszą zostać przerobione, ale wszystko, co można lepiej pokierować podczas tworzenia, niż z góry, przyniesie korzyści lub... * może coś innego i... * jakieś ogólne wskazówki?


title: Czy kod z niekompletnej historii powinien zostać usunięty z kompilacji?

text: Podczas przeglądu sprintu właściciel produktu może powiedzieć, że konkretna historia jest niekompletna lub sam zespół może nie wykonać niektórych zaangażowanych zadań. W jakich sytuacjach zostawiasz kod w kompilacji? Jeśli kod pozostaje w kompilacji, czy jest to świadoma decyzja podjęta podczas przeglądu? Innymi słowy, czy omawiacie tę kwestię podczas przeglądu? Czy istnieją konkretne przypadki, w których kod powinien zostać usunięty?


title: Oprogramowanie do pisania

text: Kilka tygodni dostałem moje pierwsze zadanie w Javie w mojej pierwszej pracy zawodowej, a mój partner i ja pracujemy nad wymaganiami. Głównie śledzę go i uczę się (niesamowicie!) i wspaniale było widzieć, jak pracuje. Zauważyłem, że nigdy nie pomyślałem o tym, jak zbudować aplikację od podstaw. Mam na myśli, że rozumiem cykl życia oprogramowania i tak dalej, ale faktyczne wdrażanie w prawdziwym świecie było tak różne, że sobie wyobrażałem. Jako przykład mamy wymaganie, w którym jeden obiekt ma wiele obiektów i nie miałem pojęcia, jak to zaimplementować, a on powiedział (ze swoim 20-letnim doświadczeniem): „Och, to tylko ArrayList<> obiektów w tej klasie. Jak czy mogę to uzyskać?Czy to tylko doświadczenie, czy są dobre podręczniki, jak PIŚĆ dobry kod?To znaczy, rozumiem podstawy programowania, ale złożenie całej aplikacji po prostu mnie zbija z tropu.Czy ktoś może mi doradzić jak postępować? Mam nadzieję, że to ma sens...


title: Dlaczego musimy nauczyć się programowania proceduralnego, zanim nauczymy się programowania obiektowego?

text: Jestem teraz na 4 roku studiów informatycznych i kiedy rozmawiam na ten temat z moim profesorem, odrzuca moje zdanie i bardzo ostro krytykuje (na mojej uczelni uczono nas C (ANSI) (w Procedural Zajęcia z programowania - na I roku na uniwersytecie ) przed C++ (w klasie OOP na II roku) i inne... Ale w wieku 13 lat mój brat uczył mnie najpierw Javy i nic więcej.Teraz potrafi już prawie wszystko, co normalny student drugiego roku może zrobić z Javą. Profesjonaliści, chciałbym wiedzieć, dlaczego uważacie, że powinniśmy najpierw nauczyć się programowania proceduralnego.


title: Jakie zestawy języków/frameworków/przepływów pracy polecasz do małego biura?

text: Pracuję w małym biurze (tylko 1 projektant, ja i 1 programista). Mamy solidne podstawy w tworzeniu klasycznych ASP i pewnego rodzaju mały własny framework/cms oparty na ASP + MySQL + JavaScript napisany tutaj linijka po linijce, a projekty nie są aż tak duże i chcemy coś przyspieszyć szybszy i bezpieczniejszy sposób na rozwój bez wymyślania koła (ponownie). Mam trochę wiedzy w PHP i .Net (C#) z niektórych konkretnych projektów i osobistego uczenia się. Zbadaliśmy różne języki i frameworki, a także kilka nowych (dla nas) metodologii, takich jak TDD i niektóre przepływy pracy zorientowane na kontrolę wersji z GIT itp. Do tej pory myśleliśmy w PHP z pewnymi frameworkami, takimi jak CodeIgniter lub Kohana i ASP.net ( C#) z MVC 3, ponieważ mogę zacząć od pewnej wiedzy, którą już posiadam i być może zaadoptować GIT jako nasz system kontroli wersji dla większych projektów. Potrzebujemy porady, jak zdobyć nowy zestaw umiejętności i narzędzi, które będą dla nas najlepsze, zanim uzyskamy 1 na 1 i spróbujemy. **EDYCJA: Co musimy zmienić (być może)** Jak możesz sobie wyobrazić, nie mamy procesu testowania takiego jak TDD lub BDD, a testowanie odbywa się bardzo krótko (mamy szczęście z tak małymi problemami po wydaniu) ani prawdziwy pomysł, jak z niego korzystać (potrzebujesz więcej badań i wyjaśnień). Przez większość czasu używamy programu Dreamweaver do kodowania i potrzebujemy szybszego i bardziej niezawodnego środowiska programistycznego z funkcją autouzupełniania, taką jak MS Intelisense i ładnym podświetlaniem (osobiście lubię pisać kod i używałem notatnika do pisania prawie wszystkich moich pierwszych aplikacji, ale w opłacalnej pracy z krótkim terminem nie możemy iść tą drogą. Nie żeby Dreamweaver jest zły, ale jest zbyt ogólny i brakuje mu niektórych funkcji). Wiem, że bezpieczeństwo to rzecz do zobaczenia po stronie programisty, ale jest mnóstwo frameworków z funkcjami, które w tym przypadku pomagają, a teraz mamy bardzo podstawowy i ograniczony zestaw narzędzi napisanych przez nas do tego (słaba ochrona przed wstrzyknięciem SQL, itp). Nasza „kontrola wersji” opiera się wyłącznie na udziale sieciowym i naszych maszynach. Ostateczna wersja jest zawsze tą na naszym serwerze plików i w większości przypadków, gdy musimy wprowadzić jakieś zmiany, zmieniamy pliki bezpośrednio i przesyłamy je ponownie. Kopia zapasowa tego udziału jest wykonywana co 2 lub 3 miesiące. Dorastamy i spodziewamy się, że wkrótce kogoś zatrudnimy. Trudno znaleźć programistę VBScript dla ASP, a jak już go znajdziemy, to wynagrodzenie jest dla nas za wysokie, bo nikt się tego w dzisiejszych czasach nie uczy, a kto wie, ma już pracę z dobrym. **Ogólne zastrzeżenia:** Zdecydowaliśmy się użyć ASP.Net(C#)/MVC jako naszej podstawowej platformy i użyć CodeIgniter jako alternatywy dla serwerów linuxowych i innych projektów. Myślenie o dołączeniu do programu MS dla startupów i małych firm, aby pomóc w pokryciu niektórych kosztów. Otrzymujemy Git jako nasze vcs na naszym prywatnym serwerze plików dla pochodzenia i instancji na każdej maszynie programistycznej, abyśmy mogli sklonować, pracować i odepchnąć. Rozważamy również usługę taką jak Bitbucket do utrzymywania kopii w chmurze. Jeśli ktoś z was ma jakieś rady lub inne przemyślenia na ten temat, poinformuję o tym. Chciałbym Wam wszystkim podziękować i zaznaczyć wiele odpowiedzi jako słusznych, ale nie mogę. Myślę, że to pytanie może być punktem odniesienia dla małych biur takich jak my, aby zdobyć punkty i pomóc w tych samych decyzjach.


title: Nazwa mojego oprogramowania podobna do nazwy innego programu

text: Zamierzam napisać jakieś oprogramowanie. Chciałbym zadzwonić do mojego oprogramowania X-former (z XML + transformator). Ale jest już emulator Xformera. (Moje oprogramowanie nie jest związane z emulatorami.) Biorąc to pod uwagę, nazywam moje oprogramowanie X-former: prawny; b. etyczny?


title: Czy istnieje sposób na uniknięcie sprawdzania typu w tym scenariuszu?

text: Mam klasę `SuperClass` z dwiema podklasami `SubClassA` i `SubClassB`. Mam metodę w innej klasie, która przyjmuje parametr `SuperClass`. Metoda powinna robić różne rzeczy w zależności od rodzaju otrzymanego obiektu. Aby to zilustrować: public void doStuff(SuperClass object){ // jeśli obiekt jest typu SubClassA, zrób coś. // jeśli jest typu SubClassB, zrób coś innego. } Chcę uniknąć sprawdzania typu (tj. `instanceof`), ponieważ nie wydaje się to być właściwym projektem OO. Ale nie potrafię wymyślić, jak wykorzystać polimorfizm do eleganckiego rozwiązania tego problemu. Jak elegancko rozwiązać ten problem?


title: Algorytm dopasowywania wartości do zestawów na podstawie sumy

text: Biorąc pod uwagę n zestawów przedmiotów. Każdy przedmiot ma swoją wartość. Pozycje w zestawie mają podobne wartości, ale różnią się nieznacznie. Celem jest stworzenie nowych zestawów zawierających trzy elementy wybrane z oryginalnych zestawów tak, aby suma wartości mieściła się w określonym zakresie. Można wybrać tylko jeden element zestawu źródłowego. Na przykład: Jeśli mamy następujące zestawy początkowe: * Zestaw A - {4,0, 3,8, 4,2 } * Zestaw B - { 7,0, 6,8, 7,2 } * Zestaw C - { 1,0, 0,9, 1,1 } * Zestaw D - { 6,5 , 6.4, 6.6 } * Zbiór E - { 2.5, 2.4, 2.6 } Celem jest stworzenie zbiorów zawierających trzy elementy tak, aby suma była pomiędzy 11,9 a 12,1. * Na przykład { 3.8, 7.2, 1.0 } Mogą być niewykorzystane elementy. Czy ktoś może zaproponować algorytm na ten problem?


title: Nad normalizacją w bazie danych

text: Obecnie pracuję nad stworzeniem nowego schematu bazy danych w ramach dużego nowego produktu. Nasze poprzednie rekordy adresów klientów (w poprzednim produkcie) wyglądają mniej więcej tak w naszym bieżącym schemacie (nie wszystkie pokazane kolumny): AddressID, AddressLine1, AddressLine2, City, State. Kod pocztowy, kraj itp. Chcę to znormalizować, aby adres faktycznie składał się z: * 1 adresu do wielu wierszy adresu * 1 adresu do kodu pocztowego. Wysłałem więc komunikat, że kod pocztowy będzie teraz we własnej tabeli i czy każdy „adres” odpowiada jednemu kodowi pocztowemu. Również adresy zostałyby rozbite, abyśmy mogli obsługiwać więcej niż 2 wiersze adresu w relacji od 1 do wielu. Niektórzy z mojej grupy mówią teraz, że przesadzam z normalizacją bazy danych. Jestem? Uwaga, nie jestem DBA, ale uważam, że jest to bardziej logiczne i wydajniejsze niż poprzedni schemat. **AKTUALIZACJA** Dziękujemy wszystkim za wkład. Nie zamierzam podawać adresu ani zipów do ich własnych tabel. Moim pierwotnym planem było wyszukanie kodu pocztowego i ponowne wykorzystanie go do adresów, więc musiałbym mieć tylko jeden zestaw zipów, ale po prostu wrzucę wszystko do samego rekordu i mam osobną tabelę do wyszukiwania zip.


title: MVC do tworzenia aplikacji internetowych na komputery i urządzenia mobilne?

text: Planuję stworzenie aplikacji webowej z dedykowanym interfejsem webowym dla urządzeń mobilnych oraz dedykowanym interfejsem desktop/tablet. Rozważam ASP.NET MVC, ale jest dla mnie jasne, że MVC służy do oddzielenia obaw, jak wyjaśniono tutaj, w każdym razie w moim przypadku chciałbym zminimalizować kod i elegancko obsługiwać telefony i komputery stacjonarne (może być być także „komputerem”. Czy MVC jest w tym przypadku mądrym wyborem, czy też który jest pierwszym przystankiem dla tego rodzaju aplikacji webowej xdevice?


title: Strategia obrazu na Androida

text: Tworzę aplikację z dużą ilością zdjęć. Zajmą one `> 100 mb` na pamięć. Do tej pory mam 3 pomysły: > 1. Umieść to w `@drawable` \- aplikacja będzie ciężka > 2. Pobierz przez JSON i umieść w tablicy java - buforowanie - Jak długo to może być > tam? > 3. Pobierz przez JSON, umieść go w pamięci telefonu/karcie SD i odczytaj w aplikacji > z pamięci. Użytkownik może usunąć zdjęcia. > Najlepszą opcją będzie umożliwienie użytkownikowi, czy chce mieć zdjęcia, czy nie. Jaka strategia jest najbardziej efektywna i polecana?


title: „Całkiem dobry” wywiad z programistą WPF/Winforms do pracy w ASP.NET

text: Mam 5 lat doświadczenia w pisaniu aplikacji WPF i WinForms. Sam napisałem oprogramowanie i zawsze wszystko wychodziło dobrze, a firma, w której pracuję, ma zadowolonych klientów. Mnóstwo SQL, EF, LINQ itp. Po drodze. Rzeczy wyglądają ładnie do rozruchu. Znam zero ASP.NET. Ani moja praca, ani osobiste projekty nie pozwoliły mi z tym pracować. Jutro mam rozmowę o pracę dla programisty ASP.NET/MVC/WPF/WinForms, chociaż dowiaduję się od mojego rekrutera, że lubią pytać konkretnie o ASP.NET. Teraz moje pytanie brzmi, jakie dokładnie są moje mocne strony? Wiem, że mam spore umiejętności, ale czy przełożą się one dobrze na ASP.NET, ponieważ powinienem być pewny, że mogę to szybko zdobyć w pracy, odkąd nauczyłem się innych technologii? Jakieś inne porady? Dla porównania, chociaż czuję, że dobrze sobie radzę i jestem „całkiem dobry” w programowaniu WPF, trochę czasu zajęło mi zrozumienie tego, co pochodzi z WinForms. Czuję, że gdyby pracodawca obserwował mnie w tym czasie, nie byliby pod wrażeniem. Jakiekolwiek myśli? Dziękuję!


title: Szukasz książki, bloga lub kanału o antywzorcach

text: Z mojego doświadczenia wynika, że znajomość antywzorców jest tak samo ważna, jak znajomość samych wzorców. Mimo obfitości literatury o wzorach, zaskakująco brakuje literatury o antywzorcach. Przeglądanie sieci zwykle ujawnia rady, które są albo zbyt niejasne (np. „ _nie używaj zmiennych globalnych_ ”), zbyt szczegółowe (np. „ _java.lang.Boolean.getBoolean nie robi tego, co myślisz, że robi_ ”) lub ewidentnie błędne na początku z (np. _Bóg przedmiot_ ). To, czego szukam, to antywzorce, które na pierwszy rzut oka wydają się dobrymi rozwiązaniami, ale prowadzą do dalszych problemów. Czy znasz jakieś dobre źródło takich antywzorców? (jedynym dobrym przykładem, jaki znam, są Antywzorce SQL)


title: zamieszanie w zrozumieniu płynnego układu nawigacji 2-kolumnowej

text: Próbuję zrozumieć następujący układ w różnych przeglądarkach: http://matthewjamestaylor.com/blog/perfect-2-column-left-menu.htm, ale mam pewne zamieszanie z niektórymi jego częściami i nie ma t wystarczająco dużo informacji na stronie lub w komentarzach css, aby mi pomóc. * Jaki jest cel div .colleft? Dlaczego dwie kolumny nie mogą znajdować się bezpośrednio pod kontenerem .colmask? * Dlaczego div .colleft ma prawo 75%? Nie rozumiem jego celu/korzyści. * Dlaczego szerokości .col1 i .col2 nie sumują się do 100%? * Jak pozostało:102% obliczono dla .col1 i pozostało:6% dla .col2? Komentarze na ten temat nie są dla mnie zbyt jasne. Czym to się różni od nieokreślania nawet własności CSS lewa/prawa?


title: Czy ** wiązać mocniej niż !, ~?

text: Projektując język programowania, uwzględniam operator potęgowania `**`. W Fortranie i Pythonie, dwóch znanych mi językach, które mają ten operator, wiąże się on ściślej niż jednoargumentowy minus, co ma sens zarówno ze względu na praktyczność, jak i tradycję. Powinien wiązać się luźniej niż operator inkrementacji prefiksu `++`, ponieważ inny sposób nie miałby sensu. W ten sposób zwykły pojedynczy poziom pierwszeństwa dla jednoargumentowych operatorów przedrostkowych jest dzielony na dwie części, co jest w porządku. Dołączam również logiczne i bitowe operatory _nie_ `!` i `~`. Po której stronie podziału powinny spaść? Czy powinny wiązać się luźniej czy ciaśniej niż `**`? Nie byłem w stanie znaleźć ani obiektywnego powodu, ani odpowiedniego precedensu dla żadnego wyboru. Czy jest coś, czego mi brakuje? Jeśli to się nie uda, co ludzie uznaliby za mniej zaskakujące?


title: Dodaj drugiego programistę do zespołu

text: W mojej firmie jestem jedynym programistą, ale planujemy powiększenie zespołu poprzez zatrudnienie drugiego programisty. Wiem, że wiąże się to z wieloma implikacjami (zwłaszcza wokół kontroli źródła). Dużo szukałem w Google, ale nie znalazłem dobrego samouczka/artykułu na temat tego, jak rozwinąć zespół od jednego do wielu programistów. Czy masz jakieś zasoby, z których moglibyśmy skorzystać?


title: Dlaczego większość witryn jest zoptymalizowana do wyświetlania w trybie pionowym?

text: Po prostu nie mogę tego rozgryźć. Prawie wszystkie monitory mają proporcje, w których szerokość jest znacznie większa niż wysokość, a mimo to prawie wszystkie strony internetowe są zaprojektowane dokładnie na odwrót? Tak naprawdę nie jestem web developerem i po prostu eksperymentuję, ale to szaleństwo mnie zaskakuje!!! Edycja: Nie chodzi o to, że chciałbym ograniczyć wysokość strony internetowej. Chodzi o to, że chciałbym, aby jakoś wypełnił całą dostępną przestrzeń, gdy mam swój 1920x1080 w trybie poziomym. Edycja 2: Zobacz to, aby zrozumieć, co mówię ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/t6tGR.png)


title: Jak wygląda proces rozwoju w Google?

text: Jakich narzędzi używają? Jakie procesy? Jakie mają zasady dotyczące kodu? Jak testują swój kod?


title: Pisanie testów jednostkowych tylko dla aplikacji, które ich wymagają

text: Trochę rant, ale wytrzymaj ze mną. Ludzie nazywają mnie purystą. Nie koduję w żaden inny sposób niż TDD. Kiedy próbuję przeforsować TDD jako politykę firmy, następująca rozmowa: właściciel firmy: „zrobimy TDD, gdy projekt to zagwarantuje” ja: „jeśli nie możesz zrobić TDD nawet przy małych/prostych projektach, nie t nagle wiem, jak to zrobić w przypadku dużych projektów. Również, jeśli projekt jest mały/prosty. tzw. koszt testu jednostkowego powinien być znikomy”. właściciel firmy: "wszyscy deweloperzy tutaj wiedzą, jak robić TDD, zrobią to, kiedy będzie trzeba". To ostatnie zdanie uderzyło mnie jako kompletne B(każdy) S(i). Moim argumentem jest to, że programista „wybiera wykonanie TDD, gdy mu powiedzą, że jest to wymagane”. Robi to źle i nie ma pojęcia o testach jednostkowych/TDD. Testowanie jednostkowe jest jak moja lewa ręka, a mój kod jest jak moja prawa ręka. Jasne, że mogę po prostu użyć prawej ręki. Po prostu zrobi rzeczy krzywo i wolniej. Czy moja głowa jest za wysoko podniesiona do @$$? Po prostu trudno mi uwierzyć, że programista, który biegle wykonuje TDD, wolałby tego nie robić. (Dla całej aplikacji) Edytuj- nie mówię o tym, czy testowanie TDD/jednostkowe jest/jeśli/jak/kiedy jest wymagane i jakie to korzyści. To martwy koń. Mówię o tym, że robię to dzień w dzień, czuję się nieswojo, NIE robiąc tego. Chcę tylko wiedzieć, czy to zdrowa mentalność.


title: Zastosuj filtr tylko, jeśli nie jest pusty

text: Moja funkcja przyjmuje opcjonalny parametr `type`, który jest używany do filtrowania kolekcji. Jednak filtr powinien mieć zastosowanie tylko wtedy, gdy parametr jest przekazywany (innymi słowy, nie ma wartości null). Jeśli filtr nie zostanie przekazany, nie należy go stosować. Jak mogę napisać swoją logikę, aby to odzwierciedlić? Mam teraz to - if( inne warunki && ( Type == null || (Type != null && Order.Type == Type )) ) return val += Order; Ale to jest niezgrabne i złe. Czy mogę tutaj uprościć moją logikę?


title: Jakie znaczenie dla dewelopera ma platforma Salesforce?

text: Postanowiłem nauczyć się Salesforce (bez żadnej znajomości tej platformy) i jak dotąd wydaje mi się, że mogę po prostu przechowywać obiekty JSON w chmurze… podobnie jak OData + Microsoft SQL czy Azure Table storage. * Link do interfejsu Salesforce REST API Czy moje rozumienie jest zbyt uproszczone lub jaką dodatkową wartość zapewnia programiście Salesforce?


title: Zintegruj funkcję przywracania pakietu NuGet z procesem realizacji transakcji

text: Zdarzają się sytuacje, w których nie mam połączenia z Internetem i jestem zmuszony pracować w trybie offline. Zwykle wyglądałoby to tak: łączę się, wykonuję płatność z serwera kontroli źródła i wyprowadzam się z biura. Pakiety NuGet pozostają na serwerze, ponieważ włączyłem przywracanie pakietów i powinienem przynajmniej raz otworzyć program Visual Studio i uruchomić kompilację, aby je pobrać. Przed użyciem NuGet mieliśmy zintegrowane zarządzanie pakietami przy użyciu zewnętrznych SVN. Wymagane zestawy zostały automatycznie pobrane podczas realizacji transakcji. Ale ten system ma pewne ograniczenia, z których chciałbym się pozbyć. Preferowanym sposobem korzystania z funkcji przywracania pakietu byłoby wykonanie go przy kasie lub aktualizacji. Czy jest na to sposób, używając hooków dla SVN (TortoiseSVN) lub GIT (TortoiseGIT, Github dla Windows) jako systemu kontroli wersji?


title: Prosty algorytm ścieżki prostej

text: Potrzebuję prostego algorytmu odnajdywania ścieżki, aby przejść z punktu A do punktu B. A* wydaje się przesadą, ponieważ nie ma znaczenia, czy uderzyłem w ściany, czy nie i nie ma terenu. Zastanawiałem się, czy istnieje prostszy, który znajdzie bezpośrednią ścieżkę (linię prostą) z punktu A do B.


title: Panel administracyjny cakephp, inny kontroler dla różnych grup zadań czy jeden dla wszystkich?

text: Piszę panel administratora w cakephp Mam pytanie, że panel będzie miał funkcjonalność dodawania elementów do głównej strony internetowej (konkretnie obrazów), więc zastanawiam się, czy powinienem umieścić całą funkcjonalność (dodawanie, edytowanie, przeglądanie, usuwanie) do główny kontroler administratora, czy powinienem zrobić inny kontroler? Jako, że panel administracyjny najprawdopodobniej zostanie rozszerzony o więcej funkcji, takich jak dodawanie nowych użytkowników, modyfikowanie ich itp. Co polecasz?


title: Jaka jest dobra praktyka w kodzie, kiedy tworzyć funkcję/metodę dla małych, powtarzających się segmentów kodu?

text: Wiele razy podczas pisania większych programów pytałem o to, ile kopiowania i wklejania ma sens umieszczanie kodu w funkcji lub metodzie i jaka jest dobra zasada? Używałem reguły czterech linii lub większej i pojawiałem się więcej niż dwa razy, potem tworzę prostą funkcję / metodę zawierającą ten kod. Czy możesz wymyślić lepszą praktykę lub zaoferować jakieś wskazówki? Jest to bardziej ogólne pytanie dotyczące wzorca projektowego niż pytanie dotyczące konkretnego języka.


title: Czy polimorfizm typu zwracanego (tylko) w Haskell to dobra rzecz?

text: Jedną z rzeczy, z którymi nigdy do końca nie pogodziłem się w Haskell, jest to, w jaki sposób można mieć stałe polimorficzne i funkcje, których typ zwracany nie może być określony przez ich typ wejściowy, na przykład class Foo a gdzie foo::Int -> a Niektóre z powodów że nie podoba mi się to: **Przejrzystość referencyjna:** "W Haskell, przy tych samych danych wejściowych, funkcja zawsze zwróci to samo wyjście", ale czy to naprawdę prawda? `czytaj „3”` zwraca 3, gdy jest używane w kontekście `Int`, ale zgłasza błąd, gdy jest używane, powiedzmy, `(Int,Int)`. Tak, można argumentować, że „odczyt” również przyjmuje parametr typu, ale niejawność parametru typu sprawia, że moim zdaniem traci on część swojego piękna. **Ograniczenie monomorfizmu:** jedna z najbardziej irytujących rzeczy w Haskell. Popraw mnie, jeśli się mylę, ale cały powód MR polega na tym, że obliczenia, które wyglądają na wspólne, mogą nie być spowodowane tym, że parametr typu jest niejawny. **Wpisz domyślnie:** Znowu jedna z najbardziej irytujących rzeczy w Haskell. Dzieje się m.in. jeśli przekażesz wynik funkcji polimorficznych na ich wyjściu do funkcji polimorficznych na ich wejściu. Ponownie, popraw mnie, jeśli się mylę, ale nie byłoby to konieczne bez funkcji, których typ zwracany nie może być określony przez ich typ wejściowy (i stałe polimorficzne). Więc moje pytanie brzmi (ryzyko bycia oznaczonym jako „pytanie do dyskusji”): _Czy byłoby możliwe stworzenie języka podobnego do Haskella, w którym moduł sprawdzania typu nie zezwala na tego rodzaju definicje? Jeśli tak, to jakie byłyby zalety/wady tego ograniczenia?_ Widzę kilka natychmiastowych problemów: Jeśli, powiedzmy, `2` miałby tylko typ `Integer`, `2/3` nie byłoby już sprawdzane z aktualna definicja `/`. Ale w tym przypadku myślę, że na ratunek mogą przyjść klasy typów z zależnościami funkcjonalnymi (tak, wiem, że to jest rozszerzenie). Co więcej, myślę, że posiadanie funkcji, które mogą przyjmować różne typy danych wejściowych, jest o wiele bardziej intuicyjne niż posiadanie funkcji, które są ograniczone w typach danych wejściowych, ale po prostu przekazujemy im wartości polimorficzne. Wpisywanie wartości takich jak „[]” i „Nic” wydaje mi się trudniejszym orzechem do zgryzienia. Nie wymyśliłem dobrego sposobu radzenia sobie z nimi. Wątpię, czy jestem pierwszą osobą, która miała takie myśli. Czy ktoś ma linki do dobrych dyskusji na temat tej decyzji projektowej Haskella i jej zalet / wad?


title: Przełamywanie złożonej historii na początku projektu

text: Próbuję poradzić sobie ze sprawnym zarządzaniem projektami (za pomocą Pivotal Tracker), ale wciąż wpadam na ściany, próbując zdefiniować kilka pierwszych historii projektu. Weźmy na przykład tę bardzo prostą historię: „Użytkownik powinien być w stanie oznaczyć produkt” Zakładając, że zdefiniowałem już „produkt” w innym miejscu, ta historia prawdopodobnie wymagałaby napisania polimorficznego systemu tagowania pod maską, po zakończeniu tego identyfikatora systemu móc wreszcie dodać możliwość tagowania produktu. Mój problem polega na ilości pracy ukrytej w tej historii. Mogę zdefiniować zadania, aby zrobić historię, ale historie jako całość mają być 1-2 dni pracy? Nie czuję się dobrze, jeśli chodzi o historię odsłaniającą tylko wierzchołek góry lodowej, ale to jedyna część, która odnosi się do Użytkownika. Jak przezwyciężasz tego rodzaju rzeczy? Jakie są najlepsze praktyki? **AKTUALIZACJA z 25.08.** Dziękuję wszystkim za wskazówki i skorzystałam ze wszystkich wskazówek dotyczących definiowania historii. Przechodzę teraz na Jira Grasshopper, który ma lepsze wsparcie dla zadań w ramach historii (przydziały, szacunki itp.) oraz śledzenie zadań programistycznych po rozpoczęciu sprintu.


title: Jaka struktura bazy danych jest odpowiednia do śledzenia audytów plików?

text: Muszę śledzić uprawnienia i żądania dostępu do serwera plików w bazie danych. Dostaję pełną ścieżkę do folderu i rozważam przeanalizowanie ścieżki (podział na znak „/”) i utworzenie linku samoodwoławczego do tabeli ... oprócz kolumny przeznaczonej do przechowywania pełnej ścieżki do pliku . Jakie jest idealne podejście do radzenia sobie z takim systemem, który może mieć drzewo folderów i mieć odpowiedni do tego celu schemat bazy danych? Czy kolumny autoreferencyjne są przesadą?


title: Co jest *nieco* mniej ekstremalnym odpowiednikiem bycia „płynnym” w języku?

text: tl;dr: Jaka jest mniej ekstremalna (ale wciąż zauważalna) alternatywa dla słowa „płynny”, gdy mówimy np. "Jestem biegle w C++/Pythonie/cokolwiek?" * * * Myślę, że mogę nazwać siebie „płynnym” w C#, ponieważ bardzo dobrze znam język i środowisko wykonawcze, a także API i klasy frameworka .NET itp. _Chciałbym_ twierdzić to samo dla Pythona i C++. Ale chociaż _mogę_ programować w Pythonie (robiłem to przez całe lato, robiąc stronę internetową w Django), na przykład nie nazwałbym siebie _płynnym_, ponieważ **mój kod nie zawsze jest "Pythonic"** (np. używając ` map`/`filter` vs. list comprehension) i nie jestem jeszcze zbyt zaznajomiony z niektórymi aspektami języka i biblioteki standardowej (np. API introspekcji itp.). Czy jest jakieś słowo lub fraza, której mogę użyć np. CV opisujące to, co wiem? Przychodzi mi do głowy „bardzo znajomy”, ale czy istnieje lepsze słowo/fraza, której mogę użyć?


title: Jak długo programista może się skoncentrować w ciągu dnia?

text: Jest to pytanie (które jest teraz zamknięte jako _niekonstruktywne_), które dotyczy średniej dziennej wydajności. Moje pytanie brzmi, czy są jakieś badania naukowe na temat produktywności programistów? Nie mogę oprzeć się wrażeniu, że wykonywanie 8 godzin dobrej pracy programistycznej od poniedziałku do piątku jest bardzo trudne. A jeśli tak, czy jest jakaś literatura, która to bada?


title: Czy istnieje przewodnik dotyczący tworzenia oprogramowania, aby zaprojektować wydajne klawisze skrótów dla działań?

text: Nie wiem, jak to łatwo wyrazić, ale zasadniczo oprogramowanie, które piszę, ma mnóstwo akcji i chcę przypisać skróty klawiszowe do każdego z nich, aby zaawansowani użytkownicy mogli pracować bardzo szybko. Po pierwsze nie są to działania związane z samą aplikacją, tj. Zakończ, Maksymalizuj okno, Informacje, Preferencje itp. Ale raczej rzeczywiste operacje, które wykonujesz na zbiorze danych. To nie jest dokładnie to samo, ale najbliższym przykładem, jaki mogę podać, jest kompozytor Nuke, w którym każda akcja jest reprezentowana przez węzeł. Czyli takie rzeczy jak Rozmycie, Wyostrzenie, Dodanie, Korekcja Koloru, Podświetlenie, itp. Ale ponieważ liczba węzłów przekracza 500, nie wiem, jak tworzyć łatwe do zapamiętania skróty klawiszowe, które nie używają każdej kombinacji klawiszy modyfikujących. Czy użycie 2 kombinacji klawiszy, tj. CC do korekcji kolorów, jest najlepszym sposobem? Czy istnieją zasoby na ten temat? Zasadniczo maksymalizując użycie skrótów klawiszowych, aby przyspieszyć pracę do maksimum bez konieczności zapamiętywania tysięcy kombinacji klawiszy. ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/icbaH.png)


title: Małe litery w nazwach plików systemu Linux

text: Ponieważ zauważyłem, że duże litery są naprawdę czytelne dla separacji pierwszych liter w długich, złożonych nazwach, mam tendencję do nadawania nazw moim plikom Linux z pewnymi dużymi literami. Głównie pliki wykonywalne, niektóre katalogi też. Ale minęło już kilka tygodni, zauważyłem, że ogromna większość wszystkich nazw plików w moim dystrybucji Linuksa to małe litery... Więc przed chwilą poszukałem w Google i znalazłem ten artykuł: Nazwy plików w Linuksie, który stwierdza, że należy _zawsze_ używaj małych liter w świecie uniksowym, > ...najlepiej _zawsze_ używać małych liter w Linuksie, chyba że masz > dobry powód do używania wielkich lub mieszanych liter. Większość użytkowników Uniksa używa małych liter > prawie wyłącznie, ale poza tym „kulturowym” punktem jest jeszcze jeden > dobry powód, by używać małych liter. Jeśli udostępniasz lub uzyskujesz dostęp do pliku DOS > systemu z Linuksem, DOS nie będzie w stanie zobaczyć plików, które mają nazwy plików pisane wielkimi literami > lub z różnymi literami... Czy tak jest naprawdę?


title: Uniwersalne sposoby opisywania, jakie funkcje powinna udostępniać biblioteka

text: Jestem zajęty hobbystycznym systemem operacyjnym i planuję stworzyć projekt open-source i ostatecznie mieć wsparcie dla wielu platform. Mając to na uwadze, przyjąłem podejście polegające na umieszczeniu całego kodu specyficznego dla sprzętu w osobnej bibliotece warstwy abstrakcji sprzętu (HAL), aby jądro nie musiało wiedzieć, jak dany sprzęt obsługuje takie rzeczy, jak pamięć i przerwania. Jądro po prostu wywoła funkcję HAL, prosząc o trochę pamięci lub przechwytując przerwanie, wywołując odpowiednio `hal_memory_malloc(...);` i `hal_interrupts_hook(...);`. Moje pytanie brzmi: chciałbym wiedzieć, czy istnieją uniwersalne sposoby na opisanie funkcji, które biblioteka ma ujawnić, jeśli deweloper chce przenieść warstwę HAL na inną platformę. Widząc, że jądro zna nazwę funkcji, ponieważ znajduje się w plikach nagłówkowych jądra, biblioteka po prostu musi mieć funkcję o tej konkretnej nazwie. Jako jądro nie obchodzi mnie, jak działa twoja funkcja, dopóki jest tam i mogę ją wywołać. _**Edytuj_** Moje jądro i biblioteka są napisane w C, więc biblioteka będzie normalną biblioteką połączoną statycznie. W tej chwili mam dokument Word, który ma diagram pokazujący różne funkcje, ale wkrótce stanie się to bałaganem. Każda rada byłaby bardzo mile widziana.


title: Czy powinienem przechowywać hasło „system b” w „system a”?

text: Rozwijam system do mailingu, który posiada identyfikator konta/hasło do logowania oraz muszę przechowywać konto serwera smtp i hasło do wysyłania poczty. Ponieważ poczta jest wysyłana automatycznie, nie mogę prosić użytkownika o podanie hasła/identyfikatora za każdym razem podczas wysyłania. Czy zatem przechowywanie identyfikatora/hasła użytkownika (hasło systemu b) w moim systemie (system a) jest niepewne? Jak mogę to poprawić?


title: Czy taka implementacja wzorca stanu ma sens?

text: Mam za zadanie zaimplementować wzorzec stanu w jednej z moich klas. Przypisanie odnosiło się do sugerowanej implementacji i po zapoznaniu się z tą implementacją byłem zdezorientowany, ponieważ uważałem, że jest ona bezsensowna dla większości aplikacji i szczerze mówiąc po prostu zła z punktu widzenia projektowania, ponieważ całkowicie odrzuca niektóre bardzo podstawowe zasady projektowania kodu oprogramowania. Oto diagram klas sugerowanej implementacji: ![tutaj wstaw opis obrazka](http://i.stack.imgur.com/mexgp.png) Zastanawiam się: Jaki jest pożytek z tej implementacji? To (imo) wyraźnie narusza dwie główne zasady projektowania oprogramowania: ułatwiać konserwację i rozszerzać. Moim zdaniem implementacja ta ma zerową łatwość rozszerzalności (trzeba zmienić źródło przynajmniej dwóch klas, aby np. zaimplementować nowy stan, o którym zapomniałeś przy pierwszym wdrażaniu). Sprzężenie między tym kodem a kodem klienta wydaje się być ogromne. Jeśli usuniesz cokolwiek z tego wzorca, cały kod klienta ulegnie zerwaniu. Jeśli chcesz coś dodać, musisz zmienić cały kod klienta, aby dostosować np. nowy stan, ponieważ nowe stany można wprowadzać tylko za pomocą metody enter() konkretnego stanu, lub poprzez skierowanie ich wstrzykiwania do Kontroler za pomocą metody changeState(). Jako bonus możesz mieć tylko jedną bramę garażową na całym świecie, ponieważ stany są praktycznie pojedyncze. Metoda enter() w konkretnych stanach została podana w następujący sposób: public static State enter(Controller c) { if(m_instance == null) m_instance = new <<concreteStateName>>(c); zwróć m_instancja; } Lub możesz mieć wiele drzwi garażowych, które otwierają się jednocześnie, jeśli otworzysz jedną. Dlaczego miałbyś umieszczać wszystkie metody w abstrakcyjnej klasie State? Gdzie jest polimorfia? Dlaczego stany konkretne mają puste lub wyrzucające wyjątki wersje metod, które nie mają nic wspólnego z ich stanem (na przykład wynikowy interfejs Opened będzie miał metodę "lock()", nawet jeśli nie możesz bezpośrednio zablokować garażu drzwi, gdy są otwarte (musisz je najpierw zamknąć). Dlaczego nie wybrać jednej metody i nie wdrożyć jej inaczej w konkretnych państwach, sprawiając, że rzecz znów będzie łatwo rozszerzalna? Jest również (znowu, o ile widzę) tak naprawdę nie do utrzymania bez wielu problemów. A co, jeśli po kilku miesiącach użytkowania garażu uznasz, że jeden stan jest nie tylko przestarzały, ale wręcz błędny? Będziesz musiał go usunąć, a wraz z nim odpowiednią metodę w State(), łamiąc całą bazę kodu, która używa tej implementacji. To jest brama garażowa z czterema stanami. Nie chciałbym nad tym pracować, gdyby miał więcej stanów. Sytuacja staje się bardziej zagmatwana, gdy rozglądam się po Internecie: Wzorzec faktycznie wydaje się być zaimplementowany dokładnie w ten sposób wiele razy (na przykład jest zaimplementowany w ten sposób w naszej krajowej Wikipedii (niemiecki)). Właściwe pytanie: Czy czegoś mi brakuje, czy jest to po prostu złe? Ponieważ jest to tak rozpowszechnione, myślę, że może mi tutaj brakować czegoś oczywistego.


title: Czy można używać dzienników w metodach pomocniczych?

text: Przez długi czas wątpiłem, czy mieć logger w metodach (zwykle pomocniczych), takich jak ta poniżej. Czy możemy wydrukować go w metodzie, czy wydrukować odpowiedź w miejscu wywołania metody. public String getAddNewUserUrl() { String url = null; Tryb ciągu = null; spróbuj { log.info("Wewnątrz getAddNewUserUrl "); // Czy możesz używać takich logów. tryb = nowy ModeUtil().getMode(); if("local".equalsIgnoreCase(tryb) || "staging".equalsIgnoreCase(tryb)) { url = ResourceBundle.getBundle("ApplicationResources").getString("staging.url"); } else { url = ResourceBundle.getBundle("Zasoby aplikacji").getString("staging.url"); } log.info("URL to: " + url); // Czy można używać takich logów } catch(Exception e) { e.printStackTrace(); log.info("Wyjątek w metodzie getMode ::"+e.getMessage()); } zwrotny adres URL;


title: Czy dane powinny być przechowywane w lokalnej bazie danych w systemie Android, gdy intensywnie korzystasz z usług REST?

text: Załóżmy, że mam aplikację, która stale zmienia dane. Zmiany są tak częste, że w zasadzie trzeba odświeżać dane za każdym razem, gdy otwierasz jakiś ekran i odświeżasz go. Czy warto wdrożyć lokalną bazę danych dla takiej aplikacji? Wdrażanie bazy danych w takiej aplikacji wydaje się zbędne, ponieważ: * Struktura danych może być złożona (tablice, opcjonalne parametry itp.) i dlatego używanie kursorów nie jest zbyt wydajnym sposobem na ich przekazywanie * Dane nie muszą być przechowywane przez długi czas * Jeśli zoptymalizowany do żądania filtrowanych danych na niektórych ekranach (w celu zmniejszenia ruchu danych), musi upewnić się, że aktualizacje bazy danych są filtrowane w taki sposób, aby nie wpłynąć na niefiltrowane dane (które mogą być używane przez inne ekrany). Nie tak trudne, ale wciąż coś do opracowania (i przetestowania) Jednak wdrożenie lokalnej bazy danych może oznaczać szybszą nawigację. Ale znowu nie jest to prawdą, jeśli żądania usług są wysoce zoptymalizowane, aby uniknąć wysyłania nadmiarowych danych. Czy aplikacje takie jak Play Store, Facebook, Google+ wykorzystują lokalną bazę danych do replikacji struktur danych przechowywanych w zdalnej bazie danych? **Chcę tylko wiedzieć, jaka jest powszechna praktyka tworzenia aplikacji w dużym stopniu opartych na usługach internetowych.**


title: Ankieta dotycząca frameworków internetowych Erlang

text: (Zainspirowane podobnym pytaniem na Haskel) Istnieje kilka frameworków internetowych dla Erlanga, takich jak Nitrogen, Chicago Boss i Zotonic, i kilka innych. W jakich aspektach różnią się od siebie? Na przykład: 1. cechy (np. tylko serwer lub skrypty klienckie, łatwa obsługa różnych rodzajów baz danych) 2. dojrzałość (np. stabilność, jakość dokumentacji) 3. skalowalność (np. wydajność, poręczna abstrakcja) główne cele Ponadto, jakie są przykłady rzeczywistych witryn/aplikacji internetowych korzystających z tych frameworków? EDYCJA: Rozpoczęcie nagrody w nadziei, że wywoła to rozmowę