title: Najlepsze praktyki w projektowaniu aplikacji / uwierzytelnianie SQL

text: Obecnie zajmuję się wdrażaniem/projektowaniem istniejącej aplikacji dla dużego klienta. Aplikacja ma podobny model jak m.in. vCenter Server, w którym wiele komponentów przechowuje informacje i wyodrębnia informacje i przepływy pracy z centralnej bazy danych. Zarządzanie środowiskiem odbywa się z poziomu aplikacji konsolowej, która wykorzystuje usługę Windows do łączenia się z bazą danych. Ze względów bezpieczeństwa uwierzytelnianie SQL nie jest opcją, ale aplikacja obsługuje uwierzytelnianie Windows. Jednak podczas korzystania z uwierzytelniania systemu Windows przekazuje poświadczenia użytkownika korzystającego z aplikacji konsoli zarządzania do bazy danych, zamiast korzystać z konta usługi, w ramach którego działa usługa. Powoduje to sytuację, w której role zabezpieczeń zdefiniowane w aplikacji (użytkownicy/grupy AD mapowane na określone uprawnienia) wymagają, aby te obiekty AD również miały login SQL Server i pewne uprawnienia do bazy danych (db-writer dla niektórych tabel , w zależności od konkretnych uprawnień w aplikacji). Oprócz dodatkowej administracji stwarza to również zagrożenie bezpieczeństwa imo, ponieważ cały sens ról bezpieczeństwa aplikacji w tej konkretnej aplikacji polega na umożliwieniu użytkownikom dostępu tylko do części określonej tabeli (np. podzbioru obiektów). Ale ponieważ mają teraz login SQL i db_writer w całej tej tabeli, mogli ominąć aplikację i dzięki bezpośredniemu połączeniu z bazą danych mogliby odczytywać/zmieniać rekordy, których nie mogliby przeglądać/manipulować za pośrednictwem aplikacji. To ryzyko można następnie (częściowo) złagodzić, ograniczając dostęp do bazy danych na poziomie sieci lub ewentualnie użyć wyzwalaczy do sprawdzenia nazwy hosta wywołującego i nazwy programu, ale z tego, co wiem, nie jest to całkowicie bezpieczne. Jedyną korzyścią, jaką mi przedstawiono, jest teraz pełna ścieżka audytu dostępna na serwerze SQL na temat tego, kto dokładnie co zrobił. Ale to jest już zaimplementowane w aplikacji, więc wydaje mi się, że jest to dyskusyjne. Gorączkowo szukałem informacji na ten temat i najlepszych praktyk. Mogę znaleźć tylko rzeczy oparte na ASP / Web, ale nic na temat tego typu aplikacji. Czy naprawdę jest to najlepszy sposób na przejście przez uwierzytelnianie do serwera SQL, czy aplikacja powinna obsługiwać autoryzację i wysyłać wszystkie żądania bazy danych za pomocą konta usługi? Z góry dziękuję za wszelkie informacje. PS. to jest moje pierwsze pytanie na stackexchange, zamieściłem je na niewłaściwej podstronie lub uważasz, że moje pytanie jest nieodpowiednie, daj mi znać.


title: Jakie konkretne kroki mogę podjąć, aby ocenić framework(y) PHP bez konieczności poznawania szczegółowo każdego frameworka?

text: To pytanie dotyczy tego, jaką metodologię należy zastosować podczas oceny jednego lub więcej frameworków PHP, aby zobaczyć, który z nich najlepiej odpowiadałby potrzebom mojego projektu. Innymi słowy, biorąc pod uwagę presję czasu, z jaką musi się zmierzyć każdy programista, jakie konkretne kroki mogę podjąć, aby ocenić jeden lub więcej frameworków PHP bez konieczności poznawania każdego frameworka w szczegółach? Wiem, że niektóre z rozważań byłyby subiektywne, na przykład jaki jest mój preferowany język lub mój styl kodowania, ale ocena preferowanego języka i stylu kodowania byłaby konkretnym krokiem w kierunku zdefiniowania wybranych ram. Zawężam to do PHP tylko po to, aby założyć, że wybór języka został już dokonany.


title: Aby funkcja klasy działała, czy nie?

text: Zastanawiam się nad funkcjami używanymi w ten sposób: object1->objectMethod1(arg1, arg2); if `objectMethod1`: \- nie zmienia stanu obiektu \- w ogóle nie używa stanu obiektu \- jest używany przez klasę w dużym stopniu \- pasuje logicznie jako używany przez klasę, czy powinien zostać przekształcony w funkcję składową? przykład: class CSVFile { private: stream stream string nagłówek int num_columns public: CSVFile(string filename) CSVFile() wyrzuca DefaultConstructorException() ... CSVFile::initHeader() { header = stream.getLine() attach(isInCSVFormat(header) ) <-- czy isInCSVFormat(string) powinna być funkcją składową, czy nie?


title: Czy ktoś używa JavaFX?

text: Bardzo kusi mnie, aby używać go wyłącznie ze względu na zgrabne interfejsy API wiązania, a teraz, gdy możesz go używać w połączeniu ze Swingiem, wydaje się to naturalnym postępem. Jedyną rzeczą, której wydaje mi się, że jej brakuje od samego początku, jest konstruktor GUI (ale w zależności od tego, z kim rozmawiasz, niekoniecznie jest to zła rzecz!) Czy ktoś ma jakieś doświadczenie w korzystaniu z JavaFX 2.0?


title: Czy są jakieś badania dotyczące związku między praktykami testowania oprogramowania a produktywnością programistów?

text: Czy są jakieś badania dotyczące związku między praktykami testowania oprogramowania (testy jednostkowe i/lub integracyjne) a produktywnością programistów?


title: Czy istnieją języki programowania wykorzystujące przymiotniki?

text: Czy są jakieś języki, w których coś takiego może być możliwe? people = [ ... lista osób ...] Osoba jake = Osoba("Jake", 165, ...) jake to Wysoki people.add(jake) dla Osoby osoba w osobach gdzie Wysoki: // .. .zrób im coś strasznego jake nie jest Wysoki // ... Jake już nie chce być wysoki Mam nadzieję, że to ma sens - zasadniczo dynamiczne przymiotniki, które wpływają na coś na temat właściwości lub metod obiektu.


title: Dlaczego Option/Maybe jest uważany za dobry pomysł, a zaznaczone wyjątki nie?

text: Niektóre języki programowania, jak m.in. Scala ma koncepcję typów „Opcja” (zwanych również „Może”), które mogą zawierać wartość lub nie. Z tego, co o nich czytałem, są powszechnie uważane za lepszy sposób radzenia sobie z tym problemem niż `null`, ponieważ wyraźnie zmuszają programistę do rozważenia przypadków, w których może nie być wartości, zamiast po prostu wysadzić w powietrze podczas czas wykonywania. Z drugiej strony sprawdzone wyjątki w Javie wydają się być uważane za zły pomysł, a Java wydaje się być jedynym powszechnie używanym językiem, który je implementuje. Ale idea za nimi wydaje się być nieco podobna do typu `Option`, aby wyraźnie zmusić programistę do poradzenia sobie z faktem, że może zostać zgłoszony wyjątek. Czy są jakieś dodatkowe problemy z zaznaczonymi wyjątkami, których nie mają typy `Option`? A może te pomysły nie są tak podobne, jak mi się wydaje, i istnieją dobre powody, aby wymusić jawną obsługę opcji, a nie wyjątków?


title: Kolejność uczenia algorytmów sortowania

text: Przestudiowałem już sortowanie bąbelkowe, sortowanie przez wstawianie i sortowanie przez selekcję i mogę je zaimplementować w C w dużej mierze dzięki znajomości algorytmu. Chcę nauczyć się sortowania w powłoce, sortowania przez scalanie, sortowania sterty i sortowania szybkiego, które, jak sądzę, są o wiele trudniejsze do zrozumienia. W jakiej kolejności powinienem przyjąć te inne algorytmy? Zakładam, że prostszy algorytm sortowania pomaga nauczyć się bardziej złożonego. Nie przejmuj się przyjmowaniem innych, jeśli to pomaga w procesie uczenia się.


title: Alternatywy dla OAuth?

text: Branża internetowa przesuwa się / przesunęła się w kierunku korzystania z OAuth podczas rozszerzania usług API na zewnętrznych konsumentów i programistów. W prostych jest trochę elegancji… i cóż, 3-etapowy proces OAuth nie jest taki zły… po prostu uważam, że jest to najlepsza ze złych opcji. Czy istnieją alternatywy, które mogłyby być lepsze i bezpieczniejsze? Odniesienie do zabezpieczeń pochodzi z następujących adresów URL: * OAuth 2.0 jest szkodliwy dla sieci? * OAuth 2 bez podpisów szkodzi sieci Natknąłem się na to na giełdzie stosu IT Security i pomyślałem, że jest to przejmujące z punktu widzenia bezpieczeństwa: * OAuth / OpenID / Facebook Connect .. Szalony? Może SAML 2.0 jest alternatywą? A co z OpenID? Celem tego pytania jest z punktu widzenia programowania. Czy OAuth jest **najlepszą** opcją, jaka istnieje dzisiaj…? Czy istnieją alternatywne opcje, które pozwalają mi rozszerzyć moją aplikację internetową o klientów, którzy są lepsi z punktu widzenia bezpieczeństwa, wdrożenia, długowieczności (nie będą wymagać przeróbek w ciągu kilku miesięcy) i umożliwiają obsługę aplikacji mobilnych korzystających z mojej sieci aplikacja.


title: Chcę się uczyć i odkrywać cloud computing, jakich technologii powinienem być świadomy w tym samym celu?

text: Chcę dostać się do Cloud Computing. Zanim wybiorę konkretną platformę dostawcy, chcę się dowiedzieć: Jakie są podstawowe technologie, narzędzia i paradygmaty, o których powinienem wiedzieć, aby czuć się komfortowo w pracy na platformie w chmurze? Czy są jakieś polecane książki lub inne zasoby, które pomogą mi zmoczyć stopy dzięki Cloud Computing?


title: Szachy jako ćwiczenie budowania zespołu dla programistów

text: Ostatnie miejsce, w którym pracowałem, nie było szczególnie świetne i było więcej niż kilka nocy, w których pracowaliśmy do późna, próbując sprostać naszym sprintom. Zestresowany zespół zbliżył się do siebie, a ludzie zaczęli wprowadzać małe zwiastuny i łamigłówki, po prostu coś, z czym wszyscy bawiliśmy się i próbowaliśmy rozwiązać, gdy kompilacja/wdrażanie działało w środowisku testowym lub gdy czekaliśmy na test integracji, aby zakończyć. W końcu zamieniło się to w ludzi przynoszących szachy i ustawiających je przy swoich biurkach. Graliśmy przez e-mail, przesyłając sobie nawzajem ruchy w szachowej notacji, ale w bardzo swobodnym tempie, z grami trwającymi czasami dwa lub trzy dni. Kierownictwo tolerowało to, gdy robiliśmy nadgodziny, ale ponieważ sprawy były zarządzane lepiej, a ludzie nie pracowali znacznie więcej niż 40 tygodniowo, zaczęli się nad tym rozprawiać i powiedzieli nam, że nie wolno nam mieć szachownicy nasze biurka, chociaż były w porządku z grami logicznymi. Jakie są według Ciebie zalety i wady dopuszczenia gry w szachy podczas przerwy w tworzeniu oprogramowania?


title: Związek między C#, .NET, ASP, ASP.NET itp.

text: Naprawdę nie rozumiem różnicy między C#, C#.NET i tym samym dla ASP i innych języków '.NET'. Z tego, co rozumiem, .NET jest biblioteką/frameworkiem... rzeczy. Myślę, że są one zasadniczo dostępem do danych systemu Windows, takich jak elementy formularzy itp., Ale wydaje się, że nie dotyczy to ASP.NET. Ponadto widzę, że ludzie nazywają siebie programistami '.NET'. Czy to oznacza, że biegle posługują się C#, ASP i innymi językami? Wreszcie nigdy nie widzę C# bez dołączonej platformy .NET. Czy C# jest ściśle powiązany z platformą .NET, ponieważ bez niego jest bezużyteczny? Podsumowując: co dokładnie zapewnia .NET? Jak to się ma do C# i ASP itp.? Co oznacza „deweloper .NET”? I wreszcie, dlaczego nigdy nie widzisz C# bez .NET? [Na marginesie zdaję sobie sprawę, że jest to wiele pytań, ale myślę, że są one bardzo ze sobą powiązane (a przynajmniej takie wrażenie sprawiało mi przeglądanie Programistów / SO itp.)].


title: Programy do kontroli wersji plików XML - narzędzie do łączenia/porównywania

text: Moje środowisko programistyczne / język (gamemaker) udostępnia pliki źródłowe jako "pliki XML". Każdy zasób ma swój własny plik XML. Gdzie właściwości (kod jest właściwością) są przechowywane wewnątrz znaczników xml. Czy istnieje kontrola źródła, która może to obsłużyć? Wydaje się, że kolizje z subversion nie są obsługiwane poprawnie: kiedy dochodzi do kolizji, subversion łamie strukturę XML. Co z kolei psuje Gamemakera podczas aktualizacji. EDIT (edycja tutaj, ponieważ komentarze nie obsługują znaków nowej linii :P), przykład pliku źródłowego, który został "zniszczony" przez subversion: <object> <spriteName>sprBall</spriteName> <solid>0</solid> <visible>-1</visible> <depth>0</depth> <persistent>0</persistent> <<<<<<< .mine <parentName>self</parentName> ======= < parentName>objExplosion</parentName> >>>>>>> .r16 <maskName><undefined></maskName> <events/> </object> EDIT2: z powodu braku doświadczenia z tymi narzędziami zadałem niewłaściwe pytanie . Oto lepsze sformułowanie: W powyższym przykładzie czytnik plików xml ulegnie awarii podczas próby odczytania pliku. Jednak ręczne rozwiązanie konfliktu jest „trudne”. (A w skrajnych przypadkach niemożliwe). „” samo w sobie nic nie mówi. - Jak pierwsze pytanie staje się "rodzicem nazwy czego?" - Przedmiotem? - jaki obiekt? W tym przypadku można to szybko zobaczyć. Jeśli jednak plik xml osiągnie ponad 100 wierszy z 6-7 warstwami tagów, po prostu przeglądanie go staje się bałaganem. Zwłaszcza, że wiele tagów nie ma takich samych nazw, jak w IDE. Miałem nadzieję, że konflikt zostanie zmieniony w taki sposób, aby biblioteka czytająca xml mogła go odczytać. - Na przykład, że zmiana .r16 jest wyświetlana w komentarzu (lub podznaczniku/atrybucie). <parentName>self <!--.r16: objExplosion--></parentName> Od tego momentu mogę zaprogramować narzędzie, które pomoże w analizie konfliktu. - Potrafię wykorzystać jedną z wielu bibliotek xml do napisania prostej aplikacji wizualizującej drzewo. Cóż, jestem po prostu zaskoczony, że nie było to problemem dla nikogo innego :/.


title: Przygotowanie do TaoCP

text: Wiele razy próbowałem przeczytać tę serię książek. Niedawno kupiłem Vol. 4, aby dodać do mojej półki. Naprawdę mam nadzieję, że pewnego dnia to przeczytam i zrozumiem. Jednak wydaje mi się, że jestem w stanie uzyskać najbardziej powierzchowne zrozumienie każdego z nich. Kiedy byłem na studiach, zrobiłem jeden z tych, którzy projektowali własne kursy. Postanowiłem sam przejść przez początkową część Vol. 1, mając nadzieję, że wyjdę z umiejętnością przeczytania reszty. Była to jedyna klasa, o którą codziennie męczyłem profesorów i nadal jej nie rozumiałem. Dowody w większości mnie powaliły i chociaż mogłem spojrzeć na odpowiedź z tyłu i zwykle, przez wiele godzin zmagań i pomocy, dowiedzieć się, jak to zostało wyprowadzone… nigdy nie mogłem tego zrobić. Znam książkę Matematyka konkretna i czytałem jej fragmenty. Mimo to myślę, że potrzebuję więcej podstaw, aby spojrzeć na te tematy z odpowiedniej perspektywy i faktycznie wykonać niektóre ćwiczenia samodzielnie. Jakie inne rzeczy mogę zrobić, aby poprawić się na tyle, aby zacząć stawiać czoła tej górze?


title: Udostępnianie wyskakujących okienek w aplikacji internetowej asp.net, które zawierają kontrolki serwera

text: Jaki jest najlepszy sposób dostarczania wyskakujących okienek zawierających kontrolki serwera asp.net? Pracuję na stronie .net. Mam funkcję wyszukiwania, w której jeśli ktoś naciśnie przycisk, pojawi się panel, w którym można wprowadzić informacje o wyszukiwaniu. Chciałbym, żeby to było wyskakujące okienko. Normalny JavaScript nie będzie działał, ponieważ kontrolki działają po stronie serwera. Jak więc stworzyć wyskakujące okienko, z którym wchodzi się w interakcję po stronie serwera?


title: Czy język dynamiczny jest zawsze interpretowany?

text: Patrząc na większość (jeśli nie wszystkie) języki dynamiczne [tj. Python, PHP, Perl i Ruby], wszystkie są interpretowane. Popraw mnie, jeśli się mylę. Czy jest jakiś przykład dynamicznego języka, który przechodzi przez fazę kompilacji? Czy język dynamiczny jest identyczny z językiem interpretowanym?


title: Ma wiele implementacji RESTfull

text: Tak więc dużo czytałem o projektowaniu RESTfull - konkretnie o zasobach. Korzystając z kanonicznego przykładu **Users** , **Posts** i **Comments** , z relacjami w postaci: > Users ---(hasMany)---> Post ---(hasMany)--- > Komentarz Można początkowo pomyśleć o ujawnieniu czegoś takiego: GET /users GET /posts GET /comments POST /users POST /posts POST /comments GET /users/id GET /posts/id GET /comments/id PUT /users/id PUT /posts/id PUT /comments/id DELETE /users/id DELETE /posts/id DELETE /comments/id Ale wtedy powiedz, że chcę wszystkie _Comments_ do pewnego _Post_ wykonane przez konkretnego _User_. Musiałbym zrobić coś takiego: GET /users/id > someUser > var postIds = someUser.posts() GET /posts?id=<postIds[0]>&id=<postIds[1]>&... > somePosts > **użytkownik aplikacji sprawdza posty, aby zobaczyć, na którym im zależy** > var postOfInterest = somePosts[x]; > var postId = postOfInterest.id; GET /comments?id=postId > someComments (wreszcie) Załóżmy, że interesuje mnie tylko _Post_ lub _Comment_ w kontekście jego właściciela. Załóżmy inną strukturę zasobów, która może (ale nie musi?) być bardziej naturalna: GET /users POST /users GET /users/id PUT /users/id DELETE /users/id GET /users/id/posts POST /users/id /posts GET /users/id/posts/id PUT /users/id/posts/id DELETE /users/id/posts/id GET /users/id/posts/id/comments POST /users/id/posts/id/ komentarze GET /users/id/posts/id/comments/id GET /users/id/posts/id/comments/id GET /users/id/posts/id/comments/id Który dla mnie jest prawdopodobnie lepszą reprezentacją jakie są zasoby. Wtedy wszystko czego potrzebuję to: GET /users/id/posts > somePosts > **użytkownik aplikacji sprawdza posty, aby zobaczyć, na którym im zależy** > var postOfInterest = somePosts[x]; > var postId = postOfInterest.id; GET /users/id/posts/postId/comments > someComments To po prostu bardziej przypomina nawigację po systemie plików niż poprzednia metoda - ale nie wiem, czy w ogóle jest to RESTfull (być może właśnie to REST próbował _pozbyć się_ ), ponieważ aby uzyskać dostęp do zasobu _Comments_, muszę wiedzieć, do którego _User_ i do którego _Post_ należy. Ale to pierwsze wymaga 3 próśb, a drugie tylko 2. Myśli?


title: Szybka aktualizacja nowości w Javie w ciągu ostatnich 5 lat?

text: Minęło 5 lat odkąd pracowałem z Javą, ale znów jestem na rynku pracy i wydaje mi się, że jest więcej stanowisk związanych z Javą niż C/C++, w którym teraz mieszkam. Czy są jakieś zasoby, aby szybko wrócić do normy? Ostatnią Javą, którą stworzyłem, była wersja 1.3. Jakie są również dobre zasoby dla technologii Java, takich jak sprężyny i rozpórki?


title: Refaktoryzacja tego kodu, który generuje hash wyszukiwania wstecznego z innego hasha

text: Ten kod jest oparty na idei obiektu formularza http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/ (patrz #3, jeśli nie znasz Koncepcja). Mój rzeczywisty kod, o którym mowa, można znaleźć tutaj: https://gist.github.com/frankjmattia/82a9945f30bde29eba88 Kod pobiera skrót obiektów/atrybutów i tworzy skrót wyszukiwania wstecznego, aby śledzić ich delegacje w tym celu. delegate :first_name, :email, to: :user, prefix: true Ale ręcznie tworzę delegacje z hasza w następujący sposób: DELEGACJA = { user: [ :first_name, :email ] } W czasie wykonywania, gdy chcę wyszukać przetłumaczone nazwy atrybutów dla obiektów, wszystko, co muszę zrobić, to delegowane/z prefiksem (muszę użyć prefiksu, aby uniknąć kolizji nazw) nazwy atrybutów, takie jak :user_first_name, które nie są zsynchronizowane z rails i18n sposób to zrobić: en : activerecord: atrybuty: user: email: 'Adres e-mail' Kod, który wziąłem powyżej hash delegacji i zamienia go w tabelę wyszukiwania, więc kiedy nadpisuję human_attribute_name mogę odzyskać oryginalną nazwę atrybutu i jego klasę. Następnie wysyłam #human_attribute_name do oryginalnej klasy z oryginalną nazwą atrybutu jako jej argumentem. Kod, który wymyśliłem, działa, ale jest co najmniej brzydki. Nigdy tak naprawdę nie używałem #inject, więc był to dla mnie szybki kurs i nie jestem pewien, czy ten kod jest skutecznym sposobem rozwiązania mojego problemu. Czy ktoś może polecić prostsze rozwiązanie, które nie wymaga odwrotnej tabeli wyszukiwania lub czy wydaje się to właściwą drogą? Dzięki, \- FJM


title: jakie jest zadanie trenera w zawodach programistycznych acm?

text: Na uniwersytecie, na którym pracuję, po raz pierwszy zdecydowali się wziąć udział w zawodach regionalnych ACM, chcieliby wyznaczyć mnie jako trenera. Nigdy wcześniej nie byłem w takiej sytuacji i nie znalazłem tak wielu informacji na jej temat, więc jaka jest prawdziwa praca trenera w tych zawodach? Czasami znalazłem doświadczonych programistów, takich jak trenerzy, ale inni to po prostu ludzie, którzy nie mają tak dobrych umiejętności programistycznych; więc o co chodzi?


title: Dlaczego czasami nie myślenie o błędzie pomaga ci go rozwiązać?

text: Wczoraj sporą część popołudnia spędziłem próbując naprawić błąd, który uważałem za trywialny. Kręciłem się w kółko, nie mając pojęcia, co jest nie tak. Przepisywanie dużych fragmentów kodu. Sprawdzam na SO. Nadal nie ma radości. Poszedłem więc do domu, wyprowadziłem psa, obejrzałem mały telewizor i tuż przed pójściem spać, bingo zdałem sobie sprawę z oczywistego błędu, który popełniałem. Dziś rano naprawa zajęła około 10 minut. Kiedy byłem w domu, nie myślałem aktywnie o problemie. Jednak wyjście z sytuacji pozwoliło mi ją rozwiązać. Zdarzyło się to nie po raz pierwszy i wiem, że jest to dość powszechny sposób rozwiązywania problemów programistycznych. Słyszałem nawet o ludziach marzących o odpowiedziach. Dlaczego to działa? Być może ważniejsze jest to, czy istnieje dobry przewodnik, kiedy powinieneś zrobić sobie przerwę od problemu, jak długo powinna trwać przerwa i po jakim czasie pozostawienie problemu przestaje być skuteczne? Przypuszczam, że próbuję wymyślić, jak zoptymalizować to podświadome przetwarzanie (lub cokolwiek się dzieje)


title: Nagradzanie współtwórców open-source

text: Czy istnieje usługa, która mogłaby mi pomóc wynagrodzić (opłacić) współtwórców projektu open-source za ich wkład w projekt (może przy użyciu danych, z których hostowany jest kod GitHub)? Może poprzez nakłonienie ich do mapowania swojego konta bankowego/paypal na swoje konto w usłudze takiej jak GitHub? W jaki sposób projekty obecnie nagradzają swoich współtwórców? Gdybym miał stworzyć taką usługę, czego bym potrzebował?


title: Klauzula reklamowa w Apache License

text: Licencja Apache 1.0 zawiera klauzulę reklamową: **Apache** : > Wszystkie materiały reklamowe wspominające funkcje lub użycie tego * > oprogramowanie muszą zawierać następujące potwierdzenie: * „Ten produkt > zawiera oprogramowanie opracowane przez Apache Group * do użytku w projekt serwera Apache HTTP > (http://www.apache.org/)." Uważam, że wyrażenie „wspomina o funkcjach lub używaniu tego oprogramowania” jest niejasne, jeśli rozpowszechniam licencjonowany kod Apache 1.0 z innym kodem. Czy „to oprogramowanie” oznacza licencjonowany składnik Apache lub cały pakiet oprogramowania. Na przykład, jeśli do szyfrowania używam tylko kodu na licencji Apache, czy klauzula reklamowa pojawia się tylko wtedy, gdy reklama wspomina o szyfrowaniu, czy też ma zastosowanie, nawet jeśli reklama nie wspomina o żadnej funkcjonalności zapewnianej przez kod licencjonowany przez Apache?


title: Ogólny i bezpieczny typ I/O model w dowolnym języku

text: Poszukuję modelu I/O, w dowolnym języku programowania, czyli _generic_ i _type safe_. Przez _genericity_ rozumiem, że nie powinno być oddzielnych funkcji do wykonywania tych samych operacji na różnych urządzeniach (`read_file`, `read_socket`, `read_terminal`). Zamiast tego, pojedyncza operacja `odczytu` działa na wszystkich urządzeniach zdolnych do `odczytu`, pojedyncza operacja `zapisu` działa na wszystkich urządzeniach zdolnych do `zapisu` i tak dalej. Przez _type safety_ mam na myśli operacje, które nie mają sensu, nie powinny być nawet wyrażalne w pierwszej kolejności. Użycie operacji `read` na urządzeniu nie nadającym się do `odczytu` powinno spowodować błąd typu w czasie kompilacji, podobnie jak w przypadku użycia operacji `write` na urządzeniu nie nadającym się do ``zapisu` i tak dalej. Czy istnieje ogólny i bezpieczny typ modelu we/wy?


Dlaczego musimy oddzielić klasy, które mają różne funkcjonalności? Na przykład, dlaczego powinniśmy oddzielić klasę samochodu od klasy lakieru. Jaka byłaby za tym koncepcja OOD? Czy jest coś jeszcze poza ponownym wykorzystaniem kodu i modułowością?


title: Czas pracy niewrażliwy na dane wejściowe?

text: W Algorithms 4th Edition Roberta Sedgewicka i Kevina Wayne'a przeczytałem co następuje: > Nasza pierwsza jakościowa obserwacja dotycząca większości programów jest taka, że istnieje rozmiar problemu, który charakteryzuje trudność zadania obliczeniowego. > Zwykle rozmiar problemu jest albo rozmiarem danych wejściowych, albo wartością argumentu > wiersza poleceń. Intuicyjnie czas działania powinien wzrosnąć wraz z > rozmiarem problemu, ale pytanie brzmi, jak bardzo się zwiększa... i > Inną jakościową obserwacją dla wielu programów jest to, że czas działania > jest stosunkowo niewrażliwy na same dane wejściowe; zależy to przede wszystkim od > rozmiaru problemu. Jeśli ta zależność nie utrzymuje się, musimy podjąć kroki, aby > lepiej zrozumieć i być może lepiej kontrolować wrażliwość czasu > na dane wejściowe. Ale często się to sprawdza, więc teraz skupiamy się na celu lepszego > określenia ilościowego związku między rozmiarem problemu a czasem działania Moje pytanie brzmi: jeśli rozmiar danych wejściowych (rozmiar problemu programu) wzrasta, a tym samym wydłuża się czas jego działania, **dlaczego** czas działania programu miałby być stosunkowo **niewrażliwy** na dane wejściowe? Jestem zmieszany.


title: Czy należy unikać zmiennych sesji?

text: W przeszłości w dużym stopniu polegałem na zmiennych sesji, ale ostatnio stwierdziłem, że wiele z nich jest niepotrzebnych, używając zamiast tego takich rzeczy, jak parametry ciągu zapytania. Mój kolega odmawia użycia zmiennych sesji. Czy jest to realistyczny cel i czy z powodów praktycznych należy unikać zmiennych sesji? Czy można całkowicie uniknąć zmiennych sesji (z wyjątkiem plików cookie sesji, które umożliwiają logowanie) i czy dałoby to lepsze projekty? Niektóre powody, dla których mój kolega ich nie używa: Nieopisana natura zmiennych sesji Przekroczenie limitu czasu sesji powodujące utratę stanu Globalny zakres zmiennych sesji ponowne uruchomienie serwerów * Są niepotrzebne


title: Wybór odpowiedniej licencji na framework testowy

text: Skończyłem pierwszą działającą, publikowaną wersję frameworka testowego. Przed wydaniem chcę zastosować do niego odpowiednią licencję. Normalnie wybrałbym coś takiego jak GPLv3, ale tutaj nie jestem pewien. Jeśli poddam platformę testową na GPLv3, czy oznacza to, że użytkownicy nie będą mogli testować swoich komercyjnych aplikacji bez jednoczesnego objęcia ich GPL? Czy licencja taka jak MIT byłaby lepiej dopasowana? Właśnie rzuciłem okiem na kilka popularnych frameworków testowych (JUnit, Jasmine) i żaden z nich nie korzysta z GPL. **EDYTUJ** Zapomniałem wspomnieć, że projekt jest open source.


title: Na jaką nazwę powinienem ubiegać się o prawa autorskie do oprogramowania open source?

text: Kiedy chcę użyć licencji Apache 2.0 w moim projekcie, powinienem umieścić to w komentarzach do mojego kodu źródłowego: Copyright [yyyy] [nazwa właściciela praw autorskich] Licencjonowane na licencji Apache, wersja 2.0 („Licencja”); nie możesz używać tego pliku, chyba że zgodnie z Licencją. Kopię Licencji można uzyskać pod adresem http://www.apache.org/licenses/LICENSE-2.0 O ile nie jest to wymagane przez obowiązujące prawo lub pisemną zgodę, oprogramowanie rozpowszechniane na podstawie Licencji jest rozpowszechniane na PODSTAWIE „TAK JAK JEST”, BEZ JAKICHKOLWIEK GWARANCJI LUB WARUNKÓW, wyraźnych lub dorozumianych. Zapoznaj się z Licencją, aby zapoznać się z określonymi uprawnieniami i ograniczeniami dotyczącymi języka w ramach Licencji. Jaką nazwę należy wpisać w przypadku „[imię i nazwisko właściciela praw autorskich]”? Obecnie pracuję sam nad tym projektem, ale zamierzam wydać kod źródłowy, więc w niedalekiej przyszłości mogą być inni współpracownicy.


title: Jak nauczyć się Cloud Computing i Big Data w domu?

text: Chcę uczyć się Cloud Computing i Big Data w domu. 1. Czy można nauczyć się tych technologii na komputerze domowym? 2. Jakich technologii nauczyć się w Cloud Computing? 3. Jakich technologii nauczyć się Big Data (Hadoop)?


title: Jak przechowywać pamięć podręczną?

text: Dane w mojej witrynie są przechowywane w wielu różnych tabelach (przyjaciele, krewni itp.) I za każdym razem muszę odpytywać każdą tabelę. Ale wszystkie te dane są skoncentrowane na temacie. Np. dane dla osoby mają postać data[301]={ "pid"=>301, "znajomi"=>array(), "krewni"=>array(), "interests"=>array() } Więc ja chcesz przechowywać go w pamięci podręcznej w db (a więc pytać tylko o jedną tabelę). Ale jak mam przechowywać takie dane? czy powinienem używać obiektów BLOB?


title: OO sposób na zbieranie danych z wielu obiektów bez getterów

text: Piszę system, który ma wiele obiektów z danymi. Na przykład jeden obiekt ma atrybut nazwy użytkownika, inny ma datę, inny element koszyka itp. Tworzę obiekt, który generuje skrót MD5 na podstawie połączonego ciągu tych wartości. Na przykład „md5(nazwa użytkownika + data + numer_specjalny + identyfikator_koszyka)”. Sposób, w jaki zamierzałem to zrobić, polegał na przekazywaniu obiektu md5_generator innym obiektom z kolei, umożliwiając im wywołanie metody `add_x` (np. `add_username`) w generatorze w celu dodania ich określonej części danych. Pozwala to uniknąć wyciągania danych z każdego obiektu, czego chcę uniknąć. Zastanawiam się, czy to najlepszy pomysł, czy brakuje mi jakiegoś prostszego wzorca OO?


title: Czy konieczne jest zapamiętanie kodu?

text: Jestem nowym programistą, który właśnie został zatrudniony w dużej firmie. Nie wiem jak, ale chyba są zdesperowani. Jednak jestem dobrze zorientowany w HTML5/CSS3, chociaż wszystko się zmienia i pojawiają się nowe rzeczy, a ja nadążam za jak najwięcej. Ale ta praca wymagała ode mnie ręcznego kodowania Javascript, znajomości Jquery i Ajax. Byłem trochę narażony na to, ale nie jestem pewien, czy umiem ręcznie kodować Javascript. Moje pytanie brzmi, czy konieczne jest zapamiętanie wszystkiego, co jest związane z JavaScriptem, czy jest kilka kluczowych rzeczy, które powinienem wiedzieć, jak ręcznie kodować, ponieważ patrząc na kod javascript wydaje się, że jest wiele linii kodu! Proszę, wskaż mi właściwy kierunek.


title: Wydajny sposób porównywania drzew scenograficznych

text: Projektuję system wykresów scen, w którym wymagane jest porównanie dwóch drzew. Na drzewach znajdują się pojedyncze obiekty, każdy z różną liczbą dzieci; i mają korzeń. Np.: Rodzic: Scena, Dzieci: Bullet1, Bullet 2, Player Jaki jest dobry sposób na porównanie dwóch takich drzew? Używam C++ dla kodu. Również to pytanie jest pochodną tego pytania


title: Bloki JavaScript na stronach internetowych

text: Próbuję znaleźć najlepsze wzorce użycia javascriptu w moich witrynach, a robiąc to, patrzę na kod źródłowy niektórych witryn (meetup.com, facebook.com itp.). Jedną rzeczą, która rzuca mi się w oczy, jest fakt, że te witryny wydają się kompresować cały swój JavaScript i umieszczać go na rzeczywistej stronie, zamiast używać `<script src="...." type="text/javascript">` Moje pytania: 1: Jak kompresują (lub jak można skompresować) javascript? Czy powinienem używać YUIcompress przy każdym wywołaniu strony? 2: Jaka jest korzyść z robienia rzeczy w ten sposób, zamiast importowania oddzielnych skryptów? Myślę, że oddzielne skrypty przyspieszyłyby ładowanie samej strony. Dziękuję


title: GCC: lista montażowa dla IA64 bez maszyny Itanium

text: Muszę spróbować następującej rzeczy: Chciałbym skompilować kilka prostych przykładów kodu C i zobaczyć listing montażu wygenerowany przez GCC dla architektury IA64, tj. Chcę po prostu uruchomić GCC z przełącznikiem -S i zobaczyć wynikowy plik .s. Nie mam komputera Itanium, więc aby zrobić to sam, prawdopodobnie potrzebuję cross-kompilującej wersji GCC zbudowanej dla x86 RedHat. Nie interesuje mnie pełna kompilacja krzyżowa, co oznacza, że w ogóle nie muszę generować plików binarnych. Najprostszym sposobem byłoby oczywiście znalezienie komputera Itanium z GCC i po prostu wypróbowanie go tam. Niestety nie mam dostępu do żadnego. Inną opcją jest zbudowanie cross-kompilującej wersji GCC na moim RedHat, ale najwyraźniej jest to spore przedsięwzięcie dla kogoś, kto wcześniej tego nie robił (zakładam, że fakt, że potrzebuję tylko wyjścia .s, nie ułatwia tego) . Jakie są inne opcje, jeśli w ogóle? Może istnieje jakiś rodzaj frontu internetowego do kompilatora Itanium GCC w sieci (coś jak Comeau Online lub ideone.com, ale z wyjściem .s)? Coś jeszcze? Byłbym wdzięczny za każdą pomoc.


title: Dlaczego wielu twórców stron internetowych używa języka programowania Java do tworzenia stron internetowych?

text: Znam wiele języków programowania, które można wykorzystać do tworzenia stron internetowych, takich jak PHP, ASP itp., ale dlaczego wielu programistów internetowych używa języka programowania java do tworzenia stron internetowych?


title: Dlaczego Haskell nie jest w stanie zoptymalizować nieskończonych list?

text: Powiedzmy, że masz listę „l = [0, 2..]” i chcesz uzyskać „n” liczbę, gdy „n” jest dość duże, powiedzmy „n=123456789”. Więc wołasz `l!! 123456789". Na moim komputerze powoduje to „brak pamięci”. Dlaczego więc Haskell nie jest w stanie zdać sobie sprawy, że liczba pod indeksem `n` to `2n` i wykonać połączenie takie jak `l !! 1230981237` trywialne? Lub bardziej ekstremalny przykład, `[1..] !! 123456789". Czy Haskell nie powinien być w stanie uświadomić sobie, że każda liczba w `[1,1..]` to `1`?


title: Szeroko korzystałem z bibliotek Apache Commons. Mam teraz opublikować moją aplikację (non-profit). Czy jest coś, o co powinienem się martwić?

text: Opracowałem program Java do celów akademickich (non-profit, non-open source). W tym procesie intensywnie korzystałem z wielu wspólnych bibliotek Apache. Program ma być teraz udostępniony w sieci, więc zastanawiałem się, jakie powinny być moje środki ostrożności. Mój program będzie (najlepiej) składał się z jednego pliku .jar, zawierającego wszystkie pliki .jar apache commons (nie modyfikowałem ich w żaden sposób). Czy opisane podejście wystarczy? Czy też muszę podjąć dalsze kroki, aby nie popełnić wykroczenia? Dziękuję


title: Konwersja 'char*' na 'char'. Czy poprawnie przekazuję tę tablicę?

text: Więc mój profesor CS dał całej klasie proste zadanie. „Napisz funkcję rekurencyjną, która zamieni kolejność sekcji w tablicy znaków”. Pomyślałem sobie: „Spokojnie. Skończę to za jakieś 5 minut i zabiorę się do pracy domowej z Triga, zanim wyjdę”. Tak się nie stało. Godzinę później profesor i ja zastanawiamy się, co u licha dzieje się nie tak. #include<iostream> void swap(char charList, int start, int stop); int main() { char mojaLista[] = {'a', 'b', 'c', 'D', 'E', 'F', 'g', 'h', 'i', 'j' }; rozmiar wewnętrzny = 9; printCharList(mojaLista, rozmiar); swap(mojaLista, 3, 5); //<--- Wygląda na to, że to wywołanie nie podoba się return 0; } void swap(char charList[], int start, int stop) { char temp if(start < stop) { temp = charList[stop]; charList[start] = charList[stop]; Listaznaków[stop] = temp; swap(ListaZnaków, start+1, stop-1); } else std::cout << "start > stop\n"; } Kod jest głupio prosty, więc możesz sobie wyobrazić moje zmieszanie, gdy odmówił kompilacji. Ciągle wyświetla komunikat o błędzie sugerujący, że próbuję przekonwertować wskaźnik na znak, ale jestem prawie pewien, że nic takiego nie zrobiłem. Jestem pewien, że problem jest tuż przed moją twarzą, ale nie udało mi się go znaleźć. Czy możesz pomóc facetowi?


title: Architektura do pisania dodatków do oprogramowania o zamkniętym kodzie źródłowym

text: obecnie projektuję dodatek do narzędzia do modelowania Enterprise Architect. Ogólna architektura pokazana jest na poniższym obrazku. ![Ogólna architektura dodatku](http://i.stack.imgur.com/PoJaJ.jpg) W zasadzie każda akcja, na którą dodatek może reagować, jest wyzwalana przez PreDefinedEvents, dla których dodatek może udostępniać funkcje zwrotne . Te funkcje zwrotne są punktem wyjścia do budowania dowolnej aplikacji, którą ktoś chciałby umieścić na szczycie EA. Dostęp do Modelowej Bazy Danych (plik .mdb) można uzyskać poprzez API (wykorzystujące algorytmy o zamkniętym kodzie źródłowym) lub poprzez dostęp bezpośredni, co może oczywiście powodować niespójności i nie jest bezpieczne przed zmianami struktury DB. Obecne podejście z poprzednich projektów polegało na budowaniu klas monolitycznych o nazwie EA_XXX_Utilities zawierających ogromną ilość metod statycznych. Wszystkie te metody otrzymują jako argument odwołanie do repozytorium modelu, które jest przechowywane w zamkniętym źródle i pracują z nim. Uważam, że takie podejście nie jest zbyt przydatne, jeśli chodzi o konserwowalność i rozszerzalność, które będą miały wysoki priorytet w przyszłych projektach, dlatego staram się znaleźć najlepszy sposób, który pozwoli mi spełnić wymagania pod kątem tych aspektów jakościowych. Każde wymaganie zasadniczo składa się z dwóch części: * modyfikowanie modelu bazowego * prezentowanie części modelu w niestandardowy sposób To pachnie dla mnie rodzajem architektury MVC, ale moim głównym problemem jest to, że jeśli przechowuję referencję gdzieś w repozytorium modeli w mojej aplikacji musiałbym jakoś otrzymywać powiadomienia o wszystkich zmianach, które algorytmy zamkniętego źródła robią w bazie danych. Ale nie wszystkie z nich są przekazywane do dodatku, więc w pewnym momencie model przechowywany w dodatku stanie się niespójny. Prowadzi to do pytania: **Jak mogę zaprojektować dodatek, aby w ogóle miał w sobie jakąś architekturę i jeszcze lepiej spełniał aspekty jakościowe?**


title: Metodyka programowania - najlepszy sposób na wyższy poziom?

text: Ok, więc jestem w punkcie, w którym myślę, że mam już podstawy. Chciałbym myśleć, że dopiero zaczynam być deweloperem średniozaawansowanym. Więc jak mogę tutaj awansować? Wydaje mi się, że osiągnąłem swój próg, ale naprawdę chcę go przełamać i iść naprzód, robić bardziej szalone rzeczy (dla kontekstu mówię o programowaniu). Jaka byłaby więc najlepsza strategia, aby to osiągnąć? Pracuję nad wieloma własnymi projektami pobocznymi (jestem studentem). Jak mam podejść do nauki programowania od tego miejsca? To, co obecnie robię, to, jeśli nie jestem w stanie zrozumieć, jak rozwiązać problem, Google lub SO, znaleźć odpowiedź, zmodyfikować ją zgodnie z wymaganiami i użyć. Czy to jest właściwa droga? Czy jest lepszy sposób? Jak mam się uczyć o nowych koncepcjach, nowych zajęciach itp. w zorganizowany sposób, który nie obciąża mojego mózgu? Wiem, że to praktyka, praktyka, praktyka, ale pytanie brzmi, co ćwiczyć? Tyle i tylko tyle mogę zrobić. Podziel się swoją wiedzą! PS: Moją podstawową dziedziną jest Java, więc oznaczyłem ją również w celu uzyskania konkretnych porad. **EDYTUJ** : Jak powiedziałem, jestem studentem, NIE specjalizuję się w CSE, więc nie mam żadnych klientów ani „wymagań” per se. Więc jakie są najlepsze strategie rozwoju własnych projektów? Zrealizowałem kilka projektów i wiele się od nich nauczyłem, ale czy istnieje przewodnik po standardach lub konwencjach dotyczących projektów? Jak ustrukturyzować moje projekty? Jak je zbudować efektywnie?


title: Czy JSP Expression Language zapewnia bezpieczeństwo typu, takie jak skryptlety w środowisku Eclipse IDE?

text: Prawie wszędzie można przeczytać, że należy używać EL zamiast skryptów w JSP. I **Zgadzam się, że nie powinieneś używać żadnego kodu JAVA w JSP z wyjątkiem wywoływania metod pobierających na obiektach modelu**. Jest to dla mnie dość oczywiste i nie potrzebuję tutaj żadnych wyjaśnień. Ale jest jedna rzecz, której naprawdę nie mogę zrozumieć, to brak obsługi EL w Eclipse IDE. Zacznijmy od porównania kodu. Pierwszy przykład EL: ${user.name} ${user.surname} A teraz przykład wyrażenia scriptlet/JSP: <jsp:useBean id="user" class="com.mycompany.User"> <%= user.getName () %> <%= user.getSurname() %> </jsp:useBean> Wyraźnie widać, że EL jest bardziej elegancki. Jednak Eclipse nie zapewnia żadnej obsługi autouzupełniania ani refaktoryzacji dla EL. A w przypadku wyrażeń JSP działa jak urok. Jeśli usuniesz metodę getName() z klasy Java, walidator JSP wyświetli błąd podczas kompilacji. Jeśli zmienisz nazwę metody, wszystkie połączone pliki JSP zostaną automatycznie zaktualizowane. Co więcej, nawet jeśli szukasz odwołań do metody getName(), Eclipse pokaże wszystkie wywołania w plikach Java/JSP (pod warunkiem, że użyłeś wyrażeń/skryptletów JSP). Żadna z tych funkcji nie jest dostępna dla EL. Niektórzy programiści mogą powiedzieć, że tak naprawdę ich to nie obchodzi, a składnia EL jest dla nich znacznie lepsza, kropka. Ale pracuję z dość skomplikowanym kodem (którego nie napisałem) w moim obecnym projekcie i uwierz mi, że refaktoryzacja obiektów EL/modelu to koszmar. Istnieje wiele obiektów DTO rozszerzających i tworzących inne obiekty DTO, które są używane w wielu widokach JSP. Każda zmiana jest trudna, ponieważ nie mogę stwierdzić w czasie kompilacji, czy niczego nie zepsułem. Opierając się na tym doświadczeniu, po prostu nie mogę zrozumieć, jak ktokolwiek mógłby zasugerować użycie EL zamiast wyrażeń JSP. Proszę, powiedz mi, że czegoś brakuje i że użycie wyrażeń JSP jest poprawne (w moim przykładzie) lub że istnieje sposób na włączenie wszystkich zalet korzystania z bezpieczeństwa typów z EL. EDIT: Wiem, że IntelliJ ma lepsze wsparcie dla JSP, ale najpierw chciałbym skupić się na Eclipse. Mam nadzieję, że nadal jest kilka osób pracujących nad projektami JSP w Eclipse/Spring Tool Suite.


title: Jak uniknąć ciągłego wpadania w te same problemy?

text: Ciągle napotykam te same problemy. Problem jest nieistotny, ale fakt, że ciągle na niego wpadam, jest kompletnie frustrujący. Problem zdarza się tylko raz na 3-6 miesięcy, kiedy wygaszam nową iterację projektu. Za każdym razem prowadzę dziennik, ale spędzam co najmniej dzień lub dwa w każdej iteracji, próbując rozwiązać problem. Jak wy nie popełniacie ciągle tych samych błędów? Próbowałem dziennika, ale najwyraźniej nie działa dla mnie. * * * [Edytuj] Jeszcze kilka szczegółów na temat problemu: Za każdym razem, gdy tworzę nowy projekt do przechowywania plików, importuję konkretną bibliotekę. Biblioteka jest biblioteką C++, która importuje `glew.h` i `glx.h` GLX redefiniuje `BOOL` i nie jest to koszerne, ponieważ `BOOL` jest słowem kluczowym dla ObjC. Miałem poprawkę, kiedy ostatnio przez to przechodziłem. I `#ifndef` nagłówek w bibliotece, aby wykluczyć GLEW i GLX, i wszystko działało jak hunky-dory. Tym razem jednak robię to samo, używam tego samego bloku `#ifndef`, ale teraz powoduje to masę błędów. Wracam do starego projektu i działa. Nowy projekt bez pracy. Wygląda na to, że robi to za każdym razem, a moje rozwiązanie za każdym razem jest nowe z jakiegoś powodu. Wiem, że `#defines` i `#include` są jednymi z najtrudniejszych obszarów C++ (i wielojęzyczności z Objective-C), ale _Miałem to w pracy_, a teraz tak nie jest.


title: Dlaczego Java jest lingua franca w tak wielu instytucjach?

text: **EDYTUJ: To pytanie na początku wydaje się atakować Javę i myślę, że w tym momencie jest trochę. Jednak ważniejszym punktem, który staram się poruszyć, jest to, dlaczego wybrany jest jeden język, jako że jedynym celem jest rozwiązanie wszystkich problemów. Java jest tą, której używam, więc to jest ta, w którą musiałem tu pobić, ale nie celowo zgrywam nową Javę :)** Nie lubię Javy w większości środowisk akademickich. Nie mówię, że sam język jest zły – ma kilka niezwykle pożądanych aspektów, a przede wszystkim możliwość działania bez rekompilacji na większości platform. Nie ma nic złego w używaniu języka Twojej następnej aplikacji ^TM. (Nie jest to coś, co osobiście zrobiłbym, ale to więcej, ponieważ mam z tym mniejsze doświadczenie, a nie jest to kiepski projekt) Myślę, że to marnotrawstwo, że kursy CS na wysokim poziomie są nauczane przy użyciu Javy jako języka. Zbyt wielu moich kolegów nie może cholernie programować, ponieważ nie wiedzą, jak pracować w świecie, w którym nie są zbierane śmieci. Zasadniczo nie rozumieją maszyn, dla których programują. Kiedy ktoś może pracować poza światem zbieranym śmieci, może pracować w jednym, ale nie odwrotnie. GC to narzędzie, a nie kula. Ale sposób, w jaki jest używany do nauczania studentów informatyki, jest jak kula. Informatyka nie powinna prowadzić całego pakietu kursów dostosowanych do jednego języka. Uczniowie wychodzą z przekonaniem, że każdy dobry projekt jest idiomatycznym projektowaniem w Javie i że projektowanie zorientowane obiektowo jest JEDNYM PRAWDZIWYM SPOSOBEM, KTÓRY JEST JEDYNYM SPOSOBEM, KTÓRE MOŻNA ZROBIĆ. Inne języki, przynajmniej jeden z nich niebędący językiem śmieciowym, powinny być używane w nauczaniu, aby umożliwić absolwentowi lepsze zrozumienie maszyn. Wstyd, że ktoś z doktoratem CS z szanowanej instytucji nie potrafi zaprogramować wyjścia z papierowej torby. Co gorsza, kiedy rozmawiam z tymi profesorami CS, którzy naprawdę rozumieją, jak działają rzeczy, dzielą się takimi uczuciami, jak to, że robimy krzywdę naszym studentom, robiąc wszystko w Javie. (Zauważ, że powyższe byłoby tak samo, gdybym zastąpił go jakimkolwiek innym językiem, generalnie używanie jednego języka jest problemem, a nie samej Javy) W sumie czuję, że nie mogę już dłużej szanować żadnego rodzaju stopnia - kiedy Nie widzę ludzi wokół mnie, którzy potrafią zaprogramować wyjście z problemów z fizzbuzzem. Dlaczego/jak to się stało?


title: Czy jest jakiś powód, aby nie pozwolić swojej grupie programistów na instalowanie dodatków Visual Studio innych firm?

text: Czy istnieje jakiekolwiek ryzyko związane z zezwoleniem zespołowi programistów na instalowanie dowolnych dodatków programu Visual Studio? Czy to dobry pomysł, aby dać im tę wolność?


title: Czy paradygmat funkcjonalny nie jest zbyt rozbieżny z podstawowym sprzętem, aby był ogólnie wydajny?

text: Zainspirowany pytaniem od SO: http://stackoverflow.com/questions/6623391/how-to-gain-control-of-a-5gb-heap-in-haskell Może to być długa debata na temat licznych zalet i wad FP , ale na razie chciałbym zawęzić zakres do _głównej wydajności_ FP na nowoczesnym sprzęcie. Teza: > Paradygmat funkcjonalny implikuje niezmienność i bezstanowość (?), ale > sprzęt, na którym uruchamiamy programy funkcjonalne, to stanowe automaty skończone. > Tłumaczenie programu „czysto funkcjonalnego” na „sprzęt stanowy” > pozostawia niewielką kontrolę programiście, przynosi narzut (?) i > ogranicza wykorzystanie możliwości sprzętowych (?). Czy mam rację w kwestionowanych wypowiedziach? Czy można udowodnić, że FP powoduje / nie pociąga za sobą głównych spadków wydajności w nowoczesnej architekturze ogólnego przeznaczenia? **EDYTUJ:** Jak już wspomniałem w odpowiedzi na niektóre komentarze, pytanie nie dotyczy wydajności i szczegółów implementacji. Chodzi o **obecność lub brak narzutu głównego** , który może przynieść uruchomienie FP na automatach stanowych.


title: Wewnętrzny interfejs API aplikacji

text: Obecnie buduję małą aplikację Pythona `CLI` (interfejs wiersza poleceń) z ambicjami. W pierwszej fazie rozwoju skoncentrowałbym się na tym, aby działał tylko przez interfejs `CLI`, ale w drugiej fazie skoncentruję się na tym, aby działał przez `GUI`. Aby uniknąć wielu refaktoryzacji funkcjonalności i utrzymać obie wersje działające na podobnej bazie kodu, myślałem o stworzeniu własnego wewnętrznego API do obsługi przetwarzania. IE: * Ładowanie pliku konfiguracyjnego * Zapisywanie pliku konfiguracyjnego * Logowanie informacji (poprzez `CLI` lub pliki logów) * A ogólny proces aplikacji Zastanawiałem się od czego zacząć i o czym pamiętać podczas budowania wewnętrznego API? Obejrzałem już następującą prezentację : Jak zaprojektować dobre API i dlaczego to ma znaczenie lub i przeczytać wersję tekstową ** Przez `API` rozumiem : Jeśli chcę załadować konfiguracje, musiałbym tylko zrobić coś w rodzaju ` config = api.load.config(ścieżka/do/konfiguracji/pliku)` i otrzymałbym `słownik` (lub `obiekt`, jeszcze do ustalenia) bez konieczności wykrywania typu pliku i czy plik istnieje, ta część byłaby obsługiwana przez wewnętrzny framework `API`


title: Czy ROA to specyficzna forma SOA?

text: Czytałem gdzieś, że ROA (Architektura zorientowana na zasoby) to SOA (Architektura zorientowana na usługi) z dodanymi określonymi ograniczeniami. SOA to abstrakcyjna koncepcja łączenia oddzielnych części oprogramowania, a ROA to implementacja SOA z zastosowanymi do niej wszystkimi ograniczeniami usług RESTful: > SOA = koncepcja > > ROA = koncepcja + szczegółowe szczegóły dotyczące implementacji Również miałem swój udział postów mówiących, że ROA różni się od SOA, a następnie po prostu powróć do stwierdzeń takich jak „ROA to REST” i „SOA to SOAP” i prezentujących te same, mniej lub bardziej trafne porównania i różnice między SOAP i REST. Aby wyjaśnić moje zamieszanie: **Czy ROA to specyficzna forma SOA?**


title: GUI oparte na przeglądarce dla aplikacji Pythona

text: Chcę utworzyć graficzny interfejs użytkownika oparty na sieci Web/przeglądarce dla aplikacji Python wiersza polecenia. Celem jest wykorzystanie technologii HTML/JS do stworzenia tego GUI. Jak sama aplikacja, musi działać w systemach Linux i Windows, a interfejs będzie dostępny tylko z hosta lokalnego (nie wystawionego na Internet). GUI będzie zawierać od 5 do 10 stron. Nie chcę tradycyjnego graficznego interfejsu użytkownika na pulpicie, który zawiera HTML/JS, ale tylko kilka plików html i jakiś kontroler między nimi a aplikacją. Chcę również skorzystać z programowania asynchronicznego (jak ajax), aby móc ładować i drukować dane w GUI bez odświeżania całej strony. Prawdopodobnie użyłbym do tego jQuery i kilku innych rzeczy. Jak poleciłbyś to zaprojektować? Wydajność nie jest tutaj kluczowa, liczę raczej na niezawodność, przenośność i prostotę. Zastanawiam się nad użyciem lekkiego serwera / frameworka python HTTP (takiego jak CherryPy), a może później systemu szablonów Pythona (na początku będzie to tylko kilka stron). **EDYTUJ:** Szukam pomysłów/rekomendacji, jak to zbudować, a nie alternatyw dla przeglądarkowego/internetowego GUI.


title: Czy lepiej jest, aby programiści C uczyli się Flasha, niż zatrudniać ludzi od Flasha?

text: W zeszłym roku mój dział opracował gry internetowe i potrzebował Flasha. Trudno było sobie z tym poradzić. Faceci z Flasha nie pasowali bez względu na umiejętności czy popularność w biurze. Może to uprzedzenie z czasów AS 2.0, albo programiści C robią różne rzeczy w moim dziale. Nie rozumiem! **PRZYKŁAD** Zatrudnili ZŁEGO Flasha, który używał Tweenera i Klatek Kluczowych (nienawidzili go). Następnie zatrudnili GOOD Flash Guy, który był ekspertem w AS 3.0 i przestrzegał najlepszych standardów OOP (lubili go). Wynik był taki sam, programiści C nadpisali cały ich kod, nawet kod GOOD Flash Guya. **PYTANIE** **Czy lepiej jest, aby programiści C uczyli się Flasha, niż zatrudniać facetów od Flasha?** Bez obrazy dla facetów od Flasha, próbuję to zrozumieć na poziomie zarządzania projektami. Dziękuję,


title: Sugestia dla programisty spoza CSE

text: Z powodu problemów finansowych nie mogłem wyjechać na CSE w moim kraju i musiałem zadowolić się dyplomem BCIS z wyróżnieniem. Teraz, po pewnym czasie, gdy chcę zająć wyższe stanowisko w tworzeniu oprogramowania, pytają mnie o algorytmy i podstawy, których brakowało mi na uniwersytecie. To wpływa na moje szanse na wybór i nie mogę sobie na to dłużej pozwolić. Moje pytanie brzmiałoby, że to, co sugerowałbyś takiemu jak ja, aby zrobiło „podstawy” bez żadnego uniwersytetu lub instytutu edukacyjnego, np. książki, nauka C++ itp.? Wszelkie sugestie (w tym -ve) są mile widziane i doceniane.


title: Kolumna anty tożsamości

text: Niedawno natknąłem się na kod, który generuje wartość _identity_ dla klucza: DECLARE @ID INT; WYBIERZ @ID = MAX(ID) + 1 FROM Osoba; INSERT INTO [Osoba] ([ID], [Imię], [Nazwisko]) WARTOŚCI (@ID, @Imię, @Nazwisko); Zwróciłem na to uwagę współpracownika, który twierdził, że nieużywanie wbudowanego pola autoinkrementacji jest całkowicie rozsądnym podejściem do projektowania baz danych, aw niektórych kręgach jest najlepszą praktyką. Racjonalnie dla współpracowników jest to, że daje to większą kontrolę nad wartościami i pozwala łatwiej manipulować danymi. Mógłbym tylko odpowiedzieć, wskazując, że po prostu wydaje się głupie, aby zaimplementować własną wersję funkcji obsługiwanej przez serwer. A jeśli ktoś zdecyduje się użyć innej metody wstawiania rekordu, jest bardzo podatny na błędy. Czy naprawdę istnieją jakieś dobre powody, aby nie używać kolumny Identity, gdy wszystko, czego potrzebujesz, to sztuczny klucz w tabeli?


title: VS2010 SP1 i Resharper - migoczący edytor?

text: Mam VS2010 (Ultimate) plus Resharper, a od SP1 zauważyłem regularny i naprawdę irytujący błąd, w którym zakładka edytora, nad którą pracuję, tymczasowo znika, nagle pojawiając się sekundę lub dwie później. Czy ktoś inny zauważył coś podobnego? Czy jest to problem z Resharperem? Doceń każdą radę.


title: Warunki wyścigu Ajax

text: Czy istnieje wzorzec lub standardowy sposób radzenia sobie z warunkami wyścigu Ajax? Weźmy następujący przykład. Masz dwa stoły. Kliknięcie wiersza w tabeli 1 usuwa dane z bazy danych, a następnie aktualizuje tabelę 2 (która teraz pokazuje wszystkie wiersze tabeli 1 minus wiersz, który został kliknięty). Jeśli ktoś klika kilka wierszy szybko po sobie, może pojawić się scenariusz, w którym tabela 2 nie aktualizuje się, ponieważ wszystkie kliknięcia mają wpływ na problemy z czasem/opóźnieniem. Jaki może być dobry sposób na podejście do tego problemu? Myślałem o użyciu możliwej kolejki, ale to niweczy cel robienia tego asynchronicznie. Jednak nadal miałbym tę zaletę, że interfejs użytkownika nie blokuje się.


title: Śledzenie tłumaczeń w zlokalizowanym oprogramowaniu

text: Stworzyłem i utrzymuję aplikację na Androida typu open source. Ostatnio ktoś zaproponował przetłumaczenie mojej aplikacji na kilka innych języków. Jednocześnie trwa rozwój aplikacji, która czasami może dodawać zasoby tekstowe, które należy przetłumaczyć. Jak mogę zapewnić, że dodatkowe zasoby tekstowe są tłumaczone z jak najmniejszym bólem? W szczególności tłumacz nie wydaje się mieć bardzo minimalnych umiejętności technicznych. Myślę, że nauczenie go kontroli wersji nie będzie zbyt pomocne. Również poproszenie go o ręczne przeczesanie zaktualizowanych zasobów w języku angielskim w poszukiwaniu zmian może być podatne na błędy. Wszelkie sugestie byłyby bardzo mile widziane.


title: Jakie są najważniejsze rzeczy, które należy wiedzieć o UML?

text: Chcę, aby moje bazgroły dotyczące projektu i zachowania programu były bardziej uproszczone i miały wspólny język z innymi programistami. Spojrzałem na UML i _w zasadzie_ wydaje się, że to jest to, czego szukam, ale wydaje się, że jest to przesada. Informacje, które znalazłem w Internecie, również wydają się bardzo nadęte i akademickie. Jak mam rozumieć UML w zwykłym języku angielskim, na tyle, aby móc wytłumaczyć to moim kolegom? Jakie są kanoniczne zasoby do zrozumienia UML na poziomie podstawowym?


title: Jakie są granice wydarzeń domenowych?

text: Jak rozumiem, zdarzenia domenowe oznaczają luźne sprzężenie i rozdział odpowiedzialności. W porządku. Ale jeśli zdarzenia domeny mogą przekraczać granice agregacji, pojawia się pytanie, jak zagwarantować, że wszystkie zainteresowane podmioty zostaną zmaterializowane z pamięci trwałej? Na razie wygląda na to, że zdarzenia mogą jedynie bąbelkować poprzez agregację do katalogu głównego lub być obsługiwane przez usługi uruchamiające skrypty w transakcji. Uważam, że w przypadku listu zagubiono specyfikę kierowania wydarzenia. Wciąż na nowo Moje pytania wynikają z faktu, że cały model nie żyje w pamięci.


title: Obserwowanie postępu systemu rozproszonego

text: Dla systemu rozproszonego wymagane jest obserwowanie postępu mniejszych aplikacji na komputerach rozproszonych (runtime 5 - 20 minut). Istnieje strona internetowa, która w tej chwili pokazuje tylko listę tych mniejszych aplikacji (zwanych zadaniami), ze stanem każdej z nich, np. „przygotowywanie”, „uruchamianie”, „zakończono”. W interfejsie webowym administrator widzi: * nazwę * stan * czas rozpoczęcia * parametry wywołania z dowolnego komputera w sieci, ewentualnie dla całego systemu. Każda z właściwości jest przechowywana w bazie danych, więc każda zmiana stanu prowadzi do wywołania zapisu do bazy danych. Takich prac może być tysiące na raz. **Opis systemu rozproszonego:** Centralne komponenty, obsługiwane tylko w jednej lokalizacji: * Serwer bazy danych (przechowujący wyniki zadań do uruchamiania statystyk, przegląd zadań uruchomionych w ciągu ostatnich trzech miesięcy itp.) * Serwer aplikacji (glassfish, java, uruchamia oprogramowanie centralnego serwera) Rozproszone komponenty, każda strona ma co najmniej jeden, połączony przez internet / obszar WAN: (prawdopodobnie około 20 stron, każda ma 1..4 Kontrolery zadań, każdy kontroler zadań uruchamia równolegle około 20 zadań) * Komponent kontrolera zadań (windows, c#, wcf, uruchamia i obserwuje małe zadania) * Małe aplikacje uruchamiające zadania, uruchamiane przez kontroler zadań (zadania) Tak więc, dla niejasnej oceny: 20 lokalizacji * 4 kontrolery zadań * 20 zadań = 1600 równoległych zadań, z których każde uruchamia się od 0 do 100 procent średnio w około 5 minut, co skutkuje aktualizacją postępu co 3 sekundy. dając 533 aktualizacje postępu na sekundę (przez internet) Teraz klient chce widzieć coś w rodzaju paska postępu dla każdego z tych zadań. Na początku myślałem, że może to prowadzić do dużego ruchu w sieci i ogromnego ruchu na serwerze bazy danych. Nie wydaje mi się, żeby zapisywanie postępów takich jak 1%, 2%, 3% do bazy danych było dobrym pomysłem. Czas wykonywania tych zadań nie jest łatwy do oszacowania (więc jest wystarczająco bliski rzeczywistemu wynikowi), ale każde zadanie może bardzo dobrze powiedzieć, jakie są jego postępy. **Jakie byłoby dobre podejście architektoniczne do obserwowania postępu ewentualnie tysięcy tych mini-prac?** (Proszę zwrócić uwagę, że podana jest infrastruktura mieszana. Istnieje ograniczenie, że system będzie na niej zbudowany. Tak więc: Centralna rybka szklana + java i na witrynę Windows + WCF + C#) W tej chwili myślę, że każdy kontroler zadań może aktualizować postęp wszystkich zadań, które kontroluje co 10 sekund na raz. Czy byłoby to akceptowalne podejście?


title: Dobre książki o tym, jak zarządzać sobą i rozwiązywać zadania programistyczne?

text: Wydaje się, że istnieje wiele książek o programowaniu na temat stylu kodowania i najlepszych praktyk, a potem oczywiście wiele książek o procesach organizacyjnych lub zespołowych, np. agile/scrum/kanban itp. Poszukuję książek omawiających proces i sposób rozwiązywania problemów programistycznych.


title: Sposoby dla początkujących programistów na ćwiczenie z C++

text: Więc właśnie skończyłem pierwszy semestr studiów. W moim wprowadzeniu do klasy programowania stworzyliśmy kilka bardzo interesujących ( _sarcasm_ ) aplikacji konsolowych. Jakieś sugestie dotyczące sposobów innych niż tylko bawienie się aplikacjami konsolowymi dla początkującego ucznia C++, aby poprawić?


title: Pytanie dotyczące projektowania API

text: Obecnie projektuję API i doszedłem do drobnego problemu projektowego i liczyłem na kilka innych opinii. Moja struktura adresu URL umożliwiająca dostęp do podstawowych danych z interfejsu API to: /nazwa_klienta/nazwa_aplikacji/nazwa_metody/. Zasadniczo każdy klient może mieć inny zestaw metod dla każdej aplikacji, więc podstawowa klasa aplikacji jest rozszerzana przez każdego klienta, jeśli plik istnieje. Moje pytanie dotyczy ograniczenia danych ściąganych za pomocą żądania GET. Czy liczba ograniczająca powinna być dołączona do adresu URL, czy jest to coś, co powinno być obsługiwane tylko przez żądanie POST? Czy to w ogóle powinna być opcja? Szukasz najlepszych praktyk w tym scenariuszu, dzięki.


title: Zadanie testowe: prawdziwe zadania czy nie?

text: Właśnie rozmawiałem ze współpracownikami na temat zadań testowych dla programistów. Czy moralnie właściwe jest proszenie programistów o pomocną pracę dla projektu w ramach zadań testowych, czy taka firma po prostu wykorzystuje kandydatów do pracy, aby wykonywać pracę za darmo? Czy to etyczne?


title: Czy TDD formalnie wykorzystuje testy czarnoskrzynkowe jako uzupełnienie testów jednostkowych?

text: Testy jednostkowe nigdy nie są idealne do przechwytywania funkcjonalności, szczególnie w niektórych częściach aplikacji (takich jak GUI), więc każdy potrzebuje pewnych testów czarnej skrzynki. **Czy TDD ma coś do powiedzenia na temat testów czarnoskrzynkowych?** Skoro nie mówi wiele, to czy może być prawdą, że pisanie testów jednostkowych jest zadaniem programisty, a funkcjonalne testy czarnej skrzynki należą do innej domeny, jak domena biznesu analityk czy dedykowany tester?


title: Test Doubles : Czy trafiają do "pakietów źródłowych" czy "pakietów testowych"?

text: Posiadam kilka obiektów dostępu do danych (DefaultPersonServices.class, DefaultAddressServices.class), które są odpowiedzialne za różne operacje CRUD w bazie danych. Kilka różnych klas korzysta z tych usług, ale ponieważ usługi wymagają nawiązania połączenia z bazą danych, nie mogę ich używać w testach jednostkowych, ponieważ trwają zbyt długo. Dlatego chciałbym stworzyć dla nich duble testowe i po prostu wykonać implementacje FakePersonServices.class i FakeAddressService.class, z których mogę korzystać podczas testów. Teraz wszystko jest w porządku (zakładam) ... ale moje pytanie dotyczy miejsca, w którym umieściłem test podwaja się. Czy powinienem trzymać je razem z domyślnymi implementacjami (czyli "prawdziwymi") implementacjami, czy powinienem trzymać je w odpowiednim pakiecie testowym. Domyślne implementacje znajdują się w **Pakietach źródłowych: com.company.data.services**. Czy powinienem zachować testowe duble również tutaj, czy raczej testowe dublety powinny znajdować się w **Pakietach testowych: com.company.data.services**?


title: iOS: Wersjonowane frameworki statyczne a podmoduły Git i dołączony kod

text: Od kilku lat buduję statyczne frameworki wspólnych API dla moich projektów iOS. Mogę zbudować uniwersalny plik binarny zawierający wszystkie architektury (i386, armv6, armv7) i opakować go w strukturę katalogów .framework. Następnie zapisałem to w katalogu opartym na wersji frameworka. Na przykład `..../myAPI/v0.1.0/myAPI.framework` Gdy już mam ten framework, mogę go łatwo dodać do projektu, a jeśli chcę uaktualnić wersję, po prostu zmień ścieżki wyszukiwania frameworka na później wersja. To działa, ale podejście jest bardzo podobne do tego, którego użyłbym w świecie Javy. Ostatnio czytałem o używaniu podmodułów Git i podprojektów statycznych frameworków w XCode 4. Zastanawiam się, czy moje obecne podejście jest czymś, co powinienem rozważyć, aby przejść na emeryturę i jakie są zalety/wady nowego podejścia. Jestem zmęczony dołączaniem kodu, ponieważ miałem już problemy w projekcie roboczym, który miał (efektywnie) wiele wersji API innej firmy. Jakieś opinie?


title: Integracja różnych oddziałów ze źródeł zewnętrznych w jedno repozytorium Mercurial

text: **Edytuj** : Jeszcze wyraźniej, gdy nagroda wkrótce wygaśnie: czy istnieje sposób na importowanie historii (pobieranie z innego SCM) bezpośrednio do określonej gałęzi za pomocą Mercurial? * * * Obecnie pracuję w firmie używającej Perforce i robię drogę dla rozproszonej kontroli wersji za pomocą Mercurial. Udało mi się zaimportować historię Perforce za pomocą **perfarce** (całkiem odpowiednia nazwa, śmieję się za każdym razem, gdy to widzę / mówię), jednak działa to tylko z jedną gałęzią na raz. Oto jak działa moja konfiguracja integracji P4: * Zasadniczo utwórz „klienta”, który jest rodzajem opisu tego, co będziesz stale aktualizować/wyrejestrowywać. Może to dotyczyć tylko jednego oddziału na raz (trunk lub inny). * Gdy to zrobisz, uruchom `hg clone p4://<serwer>/<nazwa_klienta>` * Przejdź do .hg/hgrc i umieść linię ścieżki perforce: `perforce = p4://<serwer>/<nazwa_klienta> ` * Pracuj normalnie z kodem pod mercurial, wykonaj `hg pull perforce` aby się zsynchronizować, `hg push` aby wyeksportować listę zmian To co chciałbym móc zrobić to mieć ścieżkę perforce na gałąź i wszystko działało w to samo repozytorium. Teraz pushowanie nie stanowi problemu, jednak jeśli wyciągnę historię z innej gałęzi, wyląduje ona w gałęzi domyślnej. Chciałbym móc zrobić coś takiego jak „hg pull perforce-R5” i wylądować w oddziale mercurial R5. Nawet jeśli nie mam historii scalania, byłoby wystarczająco słodko móc zachować historię oddziału. Istnieją również inne wtyczki do CVCS, które pozwalają zintegrować mercurial, ale AFAIK z subversion ma ten sam problem. Nie sądzę, że istnieje prosty sposób na zrobienie tego, ale tak długo, jak mógłbym zautomatyzować proces za pomocą kilku haków i skryptów w jednej maszynie Mercurial, byłoby to wystarczająco dobre. * * * **Edytuj** : Aby było trochę jaśniej: * Perforce **trunk** jest mapowany do **default** branch Mercurial * Perforce **R1** powinien być mapowany do **release- Mercurial 1** branch (tak samo dla R2, R3, itd.) * Kiedy powiem Mercurialowi, aby ciągnął z perforce (tj. `hg pull perforce`, gdzie "perforce" to nazwa ścieżki prowadzącej do klienta Perforce), powinien on ściągać pień Perforce do domyślnego Mercuriala. * Kiedy powiem Mercurialowi, aby ciągnął z perforce-R1 (tj. `hg pull perforce-R1`, gdzie "perforce-R1" jest ścieżką do klienta R1), powinien on przeciągnąć gałąź Perforce R1 do gałęzi "release-1" Mercurial . **TO JEST CZĘŚĆ, O KTÓRĄ Pytam**.


title: Jakie systemy operacyjne są używane w samolotach i w jakich językach programowania są one opracowywane?

text: Zastanawiałem się, czy ktoś wie, jaki jest system operacyjny używany w samolotach komercyjnych (powiedzmy Boeing lub Airbus). Jaki jest (preferowany) język programowania w czasie rzeczywistym? Słyszałem, że Ada jest używana w Boeingu, więc moje pytanie brzmi - dlaczego Ada? jakie są kryteria, jakie Boeing-faceci musieli wybrać ten język? (Myślę, że Java nie byłaby świetnym wyborem, gdyby dokładnie po starcie budził się śmieciarz).


title: Długoterminowa strategia wdrażania systemu zapewniania jakości?

text: Otrzymałem zadanie zaimplementowania niektórych testów QA w ogromnym istniejącym systemie. Zaczniemy od testów na poziomie systemu i możemy dodać testy jednostkowe, jeśli uznamy to za konieczne. Naprawdę nie wiem od czego zacząć. Zastanawiam się nad stworzeniem nowego projektu w głównym rozwiązaniu poświęconym w całości testom QA. Stamtąd dodam tylko testy NUnit na poziomie systemu, które mogą być uruchamiane automatycznie z tego projektu. Jak to brzmi? Chcę mieć pewność, że teraz podejmę właściwe decyzje, aby w przyszłości system zapewniania jakości nie był bałaganiarski i nadmiernie skomplikowany. Ponieważ będzie działał wraz z dużym systemem, spodziewam się, że również stanie się dużym systemem, co czyni go podatnym na nieporęczny bałagan w kodzie. Wszelkie sugestie byłyby świetne!


title: Jak sprawić, by sesja szkoleniowa była skuteczna?

text: W ostatnich miesiącach pracowałem nad projektem, a za dwa tygodnie odchodzę z firmy. Zaplanowałem 4-godzinną sesję szkoleniową w przyszłym tygodniu, aby przeszkolić moich kolegów (lidera zespołu i kolegów programistów) w zakresie tego projektu. Jeden z programistów napisał już w nim trochę kodu, więc nie zostawiam zespołu z zerową wiedzą, ale chciałbym, aby pozostali też byli ekspertami. Projekt ma kilka tysięcy linijek kodu, zawiera kilka koncepcji, które są nowe dla zespołu (takie jak ORM i IoC), a ze względu na swoją centralną rolę prawdopodobnie będzie mocno utrzymywany w przyszłości. Do tej pory napisałem dwie prezentacje na temat różnych modułów projektu, więc te prezentacje mogą być wykorzystane zarówno do bieżącej sesji, jak i do szkolenia programistów, którzy przyjdą do zespołu w przyszłości. Z Twojego doświadczenia, jak mogę sprawić, by ta sesja była przyjemna i skuteczna? Naprawdę chcę, aby ta aplikacja była dobrze utrzymywana, chciałbym pozostawić „dobrą spuściznę”, aby kod był utrzymywany w tym samym duchu, w jakim chciałem, aby był. Dziękuję!


title: Identyfikacja typu czasu pracy przy użyciu kompozycji

text: Mówi się, że programiści powinni przedkładać kompozycję nad dziedziczenie. Zastanawiałem się, czy RTTI można osiągnąć tak łatwo przy użyciu kompozycji.


title: Gdzie w projekcie usługi REST należy umieścić kod, który wywołuje API REST innej firmy?

text: Mój projekt jest zorganizowany w warstwach, takich jak * Konfiguracja * Kontroler * Usługa * Repozytorium * Domena Nasz kontroler REST znajduje się w warstwie Kontroler. Musimy połączyć się z innym API za pomocą wywołań REST i nie jestem pewien, czy powinienem zrobić nowy kontroler, czy zrobić to w warstwie usług. Mam zamiar zaimplementować wywołania REST za pomocą RestTemplate Springa. Sposób użycia naszego API jest następujący: * Wykonywane jest wywołanie REST, które przechodzi przez nasz punkt końcowy REST. * Nasz punkt końcowy REST wywoła API innej firmy (albo przez wywołanie innej metody kontrolera, albo metody usługi). * Następnie dokonamy konwersji między naszym formatem a formatem innej firmy * Następnie zwrócimy JSON naszego formatu z powrotem do klienta


title: Równoległe żądania PHP i stabilność sesji

text: Doświadczyłem wielu problemów, które wynikały z natury PHP żyjącego w granicach bezstanowego żądania HTTP, szczególnie biorąc pod uwagę asynchroniczne środowisko oczekiwane od nowoczesnych aplikacji internetowych. Mianowicie, regeneracja uchwytów sesji może spowodować samozniszczenie sesji, jeśli występują równoległe żądania. Ponadto, o ile żądanie nie zablokuje sesji na czas jej trwania, aktualizacje sesji na żądaniach równoległych mogą powodować konflikt i zostać zastąpione przez inne. Jeśli zablokują sesję, wymusza to serializację żądań. Co uważasz za najskuteczniejszą odpowiedź na ten problem? Czy po prostu z tym żyjesz i wdrażasz obejścia? Czy ostatecznie migrowałeś na inną platformę, która nie miała tej wady? A może istnieje rozwiązanie tego problemu w PHP, którego nie znam?


title: Przygotowanie do pytań do wywiadu związanych z algorytmem

text: Właśnie zdałem sobie sprawę, że niektórzy pracodawcy mogą zadawać pytania podczas rozmowy kwalifikacyjnej, które odnoszą się do jakiegoś złożonego algorytmu matematycznego. Wygląda na to, że odpowiadanie na te pytania jest umiejętnością samą w sobie. W końcu jestem całkiem dobry w tworzeniu algorytmów, gdy zajdzie taka potrzeba, takich jak algorytmy graficzne, ogólne rozwiązywanie problemów lub podstawowe dopasowywanie wzorców, ale nie jestem matematykiem. Problemy te wymagają zupełnie innego typu myślenia algorytmicznego, niekoniecznie przez większość programistów, więc gdzie mam rozwijać te umiejętności? Czy mogę przeczytać książkę na ten temat?


title: Ile bajtów mogę zmieścić w kodzie QR przy niskiej korekcji błędów?

text: Muszę zmieścić co najmniej 300 bajtów (lub znacznie więcej) w kodzie QR i myślę, że mogę to zrobić, mapując każdy bajt na powiązany znak ISO/IEC 8859-1 znajdujący się tutaj. Ponieważ z każdym bajtem (1-255) będzie skojarzony tylko jeden znak, mogę przetestować użyteczność tego pomysłu za pomocą tego demo (link do e-maila zawiera gęsty kod QR, o którym mówię). Ponieważ wiem, że rozdzielczość kamery odgrywa czynnik tutaj, między innymi, nie jestem świadomy, chciałbym dowiedzieć się, ile pojedynczych znaków mogę umieścić w kodzie QR, zanim napotkam problemy. Pomocne byłyby wszelkie wskazówki dotyczące rozmiaru lub rozdzielczości. Innym założeniem, jakie mam, jest to, że czytnik QR może odczytać każdy znak ISO/IEC 8859-1 i przekazać go do mojej aplikacji


title: Jak wybierać między różnymi bibliotekami open-source?

text: Ostatnio znalazłem wiele repozytoriów GitHub, które pozwoliłyby mi wykonać to samo zadanie. (W moim przypadku oceń czytelność ciągów tekstowych.) Zastanowiłem się, jakie są najlepsze praktyki dla programistów, aby wybierać między różnymi bibliotekami open-source, a w szczególności bibliotekami hostowanymi na GitHub? Statystyki GitHub użytkowników, którzy oglądają, oznaczają lub rozwidlają repozytorium, to jedna opcja, ale czy są inne?


title: Jak stworzyć automatyczną wiadomość e-mail w kilku językach (wieloczęściowy/alternatywny)?

text: Chcę wysyłać automatyczne e-maile do klientów, których języka nie jestem pewien. 90% to Francuzi i prawdopodobnie nie byliby w stanie czytać poczty w języku angielskim. Pozostałe 10% prawdopodobnie umiałoby czytać po angielsku, a wyraźnie nie po francusku. Nie wiem, jaki jest ich język. Zbadałem wieloczęściowy/alternatywny, który wyglądał obiecująco, dałem mailerowi kilka wariantów, a on wybiera najlepszy. ( patrz: http://www.ietf.org/rfc/rfc1766.txt ) Niestety żaden mailer nie przejmuje się tym, zawsze pokazuje ostatnią część ... czy ktoś zdołał zrobić wielojęzyczną pocztę z automatycznym wyborem najlepsza wersja dla użytkowników? Czy jest jakaś sztuczka do poznania? Masz inne rozwiązanie?


title: Zaprojektowanie luźno powiązanej aplikacji -> przechowywany interfejs proc dla PostgreSQL. Kilka pytań

text: Jestem w trakcie projektowania klasy dostępu do bazy danych nowej generacji dla jednego z tworzonych przeze mnie programów. Używamy wyłącznie PostgreSQL. Nasze obecne podejście jest proceduralne (w dużej mierze inspirowane usługami sieciowymi RESTful, ale zwracamy również uwagę na wykrywalność). Baza danych definiuje (raczej luźno) API, które wykrywa aplikacja. Interfejs API został zaprojektowany tak, aby był zarówno łatwo użyteczny, jak i czytelny dla komputerów i administratorów baz danych. Możesz przeczytać o naszym obecnym podejściu na http://ledgersmbdev.blogspot.com/2011/10/introduction-to-soda.html, ale podstawową kwestią jest to, że wyszukujemy _nazwy_ tylko danych i generujemy wywołania proceduralne, które można łatwo odwzorować do metod. Nasze klasy Perla obsługują interfejs wywołania, taki jak: $recon_report->exec_method({ funcname => 'cash_recon__approve' }); Spowoduje to ponowne użycie właściwości obiektu do wypełnienia oczekiwanych argumentów dla cash_recon. Pozwala to na zmianę API w niewielkim stopniu bez zerwania podstawowego kontraktu z aplikacją, a tym samym pozwala uniknąć najgorszych nieszczęść związanych z procedurą składowaną. Powyższe może wygenerować zapytanie sql takie jak: SELECT * FROM cash_recon__approve(134); Definicja funkcji w PostgreSQL wyglądałaby tak: CREATE OR REPLACE FUNCTION cash_recon__approve(in_id int) zwraca ... Jednym z dużych problemów z tym podejściem jest to, że bardzo trzeba zarządzać dużą liczbą nazw funkcji w ten sposób, więc ja szukam bardziej obiektowego interfejsu wokół bazy danych. Obecnie zarządzamy tym za pomocą podwójnych podkreśleń, ale to stwarza tyle samo problemów, ile rozwiązuje. Jest to nieco lepsze niż używanie niestandardowych znaków i wymaganie cytowania każdej nazwy funkcji podczas wpisywania jej przez dba lub w przypadkach testowych. Nowy interfejs, na który patrzę, byłby inny. Zamiast identyfikować typ przez część przed podkreśleniem, byłby to typ używany przez pierwszy argument. Odpowiednikiem powyższego byłby znacznie bardziej irytujący wygląd: SELECT * FROM zatwierdź('(35,65,1111111,f,f,2011-10-06,"2011-10-07 13:11:24.324195",186 ,chris,f,,,,f)'::cash_recon); Definicja funkcji tutaj wyglądałaby mniej więcej tak: CREATE OR REPLACE FUNCTION accept(obj cash_recon) ZWROTY .... Taki interfejs również byłby wykrywalny, ale opierałby się na wykrywaniu. Nie jest tak prawdopodobne, że osoby mogą przeczytać wezwanie i od razu zrozumieć, co dokładnie zrobił. Główną zaletą jest jednak to, że umożliwiłoby to przekazywanie złożonych struktur danych, co byłoby konieczne w przypadku procedur, które oczekują, że będą w stanie określić, czy transakcja jest zrównoważona przed zapisaniem jej do bazy danych, więc istnieją przypadki, w których jest to wyraźnie widoczne lepszy. Wymaga to jednak, aby przypadki testowe musiały być generowane dynamicznie z bazy danych. Przypadki testowe napisane ręcznie byłyby prawdopodobnie dość kruche. Tak więc powyższy przykład wydaje mi się przypadkiem, w którym istniejący interfejs procedury składowanej jest prawdopodobnie preferowany, podczas gdy publikowanie wpisu do dziennika wydaje mi się tym, w którym opracowywane podejście jest znacznie preferowane. Więc moje pierwsze pytanie brzmi, biorąc pod uwagę, że te dwa interfejsy API mają różne mocne i słabe strony, czy wyświetlają jakieś czerwone flagi, aby obsługiwać oba i zakładać, że procedury składowane mogą być napisane w dowolnej specyfikacji? Czy też ogólnie lepiej jest mieć mniejszą specyfikację z obsługiwaną tylko jednym podejściem API. Innymi słowy, czy stary interfejs API powinien być przestarzały, czy używany razem z nowym? Skłaniam się ku temu drugiemu, ale chciałbym uzyskać informację zwrotną. Drugie pytanie brzmi, zakładając, że obsługujemy oba, czy lepiej jest odkryć formę API w czasie wykonywania, czy wymagać innego wywołania dla starego i nowego stylu? Skłaniam się tutaj ku odkryciu, ponieważ pozwala to na przepisanie funkcji w db i zachowanie zgodności z wywołaniami, jeśli zajdzie taka potrzeba.


title: Jak skonfigurować projekt Java z testami jednostkowymi, referencjami i czymś w rodzaju VS .sln przy użyciu IntelliJ

text: Wykonuję dużo prac programistycznych w c#. Niedawno nasza firma zdecydowała, że ważne jest, aby usługi internetowe mogły działać na maszynach uniksowych, i w związku z tym zdecydowała, że powinniśmy napisać nowe usługi w Javie. Mamy licencje na IntelliJ, więc prawdopodobnie zacznę od tego jako IDE. Znalazłem dość łatwo znaleźć zasoby dotyczące języka Java i standardowych bibliotek. Istnieje kilka szczegółów niskiego poziomu, które są trudniejsze do znalezienia. * Jak (jak mam?) skonfigurować nowy projekt z testami jednostkowymi? * Jak zarządzasz referencjami? (Spędziłem godziny, próbując rozgryźć ścieżki klas w zaćmieniu kilka lat temu) * Jak skonfigurować coś równoważnego do pliku .sln? Potrzebuję więc dość niskopoziomowej pomocy, ale bez skupiania się na kodzie (nie potrzebuję pomocy w nauce pisania Hello World lub pętli for).


title: Czy map-reduce jest podstawowym czynnikiem, który sprawia, że NoSQL jest bardziej skalowalny niż SQL?

text: Badam różnice między NoSQL i SQL i co sprawia, że ten pierwszy jest bardziej skalowalny. Myślę, że mam rację, więc postaram się wyjaśnić: załóżmy, że aplikacja ma listę miliardów użytkowników, z których każdy ma określoną ilość pieniędzy i chce wyświetlić sumę ich wszystkich. W SQL musiałby to `SELECT SUM(pieniądze) FROM users`, co spowodowałoby iterację silnika przez każdego użytkownika (O(n)) w celu obliczenia sumy, co jest powolne. Z drugiej strony w NoSQL można było wcześniej skonfigurować funkcję zmniejszania mapy, taką jak `nosql_engine.mapReduce(get_money,sum)`. Spowodowałoby to, że pobieranie sumy byłoby natychmiastowe (O(1)), ponieważ byłoby buforowane, a aktualizacja tego obliczenia spada do O(log(n)), z powodu powiązania operacji redukcji. Ogólnie rzecz biorąc, ta zdolność zmniejszania mapy jest podstawową zasadą, która sprawia, że NoSQL jest bardziej skalowalny niż SQL. **Czy to jest do pewnego stopnia poprawne?**


title: Programowanie dyskretnej transformacji falkowej

text: Próbuję zaprogramować Discrete Wavelet Transform w Matlabie. Rozumiem, że są dostępne różne biblioteki, ale mój projekt wymaga, abym zaimplementował go od zera. Przyjmuję wektor o długości N. Następnie dostarczam ten wektor jako dane wejściowe do moich filtrów dolnoprzepustowych i górnoprzepustowych. Moje pierwsze pytanie brzmi: jaka musi być granica dla tych dwóch filtrów? Kiedy skończę przepuszczać mój sygnał przez te dwa filtry, mam S_LowPass i S_HighPass. Teraz pobieram próbki tych wektorów. Po pobraniu tych wektorów w dół rozmiar mojego wektora został zmniejszony. Teraz, kiedy używam przybornika Wavelet Matlaba, rozmiary pozostają takie same na każdym poziomie. Moje drugie pytanie: dlaczego rozmiary pozostają takie same?


title: Jaki byłby najlepszy sposób na zakodowanie podstawowego LIMS?

text: Mam nadzieję, że zadaję właściwe pytanie we właściwym miejscu. Jeśli nie, nie wahaj się wskazać mi właściwego miejsca. Pracuję w laboratorium, gdzie komputery/programowanie/programiści służą wyłącznie jako wsparcie. Uważam jednak, że potrzebujemy lepszej organizacji i zarządzania informacją. Biorąc pod uwagę różnorodne informacje generowane w laboratorium, uważam, że potrzebujemy pewnego rodzaju laboratoryjnego systemu zarządzania informacją. Czy jest dobry punkt wyjścia, aby to zrobić? Sam nie jestem wyszkolonym programistą. Potrafię całkiem dobrze programować w `pythonie` i `R`, aw razie potrzeby mogę nauczyć się `MySql`, `php`.


title: Jak używać list w partycjonowaniu równoważności?

text: Przeczytałem, że partycjonowanie równoważności może być stosowane typowo dla interwałów lub list, np. Zakładam, że można go użyć do każdego zestawu wejść. W każdym razie, jeśli wymaganie mówi, że dozwolone kolory to (CZERWONY, NIEBIESKI, CZARNY, ZIELONY), nie mogę traktować ich jak listy, prawda? Mam na myśli, że przetestowanie jednego z nich by nie wystarczyło, ponieważ deweloperzy najprawdopodobniej użyli jakiejś obudowy przełączników i dlatego nie jest to prawdziwy „zestaw”, w którym można by reprezentować także inne. Więc jak to się rozumie z listami? Ponadto, co nie jest dla mnie jasne, nie sądzę, aby zawsze można było wykonać początkowe partycjonowanie, a następnie zaprojektować przypadki testowe. Co powiesz na sprawdzenie przecięcia dwóch linii: Y=MX+C. (dwa wejścia) 1) Linie są równoległe. M1=M1, ale C1 musi być inne niż C2. 2) Linie się przecinają. M1 musi różnić się od M2. 3) Zbieg okoliczności. Są takie same. Jak mogę tutaj użyć partycjonowania? To jest właściwie zaczerpnięte z książki i mówi, że te zestawy są eq.classes.


title: W jakim czasie gramatycznym powinienem wpisać swoje specyfikacje?

text: Obecnie piszemy specyfikacje funkcjonalne i techniczne w formacie dwukolumnowym; zdanie podsumowujące i szczegóły techniczne. Szczegóły często odnoszą się do załącznika z diagramami, projektami układu itp. Jednak zmagam się z tym, w jakim czasie to napisać: z czasem przeszłym, tak jakby praca była skończona, staram się pokazać podświetlone rozszerzenia pracy wychodzącej. Czas przyszły, który musi zrobić X zaczyna brzmieć jak lista rzeczy do zrobienia lub czas neutralny bardzo ciężko, ponieważ albo ma być zrobione, albo jest zrobione. Aby dodać dalsze zamieszanie, ta specyfikacja może być czytana przez osoby, dla których angielski nie jest językiem ojczystym.


title: Struktura a programowanie

text: Czy to źle, że często spędzam więcej czasu na strukturze programu niż na pisaniu kodu wewnątrz metod? Czy to powszechne? Czuję, że spędzam więcej czasu na kładzeniu fundamentów niż na budowaniu domu (metaforycznie). Rozumiem, że bez dobrego fundamentu dom ulegnie zawaleniu, ale czy słusznie trzeba zająć połowę projektu, aby sfinalizować strukturę kodu? Rozumiem wzorce projektowe i wiem, dokąd się udać, jeśli potrzebuję pomocy w wyborze jednego, ale często wątpię w swoje własne wybory.


title: Jestem początkujący. Czy mogę bezpośrednio rozpocząć naukę C++11? czy muszę nauczyć się starego C++?

text: Jestem początkującym i mam niewielką wiedzę z zakresu programowania. Czy byłoby dobrze, gdybym bezpośrednio uczył się C++ z książek, które obejmują nowy C++11, czy powinienem uczyć się poprzez stare najlepsze książki C++? Czy powinienem mieć niewielką wiedzę na temat C++ przed nauką C++11? czy mogę zacząć bezpośrednio stamtąd? Czy spowodowałoby to problem, gdybym zaczął bezpośrednio od C++11? Jeśli nie, zasugeruj kilka książek o C++11.


title: Dlaczego analitycy biznesowi i kierownicy projektów dostają wyższe pensje niż programiści?

text: Trzeba przyznać, że programowanie jest znacznie trudniejsze niż tworzenie dokumentacji czy choćby tworzenie wykresu Gantta i proszenie programistów o postępy. Dlaczego więc dla nas, którzy jesteśmy naiwni, wiedząc, że programowanie jest generalnie trudniejsze, analitycy biznesowi i kierownicy projektów otrzymują wyższe wynagrodzenie niż programiści? Co sprawia, że ich praca jest dobrze płatna, skoro nawet programiści są tymi, którzy wracają późno do domu? **AKTUALIZACJA** Wybacz moją ignorancję, z niektórych odpowiedzi wynika, że powodem, dla którego BA i PM dostają wyższe pensje, ponieważ to oni są zwykle odpowiedzialni za bałagan, który robią programiści. Ale ostatecznie to programiści brudzą sobie ręce, aby naprawić bałagan i ciężej pracować. Więc to nadal nie ma sensu.


title: Wykorzystanie surowych wskaźników

text: Tak więc z najczęściej głosowanej odpowiedzi na to pytanie wynika, że używanie surowych wskaźników do przechowywania nie jest tak bardzo mile widziane. Jednak jaki jest sens `std::weak_ptr`? Myślałem, że przechowywanie jest dokładnym celem tej klasy. Jeśli tak, to czy istnieje okoliczność, w której surowy wskaźnik jest uważany za dobry, prawidłowy kod? Jeśli ich nie ma, jaki jest sens posiadania ich w języku? Czy to po prostu historyczny artefakt?


title: W jaki sposób serwery internetowe wymuszają zasady tego samego pochodzenia?

text: Zagłębiam się głębiej w tworzenie interfejsów API RESTful i do tej pory pracowałem z kilkoma różnymi frameworkami, aby to osiągnąć. Oczywiście spotkałem się z polityką tego samego pochodzenia i teraz zastanawiam się, w jaki sposób wymuszają ją serwery WWW (a nie przeglądarki internetowe). Z tego, co rozumiem, wydaje się, że pewne wymuszanie ma miejsce na końcu przeglądarki (np. honorowanie nagłówka Access-Control-Allow-Origin otrzymanego z serwera). Ale co z serwerem? Załóżmy na przykład, że serwer sieciowy obsługuje aplikację internetową JavaScript, która uzyskuje dostęp do interfejsu API, również hostowanego na tym serwerze. Zakładam, że serwer wymuszałby politykę tego samego pochodzenia --- tak, że tylko javascript, który jest hostowany na tym serwerze, będzie miał dostęp do API. Uniemożliwiłoby to komuś napisanie klienta JavaScript dla tego interfejsu API i hostowanie go w innej witrynie, prawda? Jak więc serwer sieciowy byłby w stanie zatrzymać złośliwego klienta, który próbowałby wysyłać żądania AJAX do swoich punktów końcowych interfejsu API, twierdząc, że uruchamia skrypt JavaScript, który pochodzi z tego samego serwera sieci Web? W jaki sposób najpopularniejsze serwery (Apache, nginx) chronią przed tego rodzaju atakiem? A może moje rozumienie tego jest w jakiś sposób chybione? A może zasady cross-origin są wymuszane tylko po stronie klienta?


title: Jakie są najbardziej odpowiednie książki na temat szacowania zadań oprogramowania dla osób fizycznych?

text: Jakie książki przeczytałeś, które pomogły ci, jako programiście, nauczyć się szacować czas na wykonanie małych i średnich zadań programistycznych, takich jak poprawki błędów lub wdrażanie nowych funkcji? Które są najbardziej pomocne? Opisz, w jaki sposób Ci pomogła, podając jej mocne i słabe strony.


title: Motywacja do programowania w określonym języku

text: Mam 21 lat i nie studiowałem na uniwersytecie, a więc całkowicie samoukiem z samouczków, screencastów, książek itp., ale kiedy przyszło mi do głowy, jakich konkretnie języków się uczyć, pomyślałem, czego najlepiej się uczyć , tj. za pieniądze, ekspozycję itp... Ukończyłem kurs Sun Certified Java Programmer, ale od tego czasu nigdy go nie używałem, nauczyłem się Objective C do tworzenia aplikacji na iPhone'a, używałem go dużo, używałem PHP do rzeczy internetowych, ja' używałem go dużo. Więc moje pytanie brzmi, jeśli zdecydowałeś się na naukę konkretnego języka, czy to za pieniądze, czy dla określonej pracy, czy dlatego, że twój pracodawca potrzebował, abyś szybko nauczył się języka dla konkretnego projektu? Naprawdę nie mogę wymyślić żadnych innych motywacji, aby zostać programistą? Czy to płytkie?


title: Używanie słowa kluczowego JOIN lub nie

text: Następujące zapytania SQL są takie same: SELECT kolumna1, kolumna2 FROM tabela1, tabela2 WHERE table1.id = table2.id; SELECT kolumna1, kolumna2 FROM tabela1 JOIN tabela2 ON table1.id = table2.id; I na pewno dadzą te same plany zapytań w każdym DBMS, jakiego kiedykolwiek próbowałem. Ale co jakiś czas czytam lub słyszę opinię, że jedno jest zdecydowanie lepsze od drugiego. Oczywiście twierdzenia te nigdy nie są poparte wyjaśnieniem. Tam, gdzie pracuję, większość innych twórców preferuje drugą wersję, dlatego też skłaniam się ku temu stylowi, aby zminimalizować zaskoczenie. Ale w moim sercu naprawdę myślę o pierwszym (ponieważ tak się tego nauczyłem). Czy jedna z tych form jest obiektywnie lepsza od drugiej? Jeśli nie, jakie byłyby powody, aby używać jednego z drugim?


title: Jak systematycznie dokumentować wymagania dla API?

text: Obecnie pracuję nad projektem, w którym muszę przeanalizować wymagania dwóch danych systemów informatycznych wykorzystujących cloud computing pod kątem Cloud API. Innymi słowy, muszę przeanalizować, jakie wymagania te systemy mają wobec Cloud API, aby były w stanie to zmienić, jednocześnie osiągając swoje obecne cele. Podam przykład niektórych nieformalnych wymagań Projektu A: 1. Przy uruchamianiu maszyn wirtualnych w chmurze przez API musi być możliwe określenie rozmiaru pamięci, typu procesora, systemu operacyjnego i klucza SSH dla użytkownika root . 2. Musi istnieć możliwość monitorowania przychodzącego i wychodzącego ruchu sieciowego na godzinę na maszynę wirtualną. 3. API musi obsługiwać przypisywanie publicznych adresów IP do maszyny wirtualnej i pobieranie publicznych adresów IP. 4. ... Na dalszym etapie projektu przeanalizuję niektóre standardy Cloud Computing, które standaryzują API w chmurze, aby dowiedzieć się, gdzie są możliwe niedociągnięcia w obecnych standardach. Odkrycie może i prawdopodobnie będzie takie, że pewien standard nie obsługuje monitorowania wykorzystania zasobów, a zatem nie jest obecnie użyteczny. Obecnie staram się znaleźć sposób na systematyczne zapisywanie i klasyfikowanie moich wymagań. Uważam, że sposób, w jaki obecnie je zapisuję (jak trzy powyższe punkty) jest zbyt nieformalny. Przeczytałem w kilku książkach o inżynierii wymagań i architekturze oprogramowania, ale wszystkie one zbytnio skupiają się na szczegółach i implementacji. Naprawdę zależy mi tylko na funkcjonalnościach dostarczanych przez API/interfejs i nie sądzę, aby diagramy UML itp. były dla mnie właściwym wyborem. Myślę, że obecnie zebrane przeze mnie wymagania można opisać jako historyjki użytkownika, ale czy to już wystarczy do zaawansowanej analizy wymagań? Chyba powinienem zejść "jeden poziom głębiej"...


title: Czy byłoby to efektywne wykorzystanie wzorca Podmiot/Obserwator, czy może istnieje lepszy sposób?

text: TBH: Nigdy nie używałem wzorca obserwatora. Ale wygląda to całkiem użytecznie w takiej sytuacji: tworzę bardzo prostą grę strategiczną. Składa się z dwóch walczących, którzy jednocześnie okładają się nawzajem przez krótki czas, a zwycięzcą zostaje ten, który ostatecznie ma najwięcej zdrowia. Teraz istnieje wiele konfigurowalnych strategii dla walczących, różne elementy wyposażenia, które mogą zmienić częstotliwość ataków itp. Planuję również uwzględnić pewne „zewnętrzne” czynniki, takie jak pogoda, które wpłyną na walczących. Więc.... mógłbym stworzyć obiekt walki, który jest tematem. Śledzi czas i powiadamia obserwatorów o każdym „tyknięciu” zegara. Obserwatorami są dwie instancje obiektu Combatant i jeden obiekt Weather. Wydaje się, że to dobry pomysł, ale gdzie są pułapki? Właściwie, kiedy to piszę, myślę, że jednym problemem jest to, że obserwatorzy prawdopodobnie nie znają swoich parametrów. A może muszą być? Czy ktoś użył skutecznego wzorca projektowego, aby zrobić coś takiego?


title: Analiza przyczyn źródłowych błędów

text: W naszej grupie zwykle nie zastanawiamy się zbyt wiele nad tym, jakie decyzje projektowe lub wdrożeniowe spowodowały błąd, po prostu go naprawiamy. Oczywiście, jeśli jakiś moduł stale generuje błędy, ludzie zaczynają to zauważać, a czasami prowadzi to do poważnej refaktoryzacji. Ale nie mamy procesu, w którym błędy są rutynowo analizowane pod kątem ich przyczyn źródłowych. Moje pytanie brzmi, czy formalny proces analizy przyczyn źródłowych błędów jest powszechny w tworzeniu oprogramowania, a jeśli nie, to dlaczego.


title: Co się stanie, gdy zarówno stos, jak i stos są pełne?

text: Załóżmy, że używam bardzo ciężkich aplikacji (lub można powiedzieć, że jest to bardzo zły kod, który alokuje pamięć na stercie i jej nie zwalnia, a także używa rekurencji) Teraz po pewnym czasie zarówno sterta, jak i stos będą miały nie ma miejsca na rozbudowę. Teraz W tej sytuacji sterta i stos nie mają między sobą wolnego miejsca i jeśli spróbuję przydzielić trochę pamięci na stercie, to co się stanie? czy przeleje się nad stosem? A także, co się stanie, jeśli wykonamy rekurencyjne wywołanie i stos musi się rozszerzyć, to czy przepełni on stertę?


title: lista obliczeń równoległych obiektów

text: Mam listę obiektów, które wymagają dokładnie tego samego filtrowania, w zasadzie zestawu warunków w funkcji, która wyprowadza, czy obiekt jest „dobry” lub „zły”. Chcę zachować wszystkie moje „dobre” obiekty na liście. Powiedzmy, że mam na tej liście 1000 obiektów i funkcję, według której chcę filtrować, na piśmie. Jakie języki/funkcjonalność zmaksymalizowałyby równoległość tej operacji? Bawiłem się wieloprocesorowym przetwarzaniem Pythona, które poprawia wydajność, ale wciąż pozostawia mnie niezadowolony. Przypuszczam, że jest to problem „żenująco równoległy”, ponieważ żaden stan nie musi być dzielony.


title: Schematy komunikacji UML, szczegóły implementacji czy nie?

text: Po przeczytaniu Applying UML and Patterns (Larman) i rozejrzeniu się po Internecie nadal wydaje mi się niejednoznaczne, czy diagram komunikacji UML powinien przedstawiać szczegóły implementacji (takie jak wywołania funkcji związanych z GUI), czy też być bardziej związany z analizą. Jaka jest prawidłowa odpowiedz? Czy UML w ogóle to określa?


title: Czy nie powinienem próbować emulować danych klas prywatnych w javascript?

text: Dlatego budowałem tę bibliotekę stylów ORM dla AngularJS (JavaScript) i ponieważ wywodzą się ze środowiska C++/PHP/C#, zawsze staram się upewnić, że prywatne rzeczy pozostają prywatne. Chociaż można to osiągnąć w JavaScript, ciągle napotykam problemy, które muszę obejść, prawdopodobnie dlatego, że JavaScript tak naprawdę nie ma przejściowego systemu klas, do którego jestem przyzwyczajony. Czy powinienem po prostu przyjąć podejście Pythona i zezwolić ludziom na dostęp do prywatnych metod/danych, jeśli myślą, że wiedzą, co robią? Czy tego typu podejście jest powszechne w świecie JavaScript?


title: lepsza metoda przywracania stanu w przypadku awarii podczas dodawania/usuwania

text: Mam więc ogólną strukturę z koncepcją obiektów potomnych i nadrzędnych, obiekty nie muszą być tego samego typu i mogę dodawać lub usuwać dowolne z nich. Dodawanie wywołań dodaje wszystkie dzieci i informuje rodziców, odwrotne do usunięcia. koncepcja Parent jest na tyle ogólna, że może istnieć pętla między klasami. A może być rodzicem B, który jest rodzicem C, który jest rodzicem A. To nadal działa, ponieważ zaznaczam obiekt jako dodany lub usunięty jako pierwszy krok w klasie abstrakcyjnej; więc nawet jeśli cykliczna zależność wywoła Add po raz drugi na tym samym obiekcie, po raz drugi przez add zwróci bez robienia czegokolwiek (ponieważ dodana wartość logiczna jest już ustawiona) i zatrzymamy naszą rekurencję. Jeśli wystąpi jakiś nieoczekiwany wyjątek, chcę przywrócić mój stan do stanu sprzed wystąpienia wyjątku. Robiłem to z obsługą wyjątków, jeśli złapię połączenie w czasie wykonywania, usuwam dodane obiekty i aktualizuję rodziców przed wyrzuceniem wyjątku. Tutaj moja logika może zawieść. Od teraz „przywracam” metodę AddObject, wywołując removeObject i na odwrót. Jeśli mój stan w jakiś sposób zakończyłby się w naprawdę dziwacznym stanie, mógłbym nadal rzucać wyjątki, dodawać rzuty i wywołania remove, usunąć rzuty i wywołania dodać itp. Myślę, że to nadal ma szansę na nieskończoną rekurencję; chociaż muszę przyznać, że w moim stanie coś musiałoby być już dość pomieszane, żeby tak się stało. Czy istnieje czystszy sposób na wykonanie logiki wycofywania, aby uniknąć tego potencjału? W takim momencie, jaki powinien być mój stan, kiedy i tak wyzdrowieję?


title: Ponowne wykorzystanie logiki biznesowej między siecią a interfejsem API

text: Mamy stronę internetową i dwie aplikacje mobilne, które łączą się przez API. Wszystkie platformy robią dokładnie to samo. Obecnie struktura wygląda następująco: * Strona internetowa. Zarządza modelami, kontrolerami, widokami dla serwisu. Wykonuje również wszystkie zadania w tle. Jeśli więc użytkownik utworzy miejsce, wszystko zostanie wykonane w tym kodzie. * API. Zarządza modelami, kontrolerami i zwraca JSON. Jeśli użytkownik utworzy miejsce w aplikacji mobilnej, miejsce zostanie utworzone tutaj. Następnie dodajemy zadanie w tle, aby zaktualizować inne pola. To zadanie w tle jest wykonywane przez Witrynę. Przerabiamy wszystko, więc czas poprawić podejście. Jaki jest najlepszy sposób na ponowne wykorzystanie logiki biznesowej, aby wystarczyło zakodować wstawianie/edycję/usuwanie miejsca i inne działania powiązane tylko w jednym miejscu? **Czy podejście zorientowane na usługi to dobry pomysł?** Na przykład: * Usługa. Posiada modele i pobiera, dodaje, aktualizuje i usuwa informacje z bazy danych. * Stronie internetowej. Wysyła informacje do usługi i renderuje HTML. * API. Wysyła informacje do usługi i zwraca JSON. Niektóre problemy, które znalazłem: * Więcej prac początkowych? Nie wiem.. * Może działać wolniej. Jakieś doświadczenie? Korzyści: * Logikę biznesową mamy tylko w jednym miejscu, zarówno dla sieci web, jak i API. * Łatwiej jest skalować. Każdą sztukę możemy umieścić na różnych serwerach. **Inne rozwiązania** * Powiel kod i uważaj, aby niczego nie zapomnieć (wykonaj testy!) * Powiel kod, ale wykonaj zadania w tle, które aktualizują powiązane pola i wykonują inne czynności (e-maile, indeksowanie...) " szczegół jest taki, że na razie jesteśmy w backendzie 1,3 osoby ;)


title: Czy krytyka pod adresem Darta jest słuszna?

text: Według tego artykułu w Wikipedii Microsoft, Apple, Mozilla i inni krytykują Dart, język programowania wprowadzony przez Google do pracy w przeglądarkach internetowych, ponieważ uważają, że „wydaje się on szkodliwy (por. VBScript w IE)”. Ale Dart kompiluje się również do JavaScript, więc aplikacja internetowa napisana w Dart może działać w dowolnej nowoczesnej przeglądarce. Czy ich obawy są więc uzasadnione? Czy Dart naprawdę może stanowić zagrożenie dla otwartości sieci?