title: Skrypty do uruchamiania programów Java - m.in. Mrówka

text: Mój zespół używa obecnie skryptu Ant do _wykonywania_ różnych programów Java. Zauważ, że nie pytam o zarządzanie cyklem kompilacji/wdrażania, do którego już używamy Mavena (całkiem szczęśliwie). Na przykład używamy czegoś takiego: <path id="lib"> <fileset dir="path/to/lib" /> </path> <path id="run"> <path refid="lib" /> </path> <nazwa celu="aJavaProgram"> <java classname="path.to.AJavaProgam" classpathref="run" fork="tak" failonerror="false" append="true" /> </target > <nazwa docelowa="inny programJava" depend="aProgram Java"> <java classname="path.to.AnotherJavaProgam" classpathref="run" fork="tak" failonerror="false" append="true" /> </target > Pierwotnie wybraliśmy Anta z następujących powodów (a raczej nie wybrałem Anta, tak było, kiedy dołączyłem, ale myślę, że są to dobre powody do wyboru): * był to łatwy sposób zarządzania zależnościami (chociaż teraz pobieramy je od Mavena) * pozwala nam to łatwo budować/utrzymywać zależności między poszczególnymi zadaniami * możemy wdrożyć skrypt Ant i biblioteki Java oraz łatwo uruchomić parti zwykłe zadania - tj. * nie musimy się martwić o ścieżki klas (konfigurowane w skrypcie Ant) * nie musimy się martwić o budowanie jarów z głównymi klasami określonymi w manifeście * możemy użyć Ant do tworzenia / przechowywania / zarządzania argumenty przekazane do metod main() * możemy podłączyć te skrypty mrówkowe do naszych IDE i stamtąd uruchamiać zadania. Ogólnie jesteśmy z tego bardzo zadowoleni. Jednak rosnącym problemem jest problem z zaczepem ant-java-shutdown \- oznacza to, że jeśli jeden z tych programów Java ulegnie awarii, ale się nie zakończy, zakończenie procesu Ant, z którego został uruchomiony, nie kończy procesu Java - co to musi być zrobione ręcznie i jest to prawdziwe wiązanie. Jestem również świadomy dwóch innych (możliwych) czynników: * to jest używanie Ant w nieco nietypowy sposób, co być może nie jest takie, jak miało być używane Ant (a przynajmniej tak mi się wydaje...) ? * Nie jestem do końca pewien, ale wydaje się, że coraz mniej programistów/zespołów używa obecnie Anta, preferując inne technologie. Tak więc, aby wyjaśnić: * Potrzebuję elastycznego podejścia do uruchamiania różnych programów Java * podejście, którego używaliśmy, polegało na wykonywaniu tego za pomocą skryptów Ant, ale miało to następujące problemy: * zakończenie zadania Ant nie zabija programu Java * wydaje się, że Mrówka nie jest odpowiednim narzędziem do pracy * jak możemy zaspokoić powyższe potrzeby? * jeśli nie Ant, rozwiązanie nie powinno napotkać problemu z zakończeniem / zamknięciem haka


title: Czy to dobra praktyka, czy nie?

text: Mam kolegę, który wymyślił sposób „generowania” informacji z bazy danych, aby wszystkie listy rozwijane jego aplikacji internetowej mogły współdzielić ten sam obiekt w jego kodzie MVC.NET C# i widokach, które mogą zawierać różne dane w zależności od na jakich stołach jest używany. Pracujemy dla agencji rządowej i posiadamy obiekty podzielone na obszary zwane „Regionami”, które zawierają dalsze podzielone obszary zwane VISN, z których każdy zawiera „Obiekty” lub „Obiekty”. Mój kolega opracował bardzo złożony schemat bezpieczeństwa, dzięki któremu ludzie mogą uzyskać dostęp do danych na podstawie ich poziomu uprawnień, który może być przypisany przez region, VISN, witrynę lub dowolną kombinację tych trzech. To fajny schemat i bardzo sprytny. Ma jednak procedury składowane, które zwracają listy regionów, sieci VISN i witryn na podstawie identyfikatora użytkownika danej osoby i zwraca wartości „ogólne”, takie jak `TextFieldID`, `TextField` i `TextParentID`. Mój pierwszy problem z tym polega na tym, że patrząc na te dane wychodzące z bazy danych, nie wiedziałbym, jakie to dane. Uważam, że pola pochodzące z zapytania lub procedury składowanej powinny zawierać opis dostarczanych danych. Co myślą wszyscy inni? Jednak dla mnie głębszym problemem jest to, że pobiera niektóre dane, łącząc je w swojej procedurze składowanej, takiej jak ta SELECT DISTINCT t.VisnID, NULL, t.StationID, 'V' + CAST(t.VisnID as varchar) + ' : ' + t.Station3N + ': ' + t.StationName, t.Inactive FROM Stations t i odsyłanie ich z powrotem we właściwości "TextField", zamiast odsyłania danych dyskretnych oddzielnie (`Station3N`, `StationName`) oraz konkatenowanie go w widoku, co pozwoliłoby na różne konkatenacje w zależności od tego, z jakiego urządzenia uzyskuje się dostęp do aplikacji (może być mobilny i stacjonarny). Jego uzasadnieniem jest to, że może wysłać wszystkie swoje różne dane rozwijane i przechwycić je wszystkie, niezależnie od zawartości, w tym samym obiekcie C# o nazwie „LookupValue”. public częściowa klasa LookupValue : IEquatable<LookupValue> { public LookupValue(string textFieldId, string textField, bool inactive) { TextFieldID = textFieldId; Pole tekstowe = Pole tekstowe; Nieaktywny = nieaktywny; } public LookupValue(string textParentId, string textFieldId, string textField, bool inactive) { TextParentID = textParentId; IDPolaTekstowego = IDPolaTekstowego; Pole tekstowe = Pole tekstowe; Nieaktywny = nieaktywny; } public LookupValue(string textParentId, string textSelfParentId, string textFieldId, string textField, bool nieaktywny) { TextParentID = textParentId; TextSelfParentID = tekstSelfParentId; IDPolaTekstowego = IDPolaTekstowego; Pole tekstowe = Pole tekstowe; Nieaktywny = nieaktywny; } /// <summary> /// Zwraca niestandardowy identyfikator ciągu, jeśli właściwość Inactive ma wartość true. /// </summary> public string GetInactiveString() { string value = ""; if (Nieaktywne) { value = "[I]"; } zwracana wartość; } /// <summary> /// Zwraca niestandardową etykietę tekstową, która łączy właściwość TextField z niestandardowym identyfikatorem ciągu właściwości Inactive. /// </summary> public string GetDisplayNameWithInactiveString { get { return TextField + " " + GetInactiveString(); } } public bool Equals(LookupValue other) { //Sprawdź, czy porównywany obiekt ma wartość null. if (Object.ReferenceEquals(other, null)) zwraca false; //Sprawdź, czy porównywany obiekt odwołuje się do tych samych danych. if (Object.ReferenceEquals(this, other)) zwraca true; //Sprawdź, czy właściwości produktów są równe. return TextFieldID.Equals(other.TextFieldID) && TextField.Equals(other.TextField); } // Jeśli Equals() zwraca true dla pary obiektów // wtedy GetHashCode() musi zwrócić tę samą wartość dla tych obiektów. public override int GetHashCode() { //Pobierz kod skrótu dla pola TextFieldID, jeśli nie ma wartości null. int hashTextFieldId = TextFieldID == null ? 0 : TextFieldID.GetHashCode(); //Pobierz kod skrótu dla pola Kod. int hashTextField = TextField.GetHashCode(); //Oblicz kod skrótu produktu. return hashTextFieldId ^ hashTextField; } } Uważa, że możliwość ponownego wykorzystania tego obiektu jest warta naruszenia separacji obaw i możliwych przyszłych trudności w obsłudze więcej niż jednej odmiany wyświetlania dla listy rozwijanej. Powinienem zwrócić uwagę, że ten obiekt jest zawarty w jego przestrzeni nazw projektu Data (nasze projekty są rozdzielone na dane, sieć, usługi itp.) zamiast przestrzeni nazw projektu sieci Web, a także zwraca ten obiekt do warstwy sieci za pośrednictwem swoich zapytań do repozytorium, które wywołać procedury składowane, które opisałem wcześniej, co moim zdaniem jest rażącym naruszeniem Separacji obaw. Szukam tylko potwierdzenia od innych programistów, że jest to w rzeczywistości zła praktyka, a także szukam pomysłów, które mógłbym mu przedstawić na lepsze sposoby robienia tego, co próbuje. Mam własne pomysły, ale znowu szukam pomysłów innych, więc mam więcej możliwości do zaprezentowania mu. \--Edytuj -- Zapomniałem wspomnieć, że używamy Entity Framework jako ORM, a jego klasy Repository w jego DAL zrzucają dane z przechowywanych procesów do tego obiektu LookupValue.


title: Czy powinienem preferować metody instancji nad metodami klasowymi w Ruby?

text: Pracuję nad aplikacją railsową i wyciągałem funkcjonalność z mojego kodu railsowego do czystych klas ruby w lib/. Często pisałem takie klasy: class MailchimpIntegration def subscribe_email(email, fname, lname) Gibbon.list_subscribe(:id => NEWSLETTER_LIST_ID, :email_address => email, :merge_vars => {'fname' => fname, 'lname' => lname }, :email_type => "html", :double_optin => false, :send_welcome => false) end def unsubscribe_email(email) Gibbon.list_unsubscribe(:id => NEWSLETTER_LIST_ID, :email_address => email) end def change_details(stary_email, email, fname, lname) Gibbon.list_update_member(:id => NEWSLETTER_LIST_ID, :email_address => stary_email, :merge_vars => {'email' => email, 'fname' => fname, 'lname' => lname }) end def get_email_info(email) Gibbon.list_member_info(:id => NEWSLETTER_LIST_ID, :email_address => [email])["data"].first end end Moje pytanie brzmi: Czy mam zmienić te metody na class metody? Wydaje się to rozsądne, ponieważ prawdopodobnie będę je wywoływał, po prostu dodając za każdym razem nową klasę MailchimpIntegration. Jednak generalnie wolę mieć metody instancji, ponieważ można je łatwiej zatykać itp., chociaż wydaje się, że jest to mniejszy problem w ruby. W moim systemie mam kilka takich klas, więc chciałbym zobaczyć, co ludzie o tym myślą.


title: Rola określenia typu zmiennej (zmiennoprzecinkowa lub stała) w realizacji programu

text: Wiem, że przy zmianie typu zmiennej szybkość zmiany programu. Chcę zrozumieć inne skutki tej zmiany w wydajności oprogramowania. Chcę wiedzieć, czy użyjemy zmiennej zmiennoprzecinkowej zamiast zmiennej stałoprzecinkowej, ilość zużycia pamięci i szybkość programu, co się zmieni?


title: Jak zaprojektować wysoce skalowalne serwisy internetowe w Javie?

text: Tworzę niektóre usługi sieci Web, które miałyby 2000 jednoczesnych użytkowników. Usługi są oferowane bezpłatnie i dlatego oczekuje się, że uzyskają dużą bazę użytkowników. W przyszłości może być wymagane skalowanie do 50 000 użytkowników. Jest już kilka innych pytań, które dotyczą tego problemu, np. - http://stackoverflow.com/questions/2567254/building-highly-scalable-web- services Jednak moje wymagania różnią się od powyższego pytania. Na przykład - Moja aplikacja nie ma interfejsu użytkownika, więc obrazy, CSS, javascript nie stanowią problemu. Jest w Javie, więc sugestie dotyczące używania HipHop do tłumaczenia PHP na kod natywny są bezużyteczne. Dlatego postanowiłem zadać moje pytanie osobno. Oto konfiguracja mojego projektu - 1. Usługi WWW oparte na resztach przy użyciu Apache CXF 2. Hibernate 3.0 (z odpowiednimi optymalizacjami, takimi jak leniwe ładowanie i niestandardowy HQL do strojenia) 3. Tomcat 6.0 4. MySql 5.5 Jakie są najlepsze praktyki, których należy przestrzegać aby skalowalna aplikacja oparta na Javie?


title: Poznawanie nowej technologii

text: Mam ok. 9 lat doświadczenia w branży IT. Zajmowałem się głównie aplikacjami internetowymi, a obecnie nie mogę się doczekać, aby zostać architektem technicznym aplikacji J2EE. Zwykle mierzę się z tym wyzwaniem; aby dogłębnie poznać nową technologię, zazwyczaj odnoszę się do książki. Niedawno przechodziłem przez „Java Persistence with Hibernate”, aby uzyskać dogłębną wiedzę na temat Hibernate. Przeczytanie książek/przeprowadzenie prac badawczo-rozwojowych, aby dowiedzieć się, jak działają interfejsy API i napisanie przykładowego programu z książek, zajmuje mi zwykle miesiąc. Powinienem wspomnieć, że czytam głównie w wolnym czasie poza moją regularną pracą projektową. Pod koniec tego ćwiczenia mam przyzwoite pojęcie o technologii io tym, jak działa (jej zastosowania w aplikacjach itp.). Jednak po kilku miesiącach zaczynam też zapominać o tym, co przeczytałem w mojej poprzedniej książce (lub o poprzedniej technologii). Głównie dlatego, że projekt, nad którym pracuję, nie korzysta z tych technologii, więc jeśli nie będziesz ćwiczyć, zapomnisz o tych rzeczach. Na przykład: ostatnio czytałem o FTL, ale w moim projekcie używaliśmy jednocześnie zwykłych JSP, więc nie miałem szansy zastosować tam swojej wiedzy o FTL i zapomniałem większości tego, co czytałem o FTL. Z jednej strony uwielbiam wiedzieć więcej o otaczających nas technologiach, a jednocześnie chcę mieć tę wiedzę przy sobie, aby móc z niej korzystać w przyszłości, gdy zajdzie taka potrzeba. Co ja tu robię źle? Czasami myślę, że: 1. Powinienem poświęcić więcej czasu jednej technologii przed włączeniem kolejnej, aby większość z niej zapamiętać. 2. Moje podejście do uczenia się w ten sposób nowych rzeczy jest błędne. 3. Nauka poprzez książki może nie być dobrym podejściem. 4. Muszę zrobić coś dodatkowego, aby moja nauka była aktualna (ale szczerze mówiąc, co to jest dodatkowe; nie wiem). Potrzebuję tutaj pomocy.


title: Kiedy należy używać StringBuilder lub StringBuffer?

text: W produkcyjnej aplikacji internetowej moi koledzy programiści wszędzie używali StringBuffer. Teraz zajmuję się rozwojem i poprawkami aplikacji. Po przeczytaniu StringBuilder i StringBuffer zdecydowałem się zastąpić cały kod StringBuffer przez StringBuilder, ponieważ nie potrzebujemy bezpieczeństwa wątków w naszych ziarnach danych. Na przykład: (W każdym ziarnie danych widzę użycie StringBuffer) @Override public String toString() { StringBuffer sb = new StringBuffer();// zastąp go z StringBuilder sb.append(" ABCD : ").append( abcd); sb.append(", EFGH : ").append(efgh); sb.append(", IJKL : ").append(ijkl); } Dla każdej sesji/żądania tworzymy osobne ziarna danych. Sesja jest używana przez jednego użytkownika, żaden inny użytkownik nie ma do niej dostępu. Czy przed migracją powinienem wziąć pod uwagę inne punkty? Jeśli istnieje pojedynczy wątek (żadne oczekujące wątki/żaden nowy wątek nie będzie szukał blokady obiektu), działa on jednakowo z StringBuffer lub StringBuilder. Wiem, że w przypadku StringBuffer potrzeba czasu, aby zablokować obiekt, ale chcę wiedzieć, czy istnieje między nimi jakaś różnica wydajności, z wyjątkiem blokady/zwolnienia obiektu.


title: Jaka jest nazwa metody wyszukiwania indeksu z tablicy w Objective-c?

text: Mam następującą metodę znalezienia indeksu obiektu książki, który ma nazwę książki: +(NSInteger)indexXXX:(NSString *)bookName XXX:(NSArray *)books { for (NSInteger i = 0; i <books.count; i++) { NSDictionary *książka = [książki objectAtIndex:i]; if ([[book objectForKey:@"bookName"] isEqualToString:bookName]) { return i; } } return -1; } Ale nie wiem, jakiej nazwy powinienem użyć dla tej metody. Czy możesz mi podać kilka nazw metod powszechnie stosowanych w tego rodzaju metodach.


title: logika aplikacji, logika biznesowa, modele, kontrolery - gdzie umieścić mózg aplikacji?

text: Próbuję owinąć głowę wokół modeli, widoków i kontrolerów, ale czuję, że im więcej czytam, tym więcej sprzecznych informacji wydaje mi się napotykać. Myślę, że głównym celem jest – o ile widziałem – strzelanie do grubych modelek i cienkich kontrolerów, ale wciąż jestem trochę zakłopotany tym, gdzie umieścić co. Czy mogę podać przykład czegoś, nad czym pracuję? To jest po prostu osobisty projekt, z którym zajmuję się w PHP dla zabawy -- swego rodzaju mini-gra. Dodawanie zadań czasowych do planu podróży i zbieranie nagród po zakończeniu zadania. Tak więc istnieje klasa podobna do tej: class ItineraryEntry { public $user_id; publiczny $task_id; publiczny czas_zakończenia $; } I kolejna klasa jak ta: class Zadanie { public $task_id; publiczny $opis; publiczny czas trwania; //w sekundach } Tak więc w interfejsie użytkownika użytkownik widzi opis zadania i klika coś w stylu „Dodaj do planu podróży”. Teraz, jeśli dobrze rozumiem, kontroler musi odebrać tę prośbę i coś z nią zrobić. Ale ile? Na przykład muszę dowiedzieć się, kiedy zadanie się zakończy. Mówiąc prosto, to tylko time() + czas trwania zadania. Czy kontroler wykonuje te obliczenia, a następnie przekazuje je modelowi do walidacji, czy też model obsługuje to wszystko? A kontroler to tak naprawdę tylko uwielbiony router danych? Następnie druga część dotyczy tego, co dzieje się po zakończeniu zadania z planu podróży. Tak więc w interfejsie użytkownika zadanie będzie wyświetlane jako ukończone, jeśli czas ukończenia minął, a użytkownik będzie musiał kliknąć coś w stylu „Odbierz nagrody”. Powiedzmy, że to... nie wiem... XP (tj. punkty doświadczenia) - coś, co jest aktualizowane na koncie użytkownika. I powiedzmy, że ilość XP jest w jakiś sposób obliczana na podstawie trudności zadania, wymaganego czasu itp. Więc gdzie miałbym umieścić tę kalkulację? Czy jest to wewnątrz klasy modelu dla mojego obiektu użytkownika, czy mam kontroler, który oblicza to wszystko, a następnie wysyła go do obiektu użytkownika? W modelu dla mojego modelu wejścia na trasę? A powód, dla którego o to pytam, jest taki, że każdy rodzaj kodu Claim Rewards musiałby wykonać co najmniej kilka rzeczy: 1. Właściwie odebrać nagrodę i zaktualizować konto użytkownika 2. Wyczyść wygasłe zadanie z bazy danych (lub zaznaczenie zostało zakończone lub coś w tym stylu) Więc będzie to interakcja zarówno z użytkownikiem, jak i z wpisem planu podróży. Trochę konkretnych wskazówek byłoby naprawdę pomocne. Mój mózg zaczyna boleć od czytania tych wszystkich wyjaśnień, które są czymś w rodzaju tego, co muszę wiedzieć, ale nie do końca. Więc z góry dziękuję!


title: Jak powinienem nazwać proces konwersji obiektu na ciąg znaków?

text: Rozgrywamy w urzędzie grę w „piłkę nożną semantyczną” w tej sprawie: piszę metodę dla obiektu, która będzie reprezentować obiekt jako łańcuch. Ten ciąg powinien być taki, że po wpisaniu (bardziej prawdopodobne, wytnij i wklej) w oknie interpretera (na razie nie będę się z tego mieszać) da obiekt, który jest, dla naszych celów, identyczny z tym na które metoda została nazwana. Trwa ożywiona dyskusja nad „najlepszą” nazwą tej metody. Zaproponowano terminy **pickle** , **serialize** , **deflate** _etc_. Wydaje się jednak, że terminy te zakładają pewien proces usuwania marynowania (unserializacji, _etc_ ), który niekoniecznie jest samym interpreterem języka. Oznacza to, że nie odnoszą się one konkretnie do przypadku, w którym tworzone są ciągi poprawnego kodu. Jest to bliższe **quine** , ale odtwarzamy obiekt, a nie kod, więc to nie jest całkiem poprawne. jakieś sugestie?


title: Jak najlepiej reprezentować synchronizację dwukierunkową w interfejsie API REST?

text: Zakładając system, w którym istnieje aplikacja internetowa z zasobem i odwołanie do zdalnej aplikacji z innym podobnym zasobem, jak reprezentujesz akcję synchronizacji dwukierunkowej, która synchronizuje zasób „lokalny” z zasobem „zdalnym”? Przykład: Mam API, które reprezentuje listę rzeczy do zrobienia. GET/POST/PUT/DELETE /todos/, itp. Ten interfejs API może odwoływać się do zdalnych usług TODO. GET/POST/PUT/DELETE /todo_services/, itp. Mogę manipulować zadaniami do zrobienia z usługi zdalnej za pośrednictwem mojego API jako proxy poprzez GET/POST/PUT/DELETE /todo_services/abc123/ itp. Chcę mieć możliwość wykonania synchronizacja dwukierunkowa między lokalnym zestawem zadań do wykonania a zdalnym zestawem zadań TODOS. W pewnym sensie RPC, można by wykonać POST /todo_services/abc123/sync/ Ale w koncepcji "czasowniki są złe", czy istnieje lepszy sposób na przedstawienie tej akcji?


title: Czy pogląd i model powinny się komunikować, czy nie?

text: Zgodnie ze stroną wikipedii dla architektury MVC widok może być swobodnie powiadamiany przez model, a także może swobodnie odpytywać model o jego aktualny stan. Jednak zgodnie z kursem Paula Hegarty'ego na temat iOS 5 w Stanford, wykład 1, strona 18, cała interakcja musi przejść przez kontroler, z Modelem i Widokiem, które nigdy nie powinny się ze sobą znać. Nie jest dla mnie jasne, czy stwierdzenie Hegarty'ego ma być uproszczeniem kursu, ale kusi mnie, by powiedzieć, że intencją jest projekt jako taki. Jak wytłumaczysz te dwa przeciwstawne punkty widzenia?


title: Czy Lambda działa tak samo jak Aktor? Jak to wytłumaczyć?

text: Jakiś czas temu przeczytałem (z książki), że koncepcyjnie funkcja Lambda jest podobna do Actora. Jednak rozumiem tę koncepcję i docenię wszelkie spostrzeżenia lub wyjaśnienia. Jeśli rzeczywiście są do siebie podobne, jak? Jeśli nie, czy istnieje jakiś związek między pojęciami?


title: Jaki jest najlepszy sposób na poznanie stosu MS Business Intelligence?

text: Jaki jest najlepszy/najłatwiejszy sposób na samodzielne wejście do stosu MS BI (najlepiej z książką [kindle])? W szczególności chciałbym dowiedzieć się więcej o usługach SSIS, SSRS i SSAS w tej kolejności. Próbowałem przeglądać książki na amazon, ale tak naprawdę nie mam pojęcia. Trochę tła: właśnie ukończyłem studia licencjackie z informatyki i wracam na studia magisterskie z informatyki. Pracuję teraz jako programista C#, z pewnym zapleczem internetowym i bazodanowym. Niekoniecznie chcę zostać mistrzem BI, ale chciałbym uzyskać zrozumienie platformy na średnim poziomie.


title: Co robi odnajdywanie ścieżek w routingu internetowym i czym różni się od A*?

text: **Uwaga:** jeśli nie rozumiesz tego pytania, możesz poprosić o wyjaśnienie w komentarzach zamiast odrzucać głos, być może w tej chwili to pytanie wymaga jeszcze trochę pracy. Zostałem skierowany tutaj z pokoju czatu Stack Excange Root Access, ponieważ moje pytanie nie pasowało do superużytkownika. * * * Pod wieloma względami algorytmy wyszukiwania ścieżek, takie jak gwiazda, są bardzo podobne do routingu internetowego. Na przykład: > Węzeł w systemie wyszukiwania ścieżki A* może szukać ścieżki przez krawędzie > między innymi węzłami. > > Router będący częścią Internetu może wyszukiwać trasę przez > kable między innymi routerami. W przypadku A* listy otwarte i zamknięte są utrzymywane przez system jako całość, oddzielnie od każdego pojedynczego węzła, jak również każdy węzeł jest w stanie tymczasowo przechowywać stan obejmujący kilka numerów. Routery w Internecie wydają się mieć niezwykłe właściwości, jak rozumiem: > Są bardzo wydajne. > > W dowolnym momencie można dodać nowe węzły, które wykorzystują wolny adres ze skończonej > (nie podobnej do drzewa) przestrzeni adresowej. > > To prawdziwy routing, jak A*, na przykład nigdy nie ma podwojenia. > > Podobne adresy IP nie muszą znajdować się w pobliżu geograficznej. > > Sieć szybko reaguje na zmiany kształtu sieci, na przykład, gdy > linia nie działa. > > Routery dzielą się informacjami i rejestracja nowych adresów IP wymaga czasu > wszędzie, ale prawdopodobnie każdy router nie musi przechowywać listy wszystkich > adresów, do których każdy z jego kierunków prowadzi najbardziej bezpośrednio. Poszukuję podstawowego, ogólnego, wysokopoziomowego opisu działania algorytmów z punktu widzenia pojedynczego routera. **Czy ktoś taki ma?** Zakładam, że publiczne routery internetowe nie używają A*, ponieważ koszty ogólne byłyby zbyt duże i słabo skalowane. Przypuszczam również, że na całym świecie istnieje jedna metoda, ponieważ wydaje się, że musi wiązać się z dużą ilością przesyłania danych w celu aktualizacji i przekazywania rozsądnej ilości stanu między sąsiednimi routerami. Na przykład, być może ilość danych, które muszą być przechowywane w każdym routerze, skaluje się logarytmicznie z liczbą routerów istniejących na całym świecie, szczegółowość i niezawodność routingu zmniejszają się wraz ze wzrostem odległości, występuje coraz większe cofanie się w niektórych częściach sieci które są mniej jednolite geograficznie lub może każdy router naprawdę wykonuje wyszukiwanie w stylu A*, tymczasowo utrzymując otwarte i zamknięte listy po przybyciu pakietu.


title: Czy istnieje ogromna inna strona tworzenia oprogramowania, którą jakoś przegapiłem, obracająca się całkowicie wokół firmy Microsoft?

text: Nadal jestem początkującym programistą; Zajmuję się tym od 2 lat. Nauczyłem się pracować z kilkoma językami, odrobiną technologii tworzenia stron internetowych, kilkoma bibliotekami, frameworkami i IDE. Ale w ciągu ostatnich dwóch lat (a na długo przed tym, jak zacząłem, naprawdę) ciągle słyszę odniesienia do tych… rzeczy. Milion z nich. Rzeczy takie jak C#, ADO, SOAP, ASP, ASP.NET, .NET framework, CLR, F# itp. I czytałem ich artykuły w Wikipedii, dogłębne, wiele razy i wszystkie wspominają o milionie innych rzeczy z tej listy, ale po prostu nie mogę pojąć, czym to wszystko jest. Jedyną rzeczą, którą odebrałem z całą pewnością, jest to, że za tym wszystkim stoi Microsoft. Brzmi prawie jak spisek. Czy wszystkie te technologie służą tylko do programowania na platformie Windows? Co to jest .NET? Czy niektórzy programiści poświęcają całą swoją karierę tylko tej stronie? Dlaczego miałbym chcieć się w to zagłębić i jaką przewagę ma... cokolwiek to jest... ma nad wszystkimi innymi technologiami? Mam nadzieję, że to ma sens. To szerokie pytanie, ale w środku jest bardzo konkretne pytanie o coś, czego nazwy nie znam. Mam nadzieję, że zrozumiesz moje zmieszanie.


title: Jak prawnie chronić się przed złośliwymi i/lub głupimi użytkownikami?

text: Tworząc publicznie dostępną witrynę internetową, która umożliwia odwiedzającym publikowanie komentarzy, linków do mediów i/lub przesyłanie mediów (np. audio, wideo, obrazów) ... co powinienem zrobić, aby chronić się prawnie w przypadku, gdy odwiedzający zamieszczają linki do lub przesyłają treści że nie powinni (np. media dla dorosłych, obrazy chronione prawem autorskim i/lub media należące do kogoś innego itp.)? Niektóre pytania, które przychodzą na myśl w szczególności: 1. Czy powinienem pozwolić ludziom na anonimowe publikowanie? 2. Jeśli sprawię, że odwiedzający zgodzą się na pewnego rodzaju oświadczenie, w którym biorą pełną odpowiedzialność za to, co przesyłają, jaka powinna być kopia takiego oświadczenia? Proszę podać jak najdokładniejsze kroki, które należy podjąć, jeśli to możliwe.


title: Przyszłość Qt w świetle partnerstwa Nokia-Microsoft

text: Jeśli to przegapiłeś, wiele się wydarzyło w ciągu ostatnich dwóch dni, co może potencjalnie wpłynąć na framework Qt, na gorsze. :-( Będzie to miało wpływ na sektor telefonii komórkowej na kilka i prawdopodobnie obecnie nieznanych sposobów. Zaczęło się wczoraj od wewnętrznego listu prezesa Nokii, Stephena Elopa, przedstawiającego Nokię siedzącą na płonącej platformie i potrzebę wielkiej i agresywnej zmiany w biznesie. Dzień później, na konferencji Nokia World, Nokia ogłosiła współpracę z Microsoftem, która obecnie wznawia współpracę z Nokią, przyjmując platformę Windows Phone 7 i środowisko programistyczne, porzucając Symbiana po drodze i oznaczając Meego jako **R&D**( dość niebezpieczne słowo kluczowe, jeśli o mnie chodzi), jeśli chodzi o serię Maemo/N900, to chyba koniec na dobre. Wiem, o czym myślisz, ale nie, Qt nie zostanie przeniesiony na platformę Window Phone. m też się tego bałem. Możesz obejrzeć wspólny komunikat prasowy Elop & Ballmer tutaj. Teraz po przeczytaniu tego ogromnego wątku na liście mailingowej Qt-interest nie mogę przestać się zastanawiać, jaka jest przyszłość Qt w Nokii, teraz nie są już skupieni (w ogóle?) na Qt (remem ber w październiku skoncentrowano się na **pełnym** skupieniu się na Qt jako głównym środowisku programistycznym dla wszystkich produktów Nokii (w tym Symbiana, tak). Uwielbiam Qt, moim zdaniem jest to jedyny prawdziwie wieloplatformowy framework do tworzenia aplikacji i jeden z nielicznych, który sprawia, że tworzenie C++ jest przyjemnością (w miarę możliwości) i dobre rzeczy działy się z frameworkiem i spory rozmach pod Nokią, dlatego zastanawiam się, jakie są szanse, że Qt może po tym ucierpieć powoli w Nokii? Tak, wiem o KDE.org i fakcie, że Qt można łatwo odrodzić, ale nadal czuję się nieswojo. Musi to być również straszne ze względu na wszystkie wysiłki pracowników Nokii lub strony trzecie, które zajęły się Symbianem i całą zawartością i biznesem Ovi Store Symbian/Qt, i dlaczego nie, Maemo/Meego. Planowane są również masowe zwolnienia, podejrzewam, że technolodzy Symbiana i Qt? Chciałbym usłyszeć twój wkład w tej sprawie? Czy przyszłość Qt jest bezpieczna i odporna? LE: Pytanie było stopniowo poprawiane, ulepszane i lepiej przytaczane, więc możesz rzucić szybkie ponowne przeczytanie, aby zobaczyć, co mogłeś przegapić.


title: Czy menedżer pakietów powinien zmodyfikować plik .bashrc?

text: Piszę pakiet dla czegoś, co wymaga ustawienia zmiennej środowiskowej w celu poprawnego wykonania. Czy etap instalacji menedżera pakietów powinien zmodyfikować środowisko użytkownika, czy po prostu poprosić użytkownika, aby zrobił to sam? Moja intuicja byłaby taka druga, ale widzę argumenty za pierwszym.


title: Podać adres URL do załącznika dokumentu CouchDB bez podawania nazwy użytkownika/hasła?

text: Zamieściłem to pytanie na DBA, ale zostało zamknięte i nigdy nie zostało ponownie otwarte, nawet po tym, jak przepisałem całość, aby było bardziej szczegółowe. Myślę, że jest to bardziej odpowiednie dla programistów :) ## Informacje podstawowe Mam serwer CouchDB (Server B), do którego dostęp ma inny serwer z PHP (Server A). Moja aplikacja internetowa (Serwer JavaScript po stronie klienta) wysyła żądanie pliku do serwera A. Serwer A wysyła żądania do serwera B z poświadczeniami dostępu (nazwa użytkownika:hasło). Serwer B zwraca obiekty JSON, które odpowiadają dopasowanym plikom, a następnie serwer A zwraca te dane do klienta. Odpowiedź zawiera metadane dotyczące pliku oraz adres URL do pliku na serwerze B. Same dane pliku nie są zawarte w odpowiedzi. ## Problem Adres URL do załącznika dokumentu zawartego w odpowiedzi JSON z serwera B zawiera poświadczenia dostępu (nazwa użytkownika: hasło). Serwer A odpowiada na żądanie po stronie klienta, zwracając te obiekty JSON. Klient ma teraz następujące informacje: https://nazwa_użytkownika:hasło@host:port/nazwa_bazy_danych/ścieżka/do/pliku.cokolwiek Obecnie wszystkie dane zawarte na serwerze B znajdują się w jednej instancji bazy danych. Jeśli klient ma dostęp do nazwy użytkownika:hasło do CouchDB, wówczas wszystkie dane mogą być odpytywane za pomocą tych poświadczeń dostępu. Podobnie, https://username:password@host:port/dbname/_all_docs ## Rozważania po stronie serwera CouchDB on Cloudant ## Rozważania po stronie klienta Javascript uruchomiony na kliencie wymaga ciągu URL do pliku. Pliki, do których się odwołują, to warstwy KML dla Map Google. Za pomocą tego konstruktora tworzona jest nowa warstwa KML. ## Czego szukam Zasadniczo moje rozwiązanie pojawiłoby się, gdybym mógł podać link do załącznika dokumentu CouchDB bez podawania nazwy użytkownika/hasła. https://host:port/path/to/file.cokolwiek ## Co zrobiłem Musiałem włączyć cURL dla PHP na serwerze A. sudo apt-get install curl libcurl3 libcurl3-dev php5-curl sudo /etc/init. d/apache2 restart Otrzymałem trochę kodu z bloga Davida Walsha. Mój kod klienta Javascript pobiera listę metadanych pliku JSON z serwera A. Te dane obejmują unikalne identyfikatory bazy danych i nazwy plików (bez haseł i kluczy API). Następnie przekazuję identyfikator dokumentu i nazwę pliku do innej usługi na serwerze A, która odzwierciedla wartość get_data('https://username:password@Server B:port/dbname/path/to/file.cokolwiek'); Mogę teraz udostępniać pliki klientowi bez ujawniania nazwy użytkownika lub hasła do CouchDB na serwerze B.


title: Chętne ograniczenia ładowania

text: Chodzi o to, że gorliwe ładowanie jakiegoś obiektu ze wszystkimi jego asocjacjami zmniejsza zapytania do bazy danych, ale czas zapytania jest znacznie wydłużony. Pytanie brzmi: ten wydłużony czas zapytań w końcu opłaca się, że baza danych nie jest tak często odwiedzana? Wydaje mi się, że unikasz jednego problemu i wpadasz w inny. Obs.: Umieściłbym tag chętnego ładowania, gdybym miał wystarczającą reputację. Ktoś mógłby to stworzyć i edytować tę obserwację.


title: Dlaczego (pozycja < rozmiar) jest tak powszechnym wzorcem w warunkach warunkowych?

text: W warunku (IF) wszyscy używają `(pozycja < rozmiar)`, ale dlaczego? Tylko konwencja czy jest ku temu dobry powód? Przykład: if (pos < array.lengh) { // zrób coś z array[pos]; } dlaczego nie if (array.lengh > pos) { // zrób coś z array[pos]; } ?


title: Nauczanie koncepcji programowania bez określonego języka

text: Współpracuję z facetem, który nie ma doświadczenia w programowaniu. Używamy narzędzia do tworzenia naszej gry (RPG Maker), które ma system oparty na wydarzeniach, który pozwala robić prawie wszystko, co chcesz. Mają GUI i prosty edytor tekstu do wydarzeń. Mój przyjaciel nie ma doświadczenia w programowaniu. Nic. Potrzebuję go, aby rozumiał podstawowe rzeczy, takie jak przepływ sterowania (jeśli / inaczej, zrób / podczas), zmienne / stałe itp. Czego mogę użyć, aby go tego nauczyć, pamiętając, że nie obchodzi mnie konkretna składnia języka? Idealnie, szukam książki o "programowaniu", która mówi o tych pomysłach (być może wizualnie) i nie przejmuje się zbytnio kodem. Czy istnieje coś takiego? Moje „google-fu” mnie zawiodło.


title: Jak języki wpłynęły na projektowanie procesorów?

text: Często słyszymy, że sprzęt nie dba o to, w jakim języku jest napisany program, ponieważ widzi tylko skompilowany kod binarny, jednak nie jest to cała prawda. Weźmy na przykład skromny Z80; jego rozszerzenia do zestawu instrukcji 8080 obejmują instrukcje takie jak CPIR, które są przydatne do skanowania łańcuchów w stylu C (zakończonych znakiem NULL), np. wykonać `strlen()`. Projektanci musieli zidentyfikować, że uruchamianie programów w C (w przeciwieństwie do Pascala, gdzie długość łańcucha znajduje się w nagłówku) było czymś, do czego prawdopodobnie będzie używany ich projekt. Innym klasycznym przykładem jest Lisp Machine. Jakie są inne przykłady? Np. instrukcji, liczby i rodzaju rejestrów, trybów adresowania, które sprawiają, że dany procesor preferuje konwencje danego języka? Szczególnie interesują mnie rewizje tej samej rodziny.


title: Jakie modele oprogramowania są odpowiednie do codziennych kompilacji i ciągłej integracji?

text: Po przeczytaniu testu Joela i o codziennych kompilacjach, dyskusja z kilkoma moimi tech-leaderami z różnych firm wykazała, że nigdy nie wykonywali codziennych kompilacji ani ciągłej integracji, ponieważ według nich: 1. Codzienne kompilacje były przeznaczone dla projektów zgodnych z praktykami Agile . Nie działa w modelu kaskadowym. 2. Ciągła integracja wymagała automatycznych testów, których ich projekt graficzny typu OpenGL/OGRE/OSG nie mógł wykorzystać, ponieważ najwyraźniej automatyczne testowanie jest niepraktyczne w przypadku projektów, w których część graficzna jest (ponowna) opracowywana. 3. Jeden z nich uważa, że zarządzanie konfiguracją nie jest konieczne. Wystarczy podążać za jego filozofią, definiując małe 2-3 dniowe zadania, wykonać wszystkie czynności cyklu rozwojowego dla każdego zadania (kod, przegląd kodu, test jednostkowy, integracja), dostarczyć do integracji strumień oraz zbudować i wygenerować ustawić. 4. Nawet jeśli stworzyli skrypty dla całego procesu kompilacji i nagrywania na płytę CD, tworzenie testów automatycznych było problemem, ponieważ w każdym tworzonym programie nie zawsze wiesz, jakie testy będziesz musiał uruchomić i skryptować test ponieważ zajmuje to zbyt dużo czasu, a automatyczne narzędzia testowe mogą nie zawsze obsługiwać określony rodzaj testów, które możesz chcieć wykonać. Czy codzienne kompilacje i ciągła integracja są naprawdę praktyczne w przypadku projektów niezwinnych? Czy jest przeznaczony tylko do programowania opartego na testach? I czy rzeczywiście wystarczy postępować zgodnie z punktem 3 (powyżej) rodzaju filozofii? Rozmawiałem z nimi o rodzaju automatyzacji skryptów typu build-in-one-step, o której mówi Joel, ale nie byli skłonni kupić tego pomysłu. p.s: Odwiedziłem na tej stronie pytania dotyczące codziennych kompilacji itp., ale wydaje mi się, że to pytanie jest inne. **EDYCJA: Punkt 3 powinien zaczynać się od „Jeden z nich uważa, że integracja zarządzania konfiguracją z narzędziami programistycznymi nie jest konieczna”**


title: Dlaczego zagadkowe krótkie identyfikatory są nadal tak powszechne w programowaniu niskopoziomowym?

text: Kiedyś istniały _bardzo_ dobre powody, aby zachować krótkie nazwy instrukcji/rejestrów. Te powody już nie mają zastosowania, ale krótkie, zagadkowe nazwy są nadal bardzo powszechne w programowaniu niskopoziomowym. Dlaczego to? Czy to tylko dlatego, że trudno jest przełamać stare nawyki, czy są lepsze powody? Na przykład: * Atmel ATMEGA32U2 (2010?): `TIFR1` (zamiast `TimerCounter1InterruptFlag`), `ICR1H` (zamiast `InputCapture1High`), `DDRB` (zamiast `DataDirectionPortB`) itp. * .NET CLR zestaw instrukcji (2002): `bge.s` (zamiast `branch-if-greater-or-equal.short`) itd. Czy nie jest łatwiej pracować z dłuższymi, nie zaszyfrowanymi nazwami? * * * Odpowiadając i głosując, weź pod uwagę następujące kwestie. Wiele z możliwych wyjaśnień sugerowanych tutaj odnosi się **równie** do programowania wysokiego poziomu, a jednak w zasadzie konsensus polega na używaniu nie zagadkowych nazw składających się z jednego lub dwóch słów (z wyłączeniem powszechnie rozumianych akronimów). Ponadto, jeśli twój główny argument dotyczy **przestrzeni fizycznej na diagramie papierowym** , proszę wziąć pod uwagę, że to absolutnie nie dotyczy języka asemblera lub CIL, plus byłbym wdzięczny, gdybyś pokazał mi diagram, w którym nazwy zwięzłe pasują, ale są czytelne pogorszyć schemat. Z osobistego doświadczenia w firmie produkującej półprzewodniki bez bajek, czytelne nazwy pasują dobrze i dają bardziej czytelne diagramy. Czym jest _podstawowa rzecz_, która różni się w programowaniu niskopoziomowym od języków wysokopoziomowych **co sprawia, że lakoniczne, zagadkowe nazwy są pożądane w programowaniu niskopoziomowym, ale nie wysokopoziomowym?**


title: Warunki brzegowe do testowania

text: Ok, więc w teście z programowania otrzymałem następujące pytanie. > Pytanie 1 (1 punkt) > > Znajdź potencjalny błąd w tej sekcji kodu: void Class::Update( float dt ) { totalTime += dt; if( totalTime == 3.0f ) { // Dokonaj zmiany stanu m_State++; } } Odpowiedzi wielokrotnego wyboru na to pytanie były. > a) Ma stałą liczbę zmiennoprzecinkową, w której powinien mieć nazwaną > zmienną stałą > > b) Nie może zmienić stanu tylko za pomocą testu równości > > c) Nie wiesz, na jaki stan się zmieniasz > > d) Klasa jest źle nazwana. Błędnie odpowiedziałem na to pytaniem C. W końcu otrzymałem informację zwrotną na temat odpowiedzi, a odpowiedź zwrotna na to pytanie brzmiała > Prawidłowa odpowiedź to a. Chodzi o zrozumienie prawidłowych warunków brzegowych > dla testów. Inne odpowiedzi są prawdopodobnie ważnymi punktami, ale nie wskazują > potencjalnego błędu w kodzie. Moje pytanie brzmi: co to ma wspólnego z warunkami brzegowymi? Moje rozumienie warunków brzegowych polega na sprawdzeniu, czy wartość mieści się w pewnym zakresie, co nie ma miejsca w tym przypadku. Po przyjrzeniu się temu pytaniu, moim zdaniem, B powinno być właściwą odpowiedzią przy rozważaniu kwestii dokładności używania wartości zmiennoprzecinkowych.


title: Czy powinniśmy umieścić dokumenty specyfikacji w systemie kontroli źródła, takim jak svn?

text: Dzisiaj jeden z moich kolegów i ja prowadzimy debatę na temat „Czy powinniśmy umieścić dokumenty specyfikacji w systemie kontroli źródła, takim jak SVN?”. Moim zdaniem powinno być. Wszystko, co wiąże się z tworzeniem projektu, powinno być dokładnie kontrolowane za pomocą systemu kontroli źródeł. Czy to zła koncepcja w procesie tworzenia oprogramowania?


title: Dlaczego ankieterzy nie poproszą kandydata o przeczytanie kodu?

text: Miałem w życiu kilkanaście wywiadów (niedługo kończę studia) i zastanawiam się, dlaczego tylko raz zostałem poproszony o przeczytanie i wyjaśnienie jakiegoś kodu. Około 90% miejsc pracy dotyczy głównie utrzymania istniejących systemów. Zdolność IMO do odczytania czyjegoś kodu jest ważną umiejętnością. Dlaczego ankieterzy tego nie sprawdzają?* *Wśród moich znajomych jestem jedyną osobą, która została poproszona o sprawdzenie kodu.


title: Jak zarządzać 2 metodami DAO w jednej transakcji?

text: W wywiadzie ktoś zapytał mnie : Jak zarządzać 2 metodami transakcyjnymi/dao w jednej transakcji. Pożądane możliwości: 1. Jeśli któraś z nich zawiedzie, musimy wycofać obie metody. 2. Obie metody można wywołać oddzielnie, dołączając do jednej transakcji. 3. Zarządzanie powinno odbywać się w warstwie DAO, a nie w warstwie usług. Myślę: pytanie dotyczy wiosennego zarządzania transakcjami.


title: Czy mogę legalnie i etycznie wziąć projekt open-source z wkładem społeczności do zamkniętego źródła?

text: Powiedzmy, że zaczynam i rozwijam jakiś projekt na licencji open-source i akceptuję wkład społeczności. Jak chwiejny jest grunt, na którym stoję, jeśli zdecyduję się na komercyjną i zamkniętą (lub podzieloną) licencję na projekt? To pytanie nie odnosi się bezpośrednio do kwestii projektu z wkładem społeczności, który wydaje się być innym terytorium, przynajmniej jeśli chodzi o etykę. Z prawnego punktu widzenia może to być również niepewne, ponieważ nie jestem pewien, czy wkład podlega moim prawom autorskim, czy też współtwórca posiada prawa autorskie do części projektu, którą dodał. Czy jestem bezpieczny (etycznie i prawnie), jeśli mam pewność, że w przyszłości mogę wziąć reklamę projektu?


title: Zaczynasz od Ruby on Rails? Wszędzie widzę dużo krytyki. Czy można zacząć z Railsami już w 2012 roku?

text: Pracowałem już wcześniej nad C i nigdy nie próbowałem swoich sił na żadnym frameworku do tworzenia aplikacji internetowych. Po pewnym przekonaniu jednego z moich znajomych pomyślałem o wypróbowaniu Railsów. Zanim zacząłem pracować nad Railsami, zacząłem trochę uczyć się Rubiego i stąd pewna ciekawość, aby wiedzieć, o czym mówi się o frameworku. W ciągu ostatnich kilku dni widziałem dużo krytyki Railsów jako frameworka. Czy powinienem spróbować swoich sił w Railsach, czy powinienem spróbować czegoś innego? Czy python z Django jest drogą do zrobienia? Czy Nodejs jest właściwą drogą? Czy jest jakiś inny framework oparty na ruby, który może dla mnie działać? Proszę sugerować z otwartym umysłem. Zanim podejmę decyzję, chcę mieć absolutną jasność w moim umyśle. [Uwaga: pytanie zostało zamknięte na Stackoverflow i zasugerowano mi, że to jest lepsze miejsce]


title: Najbardziej odpowiednia licencja OSS dla kodu infrastruktury

text: Zastanawiam się nad potencjalnym wydaniem kodu infrastruktury (związanego z automatycznymi kompilacjami i wdrożeniami) jako OSS i jestem ciekawy, jak wpływają na to różne licencje OSS. W szczególności, LGPL zapobiega modyfikowaniu _samego_ kodu (części/całości) w produkt komercyjny (o co mi chodzi), ale pozwala na "powiązanie" go przy tworzeniu produktów komercyjnych (również ok). W jaki sposób klauzula „linked to” odnosi się do kodu infrastruktury, który nie jest wdrażany z samym produktem? Czy aplikacja nadal będzie musiała zawierać „odpowiednie informacje prawne” (do których się nie denerwuję)? Czy lepiej byłoby przyjrzeć się Licencji Publicznej Eclipse?


title: Czy można w połowie zsynchronizować funkcje JavaScript zawierające wywołania asynchroniczne?

text: Zastanawiam się, czy istnieje sposób, aby w połowie zsynchronizować funkcje javascript, w których wymagane są dane w locie. Nie chcę, aby było to czysto blokujące (co, jak sądzę, jest niemożliwe), chcę po prostu fajny sposób na napisanie całego algorytmu w jednym kawałku. Weźmy następujący przykład: function(){ polecenie1; var x1 = coś; funkcja_async(x1, wywołanie zwrotne1); } funkcja callback1(dane){ var x2 = polecenie2(dane); async_function2(x2, callback2); } funkcja callback2(dane1){polecenie3(dane1); } Chciałbym napisać coś takiego: function(){ command1; var x1 = coś; call(async_function, [x1], callback1); var x2 = polecenie2(dane); call(async_function2, [x2], callback2); polecenie3(dane1); } * Próbowałem pobawić się właściwością funkcji `caller`, ale nie znam wystarczająco środowiska wykonawczego. * Próbowałem również napisać funkcję "call" jak powyżej, używając funkcji `apply` do przekazania niestandardowego wywołania zwrotnego, które zwraca wynik funkcji asynchronicznej do swojego wywołującego. Co mnie denerwuje, to fakt, że podczas programowania\debugowania muszę podążać za kodem z jednej funkcji do drugiej (tak jak w przypadku powstania filmu). Chcę w jednym miejscu napisać algorytm wysokiego poziomu bez rozkładania go na wiele funkcji. Na przykład, jeśli chcę napisać algorytm A*, ale funkcja „getNeighbors” jest asynchroniczna.


title: Co jest specjalnego w 26 lipca i dlaczego jest tak często używany w przykładach nagłówka Expires?

text: Zauważyłem, że 26 lipca (moje urodziny) jest używany bardzo często w różnych przykładach PHP związanych z zapobieganiem buforowaniu http za pomocą nagłówka `Expires`, takich jak: http://stackoverflow.com/questions/12398714/cache-issue-with- private- networking-stream http://stackoverflow.com/questions/2833305/how-to-expire-page-in-php-when-user-logout http://expressionengine.com/archived_forums/viewthread/81945/ Co jest specjalnego w tym dniu?


title: Dlaczego mieszanie liczby mnogiej z liczbą pojedynczą i wielkością wielbłąda z podkreśleniami w konwencji nazewnictwa php ciasta jest lepsze niż prostsza konwencja?

text: Używam ciasteczek php od ponad roku i ogólnie mi się podoba, ale trudno mi zrozumieć zalety złożonych konwencji nazewnictwa nad czymś prostszym. Cake używa liczby mnogiej tutaj i liczby pojedynczej tam (kontrolery vs modele i zgłaszane nazwy kontrolerów) dla swoich nazw, a także używa wielkich liter i podkreśleń (nazwy metod i zmienne klas vs tabele bazy danych i zmienne widoku). O ile widzę, wybranie liczby mnogiej lub pojedynczej i podkreślenia lub wielbłąda i użycie tylko jednego z każdego wyboru wszędzie nadal przyniosłoby wszystkie reklamowane korzyści, ale byłoby prostsze w użyciu dla programisty. Jakie są zalety konwencji nazewnictwa ciasteczek php, których nie można osiągnąć za pomocą powyższego systemu? Proszę zademonstrować, dlaczego prostszy system nie zadziałałby dla żadnej asercji.


title: Projekt fabryki buforowania

text: Mam fabrykę `class XFactory`, która tworzy obiekty `class X`. Instancje `X` są bardzo duże, więc głównym celem fabryki jest ich buforowanie, tak transparentnie dla kodu klienta, jak to tylko możliwe. Obiekty `klasy X` są niezmienne, więc poniższy kod wydaje się rozsądny: # module xfactory.py import x class XFactory: _registry = {} def get_x(self, arg1, arg2, use_cache = True): if use_cache: hash_id = hash ((arg1, arg2)) if hash_id in _registry: return _registry[hash_id] obj = x.X(arg1, arg2) _registry[hash_id] = obj return obj # moduł x.py klasa X: # ... Czy to dobry wzorzec ? (Wiem, że to nie jest rzeczywisty wzorzec fabryczny.) Czy jest coś, co powinienem zmienić? Teraz stwierdzam, że czasami chcę buforować obiekty `X` na dysku. W tym celu użyję `pickle` i będę przechowywać jako wartości w `_rejestrze` nazwy plików marynowanych obiektów zamiast referencji do obiektów. Oczywiście sam `_registry` musiałby być przechowywany w sposób trwały (być może w osobnym pliku marynowanym, w pliku tekstowym, w bazie danych lub po prostu przez nadanie plikom marynowanym nazw zawierających `hash_id`). Tyle że teraz ważność buforowanego obiektu zależy nie tylko od parametrów przekazanych do `get_x()`, ale także od wersji kodu, który utworzył te obiekty. Ściśle mówiąc, nawet obiekt buforowany w pamięci może stać się nieprawidłowy, jeśli ktoś zmodyfikuje `x.py` lub którąkolwiek z jego zależności i przeładuje go, gdy program jest uruchomiony. Do tej pory ignorowałem to niebezpieczeństwo, ponieważ wydaje się mało prawdopodobne dla mojej aplikacji. Ale z pewnością nie mogę tego zignorować, gdy moje obiekty są buforowane w pamięci trwałej. Co mogę zrobić? Przypuszczam, że mógłbym zwiększyć niezawodność `hash_id`, obliczając hash krotki zawierającej argumenty `arg1` i `arg2`, a także nazwę pliku i datę ostatniej modyfikacji `x.py` oraz każdy moduł i plik danych, który to (rekurencyjnie) zależy od. Aby pomóc usunąć pliki pamięci podręcznej, które już nigdy nie będą przydatne, dodałbym do `_rejestru` niezaszyfrowaną reprezentację dat modyfikacji dla każdego rekordu. Ale nawet to rozwiązanie nie jest w 100% bezpieczne, ponieważ teoretycznie ktoś mógłby ładować moduł dynamicznie, a ja bym o tym nie wiedział ze statycznej analizy kodu źródłowego. Jeśli wyjdę na całość i założę, że każdy plik w projekcie jest zależnością, mechanizm nadal będzie się psuł, jeśli jakiś moduł pobierze dane z zewnętrznej strony internetowej itp.). Ponadto częstotliwość zmian w `x.py` i jego zależnościach jest dość wysoka, co prowadzi do poważnego unieważniania pamięci podręcznej. Pomyślałem więc, że równie dobrze mogę zrezygnować z pewnego bezpieczeństwa i unieważnić pamięć podręczną tylko wtedy, gdy istnieje oczywista niezgodność. Oznacza to, że „klasa X” miałaby identyfikator walidacji pamięci podręcznej na poziomie klasy, który powinien być zmieniany za każdym razem, gdy programista uważa, że nastąpiła zmiana, która powinna unieważnić pamięć podręczną. (W przypadku wielu programistów wymagany jest oddzielny identyfikator unieważnienia dla każdego.) Identyfikator ten jest haszowany wraz z argumentami „arg1” i „arg2” i staje się częścią kluczy skrótu przechowywanych w „_registry”. Ponieważ programiści mogą zapomnieć zaktualizować identyfikator walidacji lub nie zdać sobie sprawy, że unieważnili istniejącą pamięć podręczną, lepiej byłoby dodać kolejny mechanizm walidacji: `klasa X` może mieć metodę, która zwraca wszystkie znane „cechy” `X`. Na przykład, jeśli `X` jest tabelą, mogę dodać nazwy wszystkich kolumn. Obliczenie skrótu będzie również obejmowało cechy. Potrafię napisać ten kod, ale obawiam się, że brakuje mi czegoś ważnego; Zastanawiam się również, czy może istnieje framework lub pakiet, który już potrafi to wszystko zrobić. Idealnie chciałbym połączyć buforowanie w pamięci i na dysku. EDYCJA: Może się wydawać, że moje potrzeby mogą być dobrze zaspokojone przez wzór basenu. Jednak w dalszym dochodzeniu tak nie jest. Pomyślałem, że wymienię różnice: 1. Czy obiekt może być używany przez wielu klientów? * Basen: Nie, każdy obiekt musi zostać wyrejestrowany, a następnie zameldowany, gdy nie jest już potrzebny. Dokładny mechanizm może być skomplikowany. * XFabryka: Tak. Obiekty są niezmienne i mogą być używane przez nieskończenie wielu klientów jednocześnie. Nigdy nie ma potrzeby tworzenia drugiej kopii tego samego obiektu. 2. Czy wielkość basenu musi być kontrolowana? * Basen: Często tak. Jeśli tak, strategia może być dość skomplikowana. * XFactory: Nie. Obiekt musi zostać dostarczony klientowi na żądanie, a jeśli istniejący obiekt jest nieodpowiedni, należy utworzyć nowy. 3. Czy wszystkie obiekty są swobodnie zastępowalne? * Pula: Tak, obiekty są zazwyczaj swobodnie zastępowalne (a jeśli nie, to trywialne jest sprawdzenie, jakiego obiektu potrzebuje klient). * XFactory: Absolutnie nie i bardzo trudno jest dowiedzieć się, czy dany obiekt może obsłużyć dane żądanie klienta. Zależy to od tego, czy dostępny jest istniejący obiekt, który został utworzony za pomocą (a) tych samych argumentów i (b) tej samej wersji kodu źródłowego. Część (b) nie może zostać zweryfikowana przez XFactory, więc prosi klienta o pomoc. Klient wywiązuje się z tej odpowiedzialności na dwa sposoby. Po pierwsze, klient może zwiększyć dowolny z kilku wyznaczonych wewnętrznych liczników wersji (jeden na programistę). Nie może się to zdarzyć w czasie wykonywania, tylko programista może zmienić te liczniki, jeśli uważa, że zmiana kodu źródłowego powoduje, że istniejące obiekty nie nadają się do użytku. Po drugie, klient zwróci pewne niezmienniki dotyczące obiektów, których potrzebuje, a XFactory zweryfikuje, czy te niezmienniki nie są naruszone przed udostępnieniem obiektu klientowi. Jeśli którakolwiek z tych kontroli zakończy się niepowodzeniem, XFactory utworzy i dostarczy nowy obiekt. 4. Czy wpływ na wydajność wymaga dokładnej analizy? * Pula: Tak, w niektórych przypadkach pula faktycznie obniża wydajność, jeśli obciążenie związane z zarządzaniem obiektami jest większe niż obciążenie związane z tworzeniem/niszczeniem obiektu. * XFactory: Nie. Wiadomo, że koszty obliczeń obiektów, o których mowa, są bardzo wysokie, a ładowanie ich z pamięci lub z dysku jest bez wątpienia lepsze niż ponowne obliczanie ich od zera. 5. Kiedy przedmioty są niszczone? * Basen: Gdy basen jest zamknięty. Być może może również zniszczyć obiekty, jeśli zostanie poproszony o (częściowe) zwolnienie zasobów lub jeśli niektóre obiekty nie były używane przez jakiś czas. * XFactory: Zawsze, gdy obiekt został utworzony z wersją kodu źródłowego, która nie jest już aktualna, o czym świadczy niezmienne naruszenie lub niezgodność licznika. Proces lokalizowania i niszczenia takich obiektów we właściwym czasie jest dość skomplikowany. Ponadto można zaimplementować unieważnianie wszystkich obiektów na podstawie czasu, aby zmniejszyć skumulowane ryzyko korzystania z nieprawidłowych obiektów. Ponieważ XFactory nigdy nie jest pewne, że jest jedynym właścicielem obiektu, takie unieważnienie najlepiej osiągnąć przez dodatkowy „licznik wersji” w obiektach klienta, który jest zwiększany programowo okresowo, a nie przez programistę. 6. Jakie szczególne względy obowiązują w środowisku wielowątkowym? * Pula: musi unikać kolizji przy pobieraniu / ewidencjonowaniu obiektu (nie chcę pobierać obiektu do dwóch klientów) * XFactory: musi unikać kolizji przy tworzeniu obiektu (nie chce tworzyć dwóch obiektów na podstawie dwóch identyczne żądania) 7. Co należy zrobić, jeśli klient nie zwolni przedmiotu? * Basen: Po pewnym czasie może chcieć udostępnić obiekt innym. * XFabryka: Nie dotyczy. Klienci nie powiadamiają XFactory o zakończeniu pracy z obiektem. 8. Czy obiekty wymagają modyfikacji? * Pula: przed ponownym użyciem może być konieczne zresetowanie do stanu domyślnego. * XFactory: Nie, obiekty są niezmienne. 9. Czy są jakieś specjalne względy związane z trwałością obiektów? * Basen: Zazwyczaj nie. W puli chodzi o zaoszczędzenie kosztów tworzenia obiektów, więc wszystkie obiekty są przechowywane w pamięci (odczyt z dysku zaprzeczałby celowi). * XFactory: Tak, XFactory to oszczędność kosztów wykonywania złożonych obliczeń, więc przechowywanie obliczonych wcześniej obiektów na dysku ma sens. W rezultacie XFactory musi radzić sobie z typowymi problemami trwałego przechowywania; np. podczas inicjalizacji musi połączyć się z pamięcią trwałą, uzyskać z niej metadane o tym, które obiekty są tam aktualnie dostępne, i być gotowym do załadowania ich do pamięci, jeśli jest to wymagane. Obiekt może znajdować się w jednym z trzech stanów: „nie istnieje”, „istnieje na dysku”, „istnieje w pamięci”. Podczas działania XFactory stan może się zmieniać tylko w jednym kierunku (w prawo w tej kolejności). Podsumowując, złożoność puli znajduje się w pozycjach 1, 2, 4, 6 i prawdopodobnie 5, 7, 8. Złożoność XFactory znajduje się w pozycjach 3, 6, 9. Jedyne nakładanie się to pozycja 6 i tak naprawdę nie jest to rdzeń funkcję puli lub XFactory, ale raczej ograniczenie projektu, które jest wspólne dla każdego wzorca, który musi działać w środowisku wielowątkowym.


title: Dlaczego tak ważne jest studiowanie tłumacza seplenienia w sepleniu?

text: Widziałem wiele programów nauczania CS i sugestii dotyczących uczenia się dla nowych programistów, które wzywają początkującego programistę do studiowania interpretera seplenienia, który jest specjalnie napisany w sepleniu. Wszystkie te strony mówią rzeczy podobne do: „to intelektualne objawienie”, „to doświadczenie oświecenia, które powinien mieć każdy poważny programista” lub „pokazuje ci relacje sprzęt/oprogramowanie” i inne niejasne stwierdzenia, szczególnie z tego artykułu zaczerpniętego z ten renomowany poradnik. Ogólny sentyment mojego pytania brzmi: w jaki sposób seplenienie osiąga powyższe cele i dlaczego seplenienie? Dlaczego nie jakiś inny język? Pytam o to, bo właśnie skończyłem pisać interpreter schematu w schemacie (zaczerpniętym z SICP http://mitpress.mit.edu/sicp/ ) a teraz piszę interpreter pytona w schemacie i walczę o to legendarne objawienie to ma pochodzić konkretnie od tego pierwszego. Szukam konkretnych szczegółów technicznych między dwoma językami, które mogę wykorzystać w ich interpreterach schematów, aby zrozumieć, jak działają programy. Mówiąc dokładniej: > Dlaczego nauka tłumacza, który jest napisany w języku, który > interpretuje, jest tak podkreślana - czy to tylko świetne ćwiczenie umysłowe, aby utrzymać > oryginalny język i język wbudowany, czy też istnieją specyficzne problemy > których rozwiązania mogą tylko znaleźć się w naturze oryginalnego języka? > > W jaki sposób interpretery lisp demonstrują dobre koncepcje architektury dla własnego > przyszłego projektu oprogramowania? > > Czego by mi brakowało, gdybym wykonał to ćwiczenie w innym języku, takim jak C++ lub > Java? > > Jaki jest _najczęściej używany_ wynos lub "narzędzie mentalne" z tego ćwiczenia? ** ** Wybrałem odpowiedź, którą zrobiłem, ponieważ _zauważyłem_, że dzięki temu ćwiczeniu zyskałem więcej umiejętności projektowania narzędzi parsujących w mojej głowie niż jakiekolwiek inne pojedyncze narzędzie i chciałbym znaleźć inne metody parsowania, które mogą działać lepiej interpreter schematu niż interpreter Pythona.


title: Utrzymuj wartości AJAX

text: Mam symulator, który pobiera dane z bazy danych — oblicza i zwraca wynik JSON do wywołania ajax, które renderuje tabelę wyników. Procedura obliczania jest następująca: 1. pobierz X liczbę danych, które są zgrupowane i mają do nich wagi. 2. wykorzystać dane historyczne i uruchomić algorytm rozkładu wag w grupie. 3. zwróć jako JSON metryki każdej z danych, starą wartość i obliczoną nową wartość 2 Pytania: 1) Czy kalkulacja Javascript jest lepsza czy gorsza (lub równa) kalkulacji PHP w celu uzyskania wyników. 2) JEŚLI obliczenia JavaScript są szybsze lub na równi z PHP, to zakładam, że podróż do wywołania ajax jest małym wąskim gardłem. Tak więc jedną z możliwości byłoby wstępne załadowanie danych i obliczenie ich w locie. A teraz, jak możesz skutecznie podtrzymywać to wstępne ładowanie? Czy to po prostu załaduje wszystko do prostej zmiennej przez ajax? Jak dotąd potrzeba około 55 sekund, aby wynik zwrócił 2000 wpisów z danych z 14 dni.


title: Test jednostkowy: jak najlepiej dostarczyć dane wejściowe XML?

text: Muszę napisać test jednostkowy, który sprawdza poprawność serializacji dwóch atrybutów pliku XML (rozmiar ~ 30 KB). Jaki jest najlepszy sposób dostarczenia danych wejściowych do tego testu? Oto opcje, które rozważałem: 1. Dodaj plik do projektu i użyj czytnika plików 2. Przekaż zawartość XML jako ciąg 3. Utwórz XML za pomocą programu i przekaż go Jaka jest moja najlepsza opcja i dlaczego ? Jeśli jest inny sposób, który uważasz za lepszy, chciałbym go usłyszeć.


title: Rozwój sterowany zachowaniem / diagram przypadków użycia

text: Jeśli chodzi o rozwój Behavior-Driven Development narzucający testy akceptacyjne, czy diagram przypadków użycia jest przydatny, czy też prowadzi do „nadmiaru dokumentacji”? Rzeczywiście, testy akceptacyjne reprezentujące specyfikacje przez przykład, ponieważ przypadki użycia promują się pomimo bardziej ogólnego sposobu (ponieważ przypadki, a nie scenariusze), czy nie są zbyt podobne, aby traktować je obie w czasie nowo tworzonego projektu? Z tego linku jedna opinia jest następująca: > Kolejna świadomość, jaką miałem, jest taka, że jeśli wykonujesz Przypadki Użycia i zautomatyzujesz > Testy Akceptacyjne, zasadniczo podwajasz swoją pracę. Występuje duplikacja > między Przypadkami Użycia a Testami Akceptacji. Myślę, że jest dobry argument >, że UserStories + testy akceptacji są bardziej wydajnym sposobem pracy > w porównaniu do przypadków użycia + testów akceptacji. O czym myśleć?


title: Rysowanie niestandardowej kontrolki renderowanej w systemie Windows — zmiana rozmiaru

text: Trochę tła: aby nauczyć się programowania GUI i rysowania w Windows, zaczynam tworzyć własny zestaw narzędzi GUI w Windows (więc jest to ćwiczenie dydaktyczne, nie sugeruj "użyj Qt" lub "użyj MFC"). Chciałbym narysować cały obszar okna z kontrolerów pamięci w podwójnym buforowaniu (w ten sposób sam obsługuję zdarzenia myszy i klawiatury), ale teraz zastanawiam się, jak powinienem obsługiwać zdarzenia zmiany rozmiaru z okna: załóżmy, że mam kontrolkę tekstową i pasek boczny a moje okno otrzymuje polecenie zmiany rozmiaru ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/YTwfs.png) pasek boczny powinien się powiększyć, a kontrolka tekstu powinna pokazywać więcej tekstu (jest również większa) . Pierwszą rzeczą, która przychodzi mi do głowy, jest przerysowanie wszystkich widżetów w pamięci DC, a następnie BitBlt na ekranie. W każdym razie niektóre widżety mogły w ogóle się nie zmienić lub mogły zostać tylko nieznacznie zmienione (część _"Tekst tutaj, tekst tutaj, te"_ nie uległa żadnej zmianie podczas zmiany rozmiaru). Co można zrobić, aby wykorzystać ten fakt i uniknąć przerysowania (nawet w pamięci DC, a nie urządzenia DC) części, które nie uległy zmianie?


title: Aplikacja c++ GUI w Linuksie bez zestawu narzędzi

text: Wszyscy wiemy, że istnieje wiele zestawów narzędzi dostępnych dla aplikacji GUI w c++ dla Linuksa. Ale z pewnych powodów chcę stworzyć aplikację GUI bez żadnego zestawu narzędzi. Wiem, że to pytanie zostało zadane wcześniej, ale nie ma właściwej odpowiedzi. Proszę więc opowiedzieć, w jaki sposób mogę stworzyć aplikację GUI na Ubuntu 12.04. Proszę nie sugerować mi zestawu narzędzi, to nie jest dla mnie opcja.


title: Przepisywanie obliczeń formuł C# w T-SQL

text: Mamy aplikację 3-warstwową z klientem Języka C#, który łączy się z usługą sieci Web Języka C# za pośrednictwem WCF i żąda danych z bazy danych SQL Server. Jedną z funkcji naszej aplikacji jest tworzona przez użytkownika aplikacja formularzy, w której nasi klienci konfigurują formularze zawierające pola. Pola odnoszą się do wartości, które mogą być importowane, wprowadzane przez użytkownika lub obliczane. Obliczenia można traktować jako Operację / Wartość / Ramy czasowe. Każda wartość, do której odwołuje się obliczenie, może być również wartością obliczoną. (Dba się o to, aby nie istniały cykliczne obliczenia). Na przykład użytkownik może skonfigurować pole, które pokazuje Cash Over/Short, które odejmuje wartość Total do Account For i Total Accounted for. Te pola mogą z kolei sumować sprzedaż, płatności kartą kredytową, sumy gotówkowe itp. Zmiana sprzedaży artykułów spożywczych w interfejsie formularza spowoduje zmianę, która spowoduje ponowne obliczenie sumy dla konta, a zmiana tego pola spowoduje ponowne obliczenie pola Cash Over / Short samo. Obliczenia komplikujące są wartościami historycznymi. Niektóre obliczenia mogą być sformułowane w języku angielskim, np. „Odejmij dzisiejszą wartość sumatora od wczorajszej wartości sumatora”. Lub ktoś może po prostu ustawić pole Sprzedaż zeszłego roku na wartość Całkowita sprzedaż dokładnie 365 dni temu. Wszystkie te obliczenia są wykonywane w interfejsie użytkownika C#. Kod C# kompiluje drzewa zależności i konfiguruje procedury obsługi zdarzeń po zmianie wartości. Zmiana wartości wyzwala zdarzenie, a obliczenia zależne od zmienionej wartości są obliczane ponownie. Mamy również mechanizm przeliczania, który weryfikuje poprawność sum przed wprowadzeniem trwałych zmian (np. przed sporządzeniem czyjegoś konta, więc lepiej, aby kwoty były poprawne). Ten aparat ponownego obliczania używa tego samego aparatu obliczeniowego języka C# w wielu wątkach. Pociąga to za sobą kary za odczytywanie z bazy danych, tworzenie obiektów C#, wykonywanie obliczeń i zapisywanie do bazy danych. Zależności ram czasowych oznaczają, że naprawdę musimy obliczyć w pewnym porządku dziennym. Mógłbym użyć jakiegoś kursora, aby poruszać się z dnia na dzień, zbierać wszystkie dane każdego dnia, rozgryźć zależności, dołączyć do wartości historycznych, ale... **Moje pytanie: jak podchodzisz do wykonywania złożonego użytkownika -zdefiniowane obliczenia w sposób oparty na zestawie w SQL?** Nie widzę, jak to zrobić bez operacji RBAR na każdej obliczonej wartości.


title: Wielowątkowe funkcje pre/post

text: Programuję aplikację na urządzenie wbudowane. Używamy RTOS, który obsługuje wielowątkowość. Urządzenie ma naśladować starszy projekt, który został zaprogramowany w zwykłym C (bez wątków). Oryginalny projekt używa stosu i funkcji START / END na początku i na końcu każdej funkcji, które można wywoływać w czasie wykonywania. Za każdym razem, gdy START zostanie wywołany, na stos zostanie umieszczona stała liczba (identyfikująca funkcję) - END usunie ją ze stosu i sprawdzi, czy wierzchołek jest równy wywołanej funkcji. Jeśli jest inaczej, stało się coś naprawdę złego i urządzenie odzyska/zresetuje się. Ta funkcja jest świetna do celów debugowania, ponieważ w pełni pokazuje, jak wywoływane są funkcje. Byłoby wspaniale mieć taką funkcję w wersji wielowątkowej. Zaimplementowałem START i END jako klasę w C++ za pomocą konstruktora i destruktora, co sprawia, że obsługa jest dość łatwa. Prowadzenie tego jednowątkowego działa jak urok. Wszystko, co jest wielowątkowe, zniszczy stos, ponieważ program planujący przełącza kontekst i zapisywanie na jednym stosie nie miałoby sensu. Najbardziej podstawowym rozwiązaniem w moim umyśle byłoby posiadanie jednego stosu START/END dla każdego wątku -> Problem każda funkcja musi wiedzieć, na których wątkach działa. Czy istnieje lepsze rozwiązanie tego problemu?


title: Jak zrobić skrypt z szybszymi zapytaniami?

text: # Mam projekt udostępniania przydatnych adresów URL z informacjami o adresie URL. ## projekt za pomocą: 1. dodania nowego posta (otwierającego bootstrap z textarea ) 2. dodania treści użytkownika (url , hashtagi, tekstu) 3. adresów URL js fetch 4. hashtagów js fetch 5. js wysyłają pierwszy adres url do php curl 6. php zwraca tytuł, opis, obrazy, nazwę witryny według tagów tytuł i meta-tag i 7. użytkownik wybierz obraz i udostępnij post Zrobiłem to wszystko powyżej, ale są pewne błędy i nowe kroki, o które chcesz zapytać ## Błędy ### Przy pobieraniu treści url * niektóre strony nie miały dobrych danych do jej pobrania ( tytuł, opis, obrazy ) * Pobieranie PHP Curl zajmuje dużo czasu ## Pomoc: * jak uzyskać właściwe dane z dowolnego url * jak można przyspieszyć Curl * czy jest jakaś klasa php, aby to było szybsze i bezpieczne # nowe kroki Chcę zrobić ### 1 - Chcę wyświetlać posty jako oś czasu na Twitterze * (przycisk nieprzeczytanych nowych postów z #ilością postów) w czasie rzeczywistym po kliknięciu dołączaj nowe posty * ( ładuj starsze posty po przewinięciu w dół ) * ( przyspieszaj ) # sugeruje ładowanie wyników zapytań do pliku json i upda czy z czasem będzie szybciej ? jeśli użytkownicy publikujący ten sam adres URL otrzymają go z bazy danych bez pobierania? trzeba będzie zapisać pobieranie na db ? wstawiłem wszystkie posty jako tablicę json w tabeli db tylko nazwę witryny, a nie adres URL w innej kolumnie? czy to dobrze ![tutaj podaj opis obrazu](http://i.stack.imgur.com/nxlA3.png)


title: Czy muszę używać Node.js, Javy lub obu w przypadku aplikacji wieloplatformowej?

text: Jestem nowicjuszem w Javie i mam doświadczenie w tworzeniu aplikacji Node.js, więc myślę o stworzeniu programu, który będzie czymś w rodzaju „wieloplatformowej”, gdzie będzie kindle tabletu, który będzie uruchamiał aplikację Java, komputer, który będzie wyświetlał kolejki utworzone z tej aplikacji java na wielu tabletach i inny komputer, który będzie zarządzał danymi w aplikacji (może to być aplikacja internetowa z Node.js). Tak więc Node.js może być serwerem zarządzającym zapytaniami i bazą danych, podczas gdy Java może znajdować się w aplikacji Kindle Fire, która wysyła żądania do serwera, naprawdę nie znam zbytnio Java, ale do czasu nie wiem, czy ta struktura projektu jest w porządku, może może działać lepiej, używając obu stron w aplikacji internetowej Java lub Node.js. Powiedzmy, że ten projekt jest dla restauracji, kelnerzy zamiast książek będą mieli rozpalenie ognia (aplikacja java), z boku będzie duży ekran z kolejkami (można to pokazać z Node.js) zrobionymi z kelnerów na rozpala się, a przy wejściu będzie komputer, który będzie zarządzał pieniędzmi i innymi rzeczami (może również Node.js).


title: Przejście procesu przesiewowego HR

text: Tutaj tylko krótkie pytanie. Mam już licencjat ze statystyki i myślę o zdobyciu Graduate Certificate in Software Engineering oferowanego przez Harvard Extension. Zakładając, że posiadam zarówno licencjat ze statystyki, jak i świadectwo ukończenia studiów magisterskich z inżynierii oprogramowania, czy będę mógł przejść proces selekcji HR, jeśli później złożę podanie o pracę programisty? (Pytam o to, ponieważ wiele stanowisk analityka programistycznego wydaje się wymagać dyplomu lub dyplomu z informatyki lub inżynierii komputerowej) Dzięki,


title: Role użytkowników w aplikacjach GWT

text: Zastanawiam się, czy mógłbyś zasugerować mi jakiś sposób na zaimplementowanie "roli użytkownika" w aplikacjach GWT. Chciałbym zaimplementować aplikację GWT, w której użytkownicy logują się i mają przypisane "role". W zależności od swojej roli mogliby zobaczyć i wykorzystać różne obszary zastosowań. Oto dwa możliwe rozwiązania, które pomyślałem: 1) Możliwym rozwiązaniem może być wykonanie wywołania RPC do serwera podczas onModuleLoad. To wywołanie RPC wygeneruje niezbędne widżety i/lub umieści je na panelu, a następnie zwróci ten panel do klienta. 2) Innym możliwym rozwiązaniem może być wykonanie wywołania RPC przy pobieraniu loginu z ról użytkowników serwera i sprawdzaniu ich, aby zobaczyć, co użytkownik może zrobić. * Rozważam również frameworki bezpieczeństwa Java, takie jak Apache Shiro i Spring Security... Co o nich myślisz? Co myślisz o? Z góry bardzo dziękujemy za pomoc!


title: Kod płyty kotła FXML

text: Czy istnieje sposób na zaadresowanie typowego kodu płyty kotłowej w celu utworzenia wystąpienia i załadowania FXML? Typowa wersja: public void start(Stage primaryStage) { URL fxmlUrl = this.getClass().getResource( /* twoja ścieżka ciągu znaków*/ ); Ładowarka FXMLLoader = new FXMLLoader(fxmlUrl); spróbuj { primaryStage = loader.load(); this.controller = loader.getController(); } catch(IOException ioe) { ioe.printStackTrace(); } primaryStage.show(); } Uwaga dla powyższego kodu, wspierający plik FXML ma jako root `<Stage></Stage>`. To tylko moje preferencje. Ładowanie i dopasowanie do korzenia FXML można odpowiednio dostosować. W każdym razie ładowanie pliku FXML i uzyskanie odniesienia do kontrolera jest kluczową częścią (przez większość czasu). Próbowałem stworzyć metodę narzędziową, taką jak ta poniżej, aby zapobiec temu kodowi płyty kotła: <R, C> void loadFXML(R root, C controller, String path) { URL fxmlUrl = this.getClass().getResource( ścieżka ); Ładowarka FXMLLoader = new FXMLLoader(fxmlUrl); spróbuj { root = loader.load(); kontroler = loader.getController(); } catch(IOException ioe) { ioe.printStackTrace(); } } Jednak na pewnym etapie wystąpiły błędy wskaźnika zerowego lub ładowanie było nieprawidłowe. Wierzę, że ma to coś wspólnego z Generics i/lub castingiem. Jak można ulepszyć ten kod? A może można zasugerować inny kod typu, aby rozwiązać ten problem?


title: Czy istnieje środowisko IDE zorientowane na proces?

text: Mój problem jest prosty: kiedy programuję w paradygmacie OO, często mam część głównego procesu biznesowego podzieloną na wiele klas. Oznacza to, że jeśli chcę zbadać cały łańcuch funkcjonalny, który prowadzi do wyjścia, pod kątem debugowania lub badań optymalizacyjnych, może to być trochę bolesne. Zastanawiałem się więc: czy istnieje IDE, które pozwala umieścić "tag procesu" na funkcjach pochodzących z różnych obiektów i daje widok wszystkich tych funkcji mających ten sam tag? **edit** : Aby dać przykład (że kompletnie zmyślam, przepraszam, jeśli nie brzmi to zbyt realistycznie). Załóżmy, że mamy następujący proces biznesowy dla aplikacji HR: otrzymanie wniosku urlopowego od pracownika, sprawdzenie ważności wniosku, a następnie powiadomienie szefa („jeden z tych leniwych programistów chce kolejnego dnia wolnego”); w tym samym czasie, powiedzmy, że szef będzie chciał mieć tabelę z harmonogramem wszystkich pracowników w czasie, gdy pracownik chce mieć urlop; następnie zajmij się odpowiedzią szefa, wyślij miłego maila do pracownika („Nie ma mowy, leniwe kości”). Nawet jeśli pozbędziemy się wszystkiego, co nie jest czysto biznesowe (proces wysyłania poczty, obsługa baz danych w celu uzyskania przydatnych informacji, funkcjonalności GUI itd.), nadal mamy coś, co nie mieści się w „jednej klasie”. Chciałbym mieć IDE, które dałoby mi możliwość szybkiego ogarnięcia przynajmniej: * funkcji obsługującej walidację wniosku przez pracownika; * Funkcja przygotowująca „rozkład jazdy” dla szefa; * Funkcja obsługująca walidację wniosku przez szefa; Nie umieściłbym wszystkich tych funkcji w tej samej klasie (ale może to mój błąd?). Tutaj może pomóc moje wymarzone IDE.


title: Mono jest często używany do powiedzenia „Tak, platforma .NET jest wieloplatformowa”. Jak ważne jest to twierdzenie?

text: W jaki sposób wybrałbyś dla swojego projektu między .NET i Java w tym momencie? Mówię, że rozważyłbym pytanie „Czy zawsze będziesz wdrażać w systemie Windows?” pojedyncza najważniejsza (EDIT: techniczna) decyzja o nadrobieniu frontu w nowym projekcie internetowym, a jeśli odpowiedź brzmi „nie”, poleciłbym Javę zamiast .NET. Bardzo powszechnym kontrargumentem jest to, że „Jeśli kiedykolwiek będziemy chcieli uruchomić na Linux/OS X/Cokolwiek, uruchomimy po prostu Mono”, co jest bardzo przekonującym argumentem na powierzchni, ale nie zgadzam się z kilku powodów . * OpenJDK i wszystkie JVM dostarczane przez dostawców przeszły oficjalny Sun TCK, zapewniając, że wszystko działa poprawnie. Nie wiem, czy Mono przechodzi przez Microsoft TCK. * Mono śledzi wydania .NET. Jaki poziom platformy .NET jest obecnie w pełni obsługiwany? * Czy wszystkie elementy GUI (WinForm?) działają poprawnie w Mono? * Firmy mogą nie chcieć polegać na frameworkach Open Source jako oficjalnym planie B. Zdaję sobie sprawę, że z nowym zarządzaniem Javą przez Oracle przyszłość jest niebezpieczna, ale m.in. IBM dostarcza JDK dla wielu platform, w tym Linux. Po prostu nie są open source. A zatem, w jakich okolicznościach Mono jest odpowiednią strategią biznesową dla aplikacji .NET? * * * Edycja: Mark H podsumował to w następujący sposób: "Jeśli twierdzenie jest takie, że _"Mam aplikację pod Windows napisaną w .NET, powinna działać na mono"_ , to nie, nie jest to prawidłowe twierdzenie - ale Mono zrobiło to starania o uproszczenie przenoszenia takich aplikacji”.


title: Co to jest idiomatyczne?

text: Rozumiem, że "idiom" jest powszechną operacją lub wzorcem, który w konkretnym języku nie jest uproszczony przez składnię języka podstawowego, taką jak przyrost liczby całkowitej: i = i + 1; W C++ ten idiom jest uproszczony przez operator: ++i; Jednak gdy ktoś używa terminu „idiomatyczny”, nie jestem pewien, jak to rozumieć. Co sprawia, że fragment kodu jest „idiomatyczny”?


title: Ataki typu SQL injection, jak testować i zabezpieczać zapytania coldfusion?

text: Używam Coldfusion 8 i SQL Server 2008. Buduję formularze serwerowe, które wstawiają do bazy dane od użytkowników zewnętrznych, mamy niestandardowy moduł bezpieczeństwa zbudowany przez faceta, któremu przejąłem swoją pracę. 1) Jak możemy przetestować nasze formularze HTML, aby upewnić się, że jesteśmy chronieni przed atakami typu SQL injection? 2) Jak zabezpieczyć CFqueries w CFC? 3) Jakie są najlepsze praktyki w zakresie bezpieczeństwa SQL i Coldfusion? \-- Dużo wiem!


title: Wydajny algorytm sortowania listy graczy w html

text:
Mamy listę graczy, która jest reprezentowana w postaci:

Gracz1

1

Gracz2

2

Gracz3

3

Gracz4

4

 Coś się dzieje i Gracz 4 otrzymuje 600 punktów. Więc zajmuje 1. miejsce. Wraz z nim - player3 otrzymuje 300 punktów i zajmuje 2 miejsce. Dzieje się to po tym samym zdarzeniu - załóżmy, że dostają te punkty z serwera, ale to wszystko, co jest dozwolone na serwerze i serwer nie oblicza pozycji. Jaki jest najskuteczniejszy sposób uzyskania takiego widoku:

Player4

1

Gracz3

 2

Gracz1

3

Gracz2

4

 To nie jest pytanie o kod, to pytanie o: * Jakie to zadanie? Po prostu sortuj? * Czy można użyć JavaScript do rozwiązania tego zadania, jeśli listy mają mniej niż 500 wierszy? * Czy można ponownie renderować całą listę graczy, czy jest kilka sposobów na zmianę pozycji elementu div (indeks w DOM lub coś takiego)? * Czy są jakieś narzędzia i biblioteki, które mogą pomóc w skutecznym rozwiązaniu tego zadania? P.S.: Jeśli chcemy animować całą tę historię - powinniśmy stworzyć kolejkę zadań animacyjnych za każdym razem, gdy wyniki dla wszystkich graczy zostaną przeliczone? **Aktualizacja:** Śledziłem odpowiedź @Jalayn i utknąłem przy następującym problemie: Załóżmy, że lista `[1,2,3,4]` przekształca się w `[2,3,4,1]`. Jeśli to zmapujemy, otrzymamy następujące różnice pozycji `[+1, +1, +1, -3]`.. Teraz, jeśli przesuniemy jeden po drugim elementy do zmiany jego pozycji, wszystko będzie ok, dopóki nie otrzymamy negocjować pozycję diff - 1st pozycja diff nie może już przesuwać się w dół.. Więc moja aktualizacja pytania - jak możemy animować wiersze więcej niż dwa razy? **I ostatni problem, nad którym utknąłem:** Nie jestem pewien, czy najbardziej da się go rozwiązać w tym pytaniu. BTW, jeśli 2 graczy ma takie same punkty - przerwy w planie animacji i duplikaty element_ids. Moje pytanie brzmi teraz jak wykonać następującą transformację listy struktur: `[(#id1, 1, 100),(#id2, 2, 50), (#id3, 2, 50), (#id4, 4, 25) ] => [(#id3, 1, 150), (#id1, 2, 100), (#id4, 3, 75), (#id2, 4, 50)]` Na razie moim rozwiązaniem jest odświeżenie całej listy , ale nie regeneruj go całkowicie — po prostu przenieś wszystkie elementy na pierwszą pozycję w kolejności, w jakiej zostały posortowane w zapisanym formacie JSON. Animacja jest zbyt skomplikowana, aby można ją było wykonać z powodu ostatecznego problemu.


title: Delphi vs C# do programowania GUI

text: Pochodzę z PHP i Pythona z niewielką znajomością C, zrobiłem wiele aplikacji internetowych, teraz myślę o aplikacji Desktop na platformę Windows. Znajomy powiedział mi, żebym wybrał Delphi, a inni mówią, że C# jest najlepszy, cóż, czego szukam to 1. Prostota 2. Produktywność 3. Dobra dokumentacja API 4. Szybkość 5. Przeciągnij i upuść 6. Wielowątkowość i Dobre sieciowe API dzięki


title: Na jakie stanowiska może się zakwalifikować początkujący deweloper za pięć lat?

text: Jestem młodszym programistą, dopiero zaczynam pracę po ukończeniu studiów magisterskich. Nie wiem, na jakich stanowiskach lub rolach mógłbym być po pięciu latach? Więc moje pytanie brzmi: Jakiego rodzaju stanowisk może poszukiwać programista na poziomie podstawowym, taki jak ja, za 5 lat?


title: architektura aplikacji java

text: Musimy napisać panel administracyjny dla wielu klientów. Ale chcemy mieć tylko jeden panel administracyjny i wykorzystywać go w różnych projektach. Ten panel administracyjny będzie zawierał podstawowe elementy, takie jak logika kontroli dostępu, system tworzenia i sprawdzania zmian, logowanie użytkowników itp. Będzie również zawierał raportowanie dla klienta, logi transakcji klienta (które mogą się różnić w zależności od branży, np. bankowość mobilna, bankowość, sprzedaż biletów). Te elementy mogą wymagać modyfikacji w zależności od firmy. Więc myślimy o architekturze tutaj, czy można używać słoików wszystkich podstawowych komponentów i łączyć je ze sobą za pomocą kleju? A może powinniśmy budować każdy komponent jako WAR i tworzyć interfejsy między nimi? Jeśli będzie więcej pomysłów, zostanie to docenione.


title: Skąd pochodzi słowo „Programowanie”?

text: Skąd pochodzi słowo „Programowanie”? Odnoszę się do słowa „program” jako do „instruowania komputera”. Programowanie, programista itp...


title: Co to jest proces lub wątek zombie?

text: Czym jest proces lub wątek zombie i co je tworzy? Czy po prostu je zabijam, czy mogę zrobić coś, aby uzyskać diagnostykę dotyczącą tego, jak zginęli?


title: Moja firma nie pozwala mi już słuchać muzyki

text: Zacząłem programować w wieku 14 lat i minęło ponad dekadę, w tym czasie nie minął dzień, w którym nie słucham muzyki, radia ani podcastów. Kiedy programuję w domu lub w pracy, zawsze lubię słuchać muzyki, czasem tego samego albumu lub playlisty przez cały tydzień, ponieważ staje się ona stała i prawie jej tam nie zauważam. 1 słuchawka w zwykle oznacza, mów do mnie, obie słuchawki są znane dziewczynie i znajomym jako „tryb kodu”. Wiedzą, że lepiej nie wyciągać ze mnie więcej niż kilku słów. Jestem pewien, że rozumiecie! Tak więc pracowałem na co dzień w dużej firmie bankomatowej zajmującej się bankami, byłem bardziej numerem niż osobą, a kiedy pracowałem, mogłem słuchać muzyki całymi dniami i nocami. Jeśli ktoś miałby jakieś problemy, pisałby do mnie na MSN lub podsłuchiwał. Nie przeszkadzało mi to, podobnie jak wszyscy inni (ponieważ wszyscy zrobili to samo). Teraz przeniosłem się (musiałem się przenieść) Mam nową pracę w znacznie mniejszej firmie. Firma w ogóle NIE jest zorientowana na oprogramowanie, jestem jedynym programistą na miejscu, wszystkie poprzednie prace zostały zlecone na zewnątrz. W biurze mamy około 30 osób (mieszanka administratorów, kont, ale głównie hałaśliwe zespoły sprzedażowe), prawdopodobnie rozmawiam z 2 z nich. Nie są grupą towarzyską, nie przeszkadza mi to, ponieważ wiem, że to, co robią, nie ma wpływu na to, co robię i odwrotnie, więc siedzę cicho, zakładam słuchawki i koduję. Wiem (tak jakby wiedzą), że odejdę o tej porze w przyszłym roku, ponieważ to mała firma, którą założyliśmy w wywiadzie, że po 2 latach mogę mieć problemy ze znalezieniem projektów. Więc... wracając do mojego problemu (obiecuję, że to wszystko było istotne) w pierwszym tygodniu skonfigurowałem środowisko kodowania i zacząłem pracować. Kierownik IT odciągnął mnie na bok i powiedział „mamy drobny problem, nie możesz nosić słuchawek”, kiedy zapytałem, dlaczego odpowiedzieli „szef oszaleje”. Tak więc po kilku miesiącach bez słuchawek lub podstępnym noszeniem ich, gdy zrobiło się naprawdę głośno. Nabrałem pewności, że je noszę, jak sam szef przyznał, że je noszę. Powiedziałem mu, że „pomaga mi się skoncentrować i wprowadza mnie w strefę”. W tym momencie nic nie powiedział (i nigdy nie powiedział). Nie miałem problemów przez około 4-5 miesięcy. W zeszłym miesiącu zostałem wezwany na spotkanie z jednym z lekarzy, powiedział mi, że nie mogę już nosić słuchawek. Ponownie zapytałem dlaczego, tym razem powiedzieli „zespół sprzedaży nosi je”. Nie, wiem, że nie, bo siedzę obok nich wszystkich. Próbowałem argumentować, otrzymałem mowę „Wiem, że współczuję” i to było to. Koniec z muzyką. Wróciłem do biura i miałem na sobie kilka par oczu, wyglądając na całkiem zadowolonych z siebie. Jeden nawet zwrócił się do recepcjonisty za mną i powiedział „czy zauważyłeś”, recepcjonistka odpowiedziała… „co?” potem wstałem i spojrzałem przez przepaść prosto na mnie. Subtelne huh. Lubię nazywać to "gorączką małych firm"... nie lubią zmian, kiedy codziennie próbują 'ratować świat'. Więc teraz, po miesiącu, stwierdzam, że nie mogę się w pełni skoncentrować, mój umysł błądzi. Co gorsza... przenieśli moje biurko ze środka biura do głównych drzwi, które akurat znajdują się obok toalet, ogromnej kserokopiarki/drukarki i kuchni. Jest głośno, naprawdę głośno. To właściwie zaczyna mnie stresować i sprawia, że chcę szukać nowej pracy. Oto mój dylemat. Czy jestem po prostu bluzką dla dużych dziewczynek, czy powinnam się po prostu zamknąć i po prostu się z tym pogodzić, bo to tylko przez kolejny rok i trochę... czy myślisz, że mam prawdziwy problem, a jeśli tak... jak bym radzisz sobie z tym? Przepraszamy za Wojnę i Pokój II. Wszystkiego najlepszego! Skalisty


title: Do mapowania - użycie słów w kontekście oprogramowania

text: Zawsze nie rozumiem, jak używać czasownika „mapować” w kontekście kojarzenia obiektów ze sobą, szczególnie jeśli mapowanie jest kierunkowe. Czy istnieje rozróżnienie między > mapowaniem użytkowników na identyfikatory a mapowaniem identyfikatorów na użytkowników > W podanym przykładzie, który byłby lepszy sposób na umieszczenie tego?


title: Analogia dla fragmentów Androida

text: Próbuję zrozumieć przepływ aplikacji na Androida. Pochodzę ze środowiska RoR, więc staram się używać tego tła, aby zrozumieć nowe koncepcje w Androidzie. Oto moje pytanie: Jak mogę myśleć o fragmentach? Czy są jak podszablony w Railsach? Jeśli tak to jak? Jeśli nie, dlaczego?


title: Co to znaczy napisać „dobry kod”?

text: W tym pytaniu zapytałem, czy bycie złym pisarzem przeszkadza ci w pisaniu dobrego kodu. Wiele odpowiedzi zaczynało się od „to zależy od tego, co rozumiesz przez dobry kod”. Wydaje się, że terminy „dobry kod” i „zły kod” są bardzo subiektywne. Ponieważ mam jeden pogląd, może się on bardzo różnić od poglądów innych na ich temat. Więc co to znaczy napisać „dobry kod”? Co to jest „dobry kod”?


title: LGPL, .lib, .dll i linkowanie

text: Próbuję zbudować projekt, który używa niezmodyfikowanej kopii libconfig (http://www.hyperrealm.com/libconfig/). libconfig jest LGPL, ale nie chcę otwierać żadnego kodu z mojego kodu. Zgodnie z moim zrozumieniem, LGPL oznacza, że muszę podać źródło biblioteki (łatwe) i _oznacza dla nich możliwość korzystania z własnej zmodyfikowanej wersji biblioteki_. To ten ostatni element trochę mnie dezorientuje (przepraszam za pewną naiwność). Obecnie moje rozwiązanie VS2010 ma mój projekt i projekt libconfig. Projekt libconfig buduje dll, ale muszę również połączyć mój projekt z .lib libconfig, aby uzyskać definicje dll (Czy ktoś może wyjaśnić, dlaczego jest to konieczne, skoro już dołączam plik nagłówkowy?). Pomimo połączenia plik .dll musi być obecny w czasie wykonywania, aby można było uruchomić plik binarny. Czy muszę dostarczyć wszystkie utworzone przeze mnie pliki .obj i .lib, aby spełnić wymagania LGPL? Czy istnieje sposób na uniknięcie łączenia pliku .lib? Sprawdziłem LoadLibary i GetProcAddress, ale wygląda to o wiele bardziej skomplikowanie, niż bym chciał. A może po prostu przeceniam tutaj wymagania LGPL? Jeśli istnieje inna, bardziej liberalna biblioteka konfiguracyjna dla c++, to również rozwiązałoby mój dylemat. Ale nie udało mi się czegoś znaleźć (a chciałbym uniknąć doładowania).


title: Jak radzić sobie ze strefami czasowymi w aplikacji .NET WCF?

text: Nasza firma prowadzi aplikację SaaS, do której logują się użytkownicy z całego świata (choć głównie z USA). Wszystkie informacje dotyczące naszego czasu przechowujemy w formacie UTC, ale musimy wyświetlać czas w czasie lokalnym. Aplikacja jest oparta na sieci WWW i chcielibyśmy „automatycznie wykryć” strefę czasową użytkownika za pomocą javascript w celu określenia przesunięcia czasu UTC w różnych porach roku. Informacje o przesunięciu użytkownika zostaną przekazane do naszego serwera w jego pierwszym żądaniu, a serwer wyszuka wszystkie znane mu strefy czasowe i zobaczy, które prawidłowe strefy czasowe pasują. Chciałbym użyć wbudowanego obiektu TimeZoneInfo, ale rozumiem, że TimeZoneInfo.GetSystemTimeZones(); opiera się na ustawieniach rejestru serwera. Obecnie dysponujemy 18 serwerami sieci Web o zrównoważonym obciążeniu, które obsługują naszą warstwę usług WCF, i _wierzę_, że nasz zespół TechOps jest czujny, aby upewnić się, że wszystkie serwery są zawsze instalowane za pomocą tego samego dodatku Service Pack. Muszę również zwrócić szczególną uwagę na różne strefy czasowe USA, w szczególności na Pacyfik, Górę, Środkową i Wschodnią. Czy mogę założyć, że pole identyfikatora oparte na ciągach znaków _nie_ zmieni się w najbliższym czasie? Na przykład, jeśli wywołam TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"), chcę zwrócić odpowiedni obiekt TimeZoneInfo. A więc kilka pytań: * Jaki jest najlepszy sposób radzenia sobie ze strefami czasowymi, zwłaszcza jeśli chodzi o zmianę zasad (reguły stref czasowych w USA zmieniły się w 2006 r.) i określanie przesunięć. Czy powinienem spróbować czegoś innego? Należy pamiętać, że zespół produktu nie chce, aby użytkownik musiał wybierać swoją strefę czasową i nie ma problemu z niedokładnym raportowaniem stref czasowych pod pewnymi warunkami (np. jeśli użytkownik przebywa w Meksyku, można go zgłosić jako „ Pacific Standard Time” zamiast bardziej dokładnego „Pacific Standard Time (Meksyk)”. * Jeśli założę, że wszystkie nasze serwery internetowe ze zrównoważonym obciążeniem zawsze działają w tej samej wersji systemu operacyjnego i poziomie poprawek, czy mogę założyć, że uzyskam spójne wyniki * Czy są jeszcze jakieś rzeczy, które muszę wziąć pod uwagę?


title: surowe zapytanie aql w frameworku z ORM opartym na wzorcu Active Record

text: Używam frameworka yii, który implementuje wzorzec Active Record jako bazę ORM. Posiada klasę CActiveRecord, która jest klasą opakowującą tabele z atrybutami odzwierciedlającymi kolumny tabeli. Tak więc każdy obiekt tej klasy reprezentuje wiersz bazy danych. Wiki mówi o wzorcu Active Record: > Rekord aktywny to podejście do dostępu do danych w bazie danych oraz > Tabela lub widok bazy danych jest opakowany w klasę. W ten sposób instancja obiektu > jest powiązana z pojedynczym wierszem w tabeli. Na razie w porządku. Ale gdzie powinienem umieścić złożone surowe zapytanie sql, które na przykład pobiera dane statystyczne? I bardziej ogólnie, gdzie powinienem umieścić metody, które pobierają niektóre dane, które nie mogą być aktywnym obiektem rekordu (jak dane pobierane za pomocą zapytań agregujących) lub jeśli wiem, że nie chcę pobierać obiektu, ale na przykład tablicę?


title: Filtrować listy w aplikacji na Androida w trybie offline czy online?

text: Mam aplikację na Androida, która pobiera listę około 100 pozycji. Próbując zmniejszyć obciążenie serwera, zbudowałem funkcję filtrowania, która robi wszystko w trybie offline, więc w zasadzie zamiast wywoływania serwera (a tym samym zapytania MySQL przy każdym wywołaniu) filtruje samodzielnie. Zauważyłem jednak, że aplikacja ma tendencję do opóźnień (podczas gdy jedyną zmianą jest filtrowanie offline). Czy przetwarzanie stosunkowo dużych list obiektów jest czymś, co powinno być wykonywane w trybie offline, czy powinienem przenosić obciążenie na serwerze?


title: Korzyści z łączenia języków programowania

text: Wiem, że istnieją różne sposoby łączenia języków programowania (Haskell FFI, Boost z C++ i Pythonem, itp.). Mam dziwne zainteresowanie łączeniem języków programowania; jednak tylko raz uznałem to za "konieczne" (nie chciałem przepisywać jakiegoś starszego kodu). Zauważam też, że to zainteresowanie jest wspólne (istnieje mnóstwo pytań dotyczących integracji języków na SO). Moje pytanie brzmi po prostu, czy są jakieś inne korzyści z łączenia języków programowania? Czy warto mieszać różne paradygmaty programowania (np. funkcjonalny+OO, proceduralny+aspektowy)? Wszelkie przykłady z terenu byłyby bardzo mile widziane. **AKTUALIZACJA** Kiedy mówię „połącz dwa języki”, mam na myśli używanie ich w połączeniu, w sposób niekoniecznie pierwotnie zamierzony. Załóżmy na przykład, że używam Boost do włączenia kodu Pythona w C++.


title: Jak zaplanować aktualizacje oprogramowania, główne wydania, kamienie milowe (co to jest?)

text: Jaka jest powszechna terminologia używana do planowania aktualizacji oprogramowania i wsparcia. Na przykład naprawdę nie mam pojęcia, czym różnią się wydania i aktualizacje, jak często są publikowane aktualizacje (mam nadzieję, że nie codziennie)? Co najważniejsze, komunikowanie takich rzeczy jak kamień milowy (co to znaczy?), mapy drogowe, zasadniczo chcę wiedzieć, w jaki sposób mogę zaoferować wsparcie użytkownikom końcowym za pomocą terminologii branżowej.


title: Nienawiść do własnego kodu - na dobre czy na złe, jak sobie z tym radzisz?

text: Czy kiedykolwiek miałeś wrażenie, że Twój kod jest zły, cały projekt to bałagan i po prostu chcesz odejść? W swojej codziennej pracy możesz wyjaśnić to uczucie swoim współpracownikom, dupkowi szefowi lub coś w tym rodzaju. Ale w przypadku projektów pobocznych/zwierząt naprawdę nie ma usprawiedliwienia. Na przykład obecnie opiekuję się moim rozszerzeniem do Firefoksa - naprawiam błędy i dodaję nowe funkcje. Dość często, gdy wracam do kodu napisanego kilka miesięcy temu, pojawiające się we mnie uczucia są dość kontrowersyjne – „Czy to napisałem? Naprawdę?” Wiedząc, że poprawne zaimplementowanie nowej funkcjonalności "w odpowiedni sposób" wymaga wyrzucenia całego modułu i wciąż szybkiego hackowania - czasami nawet się nie waham. Wraz z rozwojem projektu, dodawaniem nowych funkcji pozostaje coraz mniej miejsca na refaktoryzację... Czy masz jakieś przepisy na radzenie sobie z tego rodzaju stanem emocjonalnym? Czy po prostu bierzesz się w garść i zastanawiasz się nad całym projektem, przepisujesz wersję 2? A może po prostu zignoruj to wszystko - "działający kod jest lepszy niż doskonały kod"?


title: Wady redefiniowania metody w prekompilowanym nagłówku

text: Mam dużo wywołań do `NSLog(...)`. Muszę zmienić wszystkie te wywołania na `CLSNSLog(...)`. Więc dodałem to do mojego prekompilowanego nagłówka (.pch): #import <CrashlyticsFramework/Crashlytics.h> #define NSLog(...) CLSNSLog(__VA_ARGS__); Wszystko działa poprawnie. Nie widzę w tym żadnych wad -- zespół może nadal używać NSLog(...) i mogę to łatwo przywrócić. Ale czy czegoś mi brakuje, czy są jakieś problemy projektowe, które spowoduje to później?


title: Zidentyfikuj ten styl programowania

text: Część starszego kodu, który odziedziczyłem, wykorzystuje fakt, że C# obsługuje wiele przypisań do pisania kodu, takich jak: void DisableControls() { ddlStore.Enabled = ddlProgram.Enabled = ddlCat.Enabled = btnSaveProxy.Enabled = btnCancelProxy.Enabled = btnxViewyMassabled = grdPromo.Enabled = fałsz; } Jest to bardzo _ładny_ styl, ze wszystkimi `=` ustawionymi porządnie, a wartością przypisaną na dole, ale jest też dość irytujący w pracy. (I tak, to są zakładki, które ustawiają rzeczy, a nie spacje). Chciałbym wiedzieć, co, jeśli w ogóle, oznacza ten styl w oryginalnym koderze, ponieważ widziałem go wcześniej tylko kilka razy. Czy wskazuje na tło w C++? .NET 1.1? Tylko czyjeś osobiste preferencje? ~~Czy jest jakiś powód, dla którego takie przypisanie łańcuchowe byłoby bardziej wydajne niż indywidualne ustawianie `.Enabled` każdej kontrolki? Mniej tak?~~ (Na tę część odpowiedział komentarz @gnat: `W ten sposób można łatwo wstawić btnWhatever.Enabled = gdy dodawane są nowe przyciski i usuwać, gdy niektóre przyciski są usuwane`) * * * Edytuj: Inne elementy tego styl osoby, przy założeniu, że cały plik został napisany przez jedną osobę (prawdopodobne, ale nie pewne), to umieszczanie argumentów funkcji w następnym wierszu i wstawianie przecinków na początku wiersza zamiast na końcu poprzedniego wiersza. Przykład: PromoUpdate[] GetPromoUpdates( Pole StateField) { List<PromoUpdate> updates = new List<PromoUpdate>(); foreach (PromoOptInState p in field.States.Where( x => x.IsDirty)) { updates.Add(new PromoUpdate() { promoCode = p.Code , optIn = p.IsOptedIn }); } zwróć aktualizacje.ToArray(); } To bardzo dziwne.


title: Czy używanie Xapiana w Django-Haystack wymusza GPL?

text: Rozważ następującą sytuację: * Używa Django (BSD) na stronie internetowej. * Używa Haystack (BSD) do wyszukiwania tekstowego na stronie. * Używa backendu haystack, xapian-haystack (GPL), aby używać Xapian (GPL) jako wyszukiwarki Haystack. Pytanie: czy musi rozpowszechniać kod źródłowy swojej witryny na licencji GPL (lub jej odpowiednika)? Moje pytanie dotyczy tego, czy kod źródłowy jest uważany za pochodny kod GPL. Pragmatycznie powiedziałbym, że kod jest w całości napisany w Python+Django+Haystack, a Xapian można by zastąpić inną wyszukiwarką. Rzeczywiście, różnica w kodzie jest tak prosta, jak HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.xapian_backend.XapianEngine', 'PATH': os.path.join('tmp', 'test_xapian_query' ), 'INCLUDE_SPELLING': True, } } lub HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', 'URL': 'http://127.0.0.1:9200/', 'INDEX_NAME': 'test_default', 'INCLUDE_SPELLING': Prawda, }, } Ale bardzo chciałbym mieć drugą opinię na ten temat.


title: Dlaczego Java obsługuje nawiasy za zmiennymi, a nawet za podpisami metod?

text: Java pozwala na to: class X{ int i,j[]; // j jest tablicą, i nie jest }, a co gorsza, pozwala na to: class X{ int foo(String bar)[][][] // foo faktycznie zwraca int[][][] { return null; } } Ok, powodem tego może być to, że został wypożyczony z C/C++. Jednak Java miała być łatwiejsza niż C/C++. Dlaczego wynalazcy Javy postanowili zezwolić na tę trudną do odczytania konstrukcję. Zawiłe typy C, w których nazwa zmiennej znajduje się w środku typu, są po prostu trudne do odczytania i powodują błędy programistyczne. Zwłaszcza nawiasy za sygnaturą metody. Nigdy nie widziałem ich w użyciu i to nie bez powodu. Nikt nie zagląda za podpisem podczas sprawdzania typu zwrotu metody. Podczas gdy pierwszy przykład może zaoszczędzić kilka naciśnięć klawiszy (ponieważ `int` nie musi być pisany dwa razy), nawiasy za podpisem nawet nie zapisują żadnego, więc nie widzę tutaj absolutnie żadnych korzyści. Czy jest więc jakiś dobry powód (szczególnie drugi), którego mi brakuje?


title: Używanie narzędzi Windows do edycji plików projektu Linux

text: W duchu przyciągnięcia nowych osób do projektu i wykorzystania ich znajomości istniejących narzędzi systemu Windows, jakie są możliwe opcje edycji/rozwoju międzyplatformowego? Oczywiście ludzie z Windows mogliby uczyć się vi/Emacs, X, Eclipse/NetBeans, itp., ale wymagałoby to okresu nauki na osobę. Czy istnieje jakaś kombinacja technologii/narzędzi, która pozwoliłaby programistom najlepiej zaznajomionym z łańcuchem narzędzi Windows pomóc w projekcie opartym na Linuksie? Np. Jeden programista chciałby korzystać z UltraEdit. Dla porównania, wszystkie projekty Linux są procesami demonów napisanymi w C++, a serwer deweloperski ma: * Systemy kontroli wersji obejmują RCS, CVS i SVN. * Narzędzia do kompilacji to GCC i system kompilacji typu Make. * X Windows * Telnet/RSH/SSH Sugestie nie muszą być wolne/open-source, ale wskazanie warunków licencji byłoby bardzo mile widziane (zaktualizowane w celu dodania języka)


title: Jaki problem rozwiązuje automatyczne testowanie interfejsu użytkownika?

text: Obecnie badamy automatyczne testy interfejsu użytkownika (obecnie przeprowadzamy automatyczne testy jednostkowe i integracyjne). Przyjrzeliśmy się Selenium i Telerikowi i zdecydowaliśmy się na ten drugi jako narzędzie z wyboru ze względu na jego znacznie bardziej elastyczny rejestrator – i tak naprawdę nie chcemy, aby testerzy pisali zbyt dużo kodu. Jednak staram się zrozumieć ogólną korzyść. Jakie są poglądy ludzi i jakie rzeczy działają dobrze, a co nie? Nasz system jest w ciągłym rozwoju i regularnie wydajemy nowe wersje naszej (internetowej) platformy. Jak dotąd główną korzyścią, jaką widzimy, jest testowanie regresji, zwłaszcza w przypadku wielu wdrożeń klienckich naszej platformy. Naprawdę szukam poglądów innych ludzi. Uważamy, że to słuszne, ale w już napiętym harmonogramie szukamy dodatkowego wglądu.


title: Czy są jakieś badania dotyczące dziennych różnic w produktywności tego samego programisty?

text: W Internecie nastąpiła fala aktywności, która mówi o ogromnej różnicy między wydajnością najlepszych programistów a wydajnością najgorszych. Oto typowy wynik Google podczas badania tego tematu: http://www.devtopics.com/programmer-productivity-the-tenfinity-factor/ Zastanawiałem się, czy były jakieś badania lub poważna dyskusja na temat różnic w codziennym życiu -dzienna wydajność przez tego samego programistę. Myślę, że osobiście istnieje ogromna rozbieżność w tym, ile mogę zrobić z dnia na dzień, więc zastanawiałem się, czy ktoś inny czuje to samo lub przeprowadził jakieś badania.