title: Dopasuj kupujących i sprzedających na podstawie zakresów dat i ilości akcji

text: _UWAGA: Jest to odniesienie do pytania, które zadałem na Stack Overflow, ale powiedziano mi, aby opublikować to tutaj_ Buduję aplikację handlową, która pasuje do kupujących / sprzedających, którzy posiadają subskrypcję. Subskrypcje mają określoną ilość przez określony czas. Istnieje 8 typów zamówień, które są następujące: * Subskrypcja kupna/sprzedaży (może być częściowo wypełniona ze względu na ilość lub czas) * Subskrypcja kupna/sprzedaży na całą ilość (może być wypełniona tylko częściowo ze względu na czas) * Kup/sprzedaż przez cały czas subskrypcja (może być wypełniona tylko częściowo w odniesieniu do ilości) * Kup/sprzedaj całą subskrypcję ilościową i czasową (nie może być wypełniona częściowo, wszystko lub nic) Każdy użytkownik, który wypełni * * * # Przykład 1 Zakładając, że wszystkie zamówienia w tym przykładzie mogą być częściowo wypełnione pod względem ilościowym i czasowym, powiedzmy, że Użytkownik A składa zlecenie kupna z prośbą o 100 akcji w okresie od 1.02.2014 do 1.03.2014 (dd/mm/rrrr). Aktualnie w księdze zleceń znajdują się 4 zlecenia sprzedaży * Użytkownik B sprzedaje 25 udziałów w okresie 01.01.2014 - 01.05.2014 * Użytkownik C sprzedaje 50 udziałów w okresie 01.01.2014 - 15.02.2014 * Użytkownik D sprzedaje 70 udziałów w okresie 10.02.2014 - 1.07.2014 * Użytkownik E sprzedaje 5 udziałów w okresie 15.02.2014 - 25.02.2014 Co wyglądałoby jak Użytkownik A |------ --------100-----------| Użytkownik B |--------------------------------------25------------------ -----| Użytkownik C |-------------------50---| Użytkownik D |--------------70------------------| Użytkownik E |--5--| Po dopasowaniu zamówienia każdego użytkownika w księdze zamówień będą wyglądały jak Użytkownik A |-25--| |----5-----| Użytkownik B |------25----| |----25-----| Użytkownik C |------50----| Użytkownik D |----70-----| Użytkownik E nie ma otwartych zleceń Przecież księga zleceń wyglądałaby tak: * Użytkownik A kupuje 25 akcji w okresie od 1.02.2014 do 2.10.2014 * Użytkownik A kupuje 5 akcji w okresie od 15.02.2014 - 1.03.2014 * Użytkownik B sprzedaje 25 udziałów w okresie 01.01.2014 - 1.02.2014 * Użytkownik B sprzedaje 25 udziałów w okresie 01.03.2014 - 1.5.2014 * Użytkownik C sprzedaje 50 udziały między 01.01.2014 - 02.01.2014 * Użytkownik D sprzedaje 70 udziałów między 01.03.2014 - 01.07.2014 * Użytkownik E niczego nie sprzedaje # Przykład 2 Ten przykład jest dokładnie taki sam, z wyjątkiem Użytkownik B posiada subskrypcję w dowolnej ilości i czasie. Innymi słowy Użytkownik B chce sprzedać całą swoją pozycję. Po dopasowaniu zamówienia każdego użytkownika w księdze zamówień będą wyglądały jak Użytkownik A |-50--| |--25-|----30----| Użytkownik B |--------------------------------------25------------------ -----| Użytkownik C |------50----| Użytkownik D |-20--| |----70-----| Użytkownik E nie ma otwartych zleceń Przecież księga zleceń wyglądałaby tak: * Użytkownik A kupuje 50 akcji w okresie od 1.02.2014 do 2.10.2014 * Użytkownik A kupuje 25 akcji w okresie od 15.02.2014 - 25.03.2014 * Użytkownik A kupuje 30 udziałów w okresie 25.02.2014 - 1.03.2014 * Użytkownik B sprzedaje 25 udziałów w okresie 01.01.2014 - 01.05.2014 (nawet nie pasuje ponieważ to zlecenie nie pozwala na częściowe wypełnienie) * Użytkownik C sprzedaje 50 udziałów w okresie 01.01.2014 - 02.01.2014 * Użytkownik D sprzedaje 70 udziałów w okresie 15.02.2014 - 25.02.2014 * Użytkownik D sprzedaje 70 udziałów w okresie od 1.03.2014 do 1.07.2014 * Użytkownik E nic nie sprzedaje * * * # Proces Kolejnym wymogiem jest możliwość śledzenia sposobu wypełniania zamówień w bazie danych . Kiedy nadejdzie zlecenie kupna Użytkownika A, najpierw będzie ono pasować do zamówienia Użytkownika B, co spowoduje: Użytkownik A |-----------------75------------| Użytkownik B |------25----| |----25-----| Oba te stany musiałyby zostać zapisane w bazie danych. Gdy to się zakończy, kolejność Użytkownika C zostanie dopasowana, co będzie wyglądać następująco: Użytkownik A |-----25----|------75--------| Użytkownik B |------25----| |----25-----| Użytkownik C |------50----| Kontynuuj: Użytkownik A |--25-| |-------5--------| Użytkownik B |------25----| |----25-----| Użytkownik C |------50----| Użytkownik D |----70-----| * * * # Pytanie Czy istnieje jakiś algorytm do robienia tego, o co proszę? **EDYTUJ** : Po kilku poszukiwaniach wygląda na to, że szukam drzewa przedziałów lub drzewa segmentów, w którym mogę podsumować, co jest w drzewie dla danego przedziału czasu. Jednak muszę być w stanie przechowywać modyfikacje drzewa w bazie danych z datą rozpoczęcia i datą. Czy istnieją jakieś implementacje z tego wykonane za pomocą LINQ lub SQL? **EDYCJA 2:** W mojej pierwszej edycji myślałem, że to drzewo interwałowe, ale teraz wygląda bardziej jak algorytm pakowania bin


title: Jak można porównać częstość występowania produktywności Lisp i OCamla?

text: Mam zamiar rozpocząć nowy projekt i nie mogę się zdecydować, czy powinienem wybrać do projektu OCaml czy Lisp. Moje główne zmartwienie dotyczy różnicy w produktywności — jeśli w ogóle. Programuję OCaml od 1998 roku i chociaż nie próbowałem tego dokładnie zmierzyć, ani nawet precyzyjnie określić, jaka jest produktywność, którą chciałbym zmierzyć, jestem całkiem pewien, że jestem bardziej produktywny z OCaml niż z bardziej klasycznymi językami, które znam , jak C lub Python. Myślę, że tak, ponieważ kompilator jest tak dobry w wyłapywaniu moich błędów, że tylko sprytne błędy trafiają do końcowego programu — ale zwykle są one łatwe do znalezienia, na przykład jakiś fragment logiki, który jest na wpół oczywiście błędny lub zasoby systemowe niewłaściwie manipulowane. Nigdy nie inwestowałem w naukę debuggera OCamla — który, nawiasem mówiąc, może się cofać w czasie — ponieważ nigdy nie czułem, że muszę go używać. Język posiada system modułów pozwalający na uogólnianie struktur za pomocą _funktorów_ oraz preprocesora `camlp4`, który można wykorzystać do rozszerzenia języka, np. do implementacji automatycznej serializacji wartości. Jest to oczywiście coś, czego Lisp nie ma — ale wypróbowałem Slime w Emacsie i wygląda na to, że zawiera wszechmocny debugger i eksplorator kodu. Ale Lisp ma makra. Niestety, moja wiedza o Lispie jest prawie zerowa — bawiłem się nią około jednego popołudnia — i dlatego nie jestem w stanie porównać makr z `camlp4`. Wydaje mi się, że: * Makra w Lispie są znacznie łatwiejsze do napisania niż rozszerzenia `camlp4`. * Makra Lisp są dużo łatwiejsze w użyciu jako moduły lub rozszerzenia `camlp4`. Funktory, gdy są używane do implementacji funkcjonalności podobnej do _cech_, są dość niezgrabne, gadatliwe i wymagają dziwnie wyglądających idiosynkratycznych wywołań: z drugiej strony makra Lispa wyglądają jak wszystko inne w Lispie (wyrażenia S). * Makra Lisp nie budzą problemu inżynierskiego, należą do pakietu, kropka. Funktory stwarzają problemy inżynieryjne, ponieważ nazwy typów otrzymują aliasy, co jest zagadkowe. (Na marginesie, wydaje mi się, że Lisp jest łatwiejszy do rozpoczęcia niż OCaml, przynajmniej dla grupy fizyków kwantowych, którzy chcą dołączyć do projektu). ten, którego chcesz)?


title: Oprogramowanie do burzy mózgów

text: Czy ktoś ma jakieś doświadczenie z oprogramowaniem do burzy mózgów we wczesnej fazie projektowania? Jeśli tak, czy masz jakieś zalecenia dotyczące konkretnego oprogramowania? Lub uniknąć? Aby uprzedzić pewne możliwe odpowiedzi: zdaję sobie sprawę, że pusta kartka papieru dobrze się sprawdza, ale jestem zainteresowany użyciem oprogramowania w tym przypadku. 1. Dzięki temu mogę łatwiej dopracować wyniki niż kopiować je na papier. 2. Łatwo przenoś wyniki między lokalizacjami/sklepem w Dropbox. Trochę dalszych informacji: Burza mózgów jest w tym przypadku być może błędną nazwą, bardziej jak burza mózgów. Oprogramowanie będzie używane tylko przez 1 osobę (ja) do moich osobistych projektów. Oczywiście wszystko, co może również poradzić sobie z bardziej korporacyjnym otoczeniem, również byłoby dobre, gdybym go używał i polubił to, mógłbym spróbować przedstawić to mojemu zespołowi. Dalsze informacje: Po zadaniu tego pytania znalazłem Xmind i bawiłem się nim przez około pół godziny. Moje pierwsze wrażenia są takie, że jest całkiem nieźle.


title: Dlaczego system operacyjny jest specyficzny dla oprogramowania?

text: Próbuję określić szczegóły techniczne, dlaczego oprogramowanie stworzone przy użyciu języków programowania dla niektórych systemów operacyjnych działa tylko z nimi. Rozumiem, że pliki binarne są specyficzne dla niektórych procesorów ze względu na specyficzny dla procesora język maszynowy, który rozumieją i różne zestawy instrukcji między różnymi procesorami. Ale skąd bierze się specyfika systemu operacyjnego? Kiedyś zakładałem, że to API dostarczane przez system operacyjny, ale potem zobaczyłem ten diagram w książce: ![Diagram](http://i.stack.imgur.com/BmED2.png) _Operating Systems - Internals and Design Principles 7. ed - W. Stallings (Pearson, 2012)_ Jak widać, interfejsy API nie są wskazywane jako część systemu operacyjnego. Jeśli na przykład zbuduję prosty program w C, używając następującego kodu: #include<stdio.h> main() { printf("Hello World"); } Czy kompilator robi coś specyficznego dla systemu operacyjnego podczas kompilacji?


title: Co to jest obiekt aktywacji w JavaScript?

text: W danym kontekście wykonania obiekt Variable jest obiektem Activation tego kontekstu wykonania. Z moich badań online jestem w stanie znaleźć poprzednie zdanie przeformułowane na różne sposoby, ale nikt nie jest w stanie powiedzieć, co to jest. Co to jest obiekt aktywacji?


title: Powiadamiaj graczy co x sekund w grze wieloosobowej

text: Pracuję nad grą wieloosobową w czasie rzeczywistym przy użyciu Django i geven-socketio, napotykam pewne problemy: muszę wysyłać aktualizację stanu gry do podłączonych graczy co X sekund (~4 sekundy), więc w zasadzie muszę wykonaj funkcję co x sekund, która wykonuje pewne obliczenia i wysyła podłączonym graczom nowy stan gry. Jaki jest najłatwiejszy sposób na osiągnięcie tego? czy używanie crona to tutaj dobry wybór, czy powinienem szukać innych narzędzi, takich jak seler lub...? Ponadto funkcja musi działać na niektórych danych. odpytywanie bazy danych za każdym razem, gdy funkcja jest wykonywana, nie wydaje się dobrym pomysłem, gdzie mogę przechowywać dane gry (które są często aktualizowane w trakcie gry)?


title: Dopuszczalne umieszczenie katalogu głównego kompozycji przy użyciu iniekcji zależności i odwrócenia kontenerów kontrolnych

text: Czytałem w kilku źródłach, w tym w blogu Marka Seemanna „Ploeh”, o tym, jak odpowiednie umieszczenie katalogu głównego kompozycji kontenera IoC jest jak najbliżej punktu wejścia aplikacji. W świecie .NET aplikacje te są powszechnie uważane za projekty internetowe, projekty WPF, aplikacje konsolowe, rzeczy z typowym interfejsem użytkownika (czytaj: nie projekty biblioteczne). Czy naprawdę jest to sprzeczne z tą mądrą radą, aby umieścić katalog główny kompozycji w punkcie wejścia projektu bibliotecznego, gdy reprezentuje logiczny punkt wejścia grupy projektów bibliotecznych, a klient takiej grupy projektów jak ta jest czyjąś pracą? , którego autor nie może lub nie chce dodać katalogu głównego kompozycji do swojego projektu (nawet projektu interfejsu użytkownika lub jeszcze innego projektu bibliotecznego)? Znam Ninject jako implementację kontenera IoC, ale wyobrażam sobie, że wiele innych działa w ten sam sposób, ponieważ mogą skanować w poszukiwaniu modułu zawierającego wszystkie niezbędne konfiguracje powiązań. Oznacza to, że mógłbym umieścić moduł powiązania w jego własnym projekcie biblioteki, aby skompilować go z danymi wyjściowymi mojego projektu biblioteki głównej, a jeśli klient chciałby zmienić konfigurację (nieprawdopodobny scenariusz w moim przypadku), mógłby wrzucić zastępczą bibliotekę dll, aby zastąpić biblioteka z modułem wiążącym. Wydaje się, że pozwala to uniknąć najczęstszych klientów, którzy w ogóle muszą zajmować się wstrzykiwaniem zależności i korzeniami kompozycji, i zapewniłoby najczystszy interfejs API dla grupy projektów bibliotecznych. Jednak wydaje się to kłócić z konwencjonalną mądrością w tej kwestii. Czy to po prostu, że większość dostępnych porad zakłada, że programista ma pewną koordynację z rozwojem projektu (projektów) interfejsu użytkownika, a nie w moim przypadku, w którym po prostu rozwijam biblioteki do użytku przez innych?


title: Dystrybucja rozwiązania dostępu do danych w wielu rozwiązaniach

text: Mam 3 rozwiązania, jedno z nich to rozwiązanie do dostępu do danych ze wszystkimi repozytoriami itp. W momencie, gdy wprowadzana jest w nim zmiana, pozostałe muszą pobrać lokalnie najnowszą wersję nuget, mamy serwer nuget w sieci LAN. Trudno jest jednak debugować. Czy moduł podrzędny git działałby tutaj, aby umożliwić debugowanie i nie martwić się aktualizacją pakietów nuget?


title: Przykłady projektowania bazy danych obsługującej śledzenie punktów?

text: Staram się poszerzyć swoją wiedzę na temat działania projektów i koncepcji baz danych. Pracuję nad hobbystyczną aplikacją internetową/mobilną, która będzie dla mnie wyzwaniem. Jednak mam problem. Moja nowatorska koncepcja polega na tym, że są dwa przyciski „tak” i „nie”. Przyciski można kliknąć tylko raz dziennie. Jeśli kliknięto „tak”, licznik śledzi, ile kliknięć (dni) został wciśnięty. Przykład „Zawiązałeś buty 95 dni z rzędu!” Jeśli klikniesz „nie”, licznik „zresetuje się”, na przykład „Minęło 0 dni od zawiązania buta”. Poczytałem trochę, ale nie udało mi się znaleźć zbyt wielu przykładów takich jak ten. Przeczytałem tutaj kilka postów (przykład z nich poniżej) (wdrażanie dynamicznej obsługi zapytań na danych historycznych Przechowywanie punktów zatrzymania/początku w bazie danych Jaki jest najlepszy sposób zaprojektowania bazy danych do śledzenia wszystkich użytkowników w kwestionariuszu online prób? ), ale nadal nie wiem, jak iść do przodu. Moim początkowym pomysłem było posiadanie tabeli użytkowników (id | użytkownik | hasło) tabeli punktów (id | punkt | data) Jeśli osoba kliknie na tak, to dodaje wpis do tabeli punktów. Jeśli nic nie klikną, nie nastąpi wpis. Jeśli klikną nie, to jest -1. Jednak nie jestem pewien, czy jest to solidny sposób na budowanie bazy danych, zwłaszcza jeśli chcę ją śledzić. Moje pytania to: 1. Biorąc pod uwagę kilka powyższych zadań, jak skonfigurować bazę danych? 2. Jak mógłbym wyświetlić licznik, który po trafieniu nie 'resetuje'? Na przykład baza danych śledzi, że dana osoba zawiązała buty przez ostatnie 9 dni z rzędu, ale gdy odmówi, że nie zawiązała butów, licznik resetuje się do 0. 3. Jak postępować ze stroną analityczną, aby pokazać, w jaki sposób wiele razy klikali nie, tak, tak dalej, ale to już koniec.


title: Wewnętrzna struktura katalogów REST API i RewriteEngine

text: Buduję REST API. Nie chcę mieć folderów _real_ w mojej strukturze katalogów, ale nie jestem pewien, czego użyć innego. Moje REST API używa ścieżek takich jak ta: api.server.com/<object>/<action>[/] Tutaj `<object>` to obiekt, na którym akcja `<action>` powinna zostać wykonana. Na przykład adres URL `api.server.com/user/create` spowoduje utworzenie nowego użytkownika. Na razie wymyśliłem to: * Wszystkie obiekty mają swój własny plik, taki jak `user.php` dla obiektu `/user/`. W zmiennej GET `action` przechowywany jest łańcuch określający akcję. * Używam skryptu przepisywania .htaccess, aby przepisać fałszywe katalogi do tych wewnętrznych ścieżek: RewriteEngine On RewriteRule ^(.*?)/(.*?)/?$ $1.php?action=$2 [NC,L] Nie jestem jednak pewien, czy jest to najlepszy sposób na skonfigurowanie interfejsu API REST. Czy byłyby jakieś oczywiste problemy, których tu brakuje? Jak zwykle wygląda wewnętrzne drzewo plików interfejsu API REST, czy nie można tego rozsądnie powiedzieć? Jakie są zalety i wady różnych podejść?


title: Czy można dostać pracę programisty ze złą historią kredytową?

text: Studiuję/praktykuję programistę, ale obawiam się, że moja zła historia kredytowa uniemożliwi mi podjęcie pracy jako programista. Zostałem zwolniony kilka lat temu i przeszedłem okres, w którym wszystko poszło nie tak. Udało mi się odzyskać kilka miejsc pracy w niepełnym wymiarze godzin, a teraz mam pracę w ślepym zaułku 40 tysięcy rocznie. Obecnie moja historia kredytowa pokazuje 2 foreclosures i zadłużenie karty kredytowej. Stopniowo spłacam zadłużenie na karcie kredytowej, ale moja historia kredytowa będzie wyglądała okropnie przez kilka lat. BTW, doradca kazał mi złożyć wniosek o ogłoszenie upadłości, ale brzmi to tak, jakby to tylko pogorszyło sprawę. Już czuję się tak, jakbym był za stary (34 lata), aby rozpocząć tę konkurencyjną karierę, ale nie mam wielkiego wyboru, ponieważ moim jedynym zainteresowaniem jest tworzenie oprogramowania. Obecnie koduję aplikacje klasyczne .NET do użytku osobistego i ostatnio zajmuję się tworzeniem stron internetowych. Wierzę, że uda mi się przekonać potencjalnego pracodawcę, by wyglądał na starszego, ale po prostu czuję, że żadna firma programistyczna nie zatrudniłaby mnie na 23 lata z czystym kontem. Z tego, co czytałem, "skakanie do pracy" wydaje się być normalne dla programistów, więc nawet jeśli dostanę swoją pierwszą pracę programistyczną, kiedy ta praca się skończy, będę musiał ponownie przejść przez ten sam proces strachu. Czy ktoś ma jakieś rady dla kogoś w mojej sytuacji?


title: Sugestie, jak zaimplementować ogólny system dopasowywania dla użytkowników?

text: Potrzebuję pomocy z kodowaniem czegoś. Próbuję zaprojektować system, który pozwoli użytkownikom ustawić reguły przetwarzania przez system (podobne do reguł przetwarzania wiadomości e-mail, w pewnym sensie). Kiedy otrzymam porcję danych (w tym przypadku jest to obiekt, który ma właściwości z wartościami związanymi z nazwą hosta systemu klienta, wersją systemu operacyjnego itp.) Chcę, aby użytkownik mógł utworzyć kryteria, takie jak „kiedy nazwa hosta równa się 'jakiśhost' lub wersja systemu operacyjnego jest większa niż 6 itd. Tabela, którą mam do tej pory ma identyfikator rekordu, kolumnę do przechowywania nazwy sprawdzanej wartości (jak nazwa właściwości, np. obiekt.Hostname przechowuje jako „Nazwa hosta”), dwuznakowy kod operatora (EQ, NE, GT itp.), wartość do porównania i wartość klucza obcego.Nie mam jednak o tym ciepłego rozmytego. w dół właściwą ścieżką?Chciałem, aby dopasowanie było elastyczne.Wizualizuję umieszczanie właściwości klasy w menu rozwijanym, aby użytkownik mógł wybrać właściwość, wpisać wartość wyszukiwania i wybrać kryteria.Myśli?Dzięki!


title: Programowanie równoległe w C#

text: Mam kod, w którym muszę odczytać kilka plików binarnych w bazie danych. Napisałem pętlę For, która iteruje po mojej tablicy ścieżek plików, a następnie wywołuje funkcję READ, która wczytuje ten plik do bazy danych. Uruchamiam ten kod z tradycyjną pętlą for, wszystko idzie gładko, ale potem zmieniam for na Parallel.For i nie idzie gładko, dostosowuję swój kod, ponieważ znalazłem dużo szarej strefy i współdzielonych zasobów stwarza problem w logice pętli . Więc robię wszystko Izolowane do iteracji 1 Loop. Teraz metoda równoległa sprawia, że mój kod działa szybko z dwukrotnie większą prędkością, z jednym wyjątkiem. Wyjątek to 1. Mamy 600 plików do odczytania, z 600 mamy tylko 5-6 dużych plików rdzenia. 2. Z tych głównych dużych plików, jeden lub dwa pliki nie dostały się do bazy danych i nie jest generowany żaden wyjątek. Kiedy po prostu zmieniam Parallel.For na For wszystkie są odczytywane, więc kod w jego zakresie jest w porządku. Czy możesz zasugerować metodę lub alternatywę dla Parallel? Ponieważ, ponieważ czuję, że jeden z podstawowych wątków po prostu umiera bez powodu, wydaje się to niemożliwe, ale tak się dzieje, gdy tworzę dziennik na każdym kroku, a inna iteracja pokazuje zatrzymanie wątku w innym momencie. Poza tym, chociaż mam procesor 4Core, wykonuje on jednocześnie 30-40 plików. Spodziewałem się, że będzie to co najwyżej 3-4 wątki na dokumentację. Dowolny pomysł.


title: Przekształcenie ogromnego drzewa decyzyjnego w listę decyzyjną w celu dopasowania rozmytego

text: Próbuję zbudować inteligentny pasek akcji _podobny_ do palety poleceń Sublime Text: ![Sublime Text Command Palette](http://i.stack.imgur.com/yuWSi.png) Paleta poleceń Sublime Text umożliwia rozmycie dopasowanie poleceń na liście (np. "ancd vin" dopasuje "Anaconda: Vagrant Init"). W ten sposób bardzo łatwo i bardzo szybko znajdziesz poszukiwaną akcję. Próbuję osiągnąć coś podobnego dla sieci, różnica polega na tym, że mam dostępne zagnieżdżone drzewo akcji (i kilka innych opcji), takie jak (yaml): new: name: "New" choices: document: name: „Dokument” show_editing_menu: Prawdziwy szablon: nazwa: „Szablon” opcje: litera: nazwa: „List” schemat: „list-szablonu” arkusz kalkulacyjny: nazwa: „Arkusz kalkulacyjny” otwarty: nazwa: „Otwórz” opcje: eksploruj: nazwa: „ Przeglądaj” ostatnie: nazwa: „Ostatnie” Jak widać, mam dostępne zagnieżdżone akcje, ale ostateczna lista powinna wyglądać tak, aby formularz inteligentnego paska akcji działał (to właśnie robię w tej chwili): item001 : name: "Nowy" ścieżka: "nowy" item002: name: "Nowy - Dokument" show_editing_menu: Prawdziwa ścieżka: "nowy/dokument" item003: name: "Nowy - Ścieżka szablonu: "nowy/szablon" item004: name: "Nowy - Szablon - List" schemat: "template-letter" ścieżka: "nowy/szablon/list" item005: name: "Nowy - Szablon - Arkusz kalkulacyjny" ścieżka: " nowy/szablon/arkusz kalkulacyjny” pozycja 006: nazwa: ścieżka „Otwórz”: „otwórz” pozycja 007: nazwa: ścieżka „Otwórz – Eksploruj”: „otwórz/eksploruj” pozycja 008 nazwa: ścieżka „Otwórz – Ostatnie”: „otwarte/ostatnie” w tej chwili mogę wygenerować płaską listę z oryginalnego drzewa, ale nazwy nie są połączone: item001: name: "Nowy" path: "new" item002: name: "Document" show_editing_menu: True path: "new/ document” item003: name: ścieżka „Szablon”: „nowy/szablon” item004: name: „List” schemat: „template-letter” ścieżka: „nowy/szablon/list” item005: name: „Arkusz kalkulacyjny” ścieżka: „nowy /template/spreadsheet" item006: name: "Open" ścieżka: "open" item m007: name: "Explore" path: "open/explore" item008 name: "Recent" path: "open/recent" Prawdopodobnie za kilka godzin uda mi się połączyć nazwy w żądany format. Ale zanim naprawię ten projekt, chciałbym mieć kilka zewnętrznych opinii. Posiadanie akcji w formacie przypominającym drzewo jest bardzo przydatne do dalszego programowania decyzji (sugestie w zależności od węzła nadrzędnego, inny interfejs w zależności od wybranej akcji/węzła, ustawienia dostępne w drzewie decyzyjnym itp.). Ale czy ten projekt jest możliwy do utrzymania/praktyczny dla tego, co chcę osiągnąć? Czy masz inne sugestie, aby wykorzystać zalety struktury „drzewa decyzyjnego” i mieć łatwy sposób na jej spłaszczenie? To moja pierwsza próba czegoś takiego, więc sugestie projektowe są bardzo mile widziane. Nie proszę o bibliotekę lub zasoby zewnętrzne, ale o poradę projektową. Jeśli masz dodatkowe pytania, z przyjemnością udzielę odpowiedzi. Dziękuję Ci bardzo ! **UPDATE-1** : Czytałem o tabelach akcji, ale jest mi trudniej wyodrębnić „drzewo decyzyjne” i utrzymać je. Wtedy może to najlepsze dla tego, co chcę osiągnąć, ale nie jestem pewien.


title: Jak załadować usługę P2P, aby użytkownicy mogli się nawzajem zlokalizować?

text: Moja aplikacja P2P musi zlokalizować peerów, ale nie chcę na sztywno kodować adresu DNS... Jednym z przykładów, który widziałem, jest ładowanie przez IRC, ale chciałbym to zrobić przez HTTP/s, jeśli to możliwe. Jakie są moje opcje i techniki ładowania początkowego aplikacji P2P?


title: Wady korzystania z „tablic asocjacyjnych” w JavaScript

text: Pracuję z niektórymi ludźmi, którzy są przyzwyczajeni do tworzenia "tablic asocjacyjnych" w JavaScript w następujący sposób: var arr = new Array(); arr.prop_1 = "asdf"; lub arr['prop 2'] = "1234"; Działa jak przedmiot, ponieważ jest. Można używać pętli `for...in`, a dostęp do właściwości jest w porządku za pomocą kropki lub nawiasu kwadratowego. brak metod macierzy natywnych wydaje się nie być opłakiwany. Uważam to jednak za semantycznie irytujące. Może jestem wybredny, ale chcę mieć dobry argument za powstrzymaniem używania tej składni, ale nie mogę zrozumieć, jak zacząć. Jakieś sugestie?


title: najlepsze praktyki w komunikacji między widżetami w javascript

text: Zrezygnowałem z wielu widgetów javascript i chciałbym mieć dobry oddzielony sposób komunikacji między nimi. Coś jak sygnały i sloty w QT pewnie? Większość moich widżetów jest napisana w JQuery przy użyciu fabryki widżetów. Jaki jest właściwy sposób, aby to osiągnąć, nie kończąc się kodem spaghetti?


title: C# Linq to <blank>, który typ jest najczęściej używany, a które są najbardziej znienawidzone/niepotrzebne

text: Przeczytałem i używałem wielu dobrych Linq do . Przeczytałem również, że niektóre z Linq to ___ _ nie są warte uczenia się, ponieważ istnieją lepsze techniki. Zastanawiałem się tylko, na którym z nich powinienem się skoncentrować, a które mają bardziej odpowiednie alternatywy. Dziękuję


title: symulacja cieni z budynków

text: czy można obliczyć obszary cieni budynków lub symulować cienie budynków w mieście na podstawie wysokości tych budynków oraz kąta i azymutu słońca? znana jest podstawowa koncepcja śledzenia światła przy użyciu trygonometrii. Problem polega jednak na tym, jak znaleźć się i wymyślić symulowany cień grupy budynków w jednym miejscu.


title: Jak mam powiedzieć starszemu programiście, że się z nim nie zgadzam?

text: Jestem nowym programistą w moim biurze. Właśnie wszedłem do tego miejsca pracy na około 2 miesiące. Pracowałem z innym starszym programistą, który jest zasadniczo moim „mentorem” w okresie wstępnym. Dużo się uczę przez ostatnie 2 miesiące i wierzę, że już dobrze rozumiem ten system. I czuję, że jedna z decyzji projektowych, które podjął ten starszy programista, nie jest zbyt dobra i mam lepsze rozwiązanie. Więc jak mam mu to powiedzieć? W żadnym wypadku nie jestem młodszym programistą. Programuję od jakiegoś czasu. Ale używają niestandardowego 4thGL. Więc nie mogę powiedzieć, że „Mam 5 lat doświadczenia w .net i to jest złe w moim doświadczeniu” lub coś w tym stylu. Pracujemy nad różnymi częściami systemu, a jego część tak naprawdę nie podlega mojej „jurysdykcji”… Ale w końcu prędzej czy później zanurkuję w niektóre jego części, a to jest główna część całego systemu. i czuję, że wiele można poprawić, robiąc rzeczy po swojemu. Ale nie chcę być snobistycznym dzieckiem, które dopiero co dołączyło do firmy, i chcę trwałych dobrych relacji z moim kolegą, zwłaszcza że bardzo mi pomógł w ciągu pierwszego lub drugiego tygodnia, kiedy tam byłem. Ale mocno się z tym czuję. Więc jaka jest twoja opinia?


title: Jak wnioskować w grze karcianej?

text: W grze jest 5 graczy, każdy z 8 kartami w ręku. Żadna inna karta nie jest obecna. Korzystając z Monte Carlo (MCTS) prowadzę wiele symulacji gry od aktualnego stanu do końca meczu. W tych symulacjach przeciwnicy grają z bardzo prostymi, głupimi zasadami. Generując nową symulację przypisuję im _nieznane_ karty o jednolitym losowym rozkładzie. Mówię, że karta jest _nieznana_, jeśli nie ma jej w mojej ręce, nie ma jej na stole i nie została wcześniej odrzucona, to musi być w ręce kogoś innego. Jednak jednolita dystrybucja losowa nie jest najlepszym sposobem na dystrybucję kart. W rzeczywistości, czasami jest to proste dla ludzkiego gracza takie rozumowanie: _Gdyby miał 3♥, **prawdopodobnie** odrzuciłby je w poprzedniej turze, ponieważ był to **bardzo dobry** ruch. Wtedy jest **bardzo nieprawdopodobne**, że odrzuci 3♥ w ręce poniżej._ Cóż, przed odrzuceniem, przed wygenerowaniem symulacji Monte Carlo, przydzieliłbym każdemu przeciwnikowi zestaw _nieznanych_ kart z ich rozkładem prawdopodobieństwa: { (3♥, 0,20) , (4♥, 0,12) , (5♥, 0,03) ...}. Jak obliczyć te prawdopodobieństwa? Czy jest jakiś papier lub jakieś pomysły, od czego zacząć? EDYCJA: Pomysł: Mówiąc obliczeniowo, czy dobrym pomysłem byłoby uruchomienie prostej symulacji Monte Carlo przy wyborze strategii przeciwników? Mówiąc _simple_ mam na myśli szorstką, szybką symulację, która kończy się w krótkim czasie jak sekunda. W ten sposób w następnej turze będę miał miarę dobroci ruchów przeciwnika i stamtąd mogę zacząć wnioskować.


title: Zbuduj mapę z blokami miasta i drogą

text: Czy istnieje wzorzec projektowy lub dobrze znany algorytm do zbudowania prostej mapy z drogami i blokami miast? Aby zorientować się, jaki jest mój cel, opisuję niektóre ograniczenia i kontekst: * macierz, która reprezentuje (prostokątną) mapę * kilka możliwych bloków miasta reprezentowanych jako prostokąty (np. 4x3, 5x2, 1x6) * kilka możliwych rozmiarów dróg (np. 1, 2) * bloki nigdy nie są połączone, co oznacza, że zawsze jest droga między nimi wynikiem będzie tablica taka: 111101111100110 111101111100110 111100000000110 000001110000110 000001110000000 ... gdzie np. "1" to bloki a „0” to drogi. To, co zamierzam zrobić, to postawić klocek tam, gdzie jest to możliwe, następnie obramować drogi i iść dalej. Byłoby to w porządku, ale mogłoby prowadzić do miejsca, w którym bloki nie pasują. Chciałbym wiedzieć, czy jest coś w stanie techniki takich algorytmów.


title: Czy powinny istnieć oddzielne schematy bazy danych dla każdego dewelopera, czy też powinien istnieć tylko jeden wspólny dla wszystkich deweloperów?

text: Czy podczas tworzenia deweloperzy powinni mieć własną kopię bazy danych, nad którą będą pracować? A może powinna istnieć wspólna, współdzielona baza danych deweloperskich? Ten pierwszy zapewni programistom większą elastyczność. Na przykład mogą przeprowadzać własne testy regresji podczas programowania i testowania jednostkowego, nie martwiąc się o uszkodzenie danych dla innych programistów. Jednak jest to trudne do utrzymania dla administratorów baz danych. Ten ostatni jest łatwiejszy w utrzymaniu (mniej kosztów integracji, ponieważ wszyscy pracują nad tym samym schematem), ale wymaga więcej wysiłku, aby zapewnić uczciwość danych (programiści powinni zachować ostrożność i nie wprowadzać zmian, które wpłyną na innych).


title: Rozwój API - Sinatra?

text: Miałem za zadanie stworzyć aplikację mobilną oraz towarzyszącą mi stronę internetową. Zarówno aplikacja, jak i strona internetowa będą współdziałać z tą samą bazą danych. Aby to ułatwić, uważam, że najlepiej byłoby stworzyć API w ten sposób, aby oddzielić je od aplikacji mobilnej i strony internetowej. Czy byłaby to preferowana metoda? Myślę, że Sinatra byłby najlepszy w tej sytuacji. Używam Ruby on Rails na stronie internetowej, ale czuję, że byłoby to przesadą dla interfejsu API. Chcę tylko potwierdzić moje przemyślenia dotyczące tego problemu. Dziękuję!


title: Czy używać flagi -pedantycznej w g++, czy nie?

text: Uczę się C++ i do ćwiczeń używam g++ na Linuksie. 1) Chcę wiedzieć, czy ludzie pracujący jako programiści używają flagi g++ -pedantycznej, a także jej znaczenie w realnym świecie. 2) A co z innymi kompilatorami, czy też na to pozwalają? Czy stało się to jakimś de facto standardem? Jestem zainteresowany, ponieważ czytam C++ Primer, w którym autor wskazuje, że nielegalne jest używanie wyrażenia niestałego jako wymiaru w definicji tablicy, a g ++ domyślnie na to pozwala. I mogą być inne rzeczy, o których nie wiem.


title: Wydajność Java łańcuchów dołączania StringBuilder

text: W Javie, jeśli tworzę znaczną liczbę ciągów, czy jest _jakaś_ różnica w wydajności w poniższych dwóch przykładach? StringBuilder sb = nowy StringBuilder(); for (int i = 0; i <dużaLiczba; i++) { sb.append(zmienna[i]); sb.append('='); sb.append(wartość[i]); sb.append(','); } lub StringBuilder sb = new StringBuilder(); for (int i = 0; i <dużaLiczba; i++) { sb.append(zmienna[i]).append('=').append(wartość[i]).append(','); }      Dziękuję!


title: Algorytm / podejście do pracy w celu uzyskania losowej listy danych

text: Pracuję nad aplikacją harmonogramu na Androida, ale to nie ma znaczenia, problemem jest algorytm / metodologia, więc możesz po prostu napisać kod pusedo, aby odpowiedzieć. Dane są takie jak to Miejsce ============= Nazwa lat lng czas trwania to typ BookMark Uwaga: Istnieją **tylko** dwa typy: Sklep, Park, czas trwania to podstawa czasu na godzinę, np. 1 => 1 godzina, 0,5 godziny itd.... lat lng to jednostka lokalizacji Chciałbym wygenerować losową listę miejsc w oparciu o następujące kryteria: 1. Istnieją 2 limity czasu * jeśli krótki limit, to potrzebuję aby otrzymać dokładnie 1 Park i trochę Sklepu, na podstawie godziny 3-5 * jeśli średni limit, muszę uzyskać dokładnie 2 Park i trochę Sklepu, na podstawie godziny 6-8 * jeśli długi limit, to ja trzeba uzyskać dokładnie 3 parkowanie i trochę sklepu, w oparciu o godzinę 9-11 otrzymuje się 2. Użytkownik może wybrać, czy zaznaczony element ma wyższy priorytet, więc może być konieczne obsłużenie zakładki o wyższym priorytecie podczas wybierania elementu. 3. Również następne wybrane miejsce musi być najbliższym miejscem. Możesz założyć, że jest już dostępna funkcja `calcuateDistanceDiff()` Jak więc wygenerować listę w powyższym przypadku? Próbowałem po prostu polubić „hardcode”, aby poradzić sobie z limitem czasu trwania jeden po drugim, np. zdobądź najpierw jeden Park i zdobądź następny, sprawdzając kolejno priorytet / odległość, ale powinien istnieć mądrzejszy sposób na stworzenie bardziej ogólnej "metodologii", aby sobie z tym poradzić, pod względem lepszej wydajności i elegancji.


title: Czy roczny urlop zmniejszy moje szanse na zatrudnienie?

text: Właśnie zbliżam się do końca studiów licencjackich z informatyki i mam wybór. Moim marzeniem zawsze było tworzenie niezależnych gier i rozważam poświęcenie kolejnego roku na spróbowanie w niezależnym tworzeniu gier. Jeśli to działa, to fajnie i mogę kontynuować, jeśli się nie powiedzie, spróbuję poszukać innej pracy. Jednak jeden z moich przyjaciół zasugerował, że zrobienie tego poważnie zaszkodziłoby mojej zdolności do zatrudnienia, co nie byłoby dobre! Czy to będzie?


title: Zastrzeżona aplikacja na Androida, w tym licencjonowany kod Apache-2.0 od Google

text: Moja aplikacja na Androida zawiera kod na licencji Apache-2.0 od Google (przykład rozliczeń w aplikacji) i linki do biblioteki `com.android.vending.billing` w postaci pliku `InAppBillingFile.aidl` (ta sama licencja?). Chciałbym wiedzieć, co muszę zrobić, aby moja aplikacja była zgodna z licencją, tj. co pokazać w sekcji Informacje, jakie pliki dołączyć itd.?


title: Organizowanie potoku przetwarzania obrazu do analizy wideo w locie

text: Staram się zaprojektować system wykonujący analizę obrazu na strumieniach wideo z internetu. Mam kilka podstawowych pomysłów na zorganizowanie takiego systemu i miałem nadzieję, że będziecie mogli je skrytykować i zaproponować własne sugestie. Dla jasności przedstawię moje pomysły w następujący sposób: 1. Ogólny opis problemu 2. Założenia i ograniczenia 3. Sugerowane przeze mnie podejście Myślę, że ta rozmowa może w większości pozostać agnostyka językowa , ale FWIW planujemy zrobić to w Go. **Szukam ogólnej krytyki i porady, jak ustrukturyzować mój kod.** # 1\. Opis ogólny Problem można ogólnie opisać w następujący sposób: nasz system to potok przetwarzania obrazu, który wyodrębni cechy z klatek wideo z jednym ważnym zastrzeżeniem: **klient zdalny poprosi o przeprowadzenie pewnego podzbioru proponowanych analiz.* * Innymi słowy, zaproponujemy różnorodne analizy, a klient wybierze podzbiór tych analiz, które chciałby, abyśmy wykonali. Jest to ważne z dwóch powodów: 1. Przetwarzanie obrazu jest drogie, więc nie chcemy wykonywać niepotrzebnych obliczeń. 2. Niektóre funkcje wysokiego poziomu (np. analiza mimiki twarzy) zależą od cech niższego poziomu (np. segmentacja twarzy, wykrywanie osób, ...) nie wykonuje żadnych zbędnych analiz.** # 2\. Założenia i ograniczenia Kilka założeń i ograniczeń, w dowolnej kolejności: 1. Ramki wejdą do potoku przez `stdin` jako łańcuchy bajtów zakodowane w base64. 2. Jeden proces na strumień wideo. 3. Niektóre funkcje można wyodrębnić niezależnie dla każdej klatki. 4. Niektóre cechy wymagają do obliczenia kilku kolejnych klatek. 5. Dążymy do miękkiego czasu rzeczywistego lub przynajmniej małych opóźnień. Klient jest informowany o wynikach na bieżąco, zamiast pobierać je z pamięci w późniejszym czasie 6. Ta usługa działa na Amazon EC2 (ale myślę, że większość dyskusji może pozostać niezależna od środowiska) #3\. Potencjalne (bardzo głupie) podejście Moją główną troską jest optymalizacja potoku tak, aby wszystkie niezbędne obliczenia wstępne były wykonywane dokładnie raz i nie były wykonywane żadne niepotrzebne obliczenia. Proste podejście byłoby następujące: 1. Ramki są przechowywane w strukturach z hashmapą `feature`, w której mogą być przechowywane wyniki poprzednich obliczeń. 2. Każdy możliwy etap potoku (tj. „jednostka pracy”, która wyodrębnia cechę) istnieje jako struktura z metodami. Wspomniana struktura zawiera informacje metadanych o wstępnie wymaganych funkcjach. 3. Na każdym etapie potoku sprawdzana jest struktura ramki pod kątem spełnienia wszystkich wymagań wstępnych. Jeśli nie, zastosowana zostanie potrzebna funkcja, a wynik zostanie zapisany we wspomnianej wcześniej hashmapie. 4. Stosowany jest etap rurociągu. Rozwiązuje to problem braku powtarzania danego obliczenia, ale tak naprawdę nie definiuje żadnej ogólnej architektury potoku. Na przykład, trywialne jest użycie tej metody podczas operowania pojedynczymi ramkami, ale co z operowaniem na grupach kolejnych ramek (tj. przesuwając/usuwając okno nad ostatnimi _n_ ramkami)? Z niecierpliwością oczekuję krytyki i sugestii! Z góry dziękuję!


title: Czy istnieje wzorzec lub metoda refaktoryzacji do wyciągnięcia ładowania danych z istniejącej klasy?

text: Dokonuję refaktoryzacji starszej bazy kodu. Częścią tego jest funkcja `loadProduct()` wewnątrz większej klasy „wszystko”. `loadProduct()` ładuje dane z bazy danych. Chcę przenieść tę część ładowania danych z większej klasy, ponieważ nie wydaje mi się, żeby ona tam należała. Nie jestem jeszcze pewien, gdzie chcę go przenieść, ale myślę, że na początek wystarczy przenieść go do osobnej klasy. Jak mam to zrobic? czyli wyobraź sobie to: class Big { function x() {} function y() {} function z() {} function w() {} ... function loadProduct() { $sql = "wybierz * z X gdzie Y = $to->p1 i w = $to->p2"; $wynik = db_call($sql); ... $to->a = $wynik->pole_a; } } Do tej pory myślę o: 1. Mogę stworzyć klasę `Product`, która tworzy instancje i zwraca dane produktu. Nazwij to np. `$dane = nowy produkt($p1, $p2, $p3)`. 2. utwórz klasę `ProductProvider`, która ma funkcję `loadFromDB()`. Nazwijmy to: $pp = new ProductProvider(); $dane = $pp->loadFromDB($p1, $p2, $p3); ... dołącz 'db.php'; class ProductProvider() { function loadFromDB($p1, $p2, $p3) { $product = null; //kod do załadowania Zwrot produktu $produkt; } } Myślę, że sposób 2 jest nieco bardziej elastyczny i pozwala mi później dodać więcej funkcji, takich jak ładowanie różnych zestawów danych z różnych zestawów parametrów. Ta elastyczność może się przydać w przypadku, gdy starsza baza kodu sprawia mi później niespodzianki. (tj. powiedzmy, że podczas refaktoryzacji mogę zdać sobie sprawę, że muszę przenieść lub pogrupować ten element ładujący dane w lub z innym fragmentem kodu, a dostawca enkapsulacji kodu, który dostarczy mi, powinien być łatwy do przeniesienia w inne miejsce). Czy mój drugi przykładowy wzorzec będzie odpowiedni* dla mojego przykładu refaktoryzacji? * Przez _właściwe dopasowanie_ rozumiem najlepsze praktyki przyjęte w branży, zalecane w przypadkach podobnych do mojego.


title: Dane podstawowe: czy wykonywanie NSFetches w kodzie właściwości przejściowych jest złe? Czemu?

text: W danych podstawowych możemy umieścić właściwości przejściowe w naszych obiektach encji (lub kategoriach w naszych encjach). Te właściwości przejściowe mogą obliczać dane przejściowe na podstawie rzeczywistych właściwości jednostki. Czy umieszczanie kodu, który wykonuje NSFetchRequests we właściwościach przejściowych na górze i którego należy unikać? Czuję, że to użycie wykracza poza zakres właściwości przejściowych, ale staram się wyrazić, dlaczego nie jest to dobry pomysł. Jakie są wady?


title: Jak poprawnie wykonać przekazywanie wyniku operacji do widoku?

text: Zajmuję się tworzeniem strony internetowej na własnym silniku MVC. Mam _actionController_, który obsługuje operacje takie jak _register_ , _login_ , _post submit_ itp. _actionController_ otrzymuje nazwę operacji i parametry. Oczywiście obsługuje błędy takie jak _użytkownik o tym samym nicku już istnieje_ lub _hasło jest skrótem_ o tym, który handler akcji ma powiadomić użytkownika. Pytanie brzmi, jaki jest najlepszy sposób na uporządkowanie błędów, tak aby View mógł łatwo otrzymać zlokalizowane powiadomienie użytkownika. Widzę dwa sposoby Pierwszy: zdefiniuj stałe błędu, takie jak ERR_NICK_BUSY = '1' ERR_NICK_INVALID = '2' ... i mapa lokalizacji local[ERR_NICK_BUSY] = 'Użytkownik o tym samym nicku już zarejestrowany' local[ERR_NICK_INVALID ] = 'Nick, ty wpisane jest nieprawidłowe' ... I drugie: zdefiniuj stałe abstrakcyjne, takie jak ERR_FIELD_BUSY = '1' ERR_FIELD_INVALID = '2' ... i podaj je z nazwą pola. W tym przypadku lokalizacja wygląda tak: local['nick_'+ERR_FIELD_BUSY] = 'Użytkownik o tym samym nicku jest już zarejestrowany'... Nie podobają mi się obie te metody. Czy możesz doradzić coś innego?


title: Zezwolić aplikacjom na współużytkowanie bazy danych lub synchronizację ich z usługami internetowymi?

text: Zdecydowaliśmy się zbudować oddzielne aplikacje do uwierzytelniania użytkowników i zarządzania użytkownikami. Powodem jest to, że ta pierwsza jest usługą w stylu „to po prostu musi zawsze działać i robić to natychmiast”, a ta druga zawiera znacznie większy komponent interfejsu użytkownika z wieloma wymaganiami i funkcjami. Niestety, podczas tworzenia białej tablicy, tworzenia prototypów i uzyskiwania większej ilości informacji o wymaganych funkcjach, odkryliśmy, że muszą udostępniać kilka rodzajów informacji. Na przykład obie aplikacje muszą wiedzieć, czy użytkownik jest zablokowany, czy musi zresetować hasło. Rozważamy podłączenie aplikacji do tej samej bazy danych. Rozważaliśmy użycie usług internetowych do komunikacji, ale ma to wyższy koszt początkowy, jest bardziej złożony i będzie miał gorszą wydajność (zakładając, że w obu przypadkach zostanie wykonane to samo zapytanie). Musielibyśmy zsynchronizować niektóre informacje w dwóch instancjach bazy danych, co oczywiście nie jest optymalną konfiguracją. Z drugiej strony udostępnianie instancji bazy danych wymagałoby, aby schematy encji ORM pozostawały w pewnym stopniu zsynchronizowane (nawet gdybyśmy ich nie używali, nadal musielibyśmy upewnić się, że nasze zapytania nadal działają w obu aplikacjach po zmianie schematu bazy danych ). Tworzy współdzieloną zależność. Ponadto baza danych staje się pojedynczym punktem awarii/słabej wydajności. Ponadto nie jestem pewien, czy możliwe byłoby ukrycie nieistotnych danych z którejkolwiek aplikacji, więc enkapsulacja jest zmniejszona. Czy ktoś tutaj wcześniej pracował nad tym dylematem i uzyskał jakieś spostrzeżenia? Jestem pewien, że są tu inne względy, o których jeszcze nie pomyślałem. Nie jest niczym niezwykłym, że różne aplikacje łączą się z centralną bazą danych.


title: Git, automatyczne aktualizacje, zabezpieczenia i manipulacje?

text: Myślałem o hostowaniu mojego prywatnego projektu na moim serwerze (mogę użyć „gitolite”) i mieć kopię na moim lokalnym komputerze jako kopię zapasową (klon git, a następnie automatyczne pobieranie git co kilka minut). Chcę wiedzieć, co się stanie, jeśli na moim serwerze pojawi się błąd gitolite lub gdzieś indziej, a kod źródłowy i repozytorium git zostały naruszone? Czy moja kopia zapasowa również zostanie uszkodzona? czy będę mógł łatwo przywrócić źródło za pomocą historii?


title: Wskazówki do wdrożenia systemu taksonomii?

text: Biorę udział w rozwoju PHP CMS (tak wiem, że jesteś taki, meeh). Obecnie używa prostych tagów do oznaczania treści. To, co chcę zrobić, to popchnąć całość do korzystania z taksonomii, ale nie jestem pewien, na co zwracać uwagę lub jak zabrać się za strukturyzację całych słowników / terminów. Chciałbym móc utrzymać interakcję użytkownika zbliżoną do obecnych prostych tagów, a jednocześnie umożliwić bardziej zaawansowane użycie przez zaawansowanych użytkowników. Systemy taksonomii Drupal i Wordpress są obecnie poddawane przeglądowi i dostarczają cennych zasobów. Niemniej jednak może się zdarzyć, że ktoś ma prostsze i bardziej odpowiednie przemyślenia w tej sprawie.


title: Skąd się biorą sesje, przez kogo i kiedy zostały stworzone?

text: Wiem, że sesje są w PHP, ASP, ASP.NET i prawdopodobnie w wielu innych językach. W większości przypadków sesja rozwiązuje problem, którego sam język nie rozwiązuje. Zastanawiam się 1. Kto stworzył sesje i kiedy zostały wprowadzone po raz pierwszy? 2. Czy najpierw była to cecha określonego języka? 3. Czy korzystanie z sesji jest ograniczone tylko do przeglądarek internetowych? A może są również używane w aplikacjach komputerowych?


title: Rozwiązywanie wiązań geometrycznych za pomocą Minion

text: Prowadzę badania nad kwadratami i pomyślałem o użyciu narzędzi do rozwiązywania problemów z ograniczeniami i satysfakcją do udowodnienia lub obalenia niektórych przypuszczeń. Jako prosty przykładowy problem rozważmy następujące zadanie: Narysuj dwa zielone kwadraty i dwa czerwone kwadraty, tak że: - Wszystkie kwadraty tego samego koloru są rozłączne wewnętrznie; - Wszystkie kwadraty w różnych kolorach przecinają się wewnątrz. Aby rozwiązać ten problem, napisałem następujący skrypt w języku Minion. Aby skrócić program, użyłem makr w stylu C: MINION 3 **VARIABLES** // Są 2 czerwone kwadraty i 2 zielone kwadraty. // dla każdego kwadratu x i y to narożnik południowo-zachodni, a s to długość boku: DISCRETE xred[2] {1..100} DISCRETE yred[2] {1..100} DISCRETE sred[2 ] {1..100} DISCRETE xgrn[2] {1..100} DISCRETE ygrn[2] {1..100} DISCRETE sgrn[2] {1..100} **OGRANICZENIA** // Następujące makra obsługiwać relacje przecięcia między kwadratami. // Niech aib będą nazwami kwadratów. // intersect(a,b) definiuje ograniczenia oznaczające "prostokąt a przecina prostokąt b". // disjoint(a,b) definiuje ograniczenia oznaczające "prostokąt a nie przecina prostokąta b". // wewnętrzne przecięcie a i b, jeśli WSZYSTKIE poniższe równości są spełnione: // a.x + a.s > b.x // b.x + b.s > a.x // a.y + a.s > b.y // b.y + b.s > a.y #define intersect(a, b) \ watched-and({\ sumgeq([x##a,s##a,-1], x##b), \ sumgeq([x##b,s##b,-1], x##a ), \ sumgeq([y##a,s##a,-1], y##b), \ sumgeq([y##b,s##b,-1], y##a)} ) // a i b są rozłączne wewnętrznie, jeśli nie przecinają się wewnętrznie. // Potrzebujemy do tego specjalnego makra, ponieważ Minion nie obsługuje negacji ograniczeń. #define disjoint(a,b) \ watched-or({\ sumleq([x##a,s##a], x##b), \ sumleq([x##b,s##b], x##a ), \ sumleq([y##a,s##a], y##b), \ sumleq([y##b,s##b], y##a)\ }) // Kwadraty ten sam kolor musi być rozłączny: disjoint(red[0],red[1]) disjoint(grn[0],grn[1]) // Kwadraty o różnych kolorach muszą się przecinać: intersect(red[0],grn[ 0]) intersect(red[0],grn[1]) intersect(red[1],grn[0]) intersect(red[1],grn[1]) **EOF** Uruchomiłem solwer za pomocą następujące polecenie powłoki: cpp mojplik > mojplik.tmp minion mojplik.tmp Minion zwrócił następujący wynik Sol: 1 1 Sol: 1 4 Sol: 3 3 Sol: 1 3 Sol: 3 1 Sol: 2 4 Odczyt: * czerwony #0 zaczyna w (1,1) ze stroną 3; * czerwony #1 zaczyna się od (1,4) ze stroną 3; * grn #0 zaczyna się od (1,3) od strony 2; * grn #1 zaczyna się od (3,1) od strony 4; Tak to wygląda w samolocie: ![tutaj podaj opis obrazka](http://i.stack.imgur.com/GYIgN.png) Rzeczywiście, kwadraty tego samego koloru są wewnętrznie rozłączne, podczas gdy kwadraty o różnych kolorach przecinać! (Oczywiście jest wiele innych rozwiązań. Minion zwraca pierwsze znalezione rozwiązanie, które odpowiada moim potrzebom). Teraz moje pytania to: * Po pierwsze, czy używam odpowiedniego narzędzia do zadania? Czy istnieje sposób na zrobienie tego, co właśnie zrobiłem, bez konieczności wyraźnego definiowania, co oznacza „przecięcie”? * Po drugie, czy poprawnie używam języka Minionów?


title: Informacje o prawach autorskich/zastrzeżenia w plikach źródłowych

text: Powszechną praktyką jest umieszczanie informacji o prawach autorskich, różnych zastrzeżeniach prawnych, a czasem nawet pełnych umów licencyjnych w każdym pliku źródłowym projektu open source. Czy jest to naprawdę konieczne w przypadku (1) projektu open source i (2) projektu o zamkniętym kodzie źródłowym? Co chcesz osiągnąć lub czemu chcesz zapobiec, umieszczając te powiadomienia w plikach źródłowych? Rozumiem, że to pytanie prawne i wątpię, abyśmy mogli uzyskać w pełni kompetentną odpowiedź tutaj, u programistów. Tak (to dla programistów, prawda?) Ciekawe byłoby również usłyszeć, gdy umieścisz legalne rzeczy w swoich plikach źródłowych , czy to dlatego, że „każdy to robi” czy masz poradę prawną? Jakie było rozumowanie?


title: Jaki jest najlepszy sposób na umożliwienie klientowi wniesienia wkładu do projektu?

text: Budujemy CRM dla klienta. Teraz, gdy pierwsza główna faza została zakończona, a druga uzgodniona, klient chciałby podjąć część pracy, wprowadzając drobne poprawki do schematu bazy danych i procesów biznesowych w pierwszej fazie _podczas gdy my budujemy drugą_. Nie jestem zdecydowany, czy jest to w ogóle praktyczne, ale zakładając, że jest, chciałbym uzyskać kilka wskazówek, które można podjąć, aby to w ogóle było wykonalne. Oto, co mam do tej pory: * Do tej pory klient _głównie_ widział projekt z punktu widzenia użytkownika; oczywiście powinno odbyć się dwuczęściowe seminarium, na którym wprowadzimy go w tajniki: * najpierw pokazanie istniejącego schematu bazy danych i np. jego rozszerzenie, * następnie pokazanie przykładowego kodu i napisanie nowego proces biznesowy dla ulepszenia schematu. * Kod aktualnie znajduje się w wewnętrznym repozytorium Subversion. Chociaż moglibyśmy skonfigurować publiczny jeden lub jeden w _jego_ sieci (do której możemy VPN), uważam, że system rozproszony działałby lepiej. Wydaje mi się jednak, że tylko ja czuję się w ten sposób, więc przydałoby mi się kilka dobrych, przekonujących argumentów. * Nie jestem pewien, jak nakazać/upewnić się, że kod, który działa w środowisku produkcyjnym, jest zatwierdzony. Wygląda na to, że „x dokonał krytycznej, nieudokumentowanej zmiany tuż przed wyjazdem na wakacje; teraz próbujesz zrozumieć ten błąd, który pojawia się od tego czasu” katastrofy są nieuniknione. W idealnej sytuacji wszystkie zmiany przed wdrożeniem: * byłyby udokumentowane w systemie śledzenia problemów, * najpierw występowały w osobnym środowisku testowym i * musiałyby przejść testy automatyczne. Niestety, wątpię, aby dyscyplina dla każdego z nich zwyciężyła. Załóżmy, że architektura wtyczek lub oddzielny projekt nie są realnymi opcjami, ponieważ 1) ta pierwsza nie istnieje, a 2) ta druga uniemożliwiłaby klientowi przeglądanie i ewentualnie modyfikowanie istniejącego kodu, co, jak sądzę, by nalegać na.


title: Jak złagodzić problemy z interfejsem API zastrzeżonego dostawcy?

text: W ciągu ostatniego roku firma finansowa, w której pracuję, dążyła do konwersji naszego rdzenia bankowego COBOL, który jest naprawdę dostosowany i dopasowany do naszego modelu biznesowego, w ustandaryzowany pakiet oprogramowania dla dużych producentów (napisany... w... RPG /facepalm). Moja opinia o oprogramowaniu, wraz z personelem IT i innymi programistami, była taka, że tak naprawdę nie było nic lepszego i nie pasowało do potrzeb naszych klientów (o to przecież chodzi...). Krótko mówiąc, projekt nie przebiegał płynnie, a mapowanie danych było jak wyrywanie zębów. Przepisywałem wiele systemów wewnętrznych, aby używały nowego rdzenia, i napotkałem duży problem z ich API. Chodziłem tam iz powrotem z "analitykiem", który rozmawia z programistą (chyba, kto wie w rzeczywistości) i nigdzie nie udaje mi się naprawić tego problemu. W rzeczywistości otrzymałem odpowiedź, że może minąć kilka tygodni, aby sprawdzić zakres poprawki, a następnie kilka miesięcy później, aby ją naprawić. Po prostu nie mogę znaleźć obejścia i naprawdę nigdy nie edytowałbym bezpośrednio tabel bazy danych bankowych (nigdy). **Więc co uważasz za najskuteczniejsze w poruszaniu piłki, gdy sprzedawcy naprawiają ich błędy?** Czy powinienem naprawić kod RPG? Jestem _naprawdę_ niedbały, aby wejść i spróbować naprawić kod RPG, ponieważ nie znam RPG, a żaden z moich kolegów też nie. Tak naprawdę jedyną inną techniczną rezerwą jest skrobanie aplikacji na poziomie terminala i zautomatyzowanie tego za pomocą skryptów – ale wydaje się to niezwykle hackowe. Już wspomniałem o tym z dyrektorem operacyjnym, a teraz z wiceprezesem, ale nie sądzę, by mieli wystarczająco dużo siły u tego dostawcy, aby to szybko śledzić. Czy powinienem o tym wspomnieć jako kolejny powód opóźnienia konwersji? Byłoby to ogromne przejście od automatycznego procesu do żmudnej ręcznej procedury wprowadzania danych, która wymagałaby znacznie większej siły roboczej i wątpię, aby to dobrze się sprawdziło.


title: Najprostszy system tokenów do uwierzytelniania i autoryzacji

text: Chcę stworzyć skrypt Pythona, który przyjmie dane wejściowe z Vima i wyśle je na moją stronę internetową. Więc zasadniczo chcę, aby Vim był moim edytorem tekstu do artykułów na blogu. Oczywiście muszę uwierzytelnić i autoryzować. Chciałem po prostu zapytać o nazwę użytkownika i hasło. Moja uczelnia zapytała mnie, dlaczego nie mam pobrać danych logowania z pliku. Odpowiedziałem, że nie chcę zapisywać hasła w postaci zwykłego tekstu. Kazał mi używać tokenów! Więc jak to zrobić? Rozumiem, że muszę wygenerować losowy token dla użytkownika i wiedząc, że pozwoli każdemu się zalogować. Powinno być naprawdę mocne i przypadkowe, aby nikt nie mógł tego odgadnąć. Czy jest coś jeszcze? Czy bezpiecznie będzie zapisać go w pliku tekstowym? Chciałabym usłyszeć, jak byś to zaimplementował w najprostszy możliwy, a zarazem bezpieczny sposób. Przydałyby się też linki do literatury!


title: Dlaczego ludzie sugerują, aby nie używać zmiennej instancji dla widoków w Ruby on Rails?

text: Dlaczego słyszę, że nie jest dobrze udostępniać zmienne instancji między kontrolerami i widokami. Podoba mi się to, ponieważ od razu widzę przez @, że coś wychodzi z kontrolera. Widzę dobry sposób na wykorzystanie helperów w kontrolerach tutaj: http://www.stephencelis.com/2008/09/06/rails-controlrs-views-and-variables.html. Ale ja używam cancan do tej porcji.


title: Jakiej techniki użyć podczas przeciągania elementów po płótnie

text: Chcę osiągnąć dwie rzeczy w mojej aplikacji java swing: po pierwsze, potrzebuję strefy płótna, w której mogę przeciągać elementy (prostokąt lub okrąg) z zewnętrznej części panelu wewnątrz płótna i umieszczać go w miejscu, w którym zostały upuszczone . również powinno być możliwe zaznaczenie elementu na płótnie, przemieszczenie go i upuszczenie w inne miejsce na płótnie. jakie techniki najlepiej pasowałyby do takiej pracy? Proszę zostawić komentarz, jeśli coś jest niejasne.


title: Czy logiczny skok od kompletnego nooba do programisty?

text: Od kilku lat programuję bardzo lekko i nie robię dużych postępów. To coś, co mnie zdecydowanie interesuje, ale po prostu nie mam motywacji. Wtedy myślę, że zorientowałem się, co mnie zabija. Wszystkie książki, które przeczytałem, wszystkie obejrzane przeze mnie screencasty wydają się przeoczyć jedną ważną rzecz: jak przejść od instrukcji drukowania, zmiennych itp. do robienia bardziej skomplikowanych rzeczy? Weźmy na przykład witrynę taką jak Posterous. Dla tych, którzy nie wiedzą, jest to platforma blogowa, która akceptuje posty na blogu za pośrednictwem poczty e-mail. Autor bloga ma specjalny adres e-mail @posterous.com, na który wysyła posty na blogu, które są automatycznie formatowane i publikowane. W jaki sposób programista wykorzystałby swój zestaw narzędzi funkcji i instrukcji, aby osiągnąć coś takiego na zapleczu? Przepraszam, jeśli to pytanie wydaje się naprawdę obszerne, po prostu mnie frustrowało. Czuję, że dobrze rozumiem podstawowe pojęcia, ale nie mam pojęcia, jak właściwie _zrobić_ cokolwiek.


title: Ponowne oszacowanie (idealne godziny + czas, który upłynął)

text: Na początku każdej iteracji nasza tablica pokryta jest „nierozpoczętymi” historiami oszacowanymi w IDEALNYCH GODZINACH. Codziennie aktualizujemy te szacunki, aby śledzić postęp każdego zadania. Myślę, że robimy to źle. Oryginalne szacunki są w idealnych godzinach, a nasza codzienna „ponowna ocena” w UPŁYNIĘTYM CZASIE. To wydaje się niespójne, prawda?! Jak byś zmierzył swoje postępy pod koniec sprintu?


title: Elastyczne dodawanie odpowiedzialności do działań

text: Zastanawiam się, w jaki sposób mogę elastycznie dodawać zadania do Android Activities. Mogę używać dziedziczenia implementacji tylko do jednej rzeczy w Javie i chciałbym go użyć, jeśli w ogóle go używam, do czegoś innego. Myślę, że najpierw muszę narysować _domenę_: _Działania_ to w zasadzie okna interfejsu użytkownika, z wewnętrznymi obowiązkami cyklu życia wymuszonymi przez interfejs API. _Zadania_, o których mówię, to widoczne w interfejsie okienka popover, które wykonują pewne czynności w trybie offline, a następnie znikają. Pochodzą z AsyncTasks. Kod tego wszystkiego nie stanowi problemu, mam już to, nawet dość uogólnione z interfejsami. Patrzę na dalsze ulepszenia projektu, które mogę wprowadzić. Istnieje wiele rodzajów działań i wszystkie mogą pracować z pewnymi rodzajami zadań. _Na przykład_ okno wyszukiwania zawiera zadanie, które dodaje jeden z wyników wyszukiwania, powiedzmy, że jest to książka, do kolekcji książek w głównej aplikacji. Pozwala dodać wiele, stąd popover. Okno wyświetlające kolekcję zawiera zadanie, które umożliwia wyeksportowanie księgi do zewnętrznego formatu pliku. Nie powstrzyma Cię to przed przeglądaniem kolekcji, ale musi wyświetlić pasek postępu, ponieważ wyeksportowanie może trochę potrwać. Określone Task _istnieje_ jako klasa zagnieżdżona w określonym działaniu. Musi zostać zapisany i przywrócony wraz ze zdarzeniami cyklu życia: istnieją między innymi `onSaveInstanceState(Bundle)` i `onRestoreInstanceState(Bundle)`. Działanie ma listę aktywnych zadań (lub tylko członka dla jednego zadania). Niektóre zdarzenia interfejsu utworzy nowe zadanie i doda je do listy, a la `onClick(): ATask task = new ATask(); task.execute(coś);`. Oto co _rozważałem_ do tej pory: * **Dziedziczenie implementacji** Po prostu przenieś ten biznes zadań do abstrakcyjnej superklasy wszystkich konkretnych działań. * **Wzorzec dekoratora** Utwórz TaskedActivityDecorator, który doda tę odpowiedzialność do dowolnej aktywności. Dekorator musiałby naśladować cały interfejs Activity dostarczony przez API, głównie jednak przejścia. Więc to może być już trochę za ciężkie. Musiałoby również dodać zdarzenia/przyciski interfejsu użytkownika, które uruchamiają zadanie, co może nie zawsze być możliwe, jeśli akcja jest bardziej konsekwentna. Ale największym problemem, jaki mogłem tutaj wymyślić, jest to, że Android używa **manifestu** do luźnego łączenia wszystkich działań. Tam trzeba zadeklarować każdą konkretną aktywność lub nie można jej użyć. Jest to problem, ponieważ dekorator działałby w czasie wykonywania z kompozycją. Nie mogę zadeklarować dekoratora i dodać informacji, że ma on zawinąć konkretną czynność. Z _Androidem_ wydaje mi się, że dziedziczenie implementacji jest o wiele większe, niż bym chciał. Dlatego mam za dużo sprzęgania lub powielania kodu. Aktywności zawsze łatwo wyrastają na duże zajęcia z tłuszczu. Czy mam rację mówiąc, że jest to częściowo spowodowane istniejącymi wyborami projektowymi w ramach systemu Android, takimi jak manifest usuwający rozwiązania dotyczące kompozycji lub obiekt Context? Czy mam rację mówiąc, że od samego początku odcina znaczną ilość ustalonych wzorców projektowych w kluczowych obszarach, w tym wzorca MVC. * **Dekorator z owijkami** : To, że nie mogę określić dekoratora i konkretnej czynności, której dotyczy razem w manifeście, nie oznacza, że nie mogę tworzyć klas reprezentujących i aranżujących tę kompozycję. Mógłbym oczywiście stworzyć wiele klas SpecificDecoratorActivity, które również implementują interfejs Activity i działają jak dekorator, a następnie zawijają w rzeczywistą konkretną aktywność. Nie jestem jednak pewien, czy to rozwiąże mój problem. Wygląda na to, że to dużo pracy, dużo śmieciowych zajęć i oddala mnie od pierwotnego celu. * **Wzorzec strategii** : Jeśli nie mogę oskórować aktywności, lepiej zlecę część jej wnętrzności. To da mi jeszcze więcej kontaktów, ponieważ działania będą musiały wiedzieć o Strategii. Sama Strategia będzie jednak lżejsza jako Dekorator. Nie przypomina to jednak Strategii, w której istnieje możliwość wyboru, a raczej przeniesienie części klasy do innej. Nazwałbym to TaskManagerem. I czy nadal zgromadziłbym wiedzę na temat strategii w superklasie aktywności? * **Każdy inny wzór?** : _Który wzór jest najlepszy? Nie unikaj swojej opinii na temat konkretnego przypadku Androida. Nie trzeba mówić konkretnie o zadaniach._


title: Oblicz koszty złego kodu

text: Szukam argumentów, by przekonać zarząd do zainwestowania wysiłku w refaktoryzację. Rejestrujemy pracę za pomocą Jira i łączymy każdy svn-commit z wywołaniem jira. Moim pomysłem jest wykonanie następujących czynności: * ręcznie wykryj obszar kodu, który jest bardzo źle zaimplementowany, ale często używany: zarówno z User-POV, jak i Developer-POV (poprawki) * pobierz svn-commits, które zawierają problemy JIRA * filtruj problemy według pewnych kryteriów (typ problemu, wersja, priorytet itp.) * oblicz czas/wysiłek poświęcony na te błędy * oszacuj wysiłek i ryzyko refaktoryzacji * przedstaw liczby i poproś o wysiłek, aby to naprawić. Co o tym sądzisz? Czy taki pomiar byłby użyteczny i/lub przekonujący? Jakie są plusy i minusy?


title: Czy możemy używać Javy do użytku komercyjnego?

text: Java jest licencją GPL (odniesienie z wikipedii). Nie jestem pewien, czy mogę go wykorzystać w projektach komercyjnych. Mam już stronę napisaną w Javie i planuję wykorzystać ją do celów komercyjnych. Czy to nielegalne?


Czy przed tworzeniem oprogramowania Java powinienem uzyskać licencję od Oracle? Jestem na wstępnym etapie planowania tworzenia serwera na platformach Hadoop/Java. Nie martwię się zbytnio o Hadoop, ale „proces” tworzenia na wierzchu Java VM jest nieco niejednoznaczny. Byłem w trakcie konfigurowania JVM na FreeBSD, kiedy zobaczyłem, że mamy licencję tylko na używanie jej do "użytku osobistego". Więc pomyślałem hmm, jaka jest sytuacja w Linux Land? Tam było jeszcze bardziej niejednoznacznie i zmarnowałem około godziny w Usenecie szukając odpowiedzi. Pozwólcie, że wyjaśnię moje pytanie. Nie obchodzi mnie OpenJDK i tym bardziej interesuje mnie walka z Oracle w sądzie (brak związku), bardziej interesuje mnie **polityka** Oracle wobec "Indie" programistów Java i przez "Indie" mam na myśli mały dom deweloperów w ramach jednoosobowej działalności gospodarczej/llc. bez zespołu prawnego. Aby było jeszcze bardziej jasne, chcę pozostać po dobrej stronie Oracle, więc jeśli / kiedy mój produkt odniesie sukces, nie muszę rezygnować z większości moich przychodów lub, co gorsza, włączyć za szybką gotówkę lub gorzej, ogłosić upadłość i wyrzuć 10 lat pracy/konserwacji. Przykro mi, ale ich licencja prawna jest pełna dwuznacznych i niejednoznacznych terminów „prawnych”, które mogą znaczyć prawie wszystko. Jeszcze raz przepraszam, jeśli jest to powszechna wiedza, pochodzę ze środowiska C/C++ i dopiero niedawno rozważałem Java, teraz, gdy staje się ona ostatecznym językiem dla obliczeń rozproszonych.


title: Czy jako profesjonalny programista można nie pisać testów jednostkowych?

text: Zastanawiasz się tylko nad zaletami i wadami TDD/automatycznego testowania jednostkowego i szukasz opinii społeczności na temat tego, czy profesjonalni programiści mogą pisać aplikacje bez wsparcia testów jednostkowych?


title: Jak poprawić schemat bazy danych z różnymi asocjacjami n:m i 1:n między użytkownikami/zadaniami/komentarzami/załącznikami

text: Usiłuję zbudować bazę danych dla nadchodzącego webproject Ruby on Rails. Będą minimum 4 tabele: zadania, użytkownicy, załączniki i komentarze. Oraz 1 tabelę do połączenia n:m relacji (zadania <-> użytkownicy). Jedno zadanie ma wielu użytkowników, wiele komentarzy i wiele załączników. Jeden komentarz ma wiele załączników i został utworzony przez jednego użytkownika. Jeden załącznik został utworzony przez jednego użytkownika. Użytkownicy mogą mieć wiele zadań, wiele komentarzy i wiele załączników. Mały szkic ilustrujący moje przemyślenia: ![schemat bazy danych](http://i.stack.imgur.com/o0gVu.jpg) Tabele z relacjami 1:n zawierają ID z powiązanej tabeli (np.: jeden komentarz zawiera identyfikator użytkownika) Czy uważasz, że ten schemat jest zgodny z zasadami normalizacji? Czy to ma sens, czy są jakieś zwolnienia? Myślę, że jest mały problem z tabelą załączników, ponieważ musi ona zawierać pole typu i pole identyfikatora, aby odróżnić zadanie od komentarza. A wszystkie typy treści (zadania, komentarze, załączniki) są przydzielane przez wielu użytkowników (zadania) lub tworzone przez (komentarze, załączniki) jednego użytkownika. Komentarze **nie** są rekurencyjne. Rozważyłem następujący pseudokod: task = getTasks each task as task # get task content users = getUsersByTaskID each users as user #get user content attachments = getAttachmentsByTypeAndTaskID każdy załącznik jako załącznik # pobierz treść załącznika user = getUserByID comments = getCommentsByTaskID każdy komentarz jako komentarz # pobierz treść komentarza user = getUserByID attachments = getAttachmentsByTypeAndCommentID każdy załącznik jako załącznik # pobierz treść załącznika user = getUserByID Myślę, że to wciąż trochę zbyt skomplikowane. Czy coś przeoczyłem? Czy są lepsze sposoby na realizację moich pomysłów?


title: Jak ustrukturyzować nasz skrypt JavaScript, aby był łatwy do edycji, testowania i mógł wykonywać wywołania w celu renderowania widoku bez znajomości szczegółów widoku

text: Pracuję nad aplikacją sieci web, która wyświetla niektóre dane i używa javascript. W tej chwili udostępniamy części naszego js (aby wyświetlić określone typy informacji, np. „Render a View”) za pośrednictwem naszego serwera, który dynamicznie zapisuje skrypt java z osadzonymi w nim potrzebnymi danymi za pomocą JSP. Trzy główne punkty/wymagania, które musimy wziąć pod uwagę to: * Musimy być w stanie łatwo edytować nasz javascript. (rozprzestrzenianie się przez wiele plików w tej chwili ze zmiennymi globalnymi. nie można niczego edytować bez mabey (brak frameworka testowego) psującego wszystko. * Chcemy mieć możliwość wykonywania wywołań po stronie klienta, aby renderować widok bez znajomości szczegółów na temat widoku (w przypadku dodawania/zmiany widoku) * Musimy przetestować nasz javascript (z oczywistych powodów) Obecnie nasz js jest bardzo rozprzestrzeniony i zawiera duże pliki, co utrudnia wprowadzanie zmian. wzorzec modułu, aby rozwiązać ten problem, ale wiele postów, które czytałem, to: (a) Starsze (najnowsze z 2010 r.) (b) Nie zgadzałem się co do tego, jak tworzyć moduły, które są również testowalne. Czy powinniśmy zmienić/zrestrukturyzować naszą aplikację, aby osiągnąć wszystkie trzy cele? Czy te cele są zbyt często sprzeczne, czy jest nadzieja? Również wszelkie pomocne posty na blogu są mile widziane.


title: LGPLv3 w zamkniętym środowisku wbudowanym

text: Myślę o użyciu biblioteki LGPLv3 w komercyjnym programie o zamkniętym kodzie źródłowym działającym w zamkniętym środowisku osadzonym. Zgodnie z tym, co wiem z licencjonowania LGPLv3, mogę z niego korzystać, o ile oprogramowanie o zamkniętym kodzie łączy się dynamicznie z biblioteką LGPLv3 i pozostawia użytkownikowi swobodę zmiany lub aktualizacji biblioteki LGPLv3 poprzez zmianę binarnych bibliotek. Ponieważ moje oprogramowanie działa w zamkniętym, kontrolowanym, zwalidowanym środowisku, byłoby naprawdę dziwne szanować część pozwalającą użytkownikowi na zmianę biblioteki LGPLv3. Mógłbym dodać do mojego środowiska funkcję pozwalającą na aktualizację plików binarnych biblioteki, ale byłoby dziwne prezentowanie tej funkcjonalności naszym klientom, ponieważ nie byliby zainteresowani zmianą tej biblioteki i postrzegaliby to jako lukę w zabezpieczeniach, więc będą chcesz, abyśmy go usunęli (lub nikomu nie ograniczali dostępu). Czy dodanie funkcji binarnej aktualizacji to jedyny sposób na przestrzeganie LGPLv3? Jeśli korzystając z niej, wymagam skontaktowania się z moją firmą w celu uzyskania dostępu (za pomocą hasła), czy nadal będę respektować licencję?


title: Jak nazywa się ** w Pythonie?

text: Podczas programowania Pythona czasami robię `**` aby dokonać konwersji. Rozumiem, co robi, ale jakimi strukturami danych manipuluję? „Dykt” a co to drugie? „Tablica”? Czy istnieje nazwa dla operatora `**`?


title: Jak zarabiasz na grach html 5 (czyli sponsoringu)?

text: Tworzę gry we Flashu i interesuje mnie tworzenie gier w html, ale nie widziałem żadnych firm ani stron internetowych, które chciałyby kupić te gry (np. sponsoring gier). Miałem nadzieję, że ktoś mógłby mi powiedzieć o firmie, która by to zrobiła lub dlaczego ludzie nie kupują gier html?


title: Nazwa podejścia do strony internetowej zorientowanej po stronie klienta (mniej kodu po stronie serwera, więcej kodu po stronie klienta)

text: Mam pytanie terminologiczne. Szukałem wskazówek, jak zaprojektować stronę internetową, która używa mniej kodu po stronie serwera, a więcej kodu po stronie klienta, i zdałem sobie sprawę, że tak naprawdę nie wiem, który dokładnie termin wyszukiwać, jeśli taki istnieje. Przykład: maksymalizacja wykorzystania sieci CDN dla biblioteki, korzystanie z widżetów, jeśli to możliwe, integracja pakietów SDK mediów społecznościowych po stronie klienta. Więc moje pytanie nie dotyczy samych wskazówek, ale istnienia takiego terminu. Edycja: wiem już o SPA i frameworkach JavaScript po stronie klienta. To właśnie skłania mnie do zastanowienia się, czy istnieje nazwa dla podejścia, w którym skupiasz się na kodzie po stronie klienta w punkcie, w którym maksymalizujesz zasoby zewnętrzne.


title: wzorzec projektowy do opisywania zmiennej podczęści pliku konfiguracyjnego

text: Załóżmy, że mam plik XML _config_ podobny do następującego: <myapp> <settings/> <output> <mailto>parametry konfiguracyjne usługi pocztowej</mailto> LUB <smsto>parametry konfiguracyjne usługi sms</smsto> <output> Podczas gdy ustawienia węzeł będzie miał zawsze taką samą strukturę, węzeł wyjściowy może mieć różną strukturę, w zależności od tego, czy jest to wiadomość e-mail, czy wyjście SMS. Klasy Java będą następujące: class MyAppConfig { String settingXXX; {jaki typ?} wyjście; } Oczywiście będę miał `class MailTo {}` i `class SmsTo {}`. Ponieważ wyjściem może być obiekt `MailTo` lub `SmsTo`, może to być: * typ Object, ponieważ `MailTo` i `SmsTo` nie mają żadnej wspólnej nadklasy. * interfejs `Output`, który z kolei jest implementowany przez MailTo i SmsTo. Ponieważ `MailTo` i `SmsTo` nie mają ze sobą nic wspólnego, interfejs `Output` będzie pusty i „zwinie się” do interfejsu znacznika. Myślę, że w tej sytuacji jest to jedyna możliwa realizacja. Kod klienta będzie typecast `Object` lub `Output` na `MailTo` lub `SmsTo`, które muszą być obsługiwane inaczej. Niemniej jednak jestem zdziwiony, ponieważ wzorce projektowe (książka GoF) wydają się nie uwzględniać tego rodzaju sytuacji. Jaki jest wzór „rzeczywistego świata”, który byś zastosował w tym przypadku?


title: Czy istnieje niezależna strona internetowa poświęcona pracom high-end, takim jak pisanie kompilatorów?

text: Przeczytałem poprzednie posty na stronach freelancerów i korzystałem z większości z nich. Szukam strony dedykowanej wysokiej klasy profesjonalistom i wysokiej klasy pracy. Takich jak pisanie kompilatorów oprogramowania, projektowanie silników baz danych itp. Prawdopodobnie taka strona nie istnieje (musiałby być jakiś rodzaj moderacji), ale naprawdę mam nadzieję, że istnieje, zarówno jako pracodawca, jak i deweloper.


title: Nowa strona internetowa — najlepsze praktyki w zakresie specyfikacji wymagań?

text: > **Możliwy duplikat:** > Wyciąganie wymagań użytkownika od osoby, która nie umie się wyrazić > samego siebie. Jako freelancer hobby jestem w tym nowy. Nigdy wcześniej nie miałem klienta nietechnicznego, który tłumaczyłby mi, co ma robić jego przyszła strona internetowa. Ktoś chce, żebym zrobił dla niego stronę internetową i w zasadzie wyjaśnił mi o co chodzi. Nie jest jednak osobą techniczną i po prostu nie rozumie tego, co muszę wiedzieć i jak to właściwie opisać/wytłumaczyć. Kiedy zapytałem go, jak użytkownik ma przesłać wpis do serwisu, powiedział mi _"Wypełnia formularz."_, co nie bardzo mi pomaga. To był tylko przykład, dotyczy to również innych sekcji witryny, które są znacznie trudniejsze do wyjaśnienia. Strona będzie skierowana do konkretnej grupy demograficznej użytkowników profesjonalnych i nie mam pojęcia o ich zawodzie i jak działa ich branża. Próbowałem znaleźć dobre **szablony dokumentów wymagań dotyczących produktów** w Google, ale żaden z nich nie wydawał się pomagać mu zrozumieć **jak to napisać, abym mógł zrozumieć, czego on chce/potrzebuje**. Czy ktoś może mi podpowiedzieć, jak postępować z takimi nietechnicznymi klientami**?


title: Połączone komponenty grafu za pomocą Prologu

text: Biorąc pod uwagę narożnik `x` nieskierowanego wykresu `G`, chciałbym poprosić o spójny składnik `x`, ale moja pierwsza próba nie działa zgodnie z oczekiwaniami. Oto on: krawędź( a,b ). krawędź (b,a). krawędź (b,c). krawędź( c,b ). krawędź (c,d). krawędź (d,c). połączony( X,X ). połączone( X,Y ) :- krawędź(X,Y). połączone( X,Y ) :- \+ krawędź(X,Y), krawędź( X,Z ), połączone( Z,Y ). A oto moje zapytania i wyniki: | ?- połączony(b,Co). Co = b ? ; Co = a ? ; Co = c ? ; nie | ?- połączony(b,b). PRAWDA ? ; PRAWDA ? ; PRAWDA ? ; nie Dlaczego narożnik „b” nie jest połączony z narożnikiem „d”? Dlaczego róg `b` jest połączony ze sobą trzy razy? Obawiam się innych problemów, które dostanę przy bardziej skomplikowanych wykresach. Czy są jakieś?


title: Czy automatyczne zwroty wpływają na wydajność?

text: Istnieje wiele języków, które automatycznie zwracają ostatnią wartość w funkcji (głównie funkcjonalnej), takiej jak Ruby, Haskell, Lisp itp. Czy ta funkcja (lub jak ją nazywasz) wpływa na wydajność tych języków?


title: Dlaczego elseif zamiast else if?

text: Kilka dni temu zatrzymałem się na kilku zdaniach z programistami PHP (dla współtwórców konkretnego projektu) i stwierdziłem, że `elseif` musi być ściśle używane zamiast `else if` \-- bez podania przyczyny, dlaczego? Czy ktoś może to wyjaśnić? Nie widzę dużej różnicy ani żadnego argumentu na poparcie tego. Info: _Uważam, że jest więcej języków, niż tylko PHP, że ten problem uderza, dlatego zapytałem tutaj, a nie na Stack Overflow. W razie potrzeby możesz przeprowadzić migrację._


title: Jak rozpocząć i utrzymać projekt po pracy

text: Pracuję jako programista na pełen etat. Moje miejsce pracy jednak bardzo ogranicza technologie i języki programowania, których mogę używać. Całą pracę wykonujemy w C++. Oczywiste jest, że C++ szybko traci (a może już stracił) swoją wiodącą pozycję. (proszę mnie nie wyrzucać, mam wieloletnie doświadczenie w C++ i uwielbiam ten język, stwierdzam tylko fakt). Mam kilka pomysłów na projekty Java/Android oraz projekt, który chciałbym zrealizować w C#. Postrzegam to jako sposób na bycie na bieżąco z trendami na rynku pracy i mam nadzieję, że pomoże mi to znaleźć kolejną pracę w bardziej aktualnym obszarze. Oto problem: mój normalny dzień pracy to 10-11 godzin, po skończeniu z dziećmi i obowiązkami domowymi mam około 1-2,5 godziny, zanim będę zbyt zmęczony, by myśleć, a tym bardziej kodować. W tym momencie kładę się spać sfrustrowany, rozczarowany sobą, że nie jestem w stanie trzymać się moich planów, a potem budzę się następnego ranka, aby zrobić to wszystko jeszcze raz. Mam kilka godzin więcej w weekendy, ale najwyraźniej musiałbym zrobić coś innego, jeśli chcę osiągnąć którykolwiek z moich celów. Czy jest jakiś sposób na lepsze wykorzystanie czasu, który mam? Czy któryś z was miał podobny problem i udało mu się go rozwiązać?


title: Jakie są konsekwencje niemutowalnych klas z odwołaniami do zmiennych klas?

text: Niedawno zacząłem przyjmować najlepsze praktyki projektowania moich klas tak, aby były niezmienne na efektywną Javę [Bloch2008]. Mam szereg powiązanych ze sobą pytań o stopnie zmienności i ich konsekwencje. Natknąłem się na sytuacje, w których zaimplementowana przeze mnie (Java) klasa jest tylko „wewnętrznie niezmienna”, ponieważ jest niezmienna, z wyjątkiem tego, że używa (niezmiennych) odwołań do innych mutowalnych klas. Aby wyjaśnić, jeśli obiekt został skonstruowany z referencjami ustawionymi na niezmienne klasy, klasa byłaby niezmienna. 1. Czy którakolwiek z zalet (patrz poniżej) klas niezmiennych jest prawdziwa nawet w przypadku klas „wewnętrznie niezmiennych”? 2. Czy istnieje akceptowany termin na wspomnianą „wewnętrzną zmienność”? Strona niezmiennego obiektu Wikipedii używa nieźródłowego terminu „głęboka niezmienność”, aby opisać obiekt, którego odniesienia również są niezmienne. 3. Czy rozróżnienie między zmiennością a efektem ubocznym/stanem jest ważne? * * * Witryna „Java Practices” zawiera następujące zalety niezmiennych klas: * są proste w konstrukcji, testowaniu i użyciu * są automatycznie bezpieczne dla wątków i nie mają problemów z synchronizacją * nie wymagają konstruktora kopiującego * nie są potrzebne implementacja klonu * pozwala hashCode na użycie leniwej inicjalizacji i buforowanie jego zwracanej wartości * nie musi być kopiowana defensywnie, gdy jest używana jako pole * dobre klucze Map i elementy Set (obiekty te nie mogą zmieniać stanu w kolekcji) * mieć niezmiennik klasy ustalony raz podczas konstrukcji i nigdy nie musi być ponownie sprawdzany * zawsze mieć "awarię atomowości" (termin używany przez Joshuę Blocha) : jeśli niezmienny obiekt zgłasza wyjątek, nigdy nie pozostaje w niepożądanym lub nieokreślonym państwo


title: Prowadzisz pasywne poszukiwanie pracy będąc zatrudnionym, radząc sobie z zalewem wiadomości od nieukierunkowanych Rekruterów, HR-owców?

text: Obecnie jestem zatrudniony w firmie będącej w zasadzie startupem, podjąłem tę pracę, aby zdobyć więcej doświadczenia na platformie, na której chcę pracować. Chcę mieć możliwość przejścia na nowe stanowisko w bardziej stabilnej firmie, ale miałem pewne problemy podczas publikowania mojego CV (wydaje się, że otrzymuję dużą liczbę kontaktów od rekruterów itp.), w tym * wiele wiadomości od osób rekrutujących prace poza moim obszarem, którymi nie jestem zainteresowany * osoby rekrutujące na stanowiska, które nie są tym, czego szukam (inny język, itp. niż obecnie pracuję, a które mnie nie interesują) * w obrębie mojego obszaru miejskiego, ludzie rekrutujący do pracy, która jest jeszcze daleko (jest to bardzo rozległy obszar podmiejski), do którego dojazd jest po prostu za daleko jak na moje preferencje. Podjąłem kilka prób, aby „wystawić się tam”, aby otworzyć niektóre linie komunikacji, ale potem zaczynam otrzymywać wiele telefonów do miejsca, w którym nie mogę nawet odebrać telefonu w ciągu dnia lub nie dostanę zbyt wiele robota skończona. Pytam o to, jakie kroki powinienem podjąć, aby zawęzić liczbę osób, które się ze mną kontaktują. Myślę, że mógłbym spróbować usunąć słowa kluczowe dla innych języków z mojego CV (chociaż miałem je tam pierwotnie, aby pokazać różnorodność w poprzednich doświadczenie) i konkretnie określając moje preferencje dotyczące lokalizacji, dojazdów itp., Ale nie jestem pewien, czy faktycznie przeczytają to, aby spełnić moje oczekiwania. Zająłem stanowisko, że chciałbym najpierw porozmawiać z nimi przez e-mail, aby zawęzić, czy jest to w ogóle sensowna dla mnie pozycja. Wygląda na to, że zawsze chcą po prostu zadzwonić do mnie bez podawania jakichkolwiek informacji z góry, czasami zostawiają wiadomość telefoniczną, a później e-mailem (po tym, jak do nich nie oddzwonię). Czy powinienem po prostu wysłać je z powrotem z kilkoma początkowymi pytaniami i powiedzieć, że nie mogę rozmawiać przez telefon, dopóki nie dowiem się, czy to w ogóle możliwe? Trochę tu gadam, ale myślę, że zastanawiam się, jak nie wyłączać ludzi, którzy mogą mieć dobre szanse, ale także chronić swój czas, ponieważ wydaje się, że jest wielu rekruterów, którzy po prostu nawiązują kontakt jak najwięcej ludzie, jak mogę" podejść


title: Skąd ludzie tak dobrze znają standard C++?

text: Po pierwsze, nie jest to formalne pytanie C++. Od wielu lat pracuję z C++. Przez większość czasu doskonalę swoje umiejętności pracując nad różnymi projektami, czytając dobre książki i ucząc się od kolegów z zespołu. Na moje pytania są często udzielane przez niektórych ekspertów cytaty ze standardu C++. Jestem naprawdę zdumiony, jak ludzie mogą tak dobrze poznać standard C++, że mogą natychmiast znaleźć odpowiednie wytyczne. Oto pytanie dla tych ekspertów C++: Czy naprawdę czytacie Standard C++ strona po stronie, czy też jesteście osobami, które przeglądały ten standard w przeszłości?


title: Sprawdzam minimalną liczbę argumentów wiersza poleceń, ale pozwalam na przełączenie pomocy

text: Po prostu wpadłem na dziwny scenariusz. Jestem pewien, że musiałem spotkać się z taką samą sytuacją w przeszłości, a jednak jakoś tego nie zauważyłem do tej pory. Piszę program, który wymaga co najmniej dwóch argumentów wiersza polecenia. Radzenie sobie z tym jest dość proste, wystarczy sprawdzić, czy istnieje wystarczająca liczba argumentów. Na przykład: A: if (argc < 3) PrintHelpAndQuit(); Jednak chcę również, aby użytkownik mógł zażądać konkretnych ekranów pomocy za pomocą pojedynczego argumentu wiersza poleceń. Na przykład: B: if (args[1] == "/?") PrintHelpAndQuit(); C: if (args[1] == "/?1") PrintHelp1AndQuit(); D: if (args[1] == "/?2") PrintHelp2AndQuit(); Problem polega na tym, że jeśli wstawię wiersz _A_ jako pierwszy, zapewni to, że zostały określone co najmniej dwa argumenty, co zapobiega wywoływaniu wierszy _B_ , _C_ i _D_, a więc użytkownik nie ma dostępu do tych ekranów. Jeśli umieszczę wiersz _A_ po pozostałych, program zawiesi się, jeśli nie zostaną podane żadne argumenty (dostęp do pierwszego elementu tablicy argumentów jest niezdefiniowany). Wydaje się, że istnieją (tylko?) dwa sposoby podejścia do tego: * Umieść wiersze z ekranu pomocy w bloku warunkowym, który sprawdza, czy istnieje co najmniej jeden argument (który powiela działanie wiersza _A_ ): if (argc > 1) { if (args[1] == "/?... } if (argc < 3) PrintHelpAndQuit(); * Umieść dodatkową linię na górze, która sprawdza, czy nie ma argumentów i wyświetla pomoc i kończy działanie, jeśli tak: if (argc < 2) PrintHelpAndQuit(); // teraz prawie całkowicie powiela wiersz A if (args[1] == "/?... if (argc < 3) PrintHelpAndQuit()); Oba te podejścia są w różnym stopniu nadmiarowe Jak inni radzą sobie z tą sytuacją?Czy istnieje bardziej elegancki (i mniej nadmiarowy) sposób na wymaganie minimalnej liczby argumentów bez wykluczania jednego argumentu?


title: Szukasz popularnego, dobrze znanego przykładu oprogramowania o zamkniętym kodzie źródłowym, które używa kodu LGPL, i tak mówi

text: Dla celów rzecznictwa szukam dobrego przykładu niektórych popularnych/powszechnie znanych aplikacji/pakietów o zamkniętym kodzie źródłowym i ogólnie płatnych, które korzystają z dynamicznie dołączanych bibliotek z licencją **LGPL** i nie są nieśmiałe mówiąc o tym w oknach dialogowych instalatora lub najlepiej w informacjach „O programie” i/lub dokumentacji online po zainstalowaniu aplikacji. Zasadniczo szukam dowodów, które poprą argument " _Jeżeli ...duży sprzedawca ... nie ma problemu z dostarczeniem ... bardzo popularnego oprogramowania ... z uzależnieniem od LGPL, ty też nie powinieneś._ " (Najbardziej mile widziane byłyby linki do zrzutów ekranu lub kopii dokumentacji online, które demonstrują użytkowanie bez konieczności zakupu oprogramowania).


title: Gdzie jest dobry punkt wyjścia do planowania Architektury Informacji dla strony internetowej?

text: Planuję projekt opracowania i ulepszenia architektury informacji dla strony internetowej. Obejmuje to struktury nawigacji, klasyfikację treści, metadane itp. * Gdzie jest najlepsze miejsce do rozpoczęcia planowania? * Jakiego oprogramowania można użyć do stworzenia tego (oprócz MS Word?) * Jakieś wskazówki dotyczące projektowania konstrukcji? * Co powinno/nie powinno być uwzględnione? Mając nadzieję, że możesz pomóc.


title: co powinienem zrobić?

text: Jestem menedżerem konfiguracji. Odbyłam staż 6 miesięcy wcześniej, a teraz zatrudnili mnie tylko na 3 miesiące. Zatrudniają dziś nową osobę do zespołu CM, obawiam się, że mnie wyrzucą. Obecnie opiekuję się ich oprogramowaniem CM, ponieważ sami je rozwijają w Oracle. Moje pytanie brzmi: kiedy pracujesz w miejscu, w którym nie płacą tak dużo, czy udostępniasz im swój kod za darmo? A może o ile cię zatrudniają, mogą używać własnego kodu i pakietu? (Mam na myśli specjalny pakiet, taki jak pobierz dane eksportu w excelu). Program piszę w formach Oracle...


title: Jak wrócić do tworzenia oprogramowania po 10-letniej przerwie?

text: Ukończyłem 2004 CECS i jedyne doświadczenie jakie miałem to staż przez 2 lata. W tym czasie posiadałem wiedzę na temat c i c++. Zrobiłem sobie 10-letnią przerwę i teraz chcę do niej wrócić. Jestem zainteresowany c#. Czytałem książki o C# i kilka podstawowych doodli programistycznych. Obecnie próbuję skrótu PRO c# 5.0 i 4.5 .net. Jakie zalecenie muszę zrobić, aby wrócić do branży oprogramowania? Czy uzyskanie certyfikatu Programowanie w c# Egzamin 70-483 powinno mi pomóc, czy powinienem po prostu spróbować napisać coś, co pokaże moje obecne umiejętności i zamieścić to w Internecie?


title: Nakładające się repozytoria kontroli wersji

text: Tak więc pracuję z projektem open source i wprowadzam kilka znaczących zmian w małym module projektu. Projekt używa SVN jako kontroli wersji i potrzebuję dostępu do tego repozytorium, ponieważ jest dużo aktywnego rozwoju i muszę mieć możliwość pobierania aktualizacji. Jednocześnie nie chcę zatwierdzać moich zmian w repozytorium, dopóki go nie skończę i nie przetestuję, a także nie przekażę pliku łatki w celu uzyskania komentarzy. Chciałbym również mieć własne repozytorium, aby mieć dostęp do możliwości kontroli wersji, ale nie chcę korzystać z repozytorium SVN, ponieważ chciałbym zachować moje zmiany poza główną gałęzią, dopóki nie zostaną wykonane . Aby nieco ułatwić, nie będę modyfikował niczego, co aktualnie znajduje się w repozytorium SVN, a jedynie dodawał nowe pliki. Jedynym sposobem, w jaki pomyślałem o tym do tej pory, jest użycie SVN do śledzenia istniejących plików i użycie Mercurial, CVS, Git lub innej kontroli wersji do śledzenia moich nowych plików, więc w katalogu, w którym pracuję , miałbym zarówno folder .svn, jak i .hg. To jednak trochę kłopotliwe. Czy ktoś ma jakieś inne sugestie, jak to zrobić?


title: Darmowy edytor maszynopisu z funkcją uzupełniania kodu na podstawie definicji

text: Wiem, że istnieje wtyczka do Visual Studio. Jednak nie stać mnie na VS, więc szukam darmowej alternatywy, która może być używana do kodowania TypeScript i jest świadoma plików definicji .d.ts i może na ich podstawie wykonywać uzupełnianie kodu. Wiem, że Sublime Text i VIM mogą podświetlać składnię za pomocą odpowiedniego pliku definicji języka. Jednak największą zaletą Typescript jest dla mnie możliwość wspomagania kodu podczas pisania. Czy znasz jakiegoś edytora, który może to zrobić? Jestem zainteresowany, nawet jeśli jest w stanie eksperymentalnym.


title: Czy diagram przepływu może mieć więcej niż jeden początek?

text: Rysuję diagram przepływu, który powinien wizualizować komunikację pomiędzy 4 stworzonymi przeze mnie usługami. Teraz mam pytanie, którego nie jestem do końca pewien. Usługi można uruchomić na dwa sposoby. Czy dozwolone jest posiadanie wielu punktów początkowych na schemacie blokowym? Oraz: czy muszę wizualizować obsługę błędów, na przykład niedostępność usługi? Myślę, że może to nie pasuje do schematu blokowego?


title: Co powinno być dozwolone wewnątrz getterów i seterów?

text: Wdałem się w ciekawą internetową kłótnię na temat metod pobierających i ustawiających oraz enkapsulacji. Ktoś powiedział, że wszystko, co powinni zrobić, to przypisanie (settery) lub dostęp do zmiennej (gettery), aby zachować ich „czystość” i zapewnić hermetyzację. * Czy mam rację, że to całkowicie zniweczyłoby cel posiadania getterów i seterów na pierwszym miejscu, a walidacja i inna logika (oczywiście bez dziwnych efektów ubocznych) powinny być dozwolone? * Kiedy powinna nastąpić walidacja? * Podczas ustawiania wartości, wewnątrz setera (aby zabezpieczyć obiekt przed wejściem w niepoprawny stan - moim zdaniem) * Przed ustawieniem wartości, poza seterem * Wewnątrz obiektu, przed każdym użyciem wartości * Czy seter jest dozwolony zmienić wartość (może przekonwertować prawidłową wartość na jakąś kanoniczną reprezentację wewnętrzną)?


title: Czy strony w pełni buforowalne mają negatywny wpływ na UX?

text: Chcę mieć w swoich witrynach strony w pełni buforowalne, ale nie można tego zrobić, jeśli zawierają dane specyficzne dla użytkownika, takie jak pasek użytkownika lub elementy w interfejsie użytkownika, które mogą się zmieniać w zależności od uprawnień użytkownika. Zastanawiałem się więc, czy możliwe jest wyciągnięcie wszystkiego, co jest specyficzne dla użytkownika przez ajax i odpowiednią aktualizację interfejsu użytkownika. Ale obawiam się, że może to być denerwujące dla użytkownika, a także może być trudne do opracowania. Co myślisz? Czy istnieje jakiś wzór lub coś, co mogę zastosować, aby sobie z tym poradzić?


title: Projektowanie strategii internetowej organizacji. Jaka jest tutaj preferowana metoda?

text: Pracuję nad rozwiązaniem dla organizacji, które musi przetrwać długo (tak subiektywne, jak to jest). Obecnie mają instalację Joomla, dzięki której CMS komunikuje się bezpośrednio z bazą danych, stamtąd zacząłem „wkręcać” dodatki, których potrzebują w swoim środowisku (aplikacja mobilna, kiosk i wyświetlacz w lobby). Zacząłem też pisać usługę RESTful, aby rozmawiać z Joomla (nie z bazą danych joomla) i aplikacjami. Oto schemat tego, jak to się dzieje. ![aktualny kierunek architektury](http://www.gliffy.com/pubdoc/3221299/L.png) **_note:** mają już "public & admin" oraz centralną db, google cal, email i vimeo_ Ponieważ dopiero zaczynam z tym, myślę, że prawdopodobnie powinienem naciskać na odpowiedni projekt od podstaw. Sugeruję to, aby mieli solidne podstawy do dalszego rozwoju. Oto moja sugestia dla nich! [proponowana architektura](http://www.gliffy.com/pubdoc/3221292/L.png) Skoro mają już kilka elementów, czy warto naciskać na nową architekturę? Czy jestem na dobrej drodze, jeśli chodzi o nową architekturę? Na koniec warto zauważyć, że nie są w pełni zadowoleni z Joomla i i tak szukają możliwej przebudowy tej części swojego projektu.


title: Czy uczciwe jest wymaganie przeniesienia praw autorskich od współtwórców projektu systemu operacyjnego?

text: Kontynuacja pytania Czy projekt na licencji BSD potrzebuje podpisanego oświadczenia od każdego kontrybutora?: Istnieje kilka powodów, dla których projekt open source może chcieć uzyskać przydział praw autorskich od swoich kontrybutorów. Na przykład: * Aby zezwolić autorowi projektu na pozwanie o naruszenie (ponieważ może to zrobić tylko właściciel praw autorskich). Dlatego też FSF wymaga takiego przydziału. * Aby zapobiec przyszłym problemom ze współtwórcami, na przykład twierdzącymi później, że nie udostępnili swojego wkładu na tej samej licencji systemu operacyjnego. Innym powodem jest to, że firma wydaje swoje oprogramowanie na (L)GPL, a także sprzedaje je na licencji komercyjnej. Następnie konieczne jest przeniesienie praw autorskich, aby firma mogła włączyć wkłady na podstawie licencji komercyjnej. Jeśli kontrybutorzy zostaną wcześniej poinformowani, jest to sprawiedliwe. Ale jeśli firma ma prawa autorskie do wszystkiego, może zrobić w zasadzie wszystko ze źródłami, na co autorzy nie zgodziliby się. Może przełączyć się na inną licencję, np. z (L)GPL na licencję inną niż copyleft, a nawet przestać wydawać projekt jako open source i przełączyć się wyłącznie na licencjonowanie własnościowe. Podobno stało się to z SourceForge. Więc jaki jest uczciwy sposób rozwiązania problemu? Jeśli właściciel projektu nie otrzyma cesji praw autorskich, może mieć problemy w przyszłości. Jeśli to zrobi, dzieło współtwórców może stracić licencję lub status open-source. Czy istnieje rozwiązanie tego dylematu, które jest sprawiedliwe dla obu stron? Ponieważ nie jestem native speakerem, mogę użyć niewłaściwych terminów prawnych. Prosimy o poprawienie pytania. Powiązane: * Jak uzyskać współtwórców przypisanie praw autorskich właścicielowi praw autorskich?. * Przypisanie praw autorskich do projektów open source


title: Dlaczego enkapsulacja jest uważana za podstawową zasadę w OOP?

text: Obecnie próbuję głębiej zrozumieć 4 zasady OOP: abstrakcję, enkapsulację, dziedziczenie i polimorfizm. Po przestudiowaniu czterech zasad nie do końca rozumiem, dlaczego enkapsulacja jest uważana za jedną z czterech podstawowych zasad OOP. Enkapsulacja jest niezwykle powszechna i użyteczna w OOP, ale wydaje mi się bardziej techniką lub strategią do wykorzystania jako część abstrakcji. Dobra definicja abstrakcji: _'Abstrakcja to koncepcja **przeniesienia uwagi od szczegółów** i konkretnej implementacji rzeczy, **na typy (tj. klasy), dostępne operacje (tj. metody)** , itd. , czyniąc programowanie prostszym, bardziej ogólnym i bardziej abstrakcyjnym.'_ Z drugiej strony enkapsulacja jest taka: _' **Ukrywanie wewnętrznych szczegółów implementacji klasy** przed zewnętrznym światem oprogramowania i udostępnianie interfejsu aby inne jednostki oprogramowania komunikowały się i manipulowały tą klasą.`_ Jeśli tak, to wydaje mi się, że enkapsulacja jest głównie techniką uatrakcyjnienia rzeczy w systemie oprogramowania. W ten sposób działa bardziej jak strategia, która wdraża koncepcję abstrakcji, a nie jako samą podstawową zasadę. Mógłby być uważany za „zasadę”, a nie tylko technikę, ale nadal byłby częścią ogólniejszej zasady abstrakcji, a nie główną zasadą samą w sobie. Czy ktoś się zgadza? Jeśli się mylę, wyjaśnij, dlaczego.


title: Jaki wniosek wyciągnąć z braku różnicy w wygenerowanym asemblerze z 2 raczej różnych programów?

text: Mogłem nie mieć kontrprzykładu, kiedy otrzymałem odpowiedź „Wskaźnik to tylko adres, na czym polega trudność?” ale tak naprawdę nie kupiłem tak prostego wyjaśnienia, a przy kodzie asemblera nie jest oczywiste, co jest wskaźnikiem dla 2 różnych programów w C, które generują ten sam asembler. cat pelle.s valle.s .file "pelle.c" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 movl $0, %eax popl %ebp .cfi_def_cfa 4, 4 .cfi_restore 5 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 " .section .note.GNU-stack,"",@progbits .file "valle.c" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 movl $0, %eax popl %ebp .cfi_def_cfa 4, 4 .cfi_restore 5 ret .cfi_endproc .LFE0: .size m ain, .-main .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3" .section .note.GNU-stack,"",@progbits 1) Adres do zmiennej to `&var1` i wskaźnik to `int* var1` napisany inaczej niż adres. 2) Kiedy kompiluję 2 programy w C, w których jedyną różnicą jest wskazywanie, nie ma różnicy w asemblerze: $ diff pelle.c valle.c ;cat pelle.c valle.c;diff pelle.s valle.s 3c3 < int * pelle; --- > wewn. dolina; #include <stdio.h> int main(void) { int * pelle; zwróć 0; } #include <stdio.h> int main(void) { int valle; zwróć 0; } 1c1 < .file "pelle.c" --- > .file "valle.c" Ale jakie wnioski można wyciągnąć z braku różnicy w wygenerowanym asemblerze, aby zbadać "prostą i oczywistą różnicę" między deklaracją wskaźnika a innym typem? Czy uproszczona odpowiedź jest słuszna przez cały czas, wskaźnik to tylko zmienna i nie ma sensu dalsza analiza? Albo że różnica między wskaźnikiem a zmienną to przypadek „cukru”, ponieważ typy są usuwane na poziomie zespołu, gdzie nie ma różnicy? Czy różnica w wygenerowanym zestawie pokaże różnicę, jeśli użyję wskaźników jako argumentów do funkcji i rzeczywiście będzie różnica w przypadku użycia niektórych wskaźników, a ten przykład jest zbyt trywialny i nie można go uogólnić? Więc kiedy typy zostaną usunięte z wygenerowanego zestawu, czy mogę stwierdzić, że różnica typów rzeczywiście spowoduje różnicę w wygenerowanym zestawie dla nietrywialnego przykładu, np. wskaźniki jako argumenty i ten przykład nie jest zbyt dobry, ponieważ wygląda na to, że wygenerowany zestaw ignoruje typowanie, podczas gdy różnica typu, taka jak ta, będzie miała znaczenie w wygenerowanym zestawie dla innego przykładu? dolina wewnętrzna; int * pelle; Assembler .data .align 2 .global valle valle: .word 0 .data .align 2 .global pelle pelle: .word 0


title: Zasady dotyczące dokumentów

text: Po przejrzeniu wielu artykułów i tego postu wiem, dlaczego używane są doctypes, a także o różnych trybach uruchamianych przez przeglądarkę, takich jak standardy, dziwactwa itp. Pobrałem ścisły doctype z tego adresu URL - http://www. w3.org/TR/html4/strict.dtd, ale nie mogłem zrozumieć, co jest w nim napisane. Moje pytanie brzmi: jeśli chcę napisać stronę w html i css, która będzie miała doctype, który uruchomi tryb standardów, gdzie mogę uzyskać jasną i prostą do zrozumienia listę wszystkich reguł (na przykład elementów i atrybutów czego powinienem unikać), którego mój kod html i css powinien być zgodny?


title: Pobieranie pliku audio, automatyczne przepisywanie go, pobieranie danych wyjściowych i dopasowywanie go do transkrypcji

text: Mamy transkrypcje około 8000 filmów. Jednak te transkrypcje nie zawierają żadnego tekstu czasowego (tj. nie są zakodowane czasowo w filmie). Czy istnieje oprogramowanie, które to umożliwia? Jeśli nie, jakiego podejścia programistycznego użyjesz, aby osiągnąć ten wyczyn?


title: Czy istnieje ustalona taksonomia oprogramowania oparta na typie oprogramowania?

text: Badam podejścia inżynierskie do tworzenia oprogramowania w oparciu o rodzaj oprogramowania, na przykład: * Niestandardowe oprogramowanie jednorazowe (np. oprogramowanie promu kosmicznego) * Aplikacja Whitebox wymagająca dostosowania (np. Apache Ofbiz ERP - kod źródłowy jest zwykle pobierany i dostosowywany do każde wdrożenie) * Aplikacja Blackbox bez punktów rozszerzeń * Aplikacja Blackbox z punktami rozszerzeń do dostosowywania (np. MS Word, SAP) * ... Czy istnieje ustalona taksonomia różnych typów oprogramowania w oparciu o sposób implementacji oprogramowania?


title: Używanie JavaScript do znalezienia prawidłowego przesunięcia w dołączonych plikach

text: Obecnie tworzę wiele parserów przy użyciu PEGjs i zaimplementowałem własny częściowy preprocesor, który za pomocą RegExp wyszukuje i zastępuje dyrektywy „#include” żądanymi plikami, co powoduje powstanie pliku w pakiecie. Teraz mogę łatwo znaleźć problem w mojej składni PEGjs, jeśli zapiszę ten dołączony plik, a następnie spróbuję zbudować parser, ale ponieważ pracuję teraz z wieloma parserami, nie chcę korzystać z tej metody, więc tworzyłem nowy preprocesor, który zapisuje przesunięcia początkowe/końcowe w tablicy, która jest sprawdzana, gdy wystąpi błąd podczas budowania parsera i szuka poprawnego pliku oraz oblicza rzeczywiste przesunięcie. Dotarłem do części, w której mogę znaleźć poprawny plik, ale nie wiem, jak obliczyć prawidłowe przesunięcie. Oto główny link, który pokazuje „owoce mojej pracy”: https://gist.github.com/futagoza/10520299 Część, w której obliczam poprawne przesunięcie, to funkcja „buildPosDetails” w wierszu 47 (łatwo to powiedz, że jestem kiepski z matematyki :D)