title: Czy przedsiębiorstwa przyjęły czysty FP do tworzenia interfejsów użytkownika dla komputerów stacjonarnych? Przykłady?

text: ~~Widzę pewne dowody (F#) w Internecie, że programowanie funkcjonalne przenika do przedsiębiorstwa.~~ Tam, gdzie pracuję, zajmujemy się głównie tworzeniem aplikacji VB.NET WinForms. Infrastruktura .NET do tworzenia aplikacji WinForms jest zbudowana na koncepcjach OO (klas posiadających metody) — pomyśl o tym, jak zdefiniowano pole kombi. W rezultacie nie wydaje się, aby nawet przy użyciu F# można było objąć paradygmat funkcjonalny. W znalezionych przeze mnie przykładach F# powraca do stylu OO. Czy ktoś zna przykłady, w których przedsiębiorstwo przyjęło czysty styl funkcjonalny do tworzenia GUI? Ten mówca mówi o graficznych interfejsach użytkownika w trybie natychmiastowym, które wydają się dobrze pasować do paradygmatu funkcjonalnego. Języki React.js i Elm są dobrze dopasowane, ale nie zostały przyjęte przez „przedsiębiorstwa”. Nie znam przedsiębiorstwa, które robi naprawdę funkcjonalne GUI. Zastanawiam się, czy czysty FP nadaje się do zadania i czy ktoś mógłby skierować mnie do przykładów kodu źródłowego. Mam przeczucie, że przedsiębiorstwo już dawno wkroczyło na drogę OO, więc OO jest tym, na czym zbudowano platformy GUI. Gdyby FP był tak powszechnie używany, mielibyśmy też biblioteki FP GUI.


title: Interfejs i dziedziczenie: najlepsze z obu światów?

text: „Odkryłem” interfejsy i pokochałem je. Piękno interfejsu polega na tym, że jest to kontrakt, a każdy obiekt, który spełnia tę umowę, może być używany wszędzie tam, gdzie ten interfejs jest wymagany. Problem z interfejsem polega na tym, że nie może mieć domyślnej implementacji, co jest uciążliwe dla przyziemnych właściwości i pokonuje DRY. Jest to również dobre, ponieważ utrzymuje implementację i system w separacji. Dziedziczenie z jednej strony utrzymuje ściślejsze połączenie i może złamać hermetyzację. **Przypadek 1** ( Dziedziczenie z członkami prywatnymi, dobra enkapsulacja, ściśle powiązane) class Employee { int money_earned; nazwa ciągu; publiczne: void do_work(){money_earned++;}; string get_name(zwróć nazwę;); }; class Nurse : public Employee: { public: void do_work(/*wykonaj pracę. Ups, nie mogę zaktualizować zarobione_pieniądze. Nieświadomy muszę zadzwonić do superklasy' do_work()*/); }; void ZatrudnijNurse(Pielęgniarka *n) { pielęgniarka->do_pracy(); ) **Przypadek 2** (tylko interfejs) class IEmployee { virtual void do_work()=0; wirtualny łańcuch get_name()=0; }; //klasa Pielęgniarka implementuje IEmployee. //Ale teraz każdy pracownik musi powtórzyć implementację get_name(), //i dodać ciąg składowy nazwy, który przerywa DRY. **Przypadek 3:** (najlepszy z obu światów?) Podobnie jak w przypadku **Przypadek 1**. Jednak **wyobraź sobie, że (hipotetycznie) C++** nie pozwala na nadpisywanie metod **z wyjątkiem** tych, które są **czysto wirtualnymi**. Tak więc w **Przypadku 1** nadpisanie funkcji do_work() spowodowałoby błąd w czasie kompilacji. Aby to naprawić, ustawiamy do_work() jako czysto wirtualną i dodajemy osobną metodę increment_money_earned(). Jako przykład: class Employee { int money_earned; nazwa ciągu; public: wirtualny void do_work()=0; void increment_money_earned(money_earned++;); string get_name(zwróć nazwę;); }; class Pielęgniarka : public Pracownik: { public: void do_work(/*wykonaj pracę*/ increment_money_earned(); ); . }; Ale nawet to ma problemy. Co jeśli za 3 miesiące Joe Coder utworzy Doctor Employee, ale zapomni wywołać increment_money_earned() w do_work()? * * * **Pytanie:** * Czy **Przypadek 3** jest lepszy od **Przypadek 1**? Czy to z powodu „lepszej enkapsulacji” czy „luźniejszego powiązania”, czy z innego powodu? * Czy **Przypadek 3** jest lepszy od **Przypadek 2**, ponieważ jest zgodny z DRY?


title: Opanowanie technologii takich jak LINQ, WCF jest naprawdę potrzebne, czy wystarczy OOPS?

text: Jestem programistą C#. Moja obserwacja branży IT jako programisty C# polega na tym, że technologia ciągle się zmienia lub jest aktualizowana przez Microsoft, np. LINQ, WCF i WPF itp. OOP było podstawą wszelkiego rodzaju zmian, które widzimy dzisiaj w dowolnym języku. Moje pytanie brzmi: 1. Czy to dobrze, jeśli jestem porządnym programistą w OOPS, ale nie opanowałem żadnej konkretnej technologii? 2. Czy jako programista WinForms konieczna jest znajomość C++ z C# dla lepszej perspektywy pracy?


title: Bogaty interfejs konsoli

text: Istnieje wiele programów konsolowych, a zwłaszcza gier wykorzystujących pełne przerysowanie (nie jestem pewien, czy to poprawnie nazwane) okna konsoli. Na przykład spójrz na wyjście linuxowego programu `top` -> http://upload.wikimedia.org/wikipedia/commons/9/9f/Top_program.jpg nie tylko piszesz tekst linia po linii przez cały czas, całe wyjście o tysiące wierszy, ale każda sekunda czyści ekran i drukuje zaktualizowane informacje. Albo inny przykład `Apache Geronimo`: podczas uruchamiania wypisuje do paska postępu konsoli -> http://i.imgur.com/BYWf1Sq.jpg Moje pytanie brzmi, jak osiągnąć ten sam wynik przy użyciu Javy?


title: Jaka jest najlepsza metoda przechowywania danych dla słownika językowego?

text: Pracowałem nad stworzeniem słownika całkowicie offline przy użyciu zrzutów XML Wikisłownika. Same zrzuty zajmują około 10 MB, ale po przekonwertowaniu na indeks za pomocą indeksatora wyszukiwarek (ja używam Whoosh Search Engine w Pythonie), pełny indeks zajmuje około 250 MB. Co myślę, że byłoby trudne do rozpowszechniania, może być spakowane, ale nadal nie zbliży się do 10 MB. A indeksowanie w moim systemie zajmuje około 1 godziny, więc indeksowanie podczas instalacji oprogramowania na komputerze jest żmudne. Więc szukam alternatywnego sposobu przechowywania słów i znaczeń, aby stworzyć słownik. Jakie jest lepsze rozwiązanie z możliwością wyszukiwania? Może być jakąś bazą danych, która produkuje lekkie DB. A może indeksy wyszukiwarek są lepsze niż DB?


Słyszałem różne interpretacje „dźwięku i kompletności”. Rozumiem, że _kompletność_ oznacza znalezienie rozwiązania, jeśli takie istnieje. Co to znaczy, że algorytm to _dźwięk_. Co to znaczy, że algorytm jest solidny i kompletny?


title: Java: jak zarządzać stanem klient-serwer UDP

text: Próbuję napisać aplikację Java, która działa podobnie do MapReduce. Jest serwer i kilku pracowników. Pracownicy mogą przychodzić i odchodzić, jak im się podoba, a członkostwo w grupie ma łagodny stan. Aby stać się częścią grupy, pracownik musi wysłać datagram UDP do serwera, ale aby nadal być częścią grupy, pracownik musi wysyłać datagram UDP do serwera co 5 minut. Aby uwzględnić tymczasowe błędy, pracownik może przeoczyć aż dwa kolejne okresowe datagramy UDP. Dlatego serwer musi śledzić bieżący zestaw pracowników, a także ostatni czas, w którym każdy pracownik wysłał datagram UDP. Zaimplementowałem klasę o nazwie WorkerListener, która implementuje Runnable i nasłuchuje datagramów UDP na określonym porcie UDP. Teraz, aby śledzić aktywnych pracowników, ta klasa może utrzymywać HashSet (lub HashMap). Po odebraniu datagramu serwer może wysłać zapytanie do HashSet, aby sprawdzić, czy jest to nowy element członkowski. Jeśli tak, może dodać nowego pracownika do grupy, dodając wpis do HashSet. Jeśli nie, musi zresetować „timer” dla pracownika, zauważając, że właśnie usłyszał od odpowiedniego pracownika. Używam słowa timer w sensie ogólnym. To nie musi być jakiś zegar. Być może można to również zaimplementować za pomocą zmiennych int lub long. Ponadto serwer musi uruchomić wątek, który stale monitoruje liczniki, aby pracownicy mogli zobaczyć, że klient, który przekroczy limit czasu w dwóch kolejnych interwałach datagramu, zostanie usunięty z HashSet. Nie chcę tego robić w wątku WorkerListener, ponieważ byłoby to blokowanie funkcji odbierania () datagramu UDP. Jeśli utworzę osobny wątek do monitorowania HashSet pracownika, musiałaby to być inna klasa, być może WorkerRegistrar. Muszę udostępnić HashSet z tym wątkiem. Należy zatem wprowadzić również wzajemne wykluczanie. Moje pytanie brzmi, jaki jest najlepszy sposób, aby to zrobić? Wskaźniki do niektórych przykładowych implementacji byłyby świetne. Chcę użyć implementacji JDK w wersji barebone, a nie jakiegoś wymyślnego API do obsługi stanu, które zajmuje się wszystkim, ponieważ chcę, aby to była użyteczna demonstracja dla klasy, której uczę. Dziękuję


title: Metody przeglądu kodu

text: Po prostu wychodzisz na kończynę. Czy wykonanie przeglądu kodu przez próbkowanie kilku klas i jednostek kodu przez programistę jest wystarczająco dobre, aby ocenić, co zrobił źle, dostarczając dane wejściowe? To jest na wypadek, gdybyś nie miał czasu i nie mógł przejrzeć każdego napisanego przez nich wiersza. Wychodzę z założenia, że programiści mogą wszędzie powielać ten sam typ błędów. Czy to skuteczne podejście? lub częściowo skuteczne, czy w ogóle nieskuteczne? Jakie inne podejścia są lepsze? Siedzisz z każdym programistą, który napisał linijki kodu i pytasz, dlaczego zrobili to w określony sposób? lub robisz to sam, a następnie wysyłasz streszczenie swoich wyników e-mailem? Jak podchodzisz do przeglądu kodu napisanego przez młodszych programistów/rówieśników, kiedy musisz przejrzeć całą bazę kodu w typowym 15-dniowym sprintie?


title: Opracowanie dokumentu ze strategiami radzenia sobie z „katastrofami”

text: Czy ktoś zna jakieś wytyczne dotyczące pisania dokumentu radzenia sobie z możliwymi scenariuszami katastrof? Przez katastrofę rozumiem wszystko, co może doprowadzić do utraty pracy, czasu lub ostatecznie klienta. Wydaje mi się, że pamiętam, jak czytałem artykuł w tym stylu, ale niestety nie mogę go już znaleźć. Więc byłbym wdzięczny za informację zwrotną w tym kierunku. Myślę, że takie podejście przydałoby się w firmie, w której jestem teraz, ponieważ od czasu do czasu mieliśmy strach, którego można było uniknąć dzięki myśleniu prewencyjnemu.


title: Kolejność parametrów w kodzie lokalizacji

text: W kodzie lokalizacyjnym (np. `T('angielska fraza z parametrami %s i %s', param1, param2)` kolejność parametrów w różnych językach jest inna. Jak sobie z tym poradzić? Nasz silnik lokalizacyjny wydaje się nie obsługiwać nazwanych lub numerowanych parametry, więc parametry muszą iść w tej samej kolejności, co w kodzie.


title: zamieszanie związane z używaniem nodejs w rzeczywistej aplikacji internetowej lub ide

text: Jestem nowy w używaniu `nodejs` w pełni i wydaje się, że jest to teraz prawie wszystko dla **wszystkich**. Ale programuję w Visual Studio i jestem trochę zdezorientowany, jak to działa. przytoczę przykład; Jednym z zadań, które chcę wykonać, jest pobranie listy wszystkich plików w katalogu i wszystkich jego podkatalogach oraz zwrócenie ich jako `string[]` dla pliku `.config` javascript. Zacząłem tego szukać i znalazłem wiele odpowiedzi, ale wszystkie wracały do `nodejs`, na przykład ten, ten, i ten. Naprawdę nie szukałem niczego związanego z `nodejs`, to po prostu wydaje się być częścią każdego rozwiązania. Zainstalowałem go i dotarłem do miejsca, w którym mogę zrobić kilka prostych rzeczy, takich jak stworzenie bardzo prostego serwera, który nasłuchuje portu – dzięki prostym samouczkom napisanym dla kretyna takiego jak ja – ale trudno mi się rozgryźć jak używać tego typu rzeczy w moich prawdziwych programach - konkretnie `ASP.NET MVC`. Szukałem też dość intensywnie tego tematu i odkryłem rzeczy takie jak `iisnode` i tym podobne, które dokonują częściowej integracji. Ale mimo tego wszystkiego, tego bogactwa informacji, jestem **bardzo** zdezorientowany. Rozumiem, że mogę go używać z wiersza poleceń, takiego jak `PowerShell`, mogę uruchamiać polecenia z terminala i instalować pakiety w projektach, ale trudno mi zobaczyć i znaleźć, jak to faktycznie przekłada się na dosłowne, prawdziwe wykorzystanie w istniejącej aplikacji. Szukałem przykładów od wielu dni, przeczytałem co najmniej 3 książki o nodejs, The Node Beginner Book, What is Node i Professional Node.js i szczerze mówiąc, wciąż jestem zagubiony jak zawsze. Wszystko, co czytam, zakłada, że robię coś z wiersza poleceń lub terminala, ale wszystkie aplikacje, które widzę dla węzła, zakładają, że piszesz aplikację internetową. Naprawdę ciężko jest mi owinąć głowę **jak** używasz go **w** aplikacji. Czy ktoś może mi w tym pomóc? Być może działający przykład rzeczywistego programu, który używa węzła? W tym momencie wezmę prawie wszystko, chociaż `ASP.NET MVC` to mój podstawowy system z wyboru. Pierwotnie zamierzałem opublikować to na `StackOverflow`, ale ktoś zasugerował, że ta społeczność byłaby bardziej odpowiednia dla tego pytania. # Aktualizacja Chcę przedstawić jaśniejszy przykład tego, co mnie dezorientuje, już się uczę z powodu 1 proponowanej odpowiedzi, ale pozwólcie, że podam więcej przykładów. Programuję w `Visual Studio`, nie ma ono prawdziwego pojęcia `node.js` \- w rzeczywistości, jeśli próbuję robić rzeczy, które będą działały z węzłem, sprawia mi to problemy. Często muszę kodować cokolwiek związanego z węzłem w `WebStorm` z `JetBrains`. Rozumiem, że mogę _'kompilować'_ rzeczy z węzłem, czego nie rozumiem, to jak mogę ** wywołać ** to w moim programie, a nie w wierszu poleceń. Na przykład załóżmy, że istnieje moduł node, który pobiera tablicę i coś z nią robi - dla przykładu powiedzmy, że sortuje wszystko w tablicy alfabetycznie i jest to _moduł_ o nazwie _supersort_. Więc gdybym był przy konsoli, po prostu wpisałbym ... > node supersort.js OK, ale teraz **nie** jestem w wierszu poleceń. Opublikowałem swoją aplikację internetową. Mój użytkownik jest na stronie, powiedzmy „/konto/historia” i widzi listę wszystkich kupionych produktów. Ze względu na argument, powiedzmy, że mam tę listę jako `object[]` lub `string[]` \- Zdaję sobie sprawę, że jest to kompletnie absurdalne i byłoby o wiele bardziej złożone, ale po prostu pobaw się ze mną. Chcę uruchomić _`supersort`_ na tej stronie. Ale jest na żywo! Jak mam to zrobić? Jak uruchomić ten _moduł_ na ich aktywnych, aktywnych danych bez konieczności ręcznego przebywania w konsoli? Czy istnieje zestaw plików javascript, które mam pobrać i wywołać żądania http w określony sposób? Czy mogę podłączyć specjalny „IHttpHandler” w „IIS”? Myślę, że możesz zacząć widzieć, gdzie się zgubiłem. # Aktualizacja 2 Próbując jeszcze bardziej podkreślić moje pytanie, postaram się przytoczyć bardziej konkretny przykład. Chcę użyć biblioteki `Q.js` w mojej aplikacji `ASP.NET MVC`. Teraz jest wersja 1, która wydaje mi się wyczerpana z pudełka, ale chcę wypróbować wersję 2 - można ją znaleźć pod linkiem **Q.js v2 (beta)** Więc używam Visual Studio, i ściągnę plik `q.js` i załaduję go, ale od razu mamy już kłopoty - jeśli od razu spojrzysz na kod źródłowy pliku, widzę to. wymagaj("kolekcje/podkładki"); var WeakMap = require("kolekcje/słaba-mapa"); var Iterator = require("kolekcje/iterator"); var asap = wymagaj("jak najszybciej"); Teraz z pewnością nie mam folderów o tych nazwach w mojej aplikacji - i chociaż mam zainstalowany `node.js`, umieszczenie tego pliku w tagu `<script>` nie działa, ponieważ mówi, że nie może znaleźć konkretnego biblioteki. Jeśli wejdę do konsoli jawnie i wpiszę `npm install -g q@~2`, utworzy folder o nazwie `node_modules/q` w moim folderze `AppData/Roaming/npm`, a ten **tak** mieć foldery dla tych innych bibliotek. Więc jaki jest właściwy sposób, aby to zrobić? Oczywiste jest, że samo zainstalowanie węzła nie powoduje, że polecenia węzła działają, gdy próbuję uruchomić stronę w ASP.NET MVC - ale nie rozumiem też, jak dostać się do ostatecznej wersji biblioteki, którą mogę dołączyć do mojego aplikacji jak normalny plik javascript i używać w całym programie.


title: Zrozumienie protokołu CAN

text: Mam za zadanie przekonwertować sterownik protokołu CAN z Basic CAN na Full CAN. Projekt zawiera wykorzystany w nim stos CANopen. Zainicjowałem badanie stosu CANopen. **Chcę wiedzieć, czy konieczne jest studiowanie stosu CANopen i do jakiej głębokości należy przestudiować stos CANopen?** Uwaga – głównym zadaniem jest ulepszenie kodu dysku poprzez przekształcenie go w pełną implementację CAN


title: Wybór formatu pliku do przechowywania prostych danych tekstowych

text: Moja aplikacja .NET wykonuje swoją pracę, a następnie tworzy raport (arkusz Excel). Raport zawiera tysiące krótkich ciągów tekstowych [KLUCZ - WARTOŚĆ], więc arkusze programu Excel są bardzo dobrze dopasowane, jedna kolumna zawiera klucze, a druga wartości. Łatwo jest zbadać te raporty. Ale ze względu na problemy z wydajnością próbuję teraz znaleźć inny format pliku do tworzenia raportów w .NET w sposób łatwy do ręcznego zbadania, na przykład tabeli lub zwykłego tekstu. Więc jaki rodzaj pliku mogę wybrać? Przepraszam za mój zły angielski.


title: jaki jest powód używania xslt?

text: Dlaczego XSLT jest używany przez wiele aplikacji internetowych?


title: Jaki jest najlepszy sposób na wykorzystanie polimorfizmu podczas projektowania modeli danych dla JPA?

text: Zostałem poproszony o wsparcie aplikacji Java EE. Model danych został źle zaprojektowany i nie będzie obsługiwał kilku niezbędnych przypadków użycia; więc rozwijam nowy model danych za pomocą EclipseLink (stary został zbudowany na iBATIS). Pamiętaj, że nie jestem guru EclipseLink i wciąż mam wiele pytań na temat najlepszych sposobów jego wykorzystania. Na przykład bieżąca aplikacja ma różne encje dla różnych typów żądań — powiedzmy CakeRequest, PieRequest, DonutRequest, itp. Moją pierwszą myślą było utworzenie podstawowego typu żądania, a następnie rozszerzenie go za pomocą PieRequest, który może mieć pola specyficzne dla to, takie jak crustType i hasCoolWhip. Z pewnością EclipseLink to potrafi. Potrzebuję jednak również możliwości wylistowania wszystkich żądań, zaczynając od najnowszych. Nie jestem pewien, jaki byłby najlepszy sposób na poradzenie sobie z tym. Aby posortować żądania razem, muszę być w stanie umieścić wszystkie typy żądań w jednej kolekcji, co jest sprzeczne z celem polimorfizmu. Możliwe, że istnieją funkcje EclipseLink, które pomogłyby mi tutaj, funkcje, których nie jestem świadomy; a może sama Java może dostarczyć odpowiedzi. Czy ktoś ma jakieś sugestie? Dziękuję bardzo!


title: Wymuś przepływ pracy

text: Dlatego właśnie przeprowadziliśmy migrację z SVN do Perforce. Mam mały problem z ustaleniem najlepszego przepływu pracy. W przypadku Subversion wykonałem następujące czynności (poprzez TortoiseSVN): 1. Sprawdź repozytorium 2. Wykonaj pracę 3. Zaktualizuj repozytorium 4. Rozwiąż konflikty, jeśli takie istnieją. 5. Zatwierdź mój kod. 6. Pracuj. Jakie jest najlepsze podejście do P4? Wiem, że musisz otworzyć pliki do edycji, zanim zaczniesz je edytować. Mając to na uwadze, obecnie wykonuję następujące czynności (przez P4V): 1. Synchronizuj z nagłówkiem 2. Otwórz cały projekt do edycji 3. Wykonaj pracę 4. Przywróć niezmienione pliki 5. Prześlij, tj. Zatwierdź oczekujące zmiany. 6. Ponownie otwórz cały projekt do edycji. 7. Pracuj.. Czy jest to praktyczne podejście? A może jest taki, który jest bardziej zgodny z najlepszymi praktykami Perforce?


title: Nauka systemów wbudowanych: następny krok

text: Jestem nowicjuszem próbującym nauczyć się programowania systemów wbudowanych na ubuntu. Wypróbowałem poniższy link: http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Tutorial-A- simple-embedded-Linux-system/ Ale po zrobieniu tego nie robię tego wiem, czułem się tak, jakbym właśnie stworzył dysk rozruchowy USB. Nie wiem, co pomyśleliby inni ludzie znający się na tym polu... niemniej jednak chciałbym zrobić kolejny krok. Czego powinienem szukać dalej?


title: Gdzie przechowujesz swoje konstrukcje?

text: Obecnie do tworzenia naszych kompilacji używamy serwera Team Foundation Server. Wiem, że możemy powiedzieć TFS, aby zachował nasze kompilacje przez określony czas lub zachował je w nieskończoność. A co, jeśli chcemy zachować niektóre lub wszystkie nasze kompilacje na czas nieokreślony, na wypadek, gdybyśmy z jakiegoś powodu musieli do nich wrócić? Czy ktoś z was używa kontroli źródła do przechowywania swoich kompilacji lub używa jakiegoś serwera plików, aby przechowywać swoje kompilacje na serwerze plików do późniejszego pobrania? Przechowywanie kompilacji w katalogu Team Build spowoduje, że ten katalog będzie bardzo szybko się bałagan. Oczywiście zawsze możemy rozgałęziać stary zestaw zmian i utworzyć definicję kompilacji dla tej gałęzi, ale jest to bardziej czasochłonne niż pobieranie kompilacji z kontroli źródła lub z serwera plików. Może to, co próbujemy zrobić, jest po prostu złym pomysłem.


title: Unikaj anomalii DD

text: Mam ten problem częściej niż bym chciał i chciałem wiedzieć, jak napisałby go ktoś z większym doświadczeniem niż ja. Mój kod jest funkcjonalny, ale uważam go za nieelegancki, więc chcę wiedzieć, jak inni programiści napisaliby ten kawałek. Chodzi o to, że w petycji dotyczącej sieci/IO mogę uzyskać wynik lub nie, ale moja metoda nadrzędna nie jest odporna na null, więc zawsze muszę coś zwrócić. Nie lubię też kilku zwrotów na metodzie. public String getBingLocation(Coordinate... data) { String response = "Nie pobrane"; ostateczna lokalizacja współrzędnych = data[0]; JSONObject locationData; try { locationData = NetworkManager.getJSONResult(ApiFormatter .generateBingMapsReverseGeocodingURL(location.Latitude, location.Longitude)); if (null != locationData) { końcowy String adres = this.getAddressFromJSONObject(locationData); odpowiedź = adres; } } catch (końcowy ClientProtocolException e) { LoggerFactory.consoleLogger().printStackTrace(e); odpowiedź zwrotna; } catch (końcowy wyjątek JSONException e) { LoggerFactory.consoleLogger().printStackTrace(e); odpowiedź zwrotna; } catch (końcowy IOException e) { LoggerFactory.consoleLogger().printStackTrace(e); odpowiedź zwrotna; } wreszcie { lokalizacja.Ulica = odpowiedź; } odpowiedź zwrotna; } Inny przykład: public statyczny obiekt loadObject(końcowy ciąg nazwa_pliku, końcowy kontekst kontekstu) { Object object = null; spróbuj { ObjectInputStream objectInputStream = null; try { final FileInputStream fileStream = context.openFileInput(nazwaPliku); objectInputStream = new ObjectInputStream(fileStream); obiekt = objectInputStream.readObject(); } catch (końcowy ClassNotFoundException catchException) { LoggerFactory.consoleLogger().printStackTrace(catchException); } catch (końcowy ClassCastException catchException) { LoggerFactory.consoleLogger().printStackTrace(catchException); } catch (końcowy wyjątek catchException) { LoggerFactory.consoleLogger().printStackTrace(catchException); } wreszcie { if (objectInputStream != null) { objectInputStream.close(); } } } catch (końcowy IOException catchException) { LoggerFactory.consoleLogger().printStackTrace(catchException); } zwraca obiekt; }


title: Wdróż logowanie SSO z członkostwem lub bez

text: Muszę zaimplementować SSO dla czterech różnych domen, powiedzmy abc.com pqr.com sql.com xyz.com Teraz mam już system logowania dla dwóch moich aplikacji przy użyciu członkostwa. Ale teraz wymagania się zmieniły, wyzwaniem jest wykonanie pojedynczego logowania. Ja: Czy możemy mieć subdomeny? klient: nie !!! Ja: Czy możemy mieć pojedynczą bazę danych i oddzielny serwer zarządzania sesjami? klient: NIE !!! Następnie tworzę POC, w którym mogę udostępnić plik cookie w wielu domenach, ale problem polega na tym, że trzeba pingować i odbijać z powrotem do wszystkich domen w przeglądarce użytkownika, co spowodowało dłuższy czas logowania. Czy mogę zasugerować, jak to zrobić?


title: Kiedy nie używać ORM i preferować procedury składowane?

text: Używam mikro-ORM PetaPoco. Rzeczywiście praca z bazami danych przy użyciu narzędzi ORM jest bardzo łatwa i bezpieczna, ale jedyne, czego nienawidzę, to dodatkowy kod. Kiedyś umieszczałem większość kodu w samej bazie danych i korzystałem ze wszystkich funkcji RDBMS, takich jak procedury składowane, wyzwalacze itp., które są zbudowane, aby lepiej sobie radzić. Chcę wiedzieć, kiedy nie używać ORM zamiast Stored Procedures/Triggers i vice versa.


title: Skąd pochodzi numer PayPal 92233720368547800?

text: W wiadomościach pojawiła się historia o człowieku, którego konto Paypal zostało przypadkowo zapisane na 92 233 720 368 547 800 dolarów. Skąd pochodzi ten numer? Jaki rodzaj błędu programistycznego może spowodować tę liczbę?


title: Pomóż mi nadać tej zasadzie nazwę

text: Jako projektant lubię dostarczać interfejsy, które zapewniają równowagę pomiędzy mocą a prostotą. Na przykład myślę, że projektanci LINQ stosowali się do tej zasady, ponieważ oferowali zarówno notację z kropką, jak i notację zapytania. Pierwsza jest potężniejsza, ale druga jest łatwiejsza do odczytania i śledzenia. Jeśli nie zgadzasz się z moją oceną LINQ, spróbuj mimo wszystko zobaczyć mój punkt widzenia; LINQ był tylko przykładem, mój post nie dotyczy LINQ. Nazywam tę zasadę „mocą wybierania numeru”. Ale chciałbym wiedzieć, jak nazywają to inni ludzie. Z pewnością niektórzy powiedzą, że „KISS” to powszechne określenie. Ale postrzegam KISS jako superzbiór lub praktykę „konsumpcji”. Używając ponownie LINQ jako mojego przykładu, moim zdaniem zespół programistów, którzy zawsze próbują używać notacji zapytań zamiast notacji kropkowej, ćwiczy KISS. W ten sposób projektanci LINQ ćwiczyli „moc z możliwością wybierania numeru”, podczas gdy konsumenci LINQ ćwiczą KISS. Razem tworzą piękną muzykę. Podam inny przykład. Wyobraź sobie narzędzie do rejestrowania C#, które ma dwa podpisy umożliwiające dwa zastosowania: void Write(string message); void Write(Func<string> messageCallback); Celem tych dwóch podpisów jest zaspokojenie tych potrzeb: //Codzienne "proste" użycie, nic specjalnego. myLogger.Write("Coś się stało" + error.ToString() ); //To ma krytyczne znaczenie dla wydajności, nie wywołuj ToString(), jeśli rejestrowanie jest //wyłączone. myLogger.Write() => { "Coś się stało" + error.ToString() }); Posiadanie tych przeciążeń oznacza „moc z możliwością wybierania numeru”, ponieważ konsument ma wybór między prostym interfejsem a potężnym interfejsem. Konsument kochający KISS przez większość czasu będzie używał prostszego podpisu i pozwoli na podpis wyglądający na „zajęty”, gdy potrzebna jest moc. Pomaga to również w samodzielnej dokumentacji, ponieważ użycie potężnego podpisu informuje czytelnika, że kod ma krytyczne znaczenie dla wydajności. Gdyby rejestrator miał tylko potężny podpis, nie byłoby „mocy z możliwością wybierania numeru”. Więc to się zatacza pełne koło. Cieszę się, że zachowam swoją własną monetę „wybieralnej mocy”, jeśli jeszcze nie istnieje, ale nie mogę oprzeć się wrażeniu, że brakuje mi oczywistego standardu branżowego dla tej praktyki. Jak to się nazywa? A jeśli nie ma, to czy działa „zasilanie przez wybieranie numeru”? p.s. Innym przykładem, który jest powiązany, **ale nie jest tym samym** co „zasilanie z możliwością wybierania numeru”, jest zasada Scotta Meyera „spraw, aby interfejsy były łatwe w użyciu w prawidłowy sposób, a trudne w użyciu niepoprawnie”.


title: Zasoby do skutecznego licytowania projektów?

text: Jakie są skuteczne wytyczne dotyczące licytowania projektów programistycznych w witrynach takich jak guru.com? Jak napisać ofertę, która prawdopodobnie zostanie zaakceptowana? Czy są jakieś przykłady świetnych ofert? Jak konkurujesz z innymi programistami na całym świecie, którzy będą Ci słabiej licytować? Podaj informacje i/lub linki do zasobów.


title: Chroń obrazy na stronie internetowej

text: Chcę zbudować stronę internetową, która będzie zawierała dużo obrazów. Nie chcę, aby użytkownicy odwiedzający witrynę mogli zapisywać obrazy. Zablokowałem opcję kliknięcia prawym przyciskiem, ale czy jest jakiś inny sposób, aby uniemożliwić użytkownikom zapisywanie obrazów?


title: Jak określić ilościowo pracę produktu w CV?

text: Jedną z rzeczy, które robię w moim CV, jest próba oszacowania wpływu mojej pracy na konkretną firmę, w której byłem w tym czasie. Powodem jest to, że moja praca wniosła wartość do firmy. Czy wy też to robicie, czy tylko ja? W mojej poprzedniej pracy było to łatwe, ponieważ pracowałem nad krótkimi/średnimi aplikacjami wewnętrznymi i dość łatwo było zmierzyć efekt końcowy. Na przykład zewnętrzna firma konsultingowa wyceniła 50 000 USD na aplikację Dział Usług Biznesowych chciał, abym ukończył ją w 3 dni, więc mówię, że zaoszczędziłem firmie 48 000 USD. Jestem w mojej obecnej pracy od 3 lat, ale wszystko to dotyczy jednego, dobrze ugruntowanego produktu. Około 30% prac to konserwacja, a 70% to nowe moduły. Pracowałem nad różnymi modułami, takimi jak API (WCF), Bezpieczeństwo (uwierzytelnianie dwuskładnikowe) itp. Jak powinienem określić ilościowo pracę nad modułami?


title: Jak zawrzeć poważny projekt osobisty w CV?

text: Mój brat wpadł na ciekawy pomysł na biznes, który można skomercjalizować. Od ponad miesiąca tworzę fundament pod SaaS. Traktuję to jako projekt komercyjny, więc projektując z wykorzystaniem wzorców i najlepszych praktyk. Jednym z powodów, dla których chcę uwzględnić to w moim CV, jest to, że moja praca na pełny etat nie obejmuje aktualnych modnych technologii ASP.Net (np. Linq/Entity Relationships, jQuery, ASP.Net MVC 3, Silverlight itp.), więc brakuje w CV uderzenie. W mojej pełnoetatowej pracy pracuję nad 7-letnim, dobrze zaprojektowanym produktem, a ponieważ nasze dane i warstwy internetowe działają dobrze, głupio byłoby je przeprojektować tylko dlatego, że rekruterzy uważają, że Linq, ASP.Net MVC i jQuery są fajne. Jak mogę dołączyć mój osobisty projekt do CV, aby nie brzmiał jak eksperyment lub szybki i brudny projekt zwierzaka?


title: Czy powinniśmy zatrudnić jednego konsultanta do projektowania stron internetowych, a drugiego do rozwoju, czy znaleźć kogoś, kto zajmie się obydwoma?

text: Zleciliśmy tworzenie naszych aplikacji na zewnątrz, a oni stworzyli bazę danych hostowaną na Amazon-EC2. Jeśli chodzi o interfejs użytkownika, rozmawiamy z projektantem stron internetowych, ale nie robią oni żadnego kodu, aby zintegrować witrynę z bazą danych stworzoną przez programistów aplikacji. Czy to dobry pomysł, aby jedna osoba zajmowała się projektowaniem strony internetowej, a druga kodowaniem integracyjnym DB? Jakie problemy lub komplikacje mogą się pojawić? Czy zamiast tego powinniśmy wybrać projektanta, który zapewnia kompletny pakiet?


title: Jak wygląda repozytorium Google?

text: Słyszałem, że Google ma gigantyczne prywatne (wewnętrzne) repozytorium całego swojego kodu, a ich pracownicy mają do niego dostęp, więc kiedy pracują nad rzeczami, nie muszą wymyślać koła na nowo. Chciałbym wiedzieć więcej na ten temat! Czy jest tu ktoś z Google, który może to opisać bardziej szczegółowo, czy może wiesz o tym trochę więcej? Interesuje mnie głównie wiedza o tym, jak jest zorganizowana i jak mogą ułatwić pracownikowi znalezienie czegoś w tak gigantycznej bazie kodu, jak to musi być.


title: Jak odpowiadasz na pytanie „gdzie widzisz siebie za 5 lat?”

text: Czego rekruterzy oczekują, że odpowiesz, gdy zapytają: „Gdzie widzisz siebie za 5 lat?” Coś w stylu: > Chcę poprawić swoje umiejętności techniczne...bla-bla-bla...architekta? Czy to tylko po to, żeby sprawdzić swoje ambicje i czy nie zamierzasz wyjechać za miesiąc?


title: Wykorzystanie algorytmów w artykułach w moim kodzie

text: Na przykład pojawia się nowy artykuł badawczy, który opisuje jakiś algorytm, powiedzmy, że jest to najnowocześniejszy algorytm i ukazał się w zeszłym tygodniu, czy jest coś, co powstrzymuje mnie przed użyciem tego algorytmu w mojej bazie kodu do celów komercyjnych? Co się stanie, jeśli papier zawiera jakiś kod, a ja go użyję? Na papierze nie ma żadnych informacji o licencjonowaniu kodu, więc nie jestem pewien, jak to ma działać.


title: Macierz śledzenia wymagań

text: Co to jest macierz śledzenia wymagań? Jakie są różnice między różnymi typami wymagań i jakie są zalety/wady korzystania z tych macierzy?


title: szybki kurs w c++

text: Być może będę musiał dać kurs awaryjny w c++ dla klasy struktur danych. Jakieś sugestie dotyczące tego, co byłoby dla mnie niezbędne, aby przejść poza zajęciami? z góry dzięki * * * Zapomniałem wspomnieć, że nie jestem nauczycielem, ale korepetytorem i muszę pomóc niektórym kolegom szybko nabrać tempa, aby nie pozostawali w tyle. Mam nadzieję, że będę mógł wypełnić luki.


title: Jak korzystać z API dla różnych platform?

text: Z tego, co wiem, uczenie się języka programowania składa się z: 1-uczenia się składni 2-uczenia się, jak język obsługuje\use\implementuje swoje „zdolności” (klasy, delegaci, struktury, polimorfizm… itd.) podczas badania kilku języków programowania odkryłem, że „główne” języki mają prawie wszystkie te możliwości (OOP, delegowanie, polimorfizm itd.) Obecnie uczę się C# i jako „głównego” języka , oferuje wszystkie wymienione możliwości i nie tylko. po nauce C# powinienem być w stanie stosunkowo łatwiej nauczyć się innych języków, na przykład Objective-C (dla rozwoju iOS) i java (dla rozwoju Androida) problem tutaj, Framework. dla windows jest (.net), dla Maca (Cocoa) dla iOS (Cocoa Touch) jak to się robi KORZYSTANIE z tych frameworków, nie szukam tutoriali dla konkretnego api, mogę do tego użyć google ;) Jestem mówiąc o „zrozumieniu” ogólnej idei, jak można łatwo wykorzystać framework (nawet jeśli wcześniej nie był on programiście nieznany) do zbudowania aplikacji. Na przykład wszyscy słyszeliśmy o Playstation Vita, nowym przenośnym urządzeniu Playstation… teraz to urządzenie oferuje wiele nowych funkcji, których nie ma w PSP… więc twórcy gier na to urządzenie będą musieli pobrać API z Sony i pracując nad stworzeniem gry na PS Vita. Jak to działa? czy jest coś, co musisz wiedzieć poza językiem programowania używanym dla API (np. C# dla .NET i Objective-C dla Cocoa)? Wiem, że istnieją książki obejmujące każdy główny interfejs API, ale znowu próbuję uzyskać ogólne zrozumienie, a nie samouczek. Na forum dla twórców gier ktoś powiedział (jak już znasz się na programowaniu, język to tylko narzędzie) To właśnie chcę osiągnąć... Przepraszam za tak długi post, i byłbym wdzięczny za twoje doświadczenie na ten temat.


title: Jakie kroki są wymagane, aby zapewnić uwzględnienie technicznej należytej staranności przy zakupie oprogramowania (i własności intelektualnej) stworzonej przez inną firmę?

text: Jeśli miałeś za zadanie przeprowadzić analizę due diligence dla oprogramowania/IP, Ty/Twoja firma rozważaliście zakup. Jakie byłyby Twoje kroki, aby upewnić się, że zakup jest akceptowalny z poziomu ryzyka technicznego? Scenariusz jest taki, że jedna firma ma produkt, który Ty lub Twoja firma jest zainteresowana zakupem w całości (IP i kod), aby Twoja firma mogła teraz sprzedawać ten produkt lub jego usługi. Wstępne założenie jest takie, że produkt ma pewną wartość, ale chcesz ocenić techniczne podstawy produktu, aby upewnić się, że nie jest to kompletny hack i koszmar do obsługi. Przykładami mogą być * Kompiluj/kompiluj i instaluj oprogramowanie na czystym komputerze, aby zweryfikować cykl kompilacji i wdrażania. * Uruchom narzędzie do profilowania kodu względem bazy kodu, aby uzyskać wyobrażenie o ogólnej jakości kodu. Co jeszcze? Czy w sieci są jakieś zasoby/listy kontrolne, które mogą pomóc?


title: Jak radzisz sobie z over-the-head API/technologią?

text: Myślę, że większość ludzi znalazła się w takiej sytuacji. Rozpoczyna się wstępne planowanie projektu. Przedstawiono wymagania. Po przeglądzie architektonicznym i przejściu przez API/Frameworks wybierana jest technologia dopasowania. Rozpoczyna się rozwój. A potem się zaczyna. Gdy tylko będziesz musiał zrobić kilka rzekomo prostych rzeczy wspierających, framework/API zaczynają działać odwrotnie i zamiast wykonywać jakąkolwiek pracę, kończysz walkę z technologią. Czas na badania gwałtownie rośnie, fora milczą, wydaje się, że nic nie jest zrobione, a nawet kiedy masz coś do pracy, nie masz pewności, czy zostało to zrobione dobrze. Jak sobie radzisz w takich sytuacjach? Czy sięgasz po hacki, czy prowadzisz dalsze badania, co powiesz kierownictwu?


title: Rozwój oparty na funkcjach w miejscu pracy?

text: **Pytanie** Proszę wyjaśnić w skrócie rozwój oparty na funkcjach? **Sytuacja** Mój analityk biznesowy nazywa swoją dokumentację FDD, ale wydaje się, że jest przytłoczony szczegółami. **W pigułce** Dobry byłby przykład „w pigułce”, ponieważ staram się ograniczyć niepotrzebne szczegóły i zamieszanie. Chcę dodać jasność i podejście brzytwy Ockhama do dokumentacji. Dzięki za pomoc, oto co znalazłem


title: Grupowanie ciągów na podstawie wspólnych podciągów

text: Mam około 10000+ ciągów i muszę zidentyfikować i pogrupować wszystkie ciągi, które wyglądają podobnie (podobieństwo opieram na liczbie wspólnych słów między dowolnymi dwoma ciągami). Im więcej popularnych słów, tym bardziej podobne będą ciągi. Na przykład: 1. Jak utworzyć kolejną warstwę z istniejącej warstwy 2. Nie można edytować danych na dysku sieciowym 3. Istniejące warstwy na pulpicie 4. Pomoc z dyskiem sieciowym W tym przypadku ciągi 1 i 3 są podobne do wspólnych słowa Existing, Layer i 2 i 4 są podobne do popularnych słów Network Drive (eliminacja słowa stop) Kroki, które wykonuję to: 1. Iteracja przez zestaw danych 2. Wykonaj porównanie wiersz po wierszu 3. Znajdź wspólne słowa między ciągi 4. Utwórz klaster, w którym liczba wspólnych słów jest większa lub równa 2 (eliminując słowa stop) 5. Jeśli liczba wspólnych słów <2, umieść łańcuch w nowym klastrze. 6. Przypisz wiersze do istniejących klastrów lub utwórz nowy w zależności od wspólnych słów 7. Kontynuuj, aż wszystkie ciągi zostaną przetworzone Realizuję projekt w C# i mam do kroku 3. Jednak nie jestem pewny, jak postępować z grupowaniem. Wiele badałem na temat grupowania ciągów, ale nie mogłem znaleźć żadnego rozwiązania, które pasowałoby do mojego problemu. Twoje dane wejściowe byłyby bardzo mile widziane.


title: Dlaczego nie mogę edytować komunikatu zatwierdzenia SVN?

text: Używam SVN. Czasami brakuje mi czegoś, kiedy piszę wiadomość o zatwierdzeniu. Ale po zatwierdzeniu nie można go cofnąć, a nawet ja nie mogę edytować wiadomości. Dlaczego nie umieścili w nim funkcji edycji?


title: Nauka potencjalnie niepowiązanych materiałów na koszt firmy, czy jest to dopuszczalne?

text: Mam do czynienia z podobnym problemem, co OP w tym pytaniu, gdzie moje środowisko jest dobre, ale czuję, że moja nauka jest w stagnacji i nie mam możliwości/zasobów, aby zmienić stanowisko/zrezygnować z pracy w tej chwili ani nie jestem pewien Chciałbym, gdybym miał możliwość. Przedwczoraj zostałem przydzielony do pomocy w rozwiązaniu problemu z witryną ASP.NET (z którą normalnie nie pracuję), który miał klient i musiałem sprawdzić, jak coś zaimplementować. Naprawienie problemu zajęło mi tylko kilka minut, a potem spędziłem około czterech godzin, czytając więcej o ASP.NET i wdrażając niektóre ćwiczenia z książki. Potem spędziłem kolejną godzinę na czytaniu o sieciach i konfigurowaniu routerów, które mogą być używane, gdy musimy coś zmienić w naszym laboratorium, jednak jest bardzo mało prawdopodobne, abym to zrobił, ponieważ mamy osobę dedykowaną do tego zadania. Dzisiaj wyjechałem z pracy tylko po to, by dowiedzieć się więcej o konfigurowaniu sieci i poćwiczyć w sieci domowej. Czy powinienem rozliczać się z firmą za czas, gdy dowiaduję się więcej o ASP.NET, mimo że nie jest to powszechna część mojej pracy, czy też powinienem pobierać opłatę w wysokości 1/2 stawki? Czy istnieje pewna liczba godzin, które Twoim zdaniem są dopuszczalne, aby obciążyć firmę za czas na naukę lub samodoskonalenie?


title: Obsługa błędów w przypadku braku dostępu do programu Visual Studio lub punktu startowego aplikacji

text: Niedawno dołączyłem do projektu, w którym rozszerzamy funkcjonalność zewnętrznej aplikacji zakupionej przez naszą firmę. Jest to dodatek pakietu Office z konsolą administracyjną, który umożliwia tworzenie formularzy w stylu Windows Forms z plikami związanymi z kodem i zapewnia jedno miejsce do przechowywania wspólnego kodu. Może to być dość trudne podczas implementowania kodu, który byłby prosty w „normalnej” aplikacji Windows Forms. Jak zaimplementować globalną obsługę błędów, abyśmy mogli rejestrować wszystkie błędy? Nie używamy Visual Studio i nie mamy dostępu do plików csproj, więc nie możemy używać IL weaving / AOP. Nie mamy dostępu do punktu początkowego aplikacji, więc nie możemy subskrybować zdarzeń wyjątków nieobsługiwanych wątków lub aplikacji. Podejrzewam, że jest to już subskrybowane w kodzie zewnętrznym, ponieważ nieobsłużone wyjątki są domyślnie ujawniane w niestandardowym oknie komunikatu o błędzie. Obecnie szukam, czy możemy rozszerzyć zewnętrzne biblioteki dll; jednak nie wiem, gdzie mam wywoływać nasz rozszerzony kod. Alternatywą jest przejście przez każdą metodę i dodanie bloku try/catch tylko po to, aby rejestrować błędy, co powoduje, że moja skóra się czołga! Ten projekt działa już od roku bez obsługi błędów, więc wdrożenie tego podejścia również zajmie dużo czasu. Pseudo-Example class: namespace Scriptlets { using System; za pomocą System.Windows.Forms; public część klasy NewClient : FormScriptType { protected override void PageChanged (nadawca obiektu, PageChangedEventArgs e) { ChangeAddressLabels(); } ... } }


title: Czy można napisać coś podobnego do antywirusa za pomocą C# lub Pythona?

text: C# i Python nie mogą konkurować z C i Assembly, kiedy pisanie takich narzędzi jest potrzebne. Opuściłem C wiele lat temu i chyba nie dam rady tak szybko. Czy możliwe jest pisanie narzędzi antywirusowych i wykrywania włamań w C# lub Pythonie? Jeśli tak, jakich rzeczy należy się nauczyć i gdzie mogę znaleźć dobre materiały na ten temat?


title: Ujednolicone środowisko deweloperskie zespołu

text: Tam, gdzie pracuję, mamy wiele zespołów, które przechodzą na środowisko programistyczne. Zasadniczo kilku członków zespołu tworzy obraz, który jest następnie instalowany na komputerze każdego. Zawiera system operacyjny, IDE (z zarządzaną z niego kontrolą źródła), kilka systemów serwerowych, których potrzebują do testowania oraz obraz serwera testowego. Pozornie wyobrażenie jest kompilowane na podstawie wkładu każdego, więc wszyscy są znowu pozornie zadowoleni z danego środowiska. Liderzy zespołów twierdzą, że będzie to bardziej efektywne, ponieważ za każdym razem, gdy ktoś ma problem, wszyscy inni w zespole mogą pomóc w jego rozwiązaniu (w przeciwieństwie do, powiedzmy, pozostałych 2 osób, które nadal używają `vim`). Ale w tym samym czasie , wydaje się, że takie podejście miałoby negatywny wpływ na osoby, które nie radzą sobie z pracą w paradygmacie większości. Więc moje pytanie brzmi: czy ta wymiana jest warta zachodu? Czy zyski „wsparcia zespołowego” mogą zniwelować straty „indywidualnej wydajności”? Stycznie, czy jest półmetek? Być może, gdyby wszyscy mieli ten sam system operacyjny i ten sam obraz serwera, ale mogliby mieć różne IDE, to mogłoby być lepsze?


title: Co to jest jvm hotspot oparty na ramkach rykoszetowych?

text: Aby zaimplementować JSR 292, czyli invoke dynamic, do hotspotu vm wprowadza się coś, co nazywa się ramkami richochet. Chciałabym wiedzieć więcej na ten temat, np. invoke dynamic, jak implementuje to ramki richochet, skąd wzięła się nazwa richochet itp. Google wydaje się tutaj niezbyt pomocny. Wszelkie wskazówki będą mile widziane. Albo lepiej niech ktoś napisze o tym blogi :)


title: Stopień matematyki stosowanej dla inżyniera oprogramowania (i staże oprogramowania dla kierunków matematycznych)

text: Oto chudy: kocham matematykę. Myślę, że matematyka jest zabawna i ekscytująca, i że uczy analitycznego myślenia. Uwielbiam też programować. Możliwość tworzenia systemów i aplikacji, których nikt przede mną nie był w stanie zrobić, jest również bardzo ekscytującym i wzmacniającym uczuciem. Oto problem: myślę, że uczenie się matematyki wyższego rzędu byłoby o wiele trudniejsze niż nauczenie się czegokolwiek, czego mógłbym się nauczyć w programie informatycznym. Z tego powodu powinienem studiować matematykę stosowaną (z niektórymi kursami z czystej matematyki) i uczyć się programowania i rozwoju, których chcę się nauczyć. Jednak planuję na życie inżynierię oprogramowania. Oto pytanie (pytania): Wierzę, że jak tylko dostanę wywiad, będę przygotowany, by wysadzić umysły, ale oczywiście problemem będzie uzyskanie wywiadu. Czy firmy wrzucą moje CV na stos NIE, ponieważ nie mam dyplomu z informatyki? Poza tym, czy byłbym w niekorzystnej sytuacji, jeśli chodzi o staż? Mocno wierzę, że dobry staż przed ukończeniem studiów to coś, co powinni podjąć wszyscy studenci i nie byłbym szczęśliwy, gdybym sam nie mógł go zdobyć.


title: Kto pierwszy stworzył lub spopularyzował oryginalny XMLHTTPRequest / MSXML?

text: Próbuję zrozumieć pochodzenie AJAX i myślę, że MSXML i XMLHTTPRequest były obiektami, które to wszystko rozpoczęły. Co było pierwsze i/lub stało się de facto sposobem tworzenia dynamicznych stron?


title: Język programowania do nauki kilku paradygmatów programowania

text: Czy istnieje język programowania, który można wykorzystać jako pomost do nauki kilku paradygmatów programowania? Zostałem wprowadzony do języka programowania Oz, ale myślę, że istnieje kilka innych języków, które można również wykorzystać do nauki kilku paradygmatów, a ten wątek może być dobrym ich przeglądem. Myślę, że lepiej jest najpierw nauczyć się tych paradygmatów, aby nauczyć się kilku języków programowania, zwłaszcza jeśli przeskakujesz z jednego paradygmatu do drugiego za każdym razem, gdy uczysz się nowego języka.


title: Jakich reperkusji może się spodziewać deweloper po poinformowaniu obecnego pracodawcy o aktywności na rynku pracy?

text: Wielu programistów, zwłaszcza tych, którzy pozostają w tej samej firmie od wielu lat, a zwłaszcza tych pracujących dla dużych korporacji z bardzo zdrową obecnością HR, prawdopodobnie w takim czy innym czasie znajdzie się w takiej sytuacji. W miarę upływu czasu uczysz się więcej, zdobywasz nowe umiejętności i kończysz z wieloma innymi obowiązkami, może nawet zaczynasz kierować zespołami programistycznymi i zaczynasz zadawać sobie pytanie, dlaczego mam ten sam tytuł i otrzymuję takie samo wynagrodzenie (dostosowane dla inflacji), które otrzymywałem, gdy zostałem zatrudniony? Pytasz swojego przełożonego, ile jeszcze musisz zrobić, aby awansować na kolejny poziom, a przełożony zgadza się, że czas już dawno minął. Ale po awansie twoja podwyżka wynagrodzenia jest nadal ograniczona do HR i zdajesz sobie sprawę, że zarabiasz o 10-15 tys. mniej niż uważasz, że wartość rynkowa jest dla twoich umiejętności. Masz dwie karty, którymi nadal możesz grać: 1) Poszukaj nowej pracy. Rozmawiaj w kilku miejscach, a następnie albo opuść swoją obecną firmę, albo sprawdź, czy mogą wyrównać wynagrodzenie (osobiście, jeśli firma wymaga, abyś znalazł inną pracę, zanim przyniesie ci uczciwą wartość, nie zostałbym z tym w tym momencie) lub 2) poinformuj obecnego pracodawcę, że Twoje CV zostało opublikowane i aktywnie poszukujesz ofert. Możesz być zadowolony z zarządzania, swojej pracy, ludzi, z którymi pracujesz, ale 10 tys. różnicy w wynagrodzeniu jest ważne, a jedynym sposobem na uzyskanie prawdziwej wartości rynkowej jest wejście na rynek. Więc to jest ich szansa na wyrównanie twojej pensji, zanim coś znajdziesz i odejdziesz. Jakie są prawdopodobne reperkusje karty do gry nr 2? Czy jest kiedykolwiek wskazane, aby otwarcie powiedzieć swojej obecnej firmie, że chcesz odejść z obecnej pozycji?


title: Projekt dla asynchronicznego interfejsu użytkownika

text: Pracowałem nad integracją, która stanowiła ciekawą zagadkę interfejsu użytkownika, co do której chciałbym otrzymać sugestie. Interfejs użytkownika jest wyświetlany w produkcie innej firmy. Stan interfejsu jest dostarczany przez wywołania napisanej przeze mnie usługi. Mogą wystąpić niewielkie opóźnienia między rzeczywistym stanem zmieniającym interfejs użytkownika ze względu na odpytywanie stanu przez stronę trzecią. Gdy użytkownik wchodzi w interakcję z interfejsem użytkownika, żądania są wysyłane z powrotem do mojej aplikacji. Ma to wpływ na stan, a następne żądanie sondowania stanu zaktualizuje interfejs użytkownika. Problem polega na tym, że opóźnienie między naciśnięciem przycisku a wyświetleniem aktualizacji interfejsu użytkownika wynosi około 1 lub 2 sekundy, a podczas testów użyteczności widzę, że ludzie klikają ponownie przed aktualizacją interfejsu użytkownika, myśląc, że nie kliknęli poprawnie pierwszego czas. Biorąc pod uwagę ograniczenia (możemy aktualizować interfejs użytkownika tylko za pomocą mechanizmu odpytywania - jeśli zaktualizowaliśmy go po kliknięciu, odpytywanie może powrócić i nadpisać zmianę powodując nieprzewidywalne / niepożądane wyniki) ... co możemy zrobić, aby poprawić wrażenia użytkownika lepiej. Moim obecnym pomysłem jest pokazanie wiadomości przez kilka sekund, aby ludzie wiedzieli, że ich kliknięcie zostało zaakceptowane, wiadomość nie zostałaby zmieniona przez sondowanie stanu, więc nie zostałaby przedwcześnie usunięta / nadpisana itp. Jestem pewien, że są inne pomysły tam są i jestem również przekonany, że ktoś ma lepszy pomysł niż ja!


title: jak zmienić reprezentację (nie typ MIME) zasobu?

text: Zastanawiam się, jak mogę zmienić reprezentację ładunku w czasie wykonywania, aby uzyskać różne potencjalne korzyści, ale nie jestem pewien, jak to zrobić. W szczególności kolekcje. Tablica par [{ <zasób_uri> : { <podmiot> }, ...}] Tablica obiektów [<podmiot>,...] Tablica zasobów [<zasób_uri>] Mapa encji { <zasób_uri> : { < podmiot> }, ... } Mój problem polega na tym, że nie jestem pewien, czy powinienem umieszczać te różne reprezentacje zbiorów pod różnymi URI, nadawać im nieco zróżnicowane typy mime, np. `application/foomap+json` lub użyj opcjonalnego parametru zapytania `?format=map` lub zasobu `/entities/map`. Interfejs użytkownika zamierza to ukryć, dotyczy to tylko programowego dostępu do usług internetowych (który będzie musiał wywołać „JS interfejsu użytkownika”).


title: Który interfejs pozwala na użycie wzorca projektowego, który zmienia się w charakterystyczny sposób podczas tworzenia instancji obiektów?

text: Robię badania na ten temat i nie mogę znaleźć odpowiedzi na to pytanie: > Który interfejs pozwala na użycie wzorca projektowego, który jest > charakterystycznie zmieniany wraz z konkretyzacją obiektów? \- w PHP uczę się do egzaminu z programowania php i z teorii nie mogę znaleźć dokładnej odpowiedzi. Znalazłem coś związanego z „Creational Design Interface” i „Factory Interface”, ale nie wiem, który.


title: Dlaczego nazwy pakietów Pythona nie są kreatywne?

text: Po pierwsze KOCHAM Pythona, a Python to mój pierwszy język programowania. Zastanawiam się tylko, dlaczego pakiety Pythona mają trochę ~~brzydkie~~ niezapadające w pamięć i czasami bardzo długie nazwy? Uważam, że inne języki (np. Node.js i Ruby) są bardziej kreatywne i opisowe. Czuję, że twórcy pakietów Pythona po prostu próbują wrzucić litery „py” w dowolnym miejscu nazwy (np. Autopy, Boupy, IMDbPY, Pybooru itp.). Nie wspominając o skracaniu lub nawet używaniu wszystkich słów opisujących, co pakiet może zrobić (np. Matplotlib, virtualenvwrapper). **Czy istnieje jakaś konwencja nazewnictwa, która w niezamierzony sposób ograniczała kreatywność?** _P.S. W żadnym wypadku nie staram się obrażać twórców wspomnianych pakietów. Ani to pytanie ma być to kontra tamto._


title: Najlepszy sposób na ponowne nauczenie się C++?

text: Zajmuję się Javą od dziesięciu lat i przestałem używać C++ w połowie lat 90-tych. Jaki jest najlepszy sposób na szybkie ponowne nauczenie się C++? O ile mogę sobie wyobrazić, język znacznie się zmienił w ciągu 15 lat; lub pisanie dobrego C++ z 1995 _nie jest_ tym samym, co pisanie współczesnego dobrego C++. RAII to jedna rzecz, która ciągle się pojawia, a ja wciąż nie do końca wiem, co to jest.


title: weryfikacja wymagań użytkownika, jak to zrobić?

text: Moje pytanie brzmi: jak można zweryfikować wymagania użytkowników na wczesnym etapie tworzenia oprogramowania? Pokazuję specyfikacje użytkowników, prototypy, dema... ale wciąż użytkownicy zapominają podzielić się pewnymi "nieistotnymi szczegółami" dotyczącymi procesu lub reguł biznesowych i danych. Co wyskakuje po końcowym teście jako „naprawdę małe i rzadkie wyjątki” – które zamieniają się w żądanie zmiany i kumulują dużo pracy. Jak więc prototypować (lub weryfikować) wymagania użytkowników na wczesnym etapie projektu?


title: czy ten cel C jest łatwy do nauczenia w 1 miesiąc dla początkujących?

text: Hai Porozmawiaj o tym, że wszyscy wiemy o tym, że aplikacja iPhone Objective C jest bardzo trudna do nauczenia się szybko lub w 1 miesiąc dla początkujących. Zapytałem o to, jak mogą trenować w ciągu 1 miesiąca?


title: Jak korzystać z Messagequeing w rozproszonej aplikacji internetowej

text: Jestem ciekaw rozwiązania tego problemu: Załóżmy, że zbudujemy sklep internetowy. Aby lepiej skalować części architektury, dzieli się ją na niezależne podsystemy. Typowy scenariusz obejmowałby serwer aplikacji (lub coś podobnego), do którego przychodzą żądania od klientów. Przepływ logowania wygląda następująco: Przychodzi żądanie -> Uwierzytelnij użytkownika -> Pobierz ostatnie produkty kupione przez użytkownika -> oblicz odpowiednie reklamy -> dostarcz wygenerowaną Stronę do klienta. Jest to mniej wydajne, ponieważ zapytania podsystemów odbywają się w sposób szeregowy/synchroniczny. Lepiej byłoby wykonywać połączenia równolegle. Na przykład można użyć serwera Node.JS i wywołać podsystemy asynchronicznie. W wywołaniu zwrotnym jest wywoływana funkcja „reduce”, która agreguje wszystkie dane, a po zebraniu wszystkich danych wysyła wygenerowaną stronę z powrotem do klienta. Więc ten system wydaje się bardziej wydajny. Kolejnym krokiem byłoby dalsze rozdzielenie i wprowadzenie kolejek komunikatów. Tak więc po jednej stronie jest serwer aplikacji, który otrzymuje żądania i obsługuje odpowiedzi; az drugiej strony niezależne komponenty komunikujące się przez kolejki wiadomości. Przepływ byłby następujący: Żądanie przychodzące -> Wiadomość: "Użytkownik z kluczem sesji 1234567890 chce uwierzytelnienia" Tak więc za pomocą klucza sesji można zidentyfikować użytkownika i odpowiadające mu komunikaty. Ta wiadomość jest pobierana przez usługę użytkownika i generuje odpowiedź „Użytkownik z kluczem sesji 1234567890 to John Doe z Nowego Jorku”. Ta wiadomość jest publikowana we wszystkich innych usługach w aplikacji. Dzięki temu mogą reagować i publikować swoje wyniki. Mój problem polega na tym, jak przekierować wynik z powrotem do serwera aplikacji, który musi czekać przez nieznaną ilość czasu? Skąd wie, kiedy zebrać wszystkie wyniki na swoje żądanie? Jednym z rozwiązań może być użycie bazy danych w pamięci (np. Redis). Wszystkie usługi mogą zapisać swoje wyniki w Redisie, który jest stale odpytywany przez serwer aplikacji w oczekiwaniu na dostarczenie wyniku. Ale czy to jest rozwiązanie? Czy są inne rozwiązania?


title: Dlaczego nie powinienem używać wzorca repozytorium z Entity Framework?

text: Podczas rozmowy kwalifikacyjnej poproszono mnie o wyjaśnienie, dlaczego wzorzec repozytorium nie jest dobrym wzorcem do pracy z ORM-ami, takimi jak Entity Framework. Dlaczego tak jest?


title: Jak utrzymywać prawie identyczne programy wewnętrzne/zewnętrzne bez posiadania osobnej bazy kodu dla każdego z nich?

text: Mam program, nad którym pracuję, którego moja firma używa wewnętrznie, ale jest on również wysyłany do dostawców. Wersja dostawcy będzie identyczna, z wyjątkiem tego, że będzie brakować niektórych funkcji i będzie używała instalatora. Muszę tylko usunąć 2 wiersze z pliku XML i jest to dobre do użytku zewnętrznego. Czy istnieje jakaś „typowa” metoda tworzenia takiego projektu bez konieczności utrzymywania oddzielnych baz kodu dla każdego projektu? Jeśli ma to jakiekolwiek znaczenie, program jest napisany w C#, opracowany przy użyciu Visual Studio 2010, skompilowany jako dll, działa w systemie Windows 7.


title: Nie rozumiem przykładu za pomocą kontynuacji

text: Czytam raport Schematu r6rs i jestem zdezorientowany wyjaśnieniem kontynuacji (uważam, że jest zbyt gęsty i brakuje mu przykładów dla początkującego). Co robi ten kod i jak ocenia się na 4? Dlaczego `call/cc` chce argumentu, który jest funkcją jednego argumentu? Jak używany jest argument `call/cc`? (+ 1 (połączenie-z-bieżącą-kontynuacją (lambda (escape) (+ 2 (escape 3))))) =⇒ 4 Ten przykład pochodzi z sekcji 1.11 - Kontynuacje.


title: rozszyfrowywanie kolumnowego szyfru transpozycyjnego

text: Szukam pomysłu jak rozszyfrować kolumnowy szyfr transpozycyjny bez znajomości klucza lub długości klucza. Kiedy wezmę tekst zaszyfrowany jako dane wejściowe do mojego algorytmu, odgadnę, że długość klucza będzie czynnikami długości tekstu zaszyfrowanego. Przyjmę pierwszy czynnik, załóżmy, że długość to 20 liter, więc wezmę 2*10 (2 wiersze i 10 kolumn). Teraz chcę ułożyć tekst zaszyfrowany w kolumnach i przeczytać go w rzędach, aby zobaczyć, czy jest jakieś słowo tworzące i dopasować go do słownika, jeśli jest to sensowne. Jeśli pasuje do słownika, oznacza to, że jest w prawidłowej kolejności lub chcę wiedzieć, jak wykonać inne kombinacje kolumn i ponownie odczytać ciąg w wierszu. Proszę zasugerować inne podejście, które jest bardziej wydajne.


title: Jak rozwiązać błąd?

text: Jestem początkującym programistą. Podczas opracowywania napotykamy różne problemy z błędami. Jednak początkującym programistom zawsze trudno jest je bezpośrednio zrozumieć i rozwiązać. Uważam, że błędy są ogólnie związane z błędem pisania LUB błędem struktury danych LUB błędem pamięci w czasie wykonywania - który jest związany ze sprzętem LUB innym. Jak szybko opracować i rozwiązać te błędy?


title: Czy pisanie prac naukowych jest przeznaczone tylko dla naukowców?

text: Zauważyłem pewne trendy w pisaniu artykułów naukowych w Indiach. Piszą je studenci lub pracownicy naukowi. Czy osoby pracujące na co dzień (tak jak ja) w branży oprogramowania piszą prace naukowe? Zadaję to pytanie, ponieważ bardziej prawdopodobne jest, że otrzymamy rozmowy kwalifikacyjne z firm takich jak Google i Facebook, jeśli gazeta jest warta zachodu. Nawet jeśli zdecyduję się napisać, jak/gdzie to przedstawię? Czy są jakieś miejsca online, w których mogę go przesłać i otrzymać recenzję?


title: Podejście obejmujące wszystkie przypadki w testach jednostkowych

text: Jestem nowy w testach jednostkowych i jestem w stanie je napisać, ale moim problemem jest to, że nie jestem pewien, czy omówiłem wszystko w testach jednostkowych. Jakie może być podejście do testowania niektórych funkcjonalności w kodzie?


title: Optymalizacja kodu za pomocą rejestrów, ale co jeśli jest ich za mało?

text: Jednym ze sposobów optymalizacji kodu jest zminimalizowanie dostępu do tablic i użycie zmiennych zamiast tego, ponieważ w ten sposób używamy rejestrów zamiast ładowania danych do pamięci podręcznej. Na przykład, jeśli w pętli zamierzam użyć 3 razy danych z tablicy, powiedzmy radius[i], lepiej zadeklaruję zmienną tmp i nadaję jej wartość radius[i]. Za każdym razem, gdy potrzebuję zadzwonić do radius[i], użyję zamiast tego tmp. Problem w tym, że liczba rejestrów jest ograniczona (w niektórych przypadkach do 8, zależy to od architektury). Co jeśli mam więcej zmiennych niż liczba rejestrów? Czy użycie zmiennych w tym przypadku spowolni mój program bardziej niż dostęp do pamięci podręcznej? Koduję w języku c.


title: Czy zrozumienie historii języka programowania pomaga w zrozumieniu języka?

text: Czasami składnia języka wydaje się dziwna, często myślę, dlaczego ktoś miałby coś takiego zrobić, ale na pewno za każdym aspektem języka programowania kryje się powód i historia. Oprócz tego, że jest fascynujący, pomaga mi zapamiętać składnię, a także cel, który rozwiązuje język. Czy znajomość podstaw języków takich jak HTML i CSS ( _Dobra, to nie są języki programowania, ale nadal_ ) JavaScript, C++, Objective C, a nawet Java pomaga w zrozumieniu aspektów tych języków?


title: Schematy obiektów współdzielone między usługami sieciowymi

text: Moje pytanie dotyczy tego, jak utworzyć definicję obiektu, który jest obsługiwany przez różne usługi sieciowe. Krótki opis mojego obecnego scenariusza i dlaczego uważam, że jest to problem: Aplikacja sieci Web PHP udostępnia punkty końcowe AJAX do wypełniania różnych części mojej aplikacji sieci Web. Punkt końcowy zapewnia dostęp do encji Użytkownik i Projekt. Aplikacja node.js używa sockjs do dostarczania zdarzeń użytkownika i projektu w czasie rzeczywistym do mojej aplikacji internetowej. Oto problem: schemat obiektów JSON dostarczanych przez usługę node.js różni się nieco od tych samych obiektów dostarczanych przez punkty końcowe PHP. Jest to złe, ponieważ utrudnia ponowne użycie mojego kodu rozmiaru klienta i jest wiele logiki typu „jeśli pochodzi z węzła, uzyskaj dostęp do tej właściwości; jeśli pochodzi z AJAX, uzyskaj dostęp do tej innej właściwości”. Ugh! Baza kodu jest zbyt duża, aby przeprowadzić jednorazową refaktoryzację i upewnić się, że wszyscy programiści stosują się do nowego projektu. Potrzebuję sposobu na udostępnianie informacji między moją aplikacją node.js a moją aplikacją php, aby oboje wiedzieli, jak powinni definiować określone obiekty. Jaki jest najczęstszy sposób rozwiązania tego rodzaju problemu?


title: Co to jest kod „zazdrości o funkcje” i dlaczego jest uważany za zapach kodu?

text: To pytanie na SO mówi o poprawianiu tego, co według OP jest kodem _feature envy_. Innym przykładem, w którym widziałem cytowane to fajne zdanie, jest ostatnio udzielona odpowiedź tutaj w programrs.SE. Chociaż wrzuciłem komentarz do tej odpowiedzi, prosząc o informacje, pomyślałem, że będzie to ogólna pomoc dla programistów wykonujących pytania i odpowiedzi, aby zrozumieć, co oznacza termin _funkcja-zazdrość_. Jeśli uznasz to za stosowne, możesz edytować dodatkowe tagi.


title: Dobra procedura lub projekt funkcji

text: Jest to nawiązanie do zamieszczonego tutaj pytania. Jak sądzę, pytanie powinno zostać zamknięte po prostu dlatego, że wydaje się pytać, dlaczego programiści firmy Borland stworzyli jedną rzecz funkcją, a drugą procedurą (funkcja, która zwraca wynik void). Podano tam przykład niektórych funkcji manipulacji ciągami znaków, które istnieją w Borland Pascal lub Delphi: > > S2 := Copy(S1,3,2); > > > Kopiuje do S2 z S1 2 znaki zaczynając od 3 pozycji. > > > Usuń(S,3,2); > > > Usuwa z S 2 znaki zaczynając od 3 pozycji. Teraz pomyślałem, że to może być dobra dyskusja na temat dobrych decyzji projektowych dotyczących opracowywania tych rzeczy. Znam kilka zasad dobrego projektowania dotyczących tego, jak prototyp funkcji powinien wyglądać poza oczywistością (nazwa odzwierciedla funkcję, wynik funkcji powinien być niepodzielny, bez dodatkowych zmiennych), ale czy są jakieś inne, które powinny rządzić sytuacją taką jak ta czy inni? Naprawdę nie widziałem dobrego przypadku w książce kodów Atwooda, w której to omawiano. W każdym razie, czy istnieją jakieś dobre zasady dotyczące projektowania funkcji? Pomijając zwodnicze nazewnictwo, czy lepiej byłoby mieć S2 := Delete(S1,3,2); w przeciwieństwie do Delete(S,3,2); ? Czy są jakieś inne przydatne rozważania lub przykłady do omówienia dobrego i złego projektu funkcji?


title: Czy prawdziwa wielowątkowość jest naprawdę konieczna?

text: Więc tak, tworzę język programowania. A język pozwala na wiele wątków. Ale wszystkie wątki są zsynchronizowane z globalną blokadą interpretera, co oznacza, że jednocześnie może być wykonywany tylko jeden wątek. Jedynym sposobem na wyłączenie wątków jest jawne poinformowanie bieżącego wątku, aby czekał, co pozwala na wykonanie innego wątku. Przetwarzanie równoległe jest oczywiście możliwe poprzez tworzenie wielu procesów, ale do zmiennych i obiektów w jednym procesie nie można uzyskać dostępu z innego. Jednak język ma dość wydajny interfejs IPC do komunikacji między procesami. Moje pytanie brzmi: czy kiedykolwiek istniałby powód, aby mieć wiele niezsynchronizowanych wątków w jednym procesie (a tym samym obejść GIL)? Dlaczego po prostu nie umieścić instrukcji thread.wait() w kluczowych pozycjach logiki programu (zakładając, że thread.wait() nie jest oczywiście obciążeniem dla procesora)? Rozumiem, że niektóre inne języki korzystające z GIL mają problemy z planowaniem procesora ( _cough_ Python), ale wszystkie zostały rozwiązane.


title: Optymalny algorytm grupowego podziału pomieszczeń z wagami

text: Mam nadzieję, że ktoś może mi w tym pomóc, ponieważ całkowicie utknąłem. Pracuję z grupą na mojej uczelni nad pierwszym semestralnym raportem badawczym, który powinien być gotowym programem, rozwiązującym problem opisany poniżej. Zastanawialiśmy się nad tym problemem od kilku dni i obiecałem, że znajdę dobre miejsce, aby poprosić o pomoc w zakresie podstawowego algorytmu. Wszelka otrzymana pomoc zostanie oczywiście uwzględniona w raporcie. Myślałem, że poradzę sobie z tym jako liniowym problemem przypisania, ale albo czegoś brakuje, albo (najprawdopodobniej) mam zbyt wiele wymiarów, aby pracować z tym w ten sposób. Niekoniecznie szukam gotowego rozwiązania problemu, ponieważ nawet wskazówki, które wskazują mi właściwy kierunek, byłyby bardzo mile widziane. # Opis problemu * Istnieją pokoje grupowe, klastry grupowe i grupy. * Pokój grupowy może pomieścić różną liczbę grup, od 1 do 12. Są one umieszczane na różnych skrzydłach, piętrach, a nawet w różnych budynkach, co wprowadza do niego element odległości. * Klaster grupowy zawiera również różną liczbę grup. Więcej szczegółów do naśladowania. * Grupy muszą być przypisane do pokoju grupowego z następującymi priorytetami, które myślałem o wprowadzeniu jako wag: 1. Grupy w klastrach powinny być jak najbliżej siebie. Oznacza to, że jeśli to możliwe, powinny znajdować się w tym samym „obszarze”, takim jak to samo skrzydło lub piętro. 2. W przypadku pokoi grupowych obsługujących więcej niż jedną grupę; nigdy nie powinny zawierać grup z dwóch różnych klastrów. 3. Klastry mogą mieć powiązania z innymi klastrami, co oznacza, że algorytm powinien faworyzować ich bycie blisko siebie. Znowu myślę, że to musi być wykonalne z ciężarami. 4. Jeśli klastry muszą być podzielone, najlepiej byłoby, gdyby były podzielone na jak najmniej części - i - umieszczone jak najbliżej innej części klastra (lub części), jak to możliwe. 5. Podział klastra na więcej niż jeden budynek powinien wiązać się z dość dużą karą. 6. Wreszcie; w przypadku, gdy nie ma wystarczającej liczby pokoi grupowych dla wszystkich grup, powinno to wiązać się z dość wysokimi kosztami, aby zapewnić, że jak najmniej grup nie będzie mieć pokoju grupowego. # Potrzebujesz więcej informacji? Nie wahaj się poprosić o wyjaśnienia, jeśli zajdzie taka potrzeba. Chciałbym rozwiązać ten problem w najlepszy możliwy sposób.


title: dodawanie wskaźnika tablicy w c

text: Mam problemy ze zrozumieniem, jak działa to równanie w c: char * sum(char * a, int b) { return &a[b]; } printf("%d", sum(5, 4)); Rozumiem, jak działają tablice i rozumiem, jak odwoływać się do zmiennej i odwoływać się do niej do lokalizacji w pamięci, ale nie rozumiem, gdzie pojawia się tu dodawanie. Ma dla mnie sens, że na przykład `return &a[4]` po prostu zwróciłby odwołanie do nieistniejącej lokalizacji w pamięci i spowodowałby błąd. Czy ktoś może mi to wyjaśnić w prostej terminologii?


title: Jak z wdziękiem poradzić sobie z wykonawcą, który próbuje ominąć poprzedniego klienta?

text: Pracowałem jako freelancer dla lokalnego sklepu z grami. Większość projektów, nad którymi pracowaliśmy, została sprowadzona przez zewnętrznego wykonawcę. Ten facet chce teraz robić interesy bezpośrednio ze mną w związku z nowymi projektami, które nie mają nic wspólnego z grami, a zatem _nie wymagałyby umiejętności moich poprzednich klientów_. Słyszeli jednak o tym i są teraz wkurzeni na wykonawcę za to, że ich nie przejrzał, ale podejrzewam, że nie obchodzi go to i i tak będzie ścigał. Czy jako niezależny pracownik powinienem się tym przejmować? Jeśli tak, czy mogę wszystkich uszczęśliwić?


title: „Czysty kod”: jak organizować nazwane zapytania?

text: Kilka dni temu zacząłem czytać książkę Roberta C. Martina "Clean Code", która zachęciła mnie do dokładniejszego przyjrzenia się mojemu kodowi. Po otwarciu eclipse zobaczyłem to: entityManager.createNamedQuery("CarriageRouteEntity.listCarriageDirections"); i zdecydowałem się przenieść ciąg `CarriageRouteEntity.listCarriageDirections` do stałego ciągu. Po szybkiej naprawie utworzyłem coś takiego: @NamedQueries({ @NamedQuery(name = CarriageRouteEntity.LIST_CARRIAGE_DIRECTIONS, query = "po prostu zapytaj...") }) public class CarriageRouteEntity { public static final String LIST_CARRIAGE_DIRECTIONS = "CarriageRouteEntity.listDirections"; // ... } więc teraz nazywam to tak: entityManager.createNamedQuery(CarriageRouteEntity.LIST_CARRIAGE_DIRECTIONS); I tutaj zacząłem się zastanawiać, gdzie umieścić stałe nazwanych zapytań. Czy klasa encji jest do tego dobrym miejscem? Może powinienem utworzyć nową klasę z tymi stałymi, jak public class CarriageRouteEntityNamedQuery { public static final String LIST_CARRIAGE_DIRECTIONS = "CarriageRouteEntity.listDirections"; } ale jeśli inny programista spróbuje stworzyć nazwane zapytanie, czy będzie wiedział, gdzie na nie spojrzeć? Jakie są twoje opinie? Jak uporządkować te stałe? Może zamiast tworzyć klasę `CarriageRouteEntityNamedQuery` powinienem stworzyć enum i dodać metodę do encji `CarriageRouteEntity` o nazwie `getNamedQuery()`, która powie innemu programiście, w którym enum powinien szukać stałych?


title: Wskazówki dotyczące planowania przepisania dużego projektu PHP?

text: Postanowiłem całkowicie przepisać framework PHP (Using MVC), nad którym pracuję od lat. Mój problem do tej pory polegał na tym, że po prostu wymyślałem pomysły, wrzucałem je do Traca jako bilety i dodawałem później - bez martwienia się o projekt samego frameworka. Z biegiem czasu spowodowało to pewne problemy i myślę, że przepisanie byłoby pomocne, jednak nie jestem pewien od czego zacząć planowanie - wiem, że nie chcę używać Traca i wiem, że potrzebuję czegoś więcej niż tylko bilety i kamienie milowe - ale czego jeszcze bym potrzebował? Naprawdę chcę dokładnie zaplanować to przepisanie, chcę szczegółowo opisać każdą funkcję, którą chcę, dokąd zmierza i jak będzie łączyć się z każdą inną częścią - ale nie mam doświadczenia z tym poziomem planowania. Jakakolwiek rada? Jakieś programy, które pomogą? Mam dość Traca, nigdy mi się to nie podobało. Wiem, że będę potrzebować dokumentu projektowego, ale czy jest jakiś określony układ, którego powinienem przestrzegać? Potrzebuję również śledzenia błędów, biletów, kamieni milowych itp., ale poza Tracem też nie wiem, co jest do tego dobre. Jestem pewien, że potrzebuję więcej, ale nie mam pojęcia czego, więc każda pomoc byłaby mile widziana.


title: Uwagi dotyczące implementacji MD5

text: Podczas przeglądania RFC1321 natknąłem się na następujący akapit: Ten krok wykorzystuje 64-elementową tabelę T[1 ... 64] skonstruowaną z funkcji sinus. Niech T[i] oznacza i-ty element tablicy, który jest równy części całkowitej 4294967296 razy abs(sin(i)), gdzie i jest wyrażone w radianach. Elementy tabeli podano w załączniku. Z tego, co zrozumiałem z akapitu, oznacza to, że T[i] = Integer_part(4294967296 razy abs(sin(i))) Wiemy, że następujące jest prawdziwe dla wszystkich `x`: 0 <= sin(x) <= 1 Ponieważ ` i` jest liczbą całkowitą, `abs(sin(i))` może równie dobrze wynosić `0` dla wszystkich wartości `i`. Oznacza to, że tabela będzie zawierać wszystkie wartości zerowe („4294967296” razy „0” to „0”). W realizacji nie jest to prawdą. Dlaczego tak jest? Dodatek zawiera tylko wartości surowe po przeliczeniu. Nie pokazuje, jak wywodzi się z funkcji sinus.


title: STDOUT i jego zanieczyszczenie

text: Przeczytałem wiele książek i artykułów o programowaniu funkcjonalnym i nadal wstydzę się, że nie jestem w stanie zrozumieć pewnych podstawowych pojęć. Jedną z głównych idei programowania funkcyjnego jest to, że te same dane wejściowe zawsze powinny dawać te same dane wyjściowe. Dlatego, powiedzmy, zapytanie do bazy danych lub zapisanie pliku nie może być z definicji wykonane w stylu czysto funkcjonalnym. To na przykład jeden z powodów, dla których potrzebujemy monad. Pytanie brzmi – dlaczego uważamy wyjście STDOUT za coś nieczystego? Tak, każdy program do obsługi plików jest ryzykowny - nigdy nie możemy być pewni, że dane zawsze zostaną zapisane. Ale co z STDOUT? Dlaczego mielibyśmy myśleć o tym jako o czymś niewiarygodnym? Czy bardziej zawodna jest sama ocena? To znaczy, zawsze możemy pociągnąć za spust i przerwać obliczenia.


title: Artykuły i prace programistów

text: Kiedy wracam do domu po pracy, zostało mi około 2-3 godzin na pracę nad własnymi projektami. Niektórzy dobrzy programiści/deweloperzy również piszą książki/artykuły/itd. Denerwuję się zbyt małą ilością czasu i ciekawi mnie, jak inni mogą tyle zrobić - pracować w swojej głównej pracy, pracować nad własnymi projektami i pisać artykuły/książki? Czy znasz jakąś formułę lub jakąś technikę, aby móc wykonać wszystkie wymienione?


title: Jakiekolwiek języki używają operatorów „=>” i „=<”?

text: Jestem tylko ciekaw, czy są jakieś języki programowania, które używają do czegoś operatorów '=>' i '=<'. Zastanawiam się, dlaczego nie są one powszechnie używane, skoro ich warianty „<=” i „>=” są tak powszechnie używane w większości języków. Czy jest powód, dlaczego? EDYCJA: Nie pytam, dlaczego nie są używane do tego samego zadania co „<=”, ale dlaczego operatory nie są używane do niczego.


title: wspólna infrastruktura dla aplikacji internetowych przy użyciu asp.net mvc

text: Jak zbudować wspólną infrastrukturę dla moich aplikacji internetowych przy użyciu asp.net mvc i efektywnie nią zarządzać? Celem jest zwiększenie produktywności programistów. Typowe elementy infrastruktury obejmują elementy wizualne i interaktywne, takie jak konfigurowalne menu, spójny układ strony internetowej, spójna nawigacja, okruszki itp. Będzie również miał kilka interfejsów API do zarządzania użytkownikami i rolami. Tak więc ta platforma/infrastruktura będzie miała własną bazę danych i tabele (które można wdrożyć za pomocą struktury encji). Ale są inne rzeczy, na które nie mam odpowiedzi: * Baza danych będzie miała również typy zdefiniowane przez użytkownika, przechowywane procs, itp. W jaki sposób powinny one zostać "wdrożone" (lub zaadoptowane) w aplikacji docelowej? * Byłby zestaw kontrolerów i widoków przeznaczonych do zarządzania użytkownikami i rolami. Muszą być częścią projektu docelowego. Jaki jest najlepszy sposób, w jaki można to uwzględnić? Wystarczy nakreślić rodzaj doświadczenia, jakie powinien zdobyć programista: 1. Rozpoczął projekt MVC. 2. Uruchom jakieś polecenie (odpowiednio w samym IDE - myślę o powershellu lub NuGecie) 3. I powinien zacząć działać... 4. W pewnym momencie później pojawiłyby się jakieś aktualizacje na platformie... jak powinno zostaną zaktualizowane... problemy, z którymi może się tu zmierzyć... jak je rozwiązać... itd...? Jak zaprojektować taki projekt infrastrukturalny?


Dlaczego typ Scala Option nie ma nazwy Maybe, tak jak w Haskell? Może ma dla mnie dużo bardziej „sensowny sens”, ale być może Option zachowuje się inaczej, o czym nie jestem świadom. Czy jest jakiś szczególny powód, dla którego Option w Scali nie zostało nazwane Maybe?


title: Jak śledzisz, na jakim etapie jesteś w programie?

text: Jak wielu, opracowuję kilka aplikacji samodzielnie (nie w tym samym czasie), aby ostatecznie sprzedać. Ale mam też strony internetowe do prowadzenia, pracę na studiach, życie towarzyskie itp., więc często zapominam, na jakim etapie jestem w programowaniu, zwłaszcza po wakacjach za granicą. Czy są jakieś techniki, których mogę użyć, aby wszystko śledzić?


title: Gdzie najlepiej przechowywać kod na komputerze Mac?

text: Zacząłem bawić się rozwojem Maca i zastanawiam się, gdzie jest najlepsze miejsce do przechowywania kodu? Generalnie w moim oknie z systemem Windows przechowuję cały kod w c:\Code\ Na Macu jest to /Users/Liam/Code/ Czy spowoduje to problemy z uprawnieniami podczas uruchamiania kodu internetowego?


title: Czy istnieją „najlepsze praktyki” kodowania SAS?

text: W pracy od początku do końca tworzymy wiele naszych aplikacji w SAS. Jednym z problemów związanych z tym podejściem jest to, że SAS jest bardzo gadatliwym językiem o bardzo niewielu konstrukcjach językowych; jest ograniczone wsparcie dla zmiennych, bardzo ograniczone wsparcie dla podstawowych funkcji i nie ma czegoś takiego jak klasy. Mają koncepcję zwaną „makrami”, która zasadniczo polega na zastępowaniu tekstu; definiujesz makro, a przy wywołaniu po prostu spada zawartość makra. Moje pytanie brzmi, czy ktoś zna „najlepsze praktyki kodowania” do wykorzystania przy tworzeniu aplikacji SAS? Czy istnieją wzorce projektowania oprogramowania dla SAS? Przejrzałem Code Complete i niektóre z tego, co pisze, mają zastosowanie do SAS-a, ale wiele z nich nie jest, ponieważ koncepcje nie istnieją w SAS-ie. Czy ktoś może dać zalecenia dotyczące pisania łatwego w utrzymaniu, dobrze zaprojektowanego kodu SAS-owego?


title: Jak przejść do obszaru rozwoju, w którym nie mam doświadczenia?

text: Od 10 lat jestem web developerem Classic ASP i po raz drugi w ciągu dwóch lat mam do czynienia z możliwością zwolnienia. Największą różnicą jest teraz to, że rynek pracy dla kogoś z moimi ograniczonymi umiejętnościami jest w rzeczywistości gorszy niż w latach 2008-2009. Lata temu ukończyłem kurs dyplomowy w zakresie tworzenia stron internetowych ASP.NET, ale nie byłem w stanie przełożyć tego na pracę; od tego czasu sam utrzymywałem swoje umiejętności .NET, ale nigdy nie byłem w stanie przebić się przez barierę „braku doświadczenia zawodowego” i nie miałem możliwości pracy z .NET na żadnym stanowisku Utrzymałem (w tym moje obecne stanowisko, na którym złamali obietnicę, którą złożyli przy zatrudnieniu, że wyślą mnie na szkolenie). Zastanawiam się więc, czy w ogóle jest możliwe samouczenie się i przekształcenie tej wiedzy w płatną pozycję? Czy paragraf „brak doświadczenia zawodowego” 22 jest gorszy w przypadku technologii firmy Microsoft niż w przypadku innych, czy też jest w zasadzie taki sam dla wszystkich języków programowania? Rozważałem dołączenie do projektów open source lub pracę wolontariacką jako sposób na zaznajomienie się z nowym językiem, ale listy projektów, które czytałem, chciały mieć doświadczenie z referencjami. Czy jest jakiś sposób na zrestartowanie mojej kariery w tym momencie? **Edytuj:** Ciekawi mnie rynek pracy dla języków open-source a języków MS. Czy łatwiej jest dostać pracę jako, powiedzmy, samouk programista Ruby niż samouk programista C#? Ostatnim razem, gdy skanowałem Craigslist, wydawało się, że wszystkie możliwości oddolne/startupowe były w PHP, Ruby itp.


title: Jaka jest różnica między językiem interpretowanym a językiem skompilowanym na maszynę wirtualną?

text: Przyszło mi do głowy, że nie ma wielkiej różnicy między `$>python module.py` a: `$>javac module.java` `$>java module.class` Ten pierwszy kompiluje się do języka pośredniego (python kod bajtowy) i wykonuje program. Ten ostatni przerywa kroki, najpierw kompilując do języka pośredniego (kod bajtowy jvm), a następnie wykonując w innym wierszu. W rzeczywistości mogę przepisać pytona, aby wyłonić dwa kroki, tak jak w tym pytaniu SO. Wygląda na to, że ludzie robią duże wrażenie na temat wyraźnej różnicy między językami kompilowanymi a interpretowanymi. Wygląda na to, że linie są całkowicie zamazane. Inne popularne języki interpretowane mają podobne cechy. PHP "kompiluje" do własnych opkodów, które mogą być buforowane lub przechowywane do późniejszego wykorzystania. Perl też jest do czegoś skompilowany. Więc... czy naprawdę jest jakaś różnica między tymi popularnymi językami interpretowanymi a popularnymi językami kompilowanymi, które kompilują się na maszynach wirtualnych? Być może w jednym przypadku maszyny wirtualne są zwykle bardziej rezydentne w pamięci, podczas gdy w przypadku „interpretowanych” języków zazwyczaj uruchamiają się ich środowiska uruchomieniowe? Jednak wydaje się, że można to łatwo zmienić. Jednak nadal wydaje się, że jest jakaś różnica. Jeśli są mniej więcej takie same, to dlaczego wydajność Java/C# wydaje się zbliżać do C++, podczas gdy języki „interpretowane” są wciąż o rząd wielkości słabsze? Jeśli wszystkie naprawdę bajtkodów działają w maszynie wirtualnej i wszystkie są naprawdę takie same, dlaczego tak duża różnica w wydajności?


title: Czy istnieje interfejs API, którego mogę użyć, aby uzyskać dostęp do danych map?

text: Klient chciałby, abym zbudował im witrynę intranetową z informacjami mapowania. Na przykład mapy takie jak te w Mapach Google. Przyjrzałem się interfejsowi API Map Google, ale ich umowa licencyjna „bezpłatnego użytku” wyraźnie zabrania używania w intranetach lub witrynach internetowych, które pobierają opłatę za uzyskanie nazwy użytkownika/hasła. [Źródło: https://developers.google.com/maps/terms#section_9_1_1 ] Innym rozwiązaniem jest użycie licencji Google Enterprise/Business dla ich interfejsu API map, ale najniższy koszt podstawowy dla tej grupy licencji zaczyna się od 10 000 USD * *rocznie** , a od tego momentu cena szybko rośnie! Moje pytanie: * Czy istnieje inny podobny programistyczny interfejs API/usługa (HTTP, Javascript, JSON, ...?) do innej firmy mapującej, który działa lepiej dla małych jednoosobowych programistów internetowych bez konieczności ponoszenia 10 000 USD rocznie na stronę internetową o licencję?


title: Emacs i „samowzmacniająca się wydajność”

text: Krótko mówiąc, moje pytanie do was, zagorzałych użytkowników Emacsa, brzmi: czy osiągnęliście tę „samowzmacniającą się wydajność”, o której mówi Steve Yegge? > Emacs jest samoobsługowy: pisanie w nim rzeczy sprawia, że samo środowisko > jest bardziej wydajne. Jest to pętla sprzężenia zwrotnego: rekurencyjny, samowzmacniający się > efekt multiplikatywny, który pojawia się, ponieważ ulepszasz środowisko > używasz do tworzenia ulepszeń. Czy **naprawdę uważasz**, że ulepszanie Emacsa w końcu sprawiło, że **10 razy bardziej produktywny**, a Twoja produktywność stale rośnie wykładniczo itd. i tak dalej? Czy masz jakieś przykłady / doświadczenia, którymi możesz się podzielić? Jeśli chodzi o mnie, do rozwoju używałem zarówno Emacsa, jak i Vima (obecnie trzymam się Vima), moje `.emacs` i `.vimrc` są dość skonfigurowane tak, aby odpowiadały moim potrzebom i doceniam moc obu tych edytorów. Ale nie doświadczyłem tej „samo-wzmacniającej się pętli” Emacsa, ani nie spotkałem kogoś, kto to zrobił (oczywiście może to być spowodowane tym, że nie jestem naprawdę hardkorowym Emacserem i nie spotkałem jeszcze tylu Emacserów). Na przykład na Facebooku, facet obok mnie używał Vima, a facet obok niego używał Emacsa. Obaj byli szybcy i wydajni jak diabli, i przypisuję to nie edytorowi, z którego korzystali, ale ich własnej inteligencji i postawie. Ale w każdym razie byłbym zadowolony widząc zdumiewające przykłady zwolenników Emacsa, które zawróciłyby mnie z powrotem do Kościoła Emacsa.


title: „Najlepsze dopasowanie”, aby uniknąć ponownego użycia instancji obiektów w kolekcji

text: Wyobraź sobie, że mam kolekcję instancji obiektów, które reprezentują czynności, które użytkownik ma podjąć. W zależności od atrybutów użytkownika muszę losowo wybierać instancje, aby zaprezentować użytkownikowi działania. Dla niektórych użytkowników muszę przedstawić im więcej aktywności niż jest dostępnych, w takim przypadku chcę skorzystać z poniższego algorytmu. Jeżeli wszystkie dostępne aktywności zostały już zaprezentowane użytkownikowi, należy ponownie wybrać "używaną" czynność, wybierając najwcześniej prezentowaną czynność uporządkowaną według częstotliwości użycia. Innymi słowy, staraj się ograniczać powtórzenia, a tam, gdzie powtórzenie jest nieuniknione, używaj przypadków, które były powtarzane rzadziej i zostały przedstawione najdalej w czasie. Zanim przejdę do kodowania tego algorytmu, zastanawiałem się, czy istnieje jakiś wzorzec, którego mogę użyć ponownie? [EDYTUJ] „Najdalej wstecz w czasie” nie ma znaczenia, ponieważ przekażę algorytmowi uporządkowaną kolekcję użytych wystąpień, w których pierwszy wpis jest pierwszym prezentowanym.


title: Czy ktoś może wyjaśnić proces V Modelu? Dlaczego różni się od modelu Waterfall?

text: Wygląda na to, że Model V to tylko Model Wodospadu z dolną częścią Wodospadu wygiętą w górę, tworząc V. Nie widzę, jak dodaje coś nowego. Z diagramów też nie rozumiem przepływu. Strzałki wskazują we wszystkich kierunkach i nie rozumiem, co jest pierwsze. Czy podążamy za literą V od lewego górnego rogu do dolnego środka, a następnie z powrotem do prawego górnego? A może idziemy w dół V, robiąc wszystko wyżej, zanim pozycja spadnie? W Internecie brakuje wystarczającego wyjaśnienia tego modelu. Byłoby super, gdyby ktoś mógł to wyjaśnić w prawdziwej formie StackExchange :) ![Model V](http://i.stack.imgur.com/N9Hm4.jpg)


title: Jakie szczegóły techniczne powinny być zawarte w prezentacji projektu oprogramowania dla wyższej kadry kierowniczej?

text: Stworzyliśmy aplikację internetową. Musimy zademonstrować tę aplikację naszemu kierownictwu wyższego szczebla. Nie rozumieją technologii. Tworzymy w tym celu prezentację Power Point. Ile szczegółów technicznych powinniśmy zawrzeć w prezentacji? Jakie powinny być te szczegóły (na przykład, jaki jest używany interfejs, który db jest używany itp.)?


title: Jak piszesz skalowalną Javę?

text: Lubię myśleć, że piszę dobry, konserwowalny kod Java, używając najlepszych praktyk, wzorców projektowych i próbując uzyskać dobre pokrycie testami za pomocą testów jednostkowych. Ostatnio, szukając pracy, natknąłem się na kilka ogłoszeń o pracę, które zawierają odniesienia do "skalowalnego" kodu. Więc moje pytanie brzmi, co jest uważane za kod „skalowalny”?


title: Co sprawia, że aplikacja jest skalowalna?

text: Ciągle widzę w ofertach pracy, że kandydat musi mieć doświadczenie w pisaniu „skalowanych” aplikacji. Co sprawia, że aplikacja jest skalowalna i skąd mam wiedzieć, że mój kod może skalować się do milionów użytkowników? * * * Myślę, że lepszym sposobem sformułowania tego pytania jest: Jak mogę napisać kod z myślą o skalowalności? Aby kod był skalowalny od samego początku, w przeciwieństwie do późniejszego namysłu. Czy istnieją pewne metodologie projektowania? A może jest to po prostu kwestia wyboru odpowiednich algorytmów do pracy?


title: Szybko oblicz dodane i usunięte linie

text: Próbuję porównać dwa pliki tekstowe. Chcę obliczyć, ile wierszy zostało dodanych i usuniętych. Zasadniczo, co robi `git diff --stat`. Dodatkowe punkty za brak konieczności przechowywania całej zawartości pliku w pamięci. Podejście, które mam obecnie na myśli, to: 1. przeczytaj każdą linię starego pliku 2. oblicz hash (prawdopodobnie MD5 lub SHA-1) dla każdego wiersza 3. przechowuj skróty w zestawie 4. zrób to samo dla każdy wiersz w nowym pliku 5. każdy hash ze starego zestawu plików, którego brakuje w nowym zestawie plików został usunięty 6. każdy hash z nowego zestawu plików, którego brakuje w starym zestawie plików został dodany Prawdopodobnie będę chciał wykluczyć puste i wszystkie białe linie. Jest mały problem z powielonymi liniami. Można to rozwiązać, dodatkowo zapamiętując częstotliwość pojawiania się skrótu lub porównując liczbę wierszy w starym i nowym pliku i dostosowując dodane lub usunięte wiersze, aby liczby się sumowały. Widzisz miejsce na ulepszenia lub lepsze podejście? **Edytuj** Obecnie używam Javy i biblioteki SVNKit.


title: Czy te koncepcje SQL są dla początkujących, średniozaawansowanych lub zaawansowanych programistów?

text: Ostatnio uczę się SQL i ćwiczę z MySQL/Postgres, a wkrótce z Oracle DB. Przeszukiwałem również sieć w poszukiwaniu studium baz danych typu „mapa drogowa”, ale niestety nie mogłem go znaleźć. Chcę zrozumieć, gdzie i dlaczego poszczególne koncepcje baz danych mieszczą się w skali od początkującego do średniozaawansowanego i zaawansowanego. Mam na myśli głównie relacyjne bazy danych. Proszę wyjaśnić, jak ułożyć wymienione poniżej umiejętności w progresji Początkujący -> Średniozaawansowany -> Zaawansowany na jakim poziomie programisty powinien je znać: * Klauzule Where * Aktualizuj składnię * Sprzężenia * Instrukcje Alt i Create * Tabele temp * Kursory * Indeksy * Klucze obce * Ograniczenia * Transakcje * Podzapytania * Pivots * Funkcje agregujące * Profilowanie * OLAP i OLTP * Wyzwalacze * Plany wykonania * Wskazówki do wykonania * Liczniki wydajności * Normalizacja


title: Algorytm w nieskierowanym grafie BFS

text: Próbuję złożyć algorytm, który będzie wyświetlał stopień węzła dla każdego węzła w grafie pierwszego drzewa o szerokości (zakładając, że został wywołany BFS). Załóżmy, że jest to wykres nieskierowany. Nie jestem pewien, jak uzyskać stopień węzła węzła podczas przechodzenia przez wykres. Myślałem o dodaniu każdego wystąpienia węzła na każdej liście, a następnie dodaniu wszystkich wystąpień na liście tego węzła (wszystkie, ponieważ jest nieskierowane), ale nie jestem pewien, jak zaimplementować. Po prostu odpowiedz pseudokodem. Potrzebuję tylko algorytmu, potem zaimplementuję go później w języku. BFS-get-all-degrees występuje[v] = 0 dla każdego v w G.v dla każdego u w adj[v] //przejdź przez każdą listę sąsiedztwa, jeśli v==u występuje[v]++ drukuj wystąpienie[v]+ + Myślę, że to na dobrej drodze. To na pewno nie w porządku, ale nie wiem, gdzie się udać. EDIT: Wymyśliłem lepszy kod. Myślę, że działa w O(V+E), ale nie jestem pewien. BFS_Node_Degree dla każdego wierzchołka v w V count = 0 dla każdego wierzchołka u w adj[v] count++ print "węzeł ",v", ma stopień ", count


title: Rzeczy, których potrzebuje każdy programista podczas pracy

text: Otrzymałem zadanie stworzenia przyjemnego i relaksującego środowiska, wiem, że potrzebuję ergonomicznych myszy i klawiatur, inni sugerowali piłki i opaski do ćwiczeń. Czego potrzebuje każdy programista podczas pracy? Co może nie być konieczne, ale i tak byłoby miło mieć? Uwaga: to pytanie zadano już wcześniej, ale zaleca się, aby je tutaj zamieścić. Zobacz ten link do poprzednich odpowiedzi: http://stackoverflow.com/questions/3911911/stuff-every-programmer-needs-while-work-closed


title: Sprawdzanie negatywnego warunku

text: Jaki jest (nieco pejoratywny) termin sprawdzania negatywnego stanu danego stanu (a nie pozytywnego, który często jest bardziej czytelny): if(!someVar) { return null; } else { return doCośInteresującego(); } zamiast tego (co jest prawdopodobnie bardziej czytelne) if(someVar) { return doCośInterestujące(); } else { return null; } Jak przez mgłę pamiętam, że jest na to określenie; coś w tym samym duchu co warunki Yoda.


title: Zarządzanie dziennikiem zmian

text: Obecnie pracuję nad aplikacją WinForm. W celu poinformowania klienta o ulepszeniach i poprawkach wprowadzonych w ostatniej wersji, chciałbym zarządzać i wyświetlać changelog. Najczęściej znalazłem istniejący dziennik zmian na stronie internetowej (termin `changelog` jest dość używany) lub wyjaśnienie, jak zarządzać numerami wydań, co mnie nie obchodzi. Oto moje pytania: 1. Jak zarządzać dziennikiem zmian (używając XML, czysty tekst w aplikacji itp.) w aplikacji desktopowej? 2. Jak mam go zaprezentować użytkownikowi (strona zewnętrzna, wewnątrz aplikacji winform)?


title: CMS i bazy danych kontra DIY

text: Programuję od wielu lat, głównie w PHP i tym podobnych i uważam się za średniozaawansowanego programistę. Niektóre z moich projektów online stały się teraz globalne i bardzo szeroko stosowane, teraz głęboko zastanawiam się nad skalowalnością itp. Wszystkie moje dotychczasowe systemy są napisane w PHP, nie ma znanej struktury bazy danych, takiej jak MySQL itp. Zamiast tego nasze bazy danych używają „ styl systemu operacyjnego” sposób przechowywania informacji, plików i folderów, jeśli chcesz. Nie używamy również żadnego oprogramowania ani CMS firm zewnętrznych, jak dotąd działa to bardzo dobrze. Większość ludzi, kiedy słyszą o sposobie, w jaki robimy rzeczy, krytykuje i mówi, że to idiotyczny pomysł, ale zwykle po zobaczeniu naszych systemów w większym stopniu przekonuje się do naszego sposobu działania. Czy to naprawdę takie złe nie używać standardowych systemów bazodanowych i używać tylko jednego (nieco cięższego niż inne) języka PHP? Jak dobrze na pierwszy rzut oka ten rodzaj konfiguracji będzie skalował się? Uwaga Nasze systemy obejmują m.in. zarządzanie kontami i użytkownikami, tworzenie dokumentacji oraz zarządzanie zadaniami/projektami.


title: Dlaczego Haskell ma wbudowane "if/then/else" zamiast definiować to jako prostą funkcję biblioteczną?

text: Dlaczego Haskell ma wbudowaną funkcję `if/then/else`, która jest zależna od typu `Bool`, zamiast prostej funkcji bibliotecznej? Na przykład:: Bool -> a -> a -> a if True x _ = x if False _ y = y


title: Czy metody zwracające wartość logiczną powinny być nazwane po pytaniu lub asercji?

text: Wiele konwencji nazewnictwa zaleca, aby metody zwracające wartość logiczną (nazywane również _metodami predykatów_ ) były nazywane po **pytanie**. Moje pytanie brzmi: czy tak naprawdę nie oznacza to, że metody powinny być nazwane po **potwierdzeniu**? Różnica może być subtelna, ale w niektórych przypadkach otrzymujesz różne nazwy: * _pytanie_ : is_pixel_transparent(...) * _assertion_ : pixel_is_transparent(...) Czasami nie ma to żadnego znaczenia, a sformułowanie jest takie samo: * _pytanie_ : end_of_file(...) * _assertion_ : end_of_file(...) Poza tym wygląda na to, że przez większość czasu to, co ludzie nazywają "pytaniami", jest w rzeczywistości _asertacjami_. * key_exists(...) --> to nie jest pytanie, to jest twierdzenie. Przykładowe użycie: if (key_exists(...)) ... * array_contains_element(...) --> to nie jest pytanie, to jest twierdzenie. Przykładowe użycie: if (array_contains_element(...)) ... Tak więc, powtarzając pytanie, czy wszyscy mają na myśli _asercja_, kiedy mówią _pytanie_?


title: Wzorce programistyczne do obsługi importu/eksportu danych

text: Mam aplikację sieci web ASP.NET, która umożliwia użytkownikowi końcowemu eksportowanie danych do formatu pliku płaskiego. (zasadniczo robiąc kopię zapasową swojej pracy w określonym czasie) W późniejszym terminie mogą ponownie przesłać (zaimportować) te dane z powrotem do aplikacji internetowej. Rzeczywisty format kopii zapasowej jest dość trywialny. Wykres obiektów jest serializowany przy użyciu WCF DataContractSerializer do xml, a następnie wynikowy dokument xml jest kompresowany. Importowanie, rozpakowywanie i deserializacja danych. Widzę jeden mały problem z tym podejściem. wersjonowanie... w miarę upływu czasu i zmiany struktur danych (właściwości / kolekcje podrzędne są dodawane/usuwane lub zmieniane nazwy) wcześniej wyeksportowane wersje danych użytkowników nie będą już mapowane do grafu obiektów w aplikacji. Czy istnieją jakieś konkretne wzorce lub praktyki, które dotyczą tego problemu? lub jakikolwiek inny materiał do czytania, który mógłbyś polecić.


title: Strukturyzacja bazy danych pod wieloobiektową „aktywność” i „następujące” funkcjonalności

text: Pracuję nad aplikacją webową, która operuje na różnych typach obiektów takich jak użytkownik, profile, strony itp. Wszystkie obiekty posiadają unikalny `object_id`. Gdy obiekty wchodzą w interakcję, może to powodować „aktywność”, taką jak publikowanie przez użytkownika na stronie lub profilu. Aktywność może być powiązana z wieloma obiektami poprzez ich `object_id`. Użytkownicy mogą również śledzić „obiekty” i muszą widzieć strumień odpowiedniej aktywności. **Czy możesz podać kilka sugestii dotyczących struktury danych, która byłaby wydajna i skalowalna? Moim celem jest pokazanie aktywności ograniczonej do obiektów, które obserwuje użytkownik** Nie ograniczają mnie relacyjne bazy danych. ## Aktualizacja Ponieważ otrzymuję porady dotyczące ORM i sposobu indeksowania, chciałbym ponownie podkreślić moje pytanie. Zgodnie z moim obecnym modelem projektowym struktura bazy danych wygląda tak: ![tutaj wstaw opis obrazka](http://i.stack.imgur.com/kumN8.png) Jak widać - zaimplementowanie takiej bazy danych jest dość łatwe . Tabele Activity i Follower zawierają znacznie większą liczbę rekordów niż górny poziom, ale jest to tolerowane. Ale kiedy przychodzi do mnie tworzenie tabeli „oś czasu”, staje się to koszmarem. Dla każdego użytkownika muszę odnieść się do wszystkich działań obiektu, które śledzi. Jeśli chodzi o zapisy, łatwo wymyka się spod kontroli. Proszę zasugerować mi, jak zmienić tę strukturę, aby uniknąć tworzenia osi czasu, a także być w stanie szybko pobrać aktywność dla danego użytkownika. Dziękuję.


title: Dwa czy jedno repozytorium git dla aplikacji na Androida + backend usługi internetowej?

text: Zastanawiam się, jaka jest najlepsza praktyka dla mojej struktury repozytorium git, w której mam aplikację dla systemu Android + zaplecze usługi sieci Web. Ogólnie chciałbym wydać te dwa niezależnie (np. poprawki perf backendu bez zmian w interfejsie), ale obawiam się, że jeśli zachowam je w dwóch oddzielnych repozytoriach, stracę możliwość zobacz połączone zmiany aplikacji i usług internetowych (np. nastąpiła zmiana w interfejsach API na serwerze). Co robią inni programiści Androida, aby zarządzać swoim kodem źródłowym i procesem wydawania? Czy powinienem używać jednego repozytorium git z osobnymi folderami, czy dwóch repozytoriów git? Powinienem zauważyć, że chciałbym ustawić to jako push-to-deploy — wszelkie zmiany w mojej gałęzi master wywołają tag i wdrożenie.


title: Czyją odpowiedzialnością jest łatka naprawiająca błędy?

text: Sytuacja, która pojawiła się kilka razy w projektach open source, wygląda następująco: 1. Zauważyłem błąd w naszym wdrożeniu i wymyśliłem szybką łatkę hakerską. (Na przykład, po prostu komentując kod, którego tak naprawdę nie potrzebujemy.) 2. Poświęcam trochę więcej wysiłku, aby znaleźć prawdziwy błąd, wymyślić łatkę i przesłać ją za pomocą Git pull request lub podobny. 3. Moje żądanie ściągnięcia zostało odrzucone. Być może łatka była niedoskonała (np. zawierała linijki, których nie powinna zawierać), być może naruszała styl kodowania, być może miała inne konsekwencje. A może zrobiłem coś złego w Git - żądanie ściągnięcia powinno zostać przebudowane lub coś takiego. Opiekun przekazuje informacje zwrotne o tym, jak ulepszyć łatkę, i prosi o ponowne jej przesłanie. W tym momencie jestem zdezorientowany, jak daleko powinienem postąpić. Jeśli o mnie chodzi, nie mam problemu: naprawiłem go z powrotem w kroku 1. Zgłosiłem problem, podjąłem nawet kroki, aby to naprawić dla innych. Ale nie czuję, że to „moja” prośba o ściągnięcie, więc nie czuję, żeby odpowiedzialność za ulepszenie łatki spadła na mnie. Jedna szczególna sytuacja, która mnie irytuje, jest taka, że po dyskusji na temat wad mojej łaty dochodzimy do porozumienia w sprawie listy dyskusyjnej dotyczącej tego, jaka byłaby właściwa łatka (tj. jak powinna się zachowywać, czasami zawierając każdą linijkę kodu). W dalszym ciągu zakłada się, że to do mnie należy wygenerowanie i przesłanie poprawki. Czy w takich sytuacjach obowiązuje standardowa etykieta? Jak są rozwiązywane? Czy moja reakcja jest niezwykła? Jak daleko masz się posunąć, aby Twoja naprawa błędu została zaakceptowana? (Zauważ, że kiedy mówię "projekt open source", niektóre z nich są bardzo małe, ale mogą nie być hobby - po prostu małe projekty oprogramowania, które są przydatne dla kilku organizacji, które angażują zasoby programistów do pracy nad nimi. W przypadku oczywistej odpowiedzi to „napraw łatkę i wyślij ponownie”, zrozum, że mam obowiązek wobec pracodawcy pracować nad rzeczami, które przyniosą mu korzyści. Spędzanie czasu na naprawie błędu, który nas nie dotyczy, byłoby niewłaściwe…)