title: Szukasz wskazówek dotyczących zarządzania złożonością za pomocą repozytoriów SCM

text: W swoim dziale jestem samodzielnym programistą i mam wiele indywidualnych projektów, wszystkie stworzone i zarządzane przeze mnie. Zacząłem używać SVN w ProjectLocker za pośrednictwem wersji na Macu kilka lat temu, kiedy różne projekty zaczęły stawać się nieporęczne. _Scenariusz 1_ : Teraz mam proces o rozsądnej złożoności, który można podzielić na wiele mniejszych aplikacji, które współdzielą pliki. W jednej fazie istnieje jeden udostępniony plik — plik stałych — który jest współużytkowany przez aplikację Cocoa i platformę aplikacji na iPhone'a. W drugiej fazie framework aplikacji dla iPhone'a zostanie wykorzystany do tworzenia indywidualnych aplikacji tego samego typu ilk — klas kontrolerów, a co nie, wszystkie będą takie same — ale z inną zawartością w każdej. Problem, z którym się spotykam, polega na tym, że plik w pierwszej fazie znajduje się w jednym repozytorium z aplikacją, która go uruchomiła, a framework aplikacji znajduje się w drugim, osobnym repozytorium. _Scenariusz 2_ : Mam inny framework aplikacji, który częściowo opiera się na kodzie z projektu open source. To wszystko jest wewnętrzna, niekomercyjna praca, ale ponownie, framework aplikacji będzie używany do tworzenia różnorodnych unikalnych produktów i procesów. Tak więc teraz mam repozytorium zarządzane wewnętrznie i zarządzane zewnętrznie poza moją kontrolą. Dokonuję niewielkich zmian w kodzie open source, aby zaspokoić potrzeby mojego frameworka, gdy pobieram aktualizację, ale nigdy nie wprowadzam z powrotem do zewnętrznego repozytorium (chociaż teraz, gdy o tym myślę, nie sądzę, że " ja też zobowiązuję się do mojego. Oops). **Problem** Całkiem ładnie skonfigurowałem to wszystko na moim produkcyjnym Macu, ale duplikowanie, a następnie utrzymywanie tego środowiska na moim laptopie było wyzwaniem. W przypadku scenariusza 1 myślałem o połączeniu tych dwóch projektów w to samo repozytorium, ponieważ są one nierozerwalnie ze sobą powiązane. Ale w scenariuszu 2 myślę, że utknąłem po prostu zarządzając plikami najlepiej, jak potrafię. **Pytanie** Zastanawiam się, czy ktoś ma jakieś wskazówki, jak zarządzać jedną z tych sytuacji, a także innymi złożonymi scenariuszami SCM, jeśli chodzi o łączenie różnych plików z różnych repozytoriów. Moja znajomość SVN pochodzi tylko z mojej pracy z wersjami. Było świetnie, ale trochę mi tu brakuje.


title: Liczba linii kodu w kawałku oprogramowania

text: Nasz kierownik poprosił o raport na temat liczby linii kodu w naszym oprogramowaniu. Co powinniśmy zrobić?


title: Jakie są dobre pytania do rozmowy kwalifikacyjnej na temat projektowania zorientowanego obiektowo (OOD)?

text: Chcę przygotować się do rozmowy kwalifikacyjnej i chciałem odpowiedzieć na kilka dobrych pytań dotyczących projektowania zorientowanego na obiekt (OOD). Oto niektóre koncepcje OOD, które powinny dać dobry punkt wyjścia: 1. dziedziczenie 2. dziedziczenie wielokrotne 3. enkapsulacja 4. abstrakcja 5. kompozycja 6. polimorfizm 7. nadrzędny polimorfizm Czy mógłbyś zasugerować inne pytania OOD/ tematy, które należy zrecenzować?


title: Korzyści z przeniesienia biblioteki C do C++

text: Powiedzmy, że bierzemy dowolną bibliotekę C, taką jak libpng lub libvorbis, i konwertujemy ją tak, aby skompilowała się jako C++ (tylko minimalne zmiany, aby skompilowała się jako kod C++). Czy kompilator może wykonywać dodatkowe optymalizacje, gdy jego kod C++? Czy istnieje **jakaś** korzyść, którą można uzyskać, przenosząc kod do C++? Jakie są wady, które mogą zniwelować te korzyści?


title: Nie rozumiesz wdrażania zasady pojedynczej odpowiedzialności

text: Proszę o wyrozumiałość, jeśli pytanie nie wygląda na dobrze ustrukturyzowane. W kontekście mojego problemu: buduję aplikację, która wystawia faktury za czas pobytu pojazdów na parkingu. Oprócz usługi pobytu istnieje kilka innych usług. Każda usługa ma swoją własną logikę obliczeniową. Oto ilustracja (proszę mnie poprawić, jeśli projekt jest zły): public abstract class Service { public int Id { get; ustawić; } public bool IsActivated { get; ustawić; } ciąg publiczny Nazwa { get; set } public dziesiętna Cena { get; ustawić; } } public class VehicleService : Service { //MTM : wiele do wielu publicznych wirtualnych ICollection<MTMVehicleService> Pojazdy { get; ustawić; } } public class StayService : VehicleService { } public class Vehicle { public int Id { get; ustawić; } ciąg publiczny Numer podwozia { get; ustawić; } public DateTime? DataWpisu { get; ustawić; } public DateTime? Data dostawy { get; ustawić; } //... public virtual ICollection<MTMVehicleService> Usługi{ get; ustawić; } } Skupiam się teraz na usłudze pobytowej jako przykładu: chciałbym wiedzieć w czasie fakturowania, które klasy będą odpowiedzialne za generowanie pozycji faktury dla usługi i dla każdego pojazdu? Powinno to obliczyć koszt czasu trwania, wiedząc, że czas trwania może być częściowo zafakturowany, więc zasada jest następująca: nie zafakturowane dni pobytu * cena pobytu za dzień. W tej chwili InvoiceItemsGenerator robi wszystko, ale mam świadomość, że istnieje lepszy projekt.


title: Wyszukaj podciąg w kolekcji String

text: Mam duży zbiór ciągów _a[1], …, a[N]_ gdzie _N_ to około kilka milionów. Dostałem ciąg _m_ i muszę iterować po wszystkich ciągach _a[i]_, które zawierają _m_. Innymi słowy, muszę znaleźć wszystkie ciągi _a[i]_ mające _m_ jako podciąg. Jaka byłaby najbardziej wydajna struktura danych dla tego problemu? Muszę być bardzo ostrożny z pamięcią, ponieważ pracuję z dużą liczbą ciągów.


title: Co oznaczają warunki użytkowania CocoonJS?

text: Przeglądałem warunki użytkowania CocoonJS i zauważyłem tę sekcję > Udzielenie licencji. Przesyłając Treści użytkownika za pośrednictwem Usług, wyraźnie > udzielasz oraz oświadczasz i gwarantujesz, że masz prawo do udzielenia i > w ten sposób udzielasz Ludei bezpłatnej, niewyłącznej, ogólnoświatowej licencji na użytkowanie, > powielać, modyfikować, publikować, wymieniać informacje dotyczące, edytować, tłumaczyć i > tworzyć dzieła pochodne wszystkich takich Treści użytkownika oraz Twojego imienia i nazwiska, głosu i/lub > podobizny zawartej w Treści użytkownika, jeśli dotyczy, w całości lub w > części oraz w jakiejkolwiek formie, nośniku lub technologii, znanej lub opracowanej w przyszłości, wyłącznie do użytku w związku z Usługami. Nie jestem zbyt jasny w żargonie prawnym, ale dla mnie brzmi to tak, jakbym zasadniczo dawał komuś nieograniczony dostęp do wszelkiej własności intelektualnej, którą przesłałem na ich serwery, oraz możliwość korzystania z mojej tożsamości w dowolnej formie, jak chcą. Czy ktoś może wyjaśnić, co oznacza fragment?


title: długie linie w git lub svn

text: Koduję program, który ma trwałe dane (monitor MELT, związany z GCC MELT). Dane są trwałe, ponieważ oczekuje się, że zostaną odczytane i nadpisane przez większość wykonań. (Dane te składają się w szczególności z abstrakcyjnych drzew składni) Obecnie te trwałe dane są bazą danych Sqlite. Oczywiście tworzę kopię zapasową w formacie tekstowym, uzyskanym przez sqlite dump i chcę zarządzać tym tekstowym zrzutem za pomocą systemu kontroli wersji (prawdopodobnie git, ale może też subversion ....). O ile nie podejmę specjalnych środków ostrożności, te zrzuty SQL będą prawdopodobnie miały dość długie wiersze (np. kilkadziesiąt kilobajtów). Szerokie kolumny SQL prawdopodobnie zawierałyby tekst JSON o wielu kilobajtach. Czy `git` (i `svn`) byłyby bardziej zadowolone z krótszych linii (w szczególności czy działały wolniej z długimi liniami, czy też repozytoria zajmowałyby znacznie więcej miejsca na dysku)? Prawdopodobnie nie interesują mnie głównie polecenia `diff` (np. `git diff` lub `svn diff`), ponieważ spodziewam się, że ich użycie do takiego zrzutu tekstowego nie jest zbyt interesujące dla programistów-człowieka. Koduję procedury trwałości, więc mogę nieznacznie zmienić format (np. Aby dodać znaki nowej linii w jakimś tekście JSON, który „zrzut sqlite3” jest dosłownie zrzucany). Jeśli jesteś ciekawy, moja obecna migawka kodu znajduje się na http://starynkevitch.net/Basile/monimelt-bgc-21apr2014.tar.bz2 i zawiera plik zrzutu `state-monimelt.sql` (który oczywiście będzie znacznie większy , być może w pobliżu lub powyżej megabajta)


title: Programowanie ekstremalne dla jednego programisty

text: Przez ostatnie dwa tygodnie pracowałem z kilkoma podstawowymi koncepcjami ekstremalnego programowania dla małej skali, nastawionej na zysk, wieloosobowej gry zręcznościowej. Spędziłem tydzień na tworzeniu historyjek użytkowników i określaniu wymagań do stworzenia planu wydania. Spędziłem też tydzień na kodowaniu i stosowaniu pierwszego planu iteracji, który wymyśliłem. Zidentyfikowałem kilka z oczywistych koncepcji przydatnych dla jednego programisty. * Ciągła integracja * Nigdy nie dodawaj funkcji na początku * Test Driven Development * Wybierz metaforę systemu * Użyj jednego punktu integracji * Testuj wszystkie błędy * Ciągła refaktoryzacja * Ustaw zrównoważone tempo * Prostota * Częste wydania Jestem ciekaw, czy mnie nie brakuje coś w szczególności, co może być odpowiednie do pracy z jednym projektem deweloperskim? Ponadto, biorąc pod uwagę ideę prostoty i rozwoju opartego na testach, czy lepiej jest korzystać z ugruntowanych, bogatych w funkcje, gotowych platform? A może powinienem pracować od podstaw, jeśli to możliwe, aby uniknąć problemów związanych z regułami, takimi jak ciągła refaktoryzacja i nigdy nie dodawanie funkcji na początku?


title: Jakie są cechy „centrum doskonałości” (CoE) oprogramowania?

text: Niedawno przyszedł nowy dyrektor mojego działu i wyraził życzenie, abyśmy stali się „centrum doskonałości”. Spodziewałem się, że skoro jest moim pierwszym szefem, który faktycznie ma doświadczenie w programowaniu, znajdzie się jakiś opis tego. Na tym jednak zostało. Gdy zastanawiałem się nad tym w ciągu ostatnich kilku dni, nie zastanawiam się nad tym, co właściwie oznacza CoE, poza „byciem skutecznym” w dostarczaniu produktu. Oto główne kwestie, z którymi borykam się: 1. Czy jest to tylko termin rzucany przez typy zarządzania? 2. Jakie cechy sprawiają, że grupa programistów i testerów jest doskonała? 3. Jak w tym kontekście mierzysz doskonałość?


title: Czym jest algorytm?

text: Czym dokładnie jest algorytm, co oznacza Algorytm? Niewiele rozumiem tego słowa, ponieważ nie jest ono specyficzne dla konkretnego języka lub wzorca projektowego, a raczej jest to jedna z najbardziej podstawowych zasad (więc myślę, że to pytanie sprawia, że wyglądam głupio). Jedną z "opcji", jaką mam, aby to zrozumieć, jest to, że oznacza metodę wykonania czegoś, co można zapisać jako listę w pseudokodzie. Kiedy piszę bardziej skomplikowany kod, myślę, co trzeba zrobić, z czym i jak bym się tam dostał (nie w języku programowania), a potem piszę to w kodzie. Czy to dobry sposób na to i czy ma to coś wspólnego z algorytmami? (Chciałem zapytać tutaj raczej na Stackoverflow, ponieważ nie chodzi o konkretny problem/język plus mam wrażenie, że większość ludzi tutaj wie „dlaczego”, a przynajmniej odpowiedzi tutaj są bardziej szczegółowe, a nie na Stackoverflow gdzie jest inaczej, przepraszam, gdybym tam spytał)


title: Jak ustalasz harmonogramy dla większych projektów?

text: Pracuję dla małej firmy, która nie włożyła wiele pracy w rozwój na zamówienie. To coś, do czego dorastamy. W przypadku wszystkich naszych projektów, niezależnie od tego, czy jest to praca na zamówienie, czy prosta strona internetowa z broszurą, planujemy, jak długo oczekujemy, że zajmie nam to zadanie, a następnie mnożymy to przez naszą dzienną opłatę, aby otrzymać wycenę dla klienta. To zawsze działało dla nas dobrze w przypadku mniejszych projektów, witryn CMS, witryn eCommerce, gdzie dobrze znamy systemy i nie napotykamy wielu problemów. Mamy dobre terminy i potrafimy dokładnie przewidywać koszty. Jednak w przypadku tych większych projektów na zamówienie zaczynamy odkrywać, że bez względu na to, jak wiele planujemy z wyprzedzeniem, bez względu na to, jak bardzo dopracowujemy specyfikacje systemu, nasze harmonogramy są zawsze poza zasięgiem. Zaczęliśmy dodawać spory bufor na oprogramowanie na zamówienie, ale nawet wtedy kilka paskudnych błędów może naprawdę cofnąć sytuację i popchnąć nas daleko poza to, czego oczekujemy. Jak wyceniasz te większe projekty? Czy to po prostu kwestia kontynuowania i w końcu uda nam się to naprawić? A może czegoś tu brakuje, ponieważ wydaje się prawie niemożliwe, aby ustalić ceny dla szytych na miarę witryn internetowych, które wykraczają poza nasz standardowy system CMS lub witrynę eCommerce. * * * **Aktualizacja** Jak zauważył @Zeroth, prawdopodobnie brakuje kilku rzeczy w zespole. Nie biegamy sprintami. Mamy jeden duży projekt w ruchu, mamy kamienie milowe i po prostu wyznaczamy cele na podstawie naszych szacunków, ile czasu powinno potrwać. Jeśli chodzi o zespół, to obecnie składa się on z 4 osób, chociaż w tej chwili szkolą się 2 nowe osoby. Te 4 osoby składają się na sprzedawcę i projektanta (jest także kierownikiem biura), projektanta i twórcę stron internetowych, twórcę stron internetowych, który zajmuje się również treścią stron i codziennymi problemami, z którymi borykają się klienci, oraz ja, deweloper. Zajmuję się tworzeniem projektów niestandardowych oraz ulepszaniem/naprawianiem naszych platform CMS i eCommerce. Dwie osoby szkolone to inny projektant i twórca stron internetowych oraz młodszy programista. Gdy projekt osiągnie pewne kamienie milowe, wszyscy przystępują do jego przetestowania tak dokładnie, jak to tylko możliwe. Zawsze umieszczam tyle informacji o logowaniu i debugowaniu, ile tylko mogę wymyślić, aby jak najszybciej wyśledzić nieuniknione błędy, ale bez względu na to, ile zrobimy, nie możemy przetestować każdej sytuacji. Rozumiem, że jest to złożona i bardzo zróżnicowana odpowiedź, myślę, że głównie szukam porad, a także wskazówek do zasobów (dziękuję @MichaelT za link do książki), które mogą pomóc nam ulepszyć. Musimy być w stanie czerpać zyski z pracy niestandardowej, ponieważ do czerwca mamy pełne zarezerwowanie prac rozwojowych i musimy sprawić, by to zadziałało dla nas. W ciągu ostatniego roku wydaje się, że bez względu na to, ile uczymy się z każdego projektu, nad którym pracujemy, nadal mylimy się w naszych szacunkach.


title: Dziedziczenie przy użyciu nieabstrakcyjnej klasy bazowej

text: Ten post jest oparty na pytaniu http://stackoverflow.com/questions/49002/prefer-composition-over-dziedziczenie/11758048#comment15634305_11758048. Niektórzy mówili – sprawdź, czy istnieje relacja „jest-a”. Jeśli tak jest, użyj dziedziczenia. Myślę, że powinna istnieć druga kontrola korzystania z dziedziczenia. Używaj dziedziczenia tylko wtedy, gdy klasa bazowa jest abstrakcyjna. Jeśli konieczne jest utworzenie instancji klasy bazowej, użyj kompozycji; nie dziedziczenia. Np. 1. Księgowy jest Pracownikiem. Ale nie użyję dziedziczenia, ponieważ można utworzyć wystąpienie obiektu Employee. (Kiedy rozmawiasz z ludźmi biznesu, powiedzą ci - Księgowy jest Pracownikiem. Ale w świecie OO Księgowy nie jest (nie powinien być) pracownikiem) Np. 2. Książka jest Przedmiotem Sprzedaży. Nie można utworzyć wystąpienia elementu SellingItem — jest to pojęcie abstrakcyjne. Dlatego użyję dziedziczenia. SellingItem to abstrakcyjna klasa bazowa (lub interfejs w C#) To, czego szukam tutaj, to przykład, który podważy moją argumentację – czyli scenariusz, w którym dziedziczenie jest lepsze niż kompozycja, mimo że klasa bazowa jest nieabstrakcyjna (bazowa można utworzyć instancję klasy). Czy możesz podać taki przykład? Uwaga: Byłoby bardziej pomocne, gdybyś mógł podać scenariusz oparty na domenie Banku, domenie HR, domenie detalicznej lub dowolnej innej popularnej domenie. Uwaga: W projekcie załóżmy, że mamy pełną kontrolę nad kodem. Oznacza to, że nie używamy żadnego zewnętrznego interfejsu API. Także zaczynamy od początku. Oznaczę jako odpowiedź, jeśli istnieje przykład wyjaśniający scenariusz, który dowodzi, że moja argumentacja jest błędna. Nie jest to zwykła dyskusja na temat tego, czy użyć kompozycji, czy dziedziczenia. Popieram odpowiedź @anon w http://stackoverflow.com/questions/3351666/why-use-dziedziczenie-at-all?lq=1 > Głównym powodem używania dziedziczenia nie jest forma kompozycji - tak jest > możesz uzyskać zachowanie polimorficzne. Jeśli nie potrzebujesz polimorfizmu, prawdopodobnie nie powinieneś używać dziedziczenia. @MatthieuM. mówi w Code Smell: Inheritance Abuse > Problem z dziedziczeniem polega na tym, że można go używać do dwóch ortogonalnych > celów: > > interfejs (dla polimorfizmu) > > implementacja (dla ponownego użycia kodu) **ODNIESIENIA** 1. Przykład pracownika-księgowego http://stackoverflow.com/questions/11759120/issue-in-using-composition-for-is-a-relationship 2. Przykład przedmiotu sprzedaży — http://codereview.stackexchange.com/questions/14077/is-it -proper-tpt-inheritance 3. Zasady programowania SOLID 4. Zapach kodu: nadużycie dziedziczenia


title: Czy źle jest mieć „zaburzenie obsesyjnej refaktoryzacji”?

text: Czytałem to pytanie i zdałem sobie sprawę, że to mogę być prawie ja. Jestem dość OCD jeśli chodzi o refaktoryzację czyjegoś kodu, kiedy widzę, że mogę go poprawić. Na przykład, jeśli kod zawiera zduplikowane metody, aby zrobić to samo, zmieniając tylko jeden parametr, czuję, że muszę usunąć wszystkie metody kopiowania/wklejania i zastąpić je jedną ogólną. Czy to źle? Czy powinienem spróbować i przestać? Staram się nie refaktoryzować, chyba że rzeczywiście mogę poprawić wydajność lub czytelność kodu, lub jeśli osoba, która zrobiła kod, nie przestrzega naszych standardowych konwencji nazewnictwa (nie znoszę oczekiwania, że zmienna będzie lokalna ze względu na standard nazewnictwa, tylko odkryć, że jest to zmienna globalna, która została błędnie nazwana)


title: W C i C++, jakie metody mogą zapobiec przypadkowemu użyciu przypisania(=), gdzie potrzebna jest równoważność(==)?

text: W C i C++ bardzo łatwo jest napisać poniższy kod z poważnym błędem. char responseChar = getchar(); int ConfirmExit = 'y' == tolower(responseChar); if (confirmExit = 1) { exit(0); } Błąd polega na tym, że instrukcja if powinna wyglądać tak: if (confirmExit == 1) Zgodnie z kodem, zostanie ona zakończona za każdym razem, ponieważ występuje przypisanie zmiennej `confirmExit`, wtedy jako wynik operacji używane jest `confirmExit` wyrażenie. Czy istnieją dobre sposoby na zapobieganie tego rodzaju błędom?


title: Jak stworzyć inteligentnego agenta

text: Obecnie robię moje wyróżnienia z informatyki i traktuję sztuczną inteligencję jako przedmiot. W ramach zaliczenia przedmiotu muszę opracować własny podstawowy inteligentny agent. Muszę jeszcze zastanowić się nad tym, co właściwie muszę zrobić dla tego projektu. Nie jestem najbardziej uzdolnionym technicznie programistą i nie mam pojęcia, co robić ani od czego zacząć Czy ktoś może wskazać mi właściwy kierunek, od czego zacząć uczyć się, jak rozwijać inteligentnego agenta, a także wszelkie możliwe pomysły na to, co faktycznie zrobić dla projektu? Wymagania dotyczące projektu są bardzo niejasne, ponieważ nie powiedziano nam, jak techniczny lub duży powinien być projekt. (Mam nadzieję, że nie za duży, ponieważ mam jeszcze 8 przedmiotów, które również wymagają projektów). Wszelkie odniesienia do VB.net również byłyby mile widziane. (Wiem, że nie jest to najlepszy język do tworzenia IA, ale ze względu na moje ograniczenia czasowe jest to język programowania, z którym „czuję się” najbardziej komfortowo).


title: Czy jest to zestaw „kompilacji”?

text: W starej książce, którą mam, mówią, że "budowanie" to albo proces konwersji kodu źródłowego na plik wykonywalny, albo rzeczywisty wynik - asembler. Czy to jest poprawne? Jest to właściwie kompilacja, to znaczy z terminologicznego punktu widzenia.


title: Jak uzyskać szybsze uruchamianie i mniejsze zużycie pamięci dzięki IntelliJ Idea?

text: Próbuję przejść od Eclipse do IntelliJ Idea. Wypróbowuję różne przypadki wtyczek deweloperskich dla IntelliJ Idea - android, clojure, scala, python, javascript, java, gwt, dart, jboss, spring itp. Czas startu rośnie wraz z instalacją większej liczby wtyczek (jak wspomniano w wiki IntelliJ Idea) . _Chętnie poznaję różne aspekty programowania_. Próbuję dowiedzieć się, w jaki sposób programiści wykorzystują IntelliJ Idea podczas pracy ze środowiskiem wielojęzykowym. 1) Czy mają różne instalacje IntelliJ Idea do pracy z różnymi środowiskami językowymi, tj. Powyższy scenariusz ma 5-6 różnych instalacji IntelliJ z zainstalowanymi tylko odpowiednimi wtyczkami. 2) Czy IntelliJ Idea zapewnia mechanizm wyłączania różnych wtyczek w ramach jednej instalacji?


title: Sortowanie i uśrednianie najwyższych wartości danych pikseli

text: Obecnie używam Androida/Java. Szukam najbardziej wydajnych środków do określenia średniej z najwyższych wartości 100 pikseli pobranych z podglądu w skali szarości. Część poglądowa, z którą jestem mniej więcej w porządku; jednak określa, która metodologia sortowania jest najbardziej wydajna. Inną opcją jest zastosowanie progu, który wyeliminuje większość danych. Który algorytm sortowania byłby najbardziej wydajny dla nieposortowanego zestawu danych zawierającego ponad 3 miliony wartości?


title: Coś korzystnego z ORM dla projektu NodeJS już zaimplementowanego w zwykłym języku SQL?

text: Cóż, właściwie jest to projekt przydziału i zaimplementowałem już proste, ale funkcjonalne forum z NodeJS. Ale teraz musieliśmy **wykorzystać frameworki ORM do refaktoryzacji części kodu wartej refaktoryzacji**. Ponieważ używam Node.JS, nie ma takich _bezpiecznych dla typów_ korzyści z ORM, jakie mógłbym uzyskać. Poza tym kod już działa i po prostu nie widzę, co dobrego ORM może do niego wnieść... (Żądania są obsługiwane dość szybko i niezależnie... Nie sądzę, żebym chciał buforować tony `Object` s z bazy danych do `request.session`...) Moje pytanie brzmi, jakie możliwe korzyści przyniesie ORM dla stabilnego projektu NodeJS?


title: Potrzebuję publicznego systemu kryptograficznego działającego na małych kluczach

text: Potrzebuję go tylko do obsługi podpisywania i weryfikacji podpisu. Potrzebuję, aby mieć klucze publiczne i prywatne, które mieszczą się _każdy_ w 16 bajtach. Sam podpis musi mieścić 16 bajtów. Nie zależy mi na sile kryptograficznej, ponieważ jest to część czegoś większego. Czy istnieje coś takiego?


title: Nadanie podwójnego typu funkcji bibliotecznej sqrt w C

text: _Język programowania C_ autorstwa Ritchiego mówi, że: > Procedura biblioteczna `sqrt` oczekuje podwójnego typu i będzie produkowała nonsens > jeśli nieumyślnie obsłuży coś innego. Więc jeśli `n` jest liczbą całkowitą, możemy użyć > `sqrt((double) n)` aby przekonwertować wartość `n` na double. Ale poniższy kod działa dobrze w moim systemie: printf("%f",sqrt(9)); Wtedy również daje ten sam wynik co `sqrt((double)9)`. Dlaczego mój kompilator nie postępuje zgodnie z instrukcją?


title: Jak często powinienem kompilować?

text: Od dłuższego czasu zajmuję się tworzeniem małych aplikacji. Budowanie i debugowanie trwało kilka sekund (a może powinienem powiedzieć - sekunda?). Przyzwyczaiłem się po prostu do debugowania, aby przetestować dosłownie wszystko (i fajnie jest widzieć, jak moje rzeczy działają - prawie jak programowanie). Problem w tym, że ostatnio pracuję nad znacznie większym projektem. Jedno rozwiązanie zawiera 4 (i prawdopodobnie więcej) projekty, każdy bardzo duży. Wraz z rozwojem, czasy kompilacji naturalnie się wydłużają, co sprawia, że debugowanie jest prawdziwym problemem. Utknąłem w trybie "kompiluj każdą aktualizację" i zmarnowałem sporo czasu. Każdą widoczną aktualizację chcę to zobaczyć. **Więc...** Jak mogę wyjść z tego irracjonalnego nawyku kompilacji/debugowania i jak często powinienem faktycznie kompilować i debugować moją aplikację? **EDYTUJ:** używam programu Visual Studio. Zdaję sobie sprawę, że moje czasy kompilacji są minimalne w stosunku do tego, do czego większość z was jest przyzwyczajona, ale nadal marnuję mój czas :)


title: Czy korzystając z Hibernate możemy zapomnieć o projektowaniu baz danych?

text: Zaczęliśmy (tylko ja i mój przyjaciel) pracę nad stroną internetową. W fazie projektowania części zakończyliśmy rysowanie mapy witryny, ustalając zawartość każdej strony internetowej i nawigacji. Ponieważ chcemy użyć Spring MVC i Hibernate, najpierw chcemy zacząć od projektowania klas (klas domenowych), tak aby część bazy danych była obsługiwana przez Hibernate (z wyjątkiem niektórych tabel dla danych statycznych). Czy nasze podejście jest prawidłowe? Czy dobrze rozumiem, że kiedy używamy Hibernate, można zapomnieć o 80% projektu bazy danych?


title: Projekt bazy danych SQL do obsługi kanałów użytkownika (w aplikacjach takich jak facebook)

text: Mam serwer sieci społecznościowej z bazą danych MySql. Chcę pokazać kanały użytkowników jak zrobione na Facebooku. Przykład - UserX teraz Friend with userY, userX polubił postX itp. Obecnie mam tabelę: C1 : UserId C2 : LogType (teraz friend, like etc) C3 : ObjectId (Może być userId lub postId) - ustawiane w zależności od LogType . Obecnie, aby uzyskać wszystkie powiązane logi do wyświetlenia użytkownikowi, wykonuję następujące zapytania: 1. Get All user Friends userIds 2. Zapytanie o wszystkie wiersze, których C1 znajduje się w userIds (zapytanie zakończone) 3. Przeskanuj bazę danych i zobacz, czy LogType jest równe DidLike, sprawdź, czy OwnerId posta jest identyfikatorem użytkownika - jeśli tak, dodaj go do logów. I tak dalej. Oczywiście to wcale nie jest skuteczne. Szukam lepszego sposobu. Myślałem, że mam na myśli: Utwórz nową tabelę (oprócz tabeli Log) C1 : UserId C2 : LogId (z tabeli Log) C3 : UserID tego, który wykonał akcję Podczas odpytywania logów - spójrz do tabeli i pobierz powiązane dzienniki (przez LogId) z LogTable. Aktualizacja tabeli: Za każdym razem, gdy użytkownik wykonuje akcję, która powinna znajdować się w dzienniku: 1. Dodaj wpis Log do LogTable. 2. Przeskanuj bazę danych i zobacz, którzy użytkownicy są zainteresowani Dziennikiem (Kim są moi znajomi, kto jest właścicielem wpisu) i dodaj powiązane wpisy do nowej tabeli. (należy zrobić w BG). 3. Jeśli użytkownik UNFRIEND innego użytkownika - poszukaj w logach wszystkich wierszy, w których C3 == ID użytkownika UNFRIENDED i usuń je. Jakieś opinie? Inne sugestie?


title: Jak radzisz sobie z wieloma projektami, które tworzą ten sam produkt(y)?

text: Mam ograniczone doświadczenie w zakresie budowania i kontroli wersji systemów. Mam wrażenie, że natknąłem się na częsty problem, ale mam problem z odkryciem, w jaki sposób jest on zwykle obsługiwany. Załóżmy, że masz cztery projekty kodu źródłowego: * fooLib - Wspólna biblioteka * fizzLib - Wspólna biblioteka * buzzApp - Aplikacja zależna od fooLib * barApp - Aplikacja zależna od fizzLib i fooLib Teraz powiedzmy, że masz dwa produkty: * ProductA - potrzebuje tylko buzzApp * ProductB - potrzebuje tylko barApp Jeśli moim zadaniem byłoby naprawianie błędów w ProductB, jak bym sobie poradził z sprawdzaniem projektów? Czy mam wymyślić zależności (lub je wyszukać), czy jest jakiś zautomatyzowany sposób na zrobienie tego? Jak można to zautomatyzować w przypadku nocnych kompilacji dla każdego produktu?


title: Radzenie sobie z niewystarczającym współpracownikiem

text: Postaram się, aby ten temat był jak najbardziej ogólny, aby pytanie nie było zamknięte jako zbyt szczegółowe lub cokolwiek innego. W każdym razie przejdźmy do tego. Obecnie pracuję nad małym projektem z 15-20 programistami. Niedawno zatrudniliśmy kilka nowych osób, ponieważ mieliśmy godziny i było to dobrze zsynchronizowane z harmonogramem. To było odświeżające widzieć zatrudnianie w ten sposób, a nie tylko rzucać godziny i pracowników na problem. Niestety, mógłbym argumentować, że proces zatrudniania nadal nie jest doskonały, ale to inna historia na inny dzień. W każdym razie jeden z tych programistów jest naprawdę słaby. Deweloper jest zielony i ma wiele złych nawyków. Przychodzi później niż ja i wychodzi wcześniej niż ja. To samo w sobie nie stanowi problemu, ale brak dobrej jakości pracy sprawia, że staje się to trochę frustrujące. Kiedy rozdajemy zadania, pytanie nie brzmi już, co realistycznie można dać, ale teraz staje się: Jaką część pracy będziemy musieli wykonać? Ponieważ projekt trwa, obawiam się, że może to spowodować problemy z harmonogramem. Harmonogram można było określić jako nieco agresywny; jednak biorąc pod uwagę, że ta osoba nie wykonuje tego teraz, w moim umyśle przechodzi od agresywnego do potencjalnie chaotycznego. Tak, jedna osoba nie powinna robić ani łamać harmonogramu, a to samo w sobie jest problemem, ale proszę, zignorujmy to na razie. Jak najlepiej sobie z tym poradzić? Nie jestem szefem, nie jestem liderem projektu, ale jestem już od jakiegoś czasu i nie jestem pewien, jak postępować. Narzekanie na kierownictwo wydaje się dziecinne i nie robienie niczego wydaje się niewłaściwe. Poproszę społeczność o wgląd/porady/sugestie.


title: Poprawa czasu działania Breadth First Search i tworzenia listy sąsiedztwa

text: Dostajemy tablicę liczb całkowitych, w której wszystkie elementy mieszczą się w przedziale 0-9. musimy zacząć od pierwszej pozycji i dotrzeć do końca w minimalnej liczbie ruchów, tak abyśmy mogli z indeksu i przesunąć się o 1 pozycję w przód iw tył, tj. i-1 i i+1 oraz przeskoczyć do dowolnego indeksu o tej samej wartości co indeks i. Limit czasu: 1 sekunda Maksymalny rozmiar danych wejściowych: 100000 Próbowałem rozwiązać ten problem, używając podejścia najkrótszej ścieżki z jednego źródła przy użyciu Breadth First Search i chociaż sam BFS jest O (V + E) i działa w czasie, tworzenie listy sąsiedztwa zajmuje O ( n2) czas, a zatem ogólna złożoność staje się O(n2). czy mogę w jakiś sposób zmniejszyć złożoność czasową tworzenia listy sąsiedztwa? czy istnieje lepszy i bardziej efektywny sposób rozwiązania problemu? int main(){ wektor<int> v; ciąg znaków; zbiory wektorowe<int>[10]; cin>>str; wewn w; for(int i=0;i<str.length();i++){ in=str[i]-'0'; v.push_back(w); ustawia[w].push_back(i); } int n=v.rozmiar(); if(n==1){ cout<<"0\n"; zwróć 0; } if(v[0]==v[n-1]){ cout<<"1\n"; zwróć 0; } wektor<int> przym[100001]; for(int i=0;i<10;i++){ for(int j=0;j<zestawy[i].rozmiar();j++){ if(zestawy[i][j]>0) przym[zestawy [i][j]].push_back(zestawy[i][j]-1); if(zestawy[i][j]<n-1) przym[zestawy[i][j]].push_back(zestawy[i][j]+1); for(int k=j+1;k<zestawy[i].rozmiar();k++){ if(abs(zestawy[i][j]-zestawy[i][k])!=1){ przym[ ustawia[i][j]].push_back(zestawy[i][k]); przym[zestawy[i][k]].push_back(zestawy[i][j]); } } } } kolejka<int> q; q.push(0); odl.m.[100001]; bool odwiedził[100001]={false}; odległość[0]=0; odwiedzone[0]=prawda; int c=0; while(!q.empty()){ int dq=q.front(); q.pop(); c++; for(int i=0;i<przym[dq].rozmiar();i++){ if(odwiedzone[przym[dq][i]]==false){ odst[przym[dq][i]]=odleg [dq]+1; odwiedzone[przym[dq][i]]=prawda; q.push(przym[dq][i]); } } } cout<<odleg[n-1]<<"\n"; zwróć 0; }


title: Pisanie wymagań dotyczących pracy dla programisty aplikacji internetowych

text: Obecnie piszę wymagania dotyczące pracy na stanowisko inżyniera oprogramowania dla mojej firmy, w której poszukujemy programisty do pracy nad pracą aplikacji webowych po stronie klienta. Jak powinienem zatytułować stanowisko / stanowisko? Niekoniecznie chcę nazywać to "Programistą WWW", bojąc się, że może przyciągnąć więcej typów projektantów. Z drugiej strony, "Inżynier Oprogramowania" tak naprawdę nie daje wskazania, że praca, choć oparta na aplikacji, będzie oparta na sieci WWW. Czy „Inżynier oprogramowania aplikacji internetowych” jest prawidłowym tytułem stanowiska? Poza tym jestem nieco rozdarty, jaki powinien być wymagany zestaw umiejętności. Niekoniecznie uważam, że idealny kandydat powinien mieć x-letnie doświadczenie w, powiedzmy, JavaScript lub ActionScript, ale raczej szukam kogoś, kto ma doświadczenie w tworzeniu aplikacji po stronie klienta i jest chętny do nauki i tworzenia aplikacji internetowych. Moją obecną próbą jest to, że mam sekcję, w której stwierdzam: > Doświadczenie w następujących frameworkach i technologiach jest plusem, ale niekoniecznie wymaganym na stanowisko:


title: Czy muszę myśleć o skompilowanym kodzie maszynowym podczas pisania kodu?

text: Na przykład mam następujący kod: auto z = [](int x) -> int { if (x > 0) { switch (x) { case 2: return 5; przypadek 3: zwrot 6; domyślnie: return 1; } } return 0; }; A później dzwonię to kilka razy. W kodzie asm widzę zewnętrzne wywołania z lambdą....coś... To staje się niełatwe do odczytania i myślę, że może to również powodować wydajność. Więc może wygram w meta-programowaniu, ale czy przegram w debugowaniu i wydajności asm? Czy powinienem unikać nowoczesnych funkcji językowych, makr i innych aspektów metaprogramowania, aby mieć pewność co do wydajności i prostoty debugowania?


title: Mapuj wiele funkcji w jednym elemencie danych

text: Jestem w trakcie uczenia się Scali i natknąłem się dzisiaj na scenariusz, w którym muszę zmapować wiele funkcji na jednym kawałku danych i zastanawiałem się, czy istnieje na to formalna nazwa. To trochę jak odwrotność mapy. Nie jestem pewien, czy jest to poprawny sposób wyrażenia tego, ale zrobiłem tak: dmap(x: Object, fns: List[Function]) = fns.map(_(x)) Czy istnieje wbudowany sposób zrobić coś podobnego? Czy istnieje formalna nazwa tej funkcji?


title: Ranking graczy w zależności od decyzji podejmowanych w trakcie gry

text: Jak podejść do systemu rankingowego dla graczy, którzy grają w grę? Zasadniczo, patrząc na gry wideo, gracze w trakcie gry podejmują krytyczne decyzje, które ostatecznie wpływają na wynik końcowy gry. Czy istnieje sposób lub w jaki sposób mógłbym przełożyć niektóre z tych czynników (podnoszenie poziomu pewnych umiejętności, kupowanie określonych przedmiotów itp.) na coś w rodzaju krzywej, którą można wykreślić na wykresie? Ta gra, którą chciałbym zaimplementować to League of Legends. Przykład: Gracz na początku ma poziom 1. Zabija bardzo wcześnie w grze (dostaje złoto dzięki zabiciu i zwiększa jego „krzywą mocy”) i kupuje obrażenia od ataku (daje mu więcej obrażeń, co również zwiększa jego „krzywą mocy”). zabity (gracz 2), kupuje zbroję (odlicza obrażenia od ataku). To nieznacznie zwiększa krzywą mocy gracza 2 i zmniejsza krzywą mocy gracza 1. Jest wiele czynników, które chciałbym wziąć pod uwagę. Te czynniki względne (przykład: PONIEWAŻ gracz 2 zbudowałem zbroję, a ja głównie zadaję obrażenia od ataku, obniża moją WŁASNĄ krzywą mocy) wydaje się najtrudniejszy do wdrożenia.Moje pytanie brzmi: czy istnieje pewien sposób podejścia do tego zadania?Czy istnieją podobne teoretyczne koncepcje dotyczące systemów rankingowych, które powinienem przeczytać (Może w teorii gier lub eksploracji danych) Widziałem system ELO, ale nie wydaje mi się to, czego chcę, ponieważ po prostu bierze pod uwagę wygrane i przegrane.


title: Spodziewany czas na leniwą ocenę z zagnieżdżonymi funkcjami?

text: Kolega i ja robimy darmowy kurs R, chociaż uważam, że jest to bardziej ogólny, leniwy problem z oceną i znaleźliśmy scenariusz, który omówiliśmy pokrótce i chciałbym znaleźć odpowiedź od szerszej społeczności. Scenariusz wygląda następująco (pseudokod): wrapper => function(rzecz) { print => function() { write(thing) } } v = createThing(1, 2, 3) w = wrapper(v) v = createThing (4, 5, 6) w.print() // Wydrukuje 4, 5, 6 rzeczy. v = create(7, 8, 9) w.print() // Wydrukuje 4, 5, 6, ponieważ "rzecz" została już oceniona. Inna podobna sytuacja jest następująca: // Użycie tej samej funkcji co powyżej v = createThing(1, 2, 3) v = wrapper(v) w.print() // Funkcja wrappera kazirodztwo zawiera się sama. Teraz rozumiem, dlaczego tak się dzieje, ale mój kolega i ja różnimy się tym, co powinno się wydarzyć. Zdaniem mojego kolegi jest to błąd i ocena przekazanego argumentu powinna być wymuszona w momencie jego przekazania, aby zwrócona funkcja "w" była naprawiona. Uważam, że sam wolałbym jego opcję, ale zdaję sobie sprawę, że sytuacja, z którą się spotykamy, jest wynikiem leniwej oceny i tak to działa i jest bardziej dziwakiem niż błędem. Właściwie nie jestem pewien, czego można by się spodziewać, stąd powód, dla którego zadaję to pytanie. Myślę, że komentarze funkcji mogą wyrażać to, co się stanie, lub pozostawić to jako bardzo leniwe, a jeśli koder używający funkcji chce, aby argument został oceniony, może go wymusić przed przekazaniem go. Tak więc podczas pracy z leniwą oceną, co jest praktyka na czas oceniania argumentu przekazanego i zapisanego w funkcji?


title: Jak zgłosić błąd deweloperom? Programiści poszukujący wiedzy na temat zgłaszania błędów

text: Mam nadzieję, że uzyskam kilka wskazówek i porad, jak edukować resztę firmy, jak przesyłać odpowiednie raporty o błędach. Obecnie otrzymujemy zgłoszenia takie jak: * Kiedy klikam ten link, otrzymuję błąd 404. (Zawierają stronę z 404, a nie stronę, która je spowodowała) * Czasami prawa kolumna przechodzi do kolumny z przyciskami. (brak zrzutu ekranu lub dodatkowych informacji) * Wydaje się, że zmiany w xxx działają prawidłowo. (EOM) Czy ktoś ma proces/formularz zgłaszania błędów, który prowadzi użytkowników do przesłania jak największej ilości informacji?


title: Pytanie do wywiadu: ile byś przetestował, zanim przestaniesz?

text: To było pytanie, które dostałem w wywiadzie. Po zadaniu pytania o kodowanie ankieter zapytał, jak przetestuję funkcję. Odpowiedziałem, pisząc testy jednostkowe i przypadki testowe, aby spróbować pokryć każdy przypadek brzegowy. Kontynuacją było, ile mam przetestować, zanim przestanę? Czego ankieter szuka w tych pytaniach? a jakie są dobre odpowiedzi?


title: Co to jest schrödinbug?

text: Ta strona wiki mówi: > Schrödinbug to błąd, który objawia się dopiero wtedy, gdy ktoś czyta kod źródłowy > lub używa programu w nietypowy sposób, zauważa, że nigdy nie powinien > działać, w którym to momencie program natychmiast przestaje działać > dla wszystkich do czasu naprawy. Jargon File dodaje: „Chociaż… to brzmi > niemożliwe, zdarza się; niektóre programy przechowują ukryte schrödinbugs od > lat”. To, o czym się mówi, jest bardzo niejasne. Czy ktoś może podać przykład tego, jak wygląda schrödinbug (jak w fikcyjnej/rzeczywistej sytuacji)?


title: Gdzie mam umieścić pliki konfiguracyjne?

text: Tworzę projekt, który chcę móc rozpowszechniać na różnych platformach. Piszę w Javie i AWT, co już daje mi całkiem spory wybór urządzeń, ale najbardziej interesuje mnie Windows i Linux (Debian/Ubuntu). Próbuję ustalić, gdzie powinienem umieścić pliki konfiguracyjne. Mam pliki konfiguracyjne dla całej aplikacji i pliki specyficzne dla użytkownika. Gdzie są wspólne katalogi do umieszczania tych plików? Oto moja obecna konfiguracja: ## Windows: Konfiguracja aplikacji: `%PROGRAMDATA%\MyApp\config\` Konfiguracja użytkownika: `%USERPROFILE%\AppData\Local\MyApp\` ## Inne: Konfiguracja aplikacji: `/opt/MyApp/ config` Konfiguracja użytkownika: `$HOME/.MyApp/`


title: Jakie obowiązki mają deweloperzy o wysokim stopniu upublicznienia wobec swoich użytkowników? (Albo dlaczego opowieść o szczęśliwym sztywniaku)

text: Why the Lucky Stiff usunął większość swojego profilu online 19 sierpnia 2009. Autor (przejmującego) przewodnika Why's po Ruby, Hpricot i wielu innych projektach pozostawił wielu zdezorientowanych i zdenerwowanych użytkowników. Zed Shaw nazwał to „dupą rzeczy do zrobienia”. John Resig nazwał swoją pracę „Piaskową Mandalą”. Czy deweloperzy mają niepisane zobowiązanie wobec swoich użytkowników? Czy ich obowiązek rośnie wraz z ich prestiżem?


title: Wywołanie procedury składowanej MSSQL z kontrolera Zend? Jakieś inne podejścia?

text: _MSSQL i DB, Zend jako PHP Framework_ , używam tego sposobu do wywołania SP z parametrami I/P i uzyskania parametrów O/p. Wygląda na to, że piszę kod SQL w PHP. Jakieś inne dobre podejścia? $str1 = "DECLARE @Msgvar varchar(100); DECLARE @last_id int; exec DispatchProduct_m_Ins $DispatchChallanId,'$FRUNo',$ILOŚĆ,$Rate,$Amount, ".$this->cmpId.",".$this ->aspId.",".$this->usrId.",@Msg = @Msgvar OUTPUT,@LAST_ID = @last_id OUTPUT; SELECT @Msgvar AS N'@Msg',@last_id AS '@LAST_ID'; "; //Wywołanie SP $stmt = $db->prepare($str1); $stmt->wykonaj(); $rsDispProd = $stmt->fetchAll(); $DispatchProductId = $rsDispProd[0]["@LAST_ID"];//pobierz ostatni identyfikator ins jako parametr O/p


title: W odniesieniu do rozwoju .NET i startupów

text: Nie zamieszczam własnego pytania, ale jestem "programistą .NET". Przeczytałem następujący artykuł o opinii jednego z prezesów startupów na temat zatrudniania doświadczonych programistów .NET. Ma kilka komentarzy na blogu, ale nie ma zbyt dużego formatu dyskusji, jak to jest możliwe tutaj. Nie wiem też nic o tym człowieku, ani nie promuję jego bloga w jakikolwiek sposób, ale artykuł mnie trochę zbił i chciałbym usłyszeć opinie od deweloperów. Osobiście rozumiem jego punkt widzenia, ponieważ niektórym osobom bardzo łatwo jest stworzyć podstawową witrynę ASP.NET lub inne zautomatyzowane rozwiązania bez większej wiedzy o czymkolwiek poza tym, a tym samym nie uczyniłoby ich dobrymi programistami. Ale myślę też, że w dużej mierze ignoruje fakt, że chociaż wiele elementów frameworka zostało zautomatyzowanych i działa dobrze, możesz wymyślić bardzo zaawansowane rozwiązania, jeśli naprawdę masz wiedzę i motywację do odkrywania pełnych możliwości ramy. Wiele z ich zautomatyzowanych narzędzi to „czarna skrzynka”, ale nigdy nie miałem problemu, gdy musiałem uzyskać więcej „niskiego poziomu” lub rozszerzyć klasę bazową, aby dać mi to, czego naprawdę potrzebowałem w sposób, który nie był już dostępny. Jakie są twoje opinie za lub przeciw? CEO Friday: Dlaczego nie zatrudniamy programistów .NET


title: HTML5 i praktyki związane z grami

text: Próbuję zbudować aplikację z HTML5. Czy istnieje pewna składnia, której należy przestrzegać podczas tworzenia obiektów do gier? Ktoś tego próbował i jakie dobre praktyki należy stosować?


title: Jako ankieter, prosząc kandydata o znalezienie błędów w małym, przykładowym kodzie. Czy to jest sprawiedliwe?

text: Przeprowadzaliśmy rozmowy kwalifikacyjne z przerwami przez około dwa lata i przeprowadziłem je przez około 30 kandydatów. Napisałem około 20 linijek kodu, które wykonują stosunkowo prostą operację, ale zawierają sporo błędów. Żaden z nich nie jest błędem składni. Błędy obejmują złe zarządzanie pamięcią, nieprawidłowe typy danych, problemy z wielowątkowością, niewłaściwe użycie słów kluczowych i kilka błędów funkcjonalnych, które dawałyby niepożądane wyniki. Podczas tego pytania ludzie „bardzo się denerwują”. Czy to uczciwe pytanie? Celem jest zorientowanie się w ich poziomie komfortu z językiem (Cel C ma bardzo dziwne zachowania, a większość kandydatów, których otrzymujemy, jest stosunkowo mało doświadczonych w ObjC w porównaniu z innymi językami), a także zobaczenie ich zdolności do rozpoznawania logicznych problemy w innym kodzie obcym. Gdy kandydat wykonał pierwszy krok, często wskazuję konkretne linie, na których pozostały błędy, i sprawdzam, ile potrzeba trzymania ręki, aby uzyskać poprawną identyfikację i/lub naprawić od nich. W naszej firmie jest to scenariusz z prawdziwego świata, ponieważ programiści zostaliby wrzuceni bezpośrednio do aplikacji o wielkości 100 tys. linii i otrzymaliby błędy do naprawienia, a my potrzebujemy ludzi, którzy czują się komfortowo w pracy z kodem 6 innych programistów. Jednak dzisiaj inny z naszych ankieterów powiedział mi, że nienawidzi tego problemu (co prawda nie do końca rozumiałem, jaki był jego powód). Czy to jest coś, o co powinienem nadal pytać, czy powinienem szukać alternatywnych dróg?


title: Jak wymusić implementację interfejsu, aby zachowywał się w określony sposób?

text: Załóżmy, że masz następujący interfejs publiczny IUserRepository { User GetByID(int userID); } W jaki sposób można wymusić na implementatorach tego interfejsu zgłoszenie wyjątku, jeśli użytkownik nie zostanie znaleziony? Podejrzewam, że nie da się tego zrobić z samym kodem, więc jak wymusić implementację implementacji zamierzonego zachowania? Czy to poprzez kod, dokumentację itp.? W tym przykładzie oczekuje się, że konkretna implementacja wygeneruje klasę publiczną `UserNotFoundException` SomeClass { private readonly IUserRepository _userRepository; public SomeClass(IUserRepository userRepository) { _userRepository = userRepository; } public void DisplayUser() { spróbuj { var user = _userRepository.GetByID(5); MessageBox.Show("Witaj " + użytkownik.Nazwa); } catch (UserNotFoundException) { MessageBox.Show("Nie znaleziono użytkownika"); } } }


title: Narzędzia Agile (scrum) i UML w obie strony

text: Jak skuteczne są zautomatyzowane narzędzia do pracy w obie strony do modelowania UML? Czy pomagają w pisaniu szybkiego, czystego, wydajnego kodu? W jaki sposób te narzędzia wpisują się w metodologię Agile?


title: Kiedy należy opracować aplikację gui, a nie aplikację internetową?

text: Od jakiegoś czasu myślałem o aplikacji, którą chcę rozwijać. Krótko mówiąc, chcę, aby ta aplikacja wykonywała pewne operacje crud. Aplikacja będzie przeznaczona dla kancelarii, więc ogólne bezpieczeństwo będzie bardzo ważne. Moim podstawowym językiem programowania jest php, ale nie miałbym nic przeciwko nauce Javy lub być może Objective C, aby moja aplikacja była natywna dla systemu OS-x i iOS. Wracając do mojego pytania, jakie są zalety i wady tworzenia aplikacji gui, a nie tylko tworzenia aplikacji dla przeglądarki? Powodem, dla którego pytam, jest to, że jeśli istnieją jakieś korzyści z tworzenia aplikacji gui w, powiedzmy, celu c, to chyba muszę zacząć się skupiać na nauce języka. Ważne uwagi dotyczące aplikacji, którą chcę rozwijać: * Łączność z bazą danych * Bezpieczeństwo (bardzo ważne)


title: Z jakich elementów moich JUnitów powinienem kpić?

text: Moje klasy są zgodne z tą strukturą Warstwa usług (tworzy i mapuje InputDTO do danych DB) -> DAO Tier (faktycznie wykonuje wywołania DB) Kiedy piszę JUnits warstwy usług i kiedy wywołuje DAO Tier, oczekuje rzeczywistego połączenia z bazą danych i uzyskania dane z DB. Czy powinienem podszywać warstwę DAO całkowicie z warstwy usług, czy też powinienem podszywać połączenie DB i dane odebrane z DB? Po drugie, aplikacja oczekuje pewnych danych z pamięci podręcznej. W przypadku środowiska wykonawczego JUnit nie ma pamięci podręcznej, więc jak należy to obsłużyć — ponieważ metoda warstwy usług obejmuje wyszukiwanie pamięci podręcznej w celu uzyskania szczegółów.


title: Warto Algorytm Wyzwania i wydarzenie?

text: Interesuje mnie, czy wskazane jest, aby studenci informatyki spędzali większość czasu na sędziach online ćwiczących programowanie (takich jak Topcoder i codeforces), czy też bardziej opłaca się rozwijać oprogramowanie lub przyczyniać się do open-source?


title: Mówienie „nie wiem” podczas wywiadu technicznego

text: Jeśli podczas wywiadu programistycznego zadano ci serię pytań technicznych, to źle wygląda przyznanie się, gdy nie znasz odpowiedzi na pytanie? Innymi słowy, czy przyjęcie sprawia, że wyglądasz na niekompetentnego lub źle przygotowanego? A może zakłada się, że nikt nie będzie znał odpowiedzi na każde pytanie? Czy przyznanie się do tego zamiast oddania strzału w ciemności sprawia, że wyglądasz szczerze lub jak wiesz wszystko?


title: Walidacja MVC z ModelState.isValid za pomocą kreatora

text: Pracuję nad małym projektem edukacyjnym na MVC 3 i mam mały problem, gdy próbuję obsłużyć walidację w mojej aplikacji za pomocą kreatora. Próbowałem czerpać korzyści ze zdolności MVC3 do dostarczania zawartości innego widoku przy użyciu tego samego adresu URL podczas obsługi metody `[HttpPost]` na stronie. W moim przypadku, moja główna klasa modelu zawiera około dziesięciu właściwości `[Required]`, które chciałbym wyeksponować za pomocą małego kreatora w 3 krokach, więc chcę, aby użytkownik mógł wprowadzić swoje dane osobowe w pierwszym kroku , następnie odpowiedz na kilka pytań w drugim kroku i na koniec otrzymasz wiadomość e-mail z potwierdzeniem od aplikacji internetowej z jego danymi uwierzytelniającymi w ostatnim kroku. Nie mogę uzyskać dostępu do ostatniego kroku z powodu metody ModelState.isValid, której używam do obsługi walidacji i która nie może działać poprawnie, jeśli zdefiniuję niektóre właściwości jako `[Required]`, ale nie umieszczam ich w pierwszy widok. Ponieważ odpowiedzi na te pytania pozostają w kilku opcjach, pomyślałem, że mogę użyć kilku wartości logicznych "bool?", aby uniknąć problemów z walidacją, ale wiem, że nie jest to właściwy sposób. Czy jest ktoś, kto chciałby mi pomóc znaleźć sposób na rozszerzenie mojej walidacji na te trzy kroki? Z góry dziękuję i przepraszam za mój angielski, nie jestem native speakerem.


title: Pomóż znaleźć tyldę następującego algorytmu

text: Załóżmy, że mam algorytm, który zajmuje N^100/2^N do ukończenia. Czy tylda tego będzie równa 0? Ale to nie ma sensu. Jednakże, ponieważ algorytm dąży do 0 przy wzroście N, jakie powinno być przybliżenie tyldy? Z góry dziękuję.


title: Szacowanie czasu potrzebnego na ukończenie tego algorytmu szybkiego wyszukiwania

text: Próbuję oszacować, jak długo ten algorytm szybkiego wyszukiwania zajmie problemy typu Union Find. Oto kod: public int find(int p) { return id[p]; } public void union(int p, int q) { int pID = find(p); int qID = znajdź(q); if (pID == qID) powrót; for(int i = 0; i < id.długość; i++) { if (id[i] == pID) id[i] == qID; liczyć--; } Uwaga: zmienna count jest oparta na długości identyfikatora. A zatem, jaki jest minimalny czas, jaki zajmie ten algorytm (w dniach), aby był w stanie rozwiązać problem z witrynami `10^9`, parami wejściowymi `10^6` na komputerze zdolnym do wykonania `10^9` instrukcji na sekundę? Załóżmy, że każda iteracja wewnętrznej pętli for zajmuje 10 instrukcji. Moja praca: Ponieważ istnieją pary wejściowe `10^6` i strony `10^9`, po prostu pomnożyłem je i otrzymałem instrukcje `10^15`, które należy wypełnić. Po podzieleniu przez 10 i liczbę sekund w ciągu dnia, mam do ukończenia około 11 dni. Czy są jakieś zmienne, których mi brakuje? Zauważyłem, że było napisane „minimum”. Myślę, że w minimalnym przypadku dostęp do tablicy byłby `(N + N-1 + N-2 ... 1)` (Długość wejściowa).


title: Korzyści z tytułu Masters of Engineering Professional Practice dla słabszego (ale aspirującego) programisty

text: Szukałem w stanowych programach studiów online „aby pasowały do mojego intensywnego stylu życia” (tj. trójki dzieci, żony i półtorej godziny dojazdów). Jeden interesujący, jaki znalazłem, to ten Master of Engineering w praktyce zawodowej. Wygląda na bardziej przydatne i praktyczne niż MBA w zarządzaniu projektami. Skontaktuję się z działem przyjęć w sprawie szczegółów. Ale tutaj pytam tylko ogólnie. Czy kursy na tym stopniu dotyczą inżynierii/rozwoju oprogramowania w nawet abstrakcyjnym sensie. Uczelnia, na którą patrzę, nie ma kierunku Inżynieria Oprogramowania w szkole inżynierskiej. Nie interesuje mnie astronomia architektury, ale interesuje mnie pomaganie mojej firmie w osiągnięciu sukcesu i możliwość przekazywania informacji technicznych na wysokim i efektywnym poziomie, a także poprowadzenie moich współprogramistów w kierunku bardziej solidnego produktu końcowego. Moje wieloczęściowe pytanie brzmi: 1. Jaka może być rzeczywista korzyść dla mnie i mojego mózgu oraz 2. Jak przekonać mojego szefa (właściciela firmy, który zwraca czesne), że tylko dlatego, że nie mówi cokolwiek na temat oprogramowania, które może nam jeszcze pomóc? 3. Aha, a jak mam pominąć fakt, że tytuł magistra dałby mi lepsze kwalifikacje do bycia kierownikiem projektu niż… kierownikiem projektu? (kto jest moim przełożonym)


title: Ciąg wysyłany do sieci nie obsługuje UTF 8

text: Próbuję wysłać jakiś tekst do sieci i to są moje kody, ale nie obsługuje on utf8 Na przykład `آرین Pokaż ????` jak mogę usunąć ten problem?! Pakiet FragmentForm com.kamalan.phpandroidapi; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; importowanie java.net.HttpURLConnection; import java.net.MalformedURLException; importuj java.net.URL; importuj android.app.Activity; importuj android.app.ProgressDialog; importuj android.content.Context; importuj android.treść.Intent; importuj android.net.Uri; importuj android.os.AsyncTask; importuj android.os.Bundle; importuj android.provider.Settings.Secure; importuj android.support.v4.app.fragment; importuj android.util.Log; importuj android.view.LayoutInflater; importuj android.view.View; importuj android.view.ViewGroup; importuj android.widget.EditText; importuj android.widget.ImageButton; importuj android.widget.RatingBar; importuj android.widget.TextView; importuj android.widget.Toast; public class FragmentForm extends Fragment { // Interfejs do wyświetlania lub odrzucania publicznego interfejsu ProgressBar OnSendingRequestToServer { public void DisplayLoding(boolean setVisibility); } prywatny końcowy String TAG = "FragmentForm"; prywatne OnSendingRequestToServer onRequestToServer; kontekst kontekstu prywatnego; prywatny EditText etName; prywatny EditText etComment; private RatingBar ratingBar; prywatny ImageButton ibSubmit; @Zastąp public void onAttach(Aktywność) { super.onAttach(aktywność); spróbuj { onRequestToServer = (OnSendingRequestToServer) aktywność; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " musi zaimplementować interfejs OnConnectingToServer."); } kontekst = aktywność.getApplicationContext(); Log.d(TAG, "Fragment dołączony do aktywności."); } @Override public View onCreateView(Inflater LayoutInflater, kontener ViewGroup, Bundle protectedInstanceState) { super.onCreateView(inflater, kontener, protectedInstanceState); Widok widoku = inflater.inflate(R.layout.fragment_form, kontener, false); etName = (EditText) view.findViewById(R.id.etName); etComment = (EditText) view.findViewById(R.id.etComment); ratingBar = (RatingBar) view.findViewById(R.id.ratingBar); ibSubmit = (ObrazButton) view.findViewById(R.id.ibSubmit); //TextView tvcm = (TextView) view.findViewById(R.id.tvComment); Log.d(TAG, "Utworzono fragment."); widok powrotu; } @Override public void onActivityCreated(Bundle protectedInstanceState) { super.onActivityCreated(savedInstanceState); ibSubmit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String strName = etName.getText().toString().trim(); if(strName.length() <= 0) { Toast.makeText(context, "نام خود را وارد کنید", Toast.LENGTH_LONG.show(); return; } String strComment = etComment.getText().toString().trim(); if(strComment.length() <= 0) { Toast.makeText(context, "متن جک را وارد کنید", Toast.LENGTH_LONG.show(); return; } int rate = (int) ratingBar.getRating(); if(rate <= 0) { Toast.makeText(context, "امتیاز جکتان را وارد کنید", Toast.LENGTH_LONG.show(); return; } String identyfikatorurządzenia = getDeviceId(); nowe SendFormTask(deviceId, strName, rate, strComment).execute(); } private TextView findViewById(int tvcomment) { // TODO Automatycznie wygenerowana metoda skrótowa return null; } }); } private String getDeviceId() { return Secure.getString(context.getContentResolver(), Secure.ANDROID_ID); } /*--------------------------------------------------------------- ----------------------------- * Ta metoda jest odpowiedzialna za utworzenie kolejnego wątku równolegle z * głównym wątkiem UI w celu wysłania żądanie do serwera i uzyskanie danych (jeśli istnieją). * -------------------------------------------------- --------------------------*/ public class SendFormTask extends AsyncTask<Void, Void, Boolean> { String deviceId, name, comment; stopa procentowa; SendFormTask(String deviceId, String strName, int rate, String strComment) { this.deviceId = deviceId; this.name = strNazwa; this.rate = stopa; ten.komentarz = strKomentarz; } @Override protected void onPreExecute() { Log.d(TAG, "SendFormTask zaraz się rozpocznie..."); onRequestToServer.DisplayLoding(prawda); } @Override protected Boolean doInBackground(Void...params) { boolean status = false; HttpURLConnection urlConnection = null; try { URL url = nowy adres URL(LinkManager.getFormAPI(deviceId, name, rate, comment)); Log.d(TAG, "Spróbuj otworzyć: " + url.toString()); urlConnection = (HttpURLConnection) url.openConnection(); int kododpowiedzi = urlConnection.getResponseCode(); Log.d(TAG, "Kod odpowiedzi to: " + kododpowiedzi); if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); if (in != null) { StringBuilder strBuilder = new StringBuilder(); // Czytaj znak po znaku int ch = 0; while ((ch = in.read()) != -1) strBuilder.append((char) ch); // pobierz zwróconą wiadomość i pokaż ją String response = strBuilder.toString(); Log.d("Odpowiedź serwera:", odpowiedź); if(response.equalsIgnoreCase("1")) status = prawda; } w.zamknij(); } } catch(MalformedURLException e){ e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } wreszcie { urlConnection.disconnect(); } status powrotu; } @Override protected void onPostExecute(Boolean result) { Log.d(TAG, "SendFormTask zakończył swoje zadanie."); onRequestToServer.DisplayLoding(false); if(wynik) Toast.makeText(context, "جک شما ارسال شد, منتظر تایید آن اشید", Toast.LENGTH_LONG).show(); else Toast.makeText(context, "جک شما ارسال شد , منتظر تایید آن اشید", Toast.LENGTH_LONG).show(); } } } i `LinkManager.java` public class LinkManager { private final static String API_FORM = "http://jimmy.ir/jimmy/sendjoke.php?p1=#@#&p2=#@@#&p3=#@@ @#&p4=#@@@@#"; private final static String API_Comment = "http://jimmy.ir/jimmy/index.php?p1=#@#"; public static String getFormAPI(String deviceId, String name, int rate, String komentarz) { String url = API_FORM; url = url.replaceAll("#@#", identyfikator urządzenia); url = url.replaceAll("#@@#", nazwa); url = url.replaceAll("#@@@#", Integer.toString(rate)); url = url.replaceAll("#@@@@#", komentarz); url = url.replaceAll(" ", "%20"); zwrotny adres URL; } public static String getCommentAPI(String deviceId) { String url = API_Comment; url = url.replaceAll("#@#", identyfikator urządzenia); zwrotny adres URL; } } Sry Mój angielski jest zły.


title: Jak zablokować/odblokować przycisk na podstawie tweetowania

text: Mam przycisk, który będzie wyłączony, dopóki nie wyślesz tweeta, który stworzyłem. Tylko użytkownicy z kontami na Twitterze będą mieli do niego dostęp. Aby uzyskać dostęp do tego przycisku, będę wymagać od użytkowników zalogowania się. Jakie narzędzia są dla mnie dostępne, aby sprawdzić, czy 1. Użytkownik rzeczywiście go napisał na Twitterze 2. Użytkownik nie usunął później tweeta Teraz nie ma sposobu, aby faktycznie powstrzymać użytkownika przed usunięciem tweeta, ale chciałbym wyłącz przycisk, jeśli użytkownik faktycznie zdecydował się go później usunąć.


title: Jaki jest dobry przypadek użycia scala?

text: W bieżącym projekcie skonfigurowaliśmy kompilację tak, abyśmy mogli mieszać Javę i Scala. Chciałbym użyć więcej Scali w naszej bazie kodu, aby kod był bardziej czytelny i zwięzły. W procesie ucz się również języka, przekazując prawdziwe funkcje. Dlatego planuję użyć Scali na niektórych zajęciach, aby pokazać jej zalety i przekonać innych deweloperów, aby również przyjrzeli się użyciu Scali. W przypadku serwera WWW opartego na reszcie lub ogólnie programu, jakiego rodzaju struktury kodu nadają się do funkcjonalnego stylu programowania Scali.


title: Jakie są ograniczenia systemu zdarzeń zbudowanego na Messengerze, a nie na klasycznych zdarzeniach .NET?

text: MVVM Light i PRISM oferują komunikator do wdrożenia systemu eventowego. przybliżony interfejs wygląda następująco: interface Messanger { void Subscribe<TMessageParam>(Action<TMessageParam> action); void Anuluj subskrypcję<TMessageParam>(Akcja<TMessageParam> akcja); void Anuluj subskrypcję<TMessageParam>(Właściciel akcji obiektu); void Powiadom<TMessageParam>(parametr TMessageParam); } Teraz ten model wydaje się korzystny w porównaniu z klasycznymi wydarzeniami .net. Działa dobrze z Dependency Injection. Akcje są przechowywane jako słabe referencje, dzięki czemu unika się wycieków pamięci, a rezygnacja z subskrypcji nie jest koniecznością. Jedyną irytacją jest konieczność deklarowania nowego TMessageParam dla każdej konkretnej wiadomości. Ale wszystko ma swoją cenę. I to, co mnie naprawdę niepokoi, to to, że nie widzę żadnych niedociągnięć w tym podejściu. Czy masz jakieś problemy z tym wzorcem projektowym? **Aktualizacja** Próbowaliśmy i najbardziej nieprzyjemną rzeczą z wiadomościami jest ich niejawność z punktu widzenia interfejsu. Komunikaty sprzeczne z Zdarzeniami nie są jawnie ujawniane w interfejsie, dlatego należy dostarczyć dodatkową dokumentację. Jak powiedział Laurent poniżej, bardzo luźne sprzężenie wiąże się z niejasnością.


title: Pogodzenie sprzecznych porad programistycznych: spraw, aby coś działało i iteruj, a nie przemyśl tego przed kodowaniem

text: Jestem średniozaawansowanym programistą z kilkuletnim doświadczeniem zawodowym, który jest w połowie studiów magisterskich. Podczas nauki programowania często słyszałem dwie pozornie sprzeczne rady. Pierwszą radą było, aby coś działało szybko, zobacz, jak to działa (czy to poprzez prototypowanie, czy nieformalne testy), ulepsz wersję , zobacz, jak to działa ponownie, ulepsz ponownie... a następnie powtarzaj cykl, aż skończysz . Jest to czasami nazywane „rozwojem spiralnym” lub określane jako „wypuszczaj wcześnie, wypuszczaj często”. Druga rada brzmiała: naprawdę przemyśl projekt, zanim napiszesz jakikolwiek kod. Odniosłem sukces z obiema metodami i powiedziałbym, że zgadzam się z każdą filozofią. Ale teraz zaczynam zajmować się znacznie bardziej złożonymi projektami, których nie mam pojęcia, jak je zrealizować (takie jak aplikacje rozproszone i programowanie grafiki sterowane wydajnością). Jak mam zajmować się tymi projektami? Czy po prostu zaczynam kodować COŚ i uczę się (platformy/metody/języki/architektury) w miarę jak idę – czy też powstrzymuję się od kodowania i robię mnóstwo badań/czytania, zanim jeszcze otworzę IDE? Jak pogodzić te sprzeczne rady programistyczne?


title: Łączenie metod vs enkapsulacja

text: Istnieje klasyczny problem OOP związany z łączeniem metod w łańcuchy vs metody „pojedynczego punktu dostępu”: main.getA().getB().getC().transmogrify(x, y) vs main.getA().transmogrifyMyC(x, y) Pierwsza wydaje się mieć tę zaletę, że każda klasa jest odpowiedzialna tylko za mniejszy zestaw operacji i sprawia, że wszystko jest o wiele bardziej _modułowe_ \- dodanie metody do C nie wymaga żadnego wysiłku w A, B lub C, aby wyeksponować to. Minusem jest oczywiście słabsza _enkapsulacja_ , którą rozwiązuje drugi kod. Teraz A ma kontrolę nad każdą metodą, która przez nią przechodzi, i może delegować ją do swoich pól, jeśli chce. Zdaję sobie sprawę, że nie ma jednego rozwiązania i oczywiście zależy to od kontekstu, ale naprawdę chciałbym usłyszeć coś o innych ważnych różnicach między tymi dwoma stylami i w jakich okolicznościach powinienem preferować którykolwiek z nich - bo właśnie teraz, kiedy próbuję aby zaprojektować jakiś kod, czuję, że po prostu nie używam argumentów do decydowania w ten czy inny sposób.


title: W jaki sposób klasa kolekcji może tworzyć instancje wielu obiektów za pomocą jednego wywołania bazy danych?

text: Mam `baseClass` gdzie nie chcę ustawiać publicznych. Mam metodę `load($id)`, która pobierze dane dla tego obiektu z bazy danych. Używam statycznych metod klas, takich jak `getBy($property,$values)` do zwracania wielu obiektów klasy przy użyciu pojedynczego wywołania bazy danych. Ale niektórzy ludzie twierdzą, że metody statyczne nie są OOP. Więc teraz próbuję utworzyć `baseClassCollection`, który może zrobić to samo. Ale nie może, ponieważ nie ma dostępu do chronionych ustawiaczy. Nie chcę, aby każdy mógł ustawić dane obiektu. Ale wydaje się, że jest to propozycja typu „wszystko albo nic”. Nie mogę dać ustawiającym dostępu tylko do klasy kolekcji. Widziałem rozwiązanie przy użyciu `debug_backtrace()`, ale wydaje się to nieeleganckie. Idę w kierunku upublicznienia seterów. Czy są jakieś inne rozwiązania? A może powinienem nawet szukać innych rozwiązań?


title: Jak mogę testować jednostkowo, czy klasa używa cechy w oczekiwany sposób?

text: „Klasa” ma „cechę”. Oczekuje się, że „klasa” wywoła funkcję dostarczoną przez „cechę” podczas pewnego wywołania „metody”. Jak napisać „test jednostkowy”, aby upewnić się, że tak się stanie? Dla mnie trudność wynika z faktu, że „cecha” jest częścią „definicji klasy”, więc nie mogę kpić z tej cechy w teście, tak jak bym mogła, gdyby „cecha” była zamiast tego „obiektem”, który był przekazany do konstruktora `class`.


title: Jakie są typowe wzorce obsługi możliwej liczby mnogiej we właściwościach wiadomości?

text: Oczywiście użytkownicy lubią widzieć tekst w odpowiedniej liczbie mnogiej, a schematy liczby mnogiej różnią się w różnych językach pisanych, jakie można napotkać. Jakie wzorce są przydatne podczas internacjonalizacji aplikacji do obsługi wiadomości z możliwą liczbą mnogą? A co z wiadomościami z wieloma możliwymi liczbami pluralistycznymi? Na przykład: „N recenzji:” Jeden wzorzec to opinie.title.singular="{0} recenzja:" reviews.title.plural="{0} recenzje:" A to może nie obsługiwać wszystkich języków. Lub bardziej skomplikowany przypadek: „Znaleziono pytania M z komentarzem N”. To byłoby trudne do wsparcia nawet w języku angielskim.


title: Dlaczego istnieją dwa różne rodzaje linkowania, tj. statyczne i dynamiczne?

text: Już po raz n-ty zostałem ugryziony przez niezgodność bibliotek między środowiskiem kompilacji i wdrażania. Środowisko kompilacji miało `libruby.so.2.0`, a środowisko wdrażania posiadało `libruby.a`. Jeden rubin został zbudowany za pomocą RVM, drugi został zbudowany za pomocą `ruby-build`. Powodem, dla którego napotkałem problem, było to, że zookeeper został skompilowany w środowisku kompilacji, które miało bibliotekę współdzieloną, ale środowisko wdrażania miało tylko bibliotekę statyczną. Przez wszystkie lata pisania kodu aplikacji nigdy nie marzyłem, aby pliki binarne, których używałem, były połączone z obiektami współdzielonymi. Z jakiego powodu ta dychotomia utrzymuje się do dziś w nowoczesnych systemach operacyjnych?


title: Jak biurokracja wpływa na jakość kodu?

text: Interesują mnie historie, w których **biurokracja biurowa** miała bezpośredni wpływ na ostateczny wynik **jakości kodu**. Na przykład znajomy właśnie powiedział mi, że w jego poprzednim miejscu pracy system kontroli wersji był tak obszerny, że programiści nie mogli tworzyć nowych "modułów" (katalogów głównych w drzewie źródłowym) bez pytania o uprawnienia bogów VCS. W rezultacie programiści nie chcieli przechodzić przez dodatkowy krok biurokratyczny i zamiast odpowiednio komponować swoje usługi, umieszczali niepowiązaną funkcjonalność na wierzchu istniejących modułów, nawet jeśli funkcjonalność była tylko zdalnie powiązana z bieżącą definicją modułu lub nazwą modułu było w przeszłości. (nie wspominając o zmianie nazwy modułu...) Interesują mnie podobne historie biurokracji biurowej, operacyjnej lub innej, które ostatecznie, być może nieumyślnie wpłynęły na jakość oprogramowania


title: Koncepcja aukcji groszowej i sposób działania timera

text: Tworzę serwis aukcyjny grosza przy użyciu frameworka PHP yii. Głównym założeniem systemu jest aktualizacja rekordów bazy danych wszystkich aktywnych aukcji (maksymalnie 15 aukcji) o aktualny ticker. Potrzebuję porady, jak zaprojektować system, w którym każdy przedmiot aukcyjny będzie miał w bazie danych swój własny licznik. Gdy ktoś licytuje przedmiot aukcji, licznik powinien zresetować się do 2 min. Wszyscy użytkownicy, którzy są połączeni z systemem, powinni widzieć ten sam licznik czasu dla tej konkretnej aukcji. Jestem trochę zdezorientowany, jak powinienem zaprojektować system. Czy wystąpi problem z wydajnością w przypadku częstych aktualizacji bazy danych (Mysql)? Jeżeli jest 15 aktywnych aukcji i są one aktualizowane co sekundę, licznik odliczania zmniejsza się o sekundę w tabeli bazy danych dla danej aukcji. Mój pierwszy pomysł na schemat bazowy, dla tabeli o nazwie `auction_lots`: Auction_id,startdatetime,counter_timer,status. Szukam porady, jak to zaprojektować.


title: Sprzedajesz swoje usługi, gdy korzystasz z nietypowych technologii

text: Zajrzałem do najpopularniejszych profili Stack Overflow, a potem zrobiłem to samo w kilku innych serwisach, a potem zajrzałem do ogłoszeń o pracę na kilku forach, głównie z ciekawości, bo zauważyłem to: Jeśli pracujesz z Javą , .NET lub inne zarządzane języki, albo pracujesz z rzeczami, które są popularne w tworzeniu stron internetowych (Ruby, JavaScript itp.), możesz zdobyć wiele punktów na Stack Overflow, znaleźć wiele ofert pracy i klientów, znaleźć fora, znajomych , koledzy, itd... Ale jak programista nietypowych języków (Lua, czysty C, Lisp, D, ADA, Haskell itd...) znajduje informacje, sprzedaje swoje usługi i tak dalej? EDIT: Dotyczy to również dziedzin: Pracujesz z webem, oprogramowaniem korporacyjnym, bazą danych itp... jest super... Nie lubisz tych poprzednich 3, nikt nigdy nie wynajmie Twoich usług...


title: Konwencje nazewnictwa dekonstruktorów nowego typu (destruktorów?)

text: Patrząc na standardową bibliotekę Haskella, widzimy: newtype StateT s m a = StateT { runStateT :: s -> m (a, s) } newtype WrappedMonad m a = WrapMonad { unwrapMonad :: m a } newtype Sum a = Sum { getSum :: a } Najwyraźniej istnieją (co najmniej) 3 różne prefiksy używane do rozpakowania wartości wewnątrz `newtype`: _un-_ , _run-_ i _get-_. (Ponadto _uruchom-_ i _pobierz-_ wielką literę, podczas gdy _un-_ nie.) To wydaje się mylące. * Czy są ku temu jakieś powody, czy to tylko kwestia historyczna? * Jeśli projektuję własny `newtype`, jakiego prefiksu powinienem użyć i dlaczego?


title: Najlepsze praktyki dotyczące wersjonowania projektu po aktualizacji zależności

text: Powiedzmy, że mój projekt ma zależność N w wersji 1.0.0. Potem coś się zmieniło i powinienem polegać na nowszej wersji - niech będzie 1.0.1. OK, zwiększam wersję zależności, nic więcej nie zmienia się w moim kodzie. Wygląda na to, że powinienem inkrementować wersję moich własnych projektów, ale jak dokładnie powinienem inkrementować? Czy powinienem zwiększać tylko trzecią liczbę (tzw. rewizję), czy najlepsze praktyki są tutaj bardziej skomplikowane. Na przykład może być tak, że jeśli zmieniamy drugorzędną wartość zależności projektów, powinniśmy zrobić to samo w samym projekcie?


title: Czy przeciążanie operatora jest obsługiwane w C?

text: Dzisiaj, gdy przeczytałem o kompilatorze LCC (Windows), dowiedziałem się, że ma implementację do przeciążania operatorów. Jestem zdziwiony, ponieważ po trochę Gogglingu potwierdzono, że przeciążanie operatora nie jest obsługiwane w standardzie C, ale przeczytałem komentarz niektórych osób, w którym wspomniano, że LCC jest zgodne z ANSI. Tak więc moje prawdziwe pytanie brzmi, czy LCC jest naprawdę standardowym C, czy też jest jak cel-c, wariant C z funkcjami zorientowanymi obiektowo?


title: Co sprawia, że Erlang nadaje się do aplikacji w chmurze?

text: Rozpoczynamy nowy projekt i wdrażamy w naszych korporacjach instancję chmury openstack (patrz http://www.openstack.org/). Projekt jest oprzyrządowaniem bezpieczeństwa dla naszej korporacji. Obecnie uruchamiamy wiele setek serwerów dedykowanych dla narzędzi bezpieczeństwa i przenosimy je do naszych korporacji, instancje openstack. Inne projekty w mojej firmie obecnie używają erlanga w kilku aplikacjach serwerów rozproszonych, a inne pytania wskazują, że erlang jest używany w kilku popularnych usługach chmurowych. Staram się przekonać innych do rozważenia, gdzie może to mieć zastosowanie w naszym projekcie. Jakie są mocne strony erlang w programowaniu w chmurze? Gdzie są obszary, w których używanie erlangu jest szczególnie odpowiednie?


title: Flagi metod jako argumenty czy jako zmienne składowe?

text: Myślę, że tytuł „Flagi metod jako argumenty lub jako zmienne składowe?” może być nieoptymalne, ale ponieważ brakuje mi lepszej terminologii atm., oto idzie: Obecnie próbuję ominąć problem, czy flagi dla danej metody klasy (_private_) powinny być przekazywane jako argumenty funkcji, czy przez zmienna składowa i/lub czy istnieje jakiś wzorzec lub nazwa, który obejmuje ten aspekt i/lub czy wskazuje to na inne problemy projektowe. Na przykład (językiem może być C++, Java, C#, tak naprawdę nie ma znaczenia IMHO): class Thingamajig { private ResultType DoInternalStuff(FlagType calcSelect) { ResultType res; for (... jakiś warunek pętli ...) { ... if (calcSelect == typeA) { ... } else if (calcSelect == typeX) { ... } else if ... } ... zwrot res; } private void InteralStuffInvoker(FlagType calcSelect) { ... DoInternalStuff(calcSelect); ... } public void DoThisStuff() { ... jakiś kod ... InternalStuffInvoker(typeA); ... trochę więcej kodu ... } public ResultType DoThatStuff() { ... trochę kodu ... ResultType x = DoInternalStuff(typeX); ... trochę więcej kodu ... dalszy proces x ... return x; } } Powyżej widzimy, że metoda `InternalStuffInvoker` pobiera argument, który w ogóle nie jest używany wewnątrz tej funkcji, ale jest przekazywany tylko do innej prywatnej metody `DoInternalStuff`. (Gdzie `DoInternalStuff` będzie używany prywatnie w innych miejscach w tej klasie, np. w metodzie `DoThatStuff` (public).) Alternatywnym rozwiązaniem byłoby dodanie zmiennej składowej, która przenosi te informacje: class Thingamajig { private ResultType DoInternalStuff( ) { Typ wyniku res; for (... jakiś warunek pętli ...) { ... if (m_calcSelect == typeA) { ... } ... } ... return res; } private void InteralStuffInvoker() { ... DoInternalStuff(); ... } public void DoThisStuff() { ... jakiś kod ... m_calcSelect = typeA; InternalStuffInvoker(); ... trochę więcej kodu ... } public ResultType DoThatStuff() { ... trochę kodu ... m_calcSelect = typeX; Typ wyniku x = DoInternalStuff(); ... trochę więcej kodu ... dalszy proces x ... return x; } } Szczególnie w przypadku łańcuchów głębokich wywołań, w których flaga selektora dla metody wewnętrznej jest wybierana na zewnątrz, użycie zmiennej składowej może sprawić, że funkcje pośrednie będą czystsze, ponieważ nie muszą przenosić parametru tranzytu. Z drugiej strony, ta zmienna składowa tak naprawdę nie reprezentuje żadnego stanu obiektu (ponieważ nie jest ani ustawiona, ani dostępna na zewnątrz), ale tak naprawdę jest ukrytym dodatkowym argumentem dla „wewnętrznej” metody prywatnej. Jakie są plusy i minusy każdego podejścia?


title: Zachowaj kompatybilność wsteczną języka programowania, a napraw jego wady

text: Najpierw trochę kontekstu (rzeczy, które i tak większość z was zna): Każdy popularny język programowania ma wyraźną ewolucję, najczęściej naznaczoną jego wersją: masz Javę 5, 6, 7 itd., PHP 5.1, 5.2, 5.3 itd. Wydanie nowej wersji udostępnia nowe API, naprawia błędy, dodaje nowe funkcje, nowe frameworki itp. Więc w sumie: jest dobrze. Ale co z problemami języka (lub platformy)? Jeśli i kiedy coś jest nie tak w języku, programiści albo tego unikają (jeśli mogą) albo uczą się z tym żyć. Teraz programiści tych języków otrzymują wiele informacji zwrotnych od programistów, którzy ich używają. Więc to ma sens, że w miarę upływu czasu (i numerów wersji) problemy w tych językach powoli, ale na pewno znikną. No nie bardzo. Czemu? Kompatybilność wsteczna, oto dlaczego. Ale dlaczego tak jest? Przeczytaj poniżej, aby uzyskać bardziej konkretną sytuację. * * * Najlepszym sposobem, w jaki mogę wyjaśnić moje pytanie, jest użycie PHP jako przykładu: PHP jest kochane przez tysiące ludzi i znienawidzone przez tyle samo. Wszystkie języki mają wady, ale najwyraźniej PHP jest wyjątkowe. Sprawdź **ten post na blogu**. Ma bardzo długą listę tak zwanych błędów w PHP. Teraz nie jestem programistą PHP (jeszcze nie), ale przeczytałem to wszystko i jestem pewien, że duża część tej listy to rzeczywiście prawdziwe problemy. (Nie wszystko, ponieważ jest to potencjalnie subiektywne). Teraz, gdybym był jednym z ludzi, którzy aktywnie rozwijają PHP, z pewnością chciałbym rozwiązać te problemy, jeden po drugim. Jeśli jednak to zrobię, kod, który opiera się na określonym zachowaniu języka, zepsuje się, jeśli zostanie uruchomiony w nowej wersji. Podsumowując w 2 słowach: kompatybilność wsteczna. Czego nie rozumiem to: dlaczego powinienem zachować kompatybilność wsteczną PHP? Jeśli wydam PHP w wersji 8 z naprawionymi wszystkimi tymi problemami, czy nie mogę po prostu umieścić na nim dużego ostrzeżenia mówiącego: "Nie uruchamiaj starego kodu w tej wersji!"? Jest coś, co nazywa się deprecjacją. Mieliśmy to od lat i działa. W kontekście PHP: zobacz, jak w dzisiejszych czasach ludzie aktywnie odradzają korzystanie z funkcji `mysql_*` (i zamiast tego zalecają `mysqli_*` i PDO). Amortyzacja działa. Możemy to wykorzystać. Powinniśmy go użyć. Jeśli to działa dla funkcji, dlaczego nie miałoby działać dla całych języków? Powiedzmy, że ja (twórca PHP) robię tak: * Uruchom nową wersję PHP (powiedzmy 8) z naprawionymi wszystkimi tymi wadami * Nowe projekty zaczną używać tej wersji, ponieważ jest znacznie lepsza, bardziej przejrzysta, bezpieczniejsza itp. * Aby jednak nie rezygnować ze starszych wersji PHP, wciąż wypuszczam do niego aktualizacje, naprawiam problemy z bezpieczeństwem, błędy itp. Ma to sens z powodów, których tutaj nie wymieniam. Jest to powszechna praktyka: spójrz na przykład, jak Oracle aktualizuje wersję 5.1.x MySQL, mimo że skupia się głównie na wersji 5.5.x. * Po około 3 lub 4 latach przestaję aktualizować stare wersje PHP i zostawiam je na śmierć. To jest w porządku, ponieważ w ciągu tych 3 lub 4 lat większość projektów i tak przejdzie na PHP 8. Moje pytanie brzmi: **Czy wszystkie te kroki mają sens? Czy byłoby to takie trudne? Jeśli można to zrobić, to dlaczego nie?** Tak, wadą jest to, że łamiesz wsteczną kompatybilność. Ale czy nie jest to cena, którą warto zapłacić? Plusem jest to, że za 3 lub 4 lata będziesz miał język, z którym rozwiązano 90% problemów... język o wiele przyjemniejszy w pracy. Jego nazwa zapewni mu popularność. **EDYTUJ** : OK, więc nie wyraziłem się poprawnie mówiąc, że za 3 lub 4 lata ludzie przejdą na hipotetyczne PHP 8. Miałem na myśli: za 3 lub 4 lata ludzie będą używać PHP 8 jeśli rozpoczną nowy projekt.


title: Jakie są zalety następnego iteratora nad tym iteratorem?

text: Nie pracuję zbyt często bezpośrednio z iteratorami Java/C#, ale kiedy to robię, zawsze zastanawiam się, jaki był powód projektowania iteratorów w „następny” sposób. Aby rozpocząć, musisz przesunąć iterator, aby sprawdzić, czy są jakieś dane, musisz sprawdzić, czy jest następny element. Bardziej atrakcyjną koncepcją jest dla mnie iterator - "zaczyna się" od początku i możesz sprawdzić ten stan, powiedzmy `isValid`. Pętla po całej kolekcji wyglądałaby więc tak: while (iter.isValid()) { println(iter.current()); iter.następny(); } Tak jak tutaj, aby sprawdzić, czy jest następny element, idziesz tam, a następnie sprawdzasz, czy stan jest prawidłowy. YMMV, ale mimo to - czy jest jakaś przewaga następnego iteratora (jak w Java/C#) nad tym iteratorem? **Uwaga:** to pytanie koncepcyjne dotyczące **projektu** języka.


title: Czy istnieją algorytmy planowania zasobów kursów-nauczycieli-klas?

text: Zajmuję się tworzeniem aplikacji pomagającej dyrektorom szkół w dedykowaniu nauczycieli do zajęć i kursów w ciągu tygodnia (planowanie). Scenariusz jest mniej więcej taki: 1. Użytkownik wpisuje do systemu listę nauczycieli i ich czasy wolne 2. Użytkownik wpisuje listę kursów na ten semestr 3. Użytkownik wpisuje do systemu listę dostępnych zajęć No cóż, do tutaj nie ma nic wielkiego. Tylko proste operacje CRUD i nic nadzwyczajnego. Jednak teraz to, co czyni ten system użytecznym, to fakt, że aplikacja **automatycznie** i **na podstawie algorytmu** tworzy harmonogram semestralny. Myślę, że masz tutaj główny pomysł. Na przykład aplikacja powinna sugerować, aby nauczyciel A poszedł do klasy 1 na matematykę, a jednocześnie nauczyciel B do klasy 2 na fizykę. W ten sposób wszystkie zajęcia byłyby przeznaczone na lekcje, a czasy nauczycieli nie będą się na siebie nakładać. Ułóż tort dla dyrektora szkoły. Jednak nie mogę znaleźć dobrego algorytmu dla tego poświęcenia zasobów. Mam na myśli, że wydaje mi się to trudne. Wyszukiwanie w Google zaowocowało artykułami z różnych stron internetowych, ale nie są one dla mnie pomocne i przydatne. Na przykład: http://en.wikipedia.org/wiki/Resource_allocation lub http://en.wikipedia.org/wiki/Scheduling_(production_processes) Czy istnieje jakiś algorytm lub jakakolwiek aplikacja lub silnik, które mogą mi tutaj pomóc ? Czy te wymagania mają znaną nazwę, na przykład _silnik planowania czasu_? Każda pomoc byłaby mile widziana.


title: czy możemy użyć programowania w C już od kilku dni do zbudowania gry?

text: Czy możemy użyć programowania w C do zbudowania gry, czy ma ona pewne ograniczenia, może nie jest bogata graficznie, jak sądzę. czy możemy budować gry, takie jak Temple Run Your Candy Crush za pomocą programowania w C.


title: Czym jest metoda statyczna w porównaniu do metod instancji/klasy/prywatnych/publicznych?

text: Uczę się programowania w Objective-C i nie rozumiem, czym jest metoda statyczna. Wiem, czym są metody klasy/instancji/prywatne/publiczne. Czy ktoś może wyjaśnić, co to jest na przykładzie i porównując to z innymi, o których wspomniałem? A w jakiej sytuacji ktoś by go użył? Z tego, co przeczytałem w Wikipedii, brzmi to jak metoda klasowa, która nie ma dostępu do niczego w `ja`. Brzmi to dla mnie jak samodzielna funkcja - która nie powinna być powiązana z żadną klasą, ponieważ nie ma dostępu do `self`.


title: foreach vs foreach vs LINQ

text: Kiedy piszę kod w Visual Studio, ReSharper (niech Bóg to błogosławi!) często sugeruje mi zmianę mojej starej pętli for na bardziej zwartą formę foreach. I często, gdy akceptuję tę zmianę, ReSharper idzie o krok do przodu i sugeruje, abym ją zmienił ponownie, w błyszczącej formie LINQ. Zastanawiam się więc: czy w tych ulepszeniach są jakieś _prawdziwe_ zalety? W dość prostym wykonaniu kodu nie widzę żadnego przyspieszenia (oczywiście), ale widzę, że kod staje się coraz mniej czytelny... Zastanawiam się więc: czy warto?


title: Wskaż mi informacje o tworzeniu filtrów (list)

text: Chciałbym kilka wskazówek do informacji, które pomogłyby mi zrozumieć, jak zabrać się za zapewnienie możliwości filtrowania listy encji według ich atrybutów, a także atrybutów encji powiązanych. Jako przykład wyobraź sobie aplikację internetową, która zapewnia pewnego rodzaju zarządzanie zamówieniami. Zamówienia i powiązane encje są przechowywane w relacyjnej bazie danych. I wyobraź sobie, że aplikacja ma interfejs, który wyświetla listę zamówień. Problem polega na tym, jak można pozwolić na filtrowanie listy według np.:- * numeru zamówienia (atrybutu) * nazwy pozycji (atrybutu podmiotu powiązanego n-n) * jakiegoś tekstu w nocie administracyjnej dotyczącej zamówienia (tekst znaleziony w atrybucie encji pokrewnej 1-1) Próbuję odkryć, czy istnieje coś takiego jak standardowy, wydajny sposób konstruowania zapytań i formularza filtrującego; lub niektóre możliwe strategie; lub jakakolwiek teoria na ten temat; lub jakiś przykładowy kod. Moje google foo mnie zawodzi.


Czy w przypadku projektu open source jest legalne i dopuszczalne umieszczanie linków do bibliotek komercyjnych? Na przykład aplikacja open source, w którą jestem zaangażowany, skorzystałaby z komercyjnej biblioteki interfejsu użytkownika innej firmy.


title: Projekt: metoda, która ładuje dane z jednego z dwóch formatów plików?

text: Powiedzmy, że mam klasę Person: class Person { string FullName; int Wiek; } I muszę załadować listę osób ze zwykłego pliku tekstowego. Plik tekstowy może mieć jeden z dwóch formatów. Chcę metody, takiej jak LoadFromFile (ścieżka ciągu), która 1) wykryje format pliku 2) przeanalizuje odpowiednio dla typu pliku i 3) zwróci listę osób. Szybkim i brudnym rozwiązaniem byłoby mieć jedną metodę LoadFromFile, w której czytam nagłówek pliku, mogę określić, jaki to jest typ pliku, a następnie, trzymając plik otwarty, włączam typ i odpowiednio go czytam. Z drugiej strony fakt, że są to dwa różne "typy" plików sprawia, że uważam, że jest to dobry kandydat na polimorfizm. Byłoby to szczególnie dobre, gdyby istniał trzeci typ pliku. Jednak posiadanie oddzielnych klas sprawia, że wydaje się, że trudniej byłoby utrzymać plik otwarty od fazy „wykrywania typu” do „fazy analizy”. Chociaż może chęć pozostawienia otwartego pliku jest tylko przedwczesną optymalizacją. Chcę, aby kod klienta po prostu wywołał LoadFromFile(ścieżka) i wykrył typ pliku i załaduje go odpowiednio. Jaki jest do tego dobry projekt (pod względem nazw klas i nazw metod)?


title: Czy UTF-16 ma stałą czy zmienną szerokość? Dlaczego UTF-8 nie ma problemu z kolejnością bajtów?

text: 1. Czy UTF-16 ma stałą czy zmienną szerokość? Otrzymałem różne wyniki z różnych źródeł: Z http://www.tbray.org/ongoing/When/200x/2003/04/26/UTF: > UTF-16 przechowuje znaki Unicode w szesnastobitowych kawałkach. Z http://en.wikipedia.org/wiki/UTF-16/UCS-2: > UTF-16 (16-bit Unicode Transformation Format) to kodowanie znaków dla > Unicode zdolne do kodowania 1,112,064[1] liczb (tzw. punkty kodowe) w > przestrzeni kodu Unicode od 0 do 0x10FFFF. Daje wynik o zmiennej długości > jednej lub dwóch 16-bitowych jednostek kodu na punkt kodu. 2. Z pierwszego źródła > UTF-8 ma również tę zaletę, że jednostką kodowania jest bajt, więc nie ma problemów z porządkowaniem bajtów. Dlaczego UTF-8 nie ma problemu z kolejnością bajtów? Ma zmienną szerokość, a jeden znak może zawierać więcej niż jeden bajt, więc myślę, że kolejność bajtów może nadal stanowić problem? Dziękuję i pozdrawiam!


title: Zrób zrzut ekranu nieaktywnego obszaru roboczego

text: Próbuję napisać program, który zrobi zrzut ekranu każdego obszaru roboczego, a następnie wyświetli je razem, aby stworzyć efekt typu expo. Obecnie używam gtk i mogę zrobić tylko zrzut ekranu aktywnego obszaru roboczego (używając gdk_get_default_root_window i gdk_pixbuf_get_from_drawable). Jedyną metodą, jaką obecnie znalazłem, aby zrobić zrzut ekranu nieaktywnego obszaru roboczego, jest przełączenie się na niego, zrobienie zrzutu ekranu, a następnie przełączenie z powrotem, ale spowoduje to miganie ekranu. Więc moje pytanie brzmi, czy istnieje sposób na przechwytywanie obszarów roboczych bez migania ekranu?


title: Jak zrobić prostą kategoryzację w języku naturalnym

text: Jak przetworzyłbyś zdanie typu „Kupiłem dwa kilogramy steku z supermarketu Acme” w strukturę danych podobną do następującej reprezentacji JSON: { item: {name: "stek", tagi: "mięso,wołowina" }, ilość: { wartość: 2, jednostka: "kg"}, źródło: "ACME Supermarket" } ? Szukam ogólnego zarysu koncepcji, od czego zacząć, np. niektóre artykuły lub materiały wprowadzające, które nie wymagają znajomości stopnia doktora. Dla kontekstu, jest to część wstępnego śledztwa dotyczącego urządzenia do śledzenia wydatków osobistych, które planuję zbudować. Aby podzielić to nieco dalej, interesuję się podstawowym rozpoznawaniem nazwanych jednostek i strategiami kategoryzacji. Nie mam wykształcenia CS, więc możesz mieć to na uwadze, odpowiadając :) Z góry dziękuję. Nie jestem zainteresowany usługami internetowymi innych firm, ponieważ jest to ćwiczenie szkoleniowe i jest przeznaczone do pracy w trybie offline.


title: Jak sprawdzić, czy płatność przez osobę trzecią się powiodła?

text: Bardziej szczegółowa wersja tego pytania została wyrzucona ze StackOverflow, więc mam nadzieję, że teraz jest to właściwe miejsce na to pytanie. Pracuję nad witryną obsługującą płatności, która będzie działać tak, jak PayPal w wielu witrynach handlu elektronicznego. Chodzi o to, aby klient wypełnił swój koszyk i kliknął kasę, a następnie został przekierowany na stronę płatności w bezpiecznej witrynie. Po przetworzeniu płatności strona płatności kieruje klienta z powrotem na pierwotną stronę internetową. Jak dotąd myślę, że do momentu otrzymania płatności jestem w porządku, ale jakiego mechanizmu używają witryny takie jak PayPal, aby umożliwić oryginalnej witrynie weryfikację, czy płatność została pomyślnie odebrana? * * * Mój obecny proces: * Zamówienie kliknięcia przez klienta * Przechowuj pozycje koszyka jako oczekujące zamówienie w bazie danych * Podaj identyfikator sprzedawcy, kwotę płatności, zwrotny adres URL itp., aby zabezpieczyć stronę płatności. Wykorzystuje SSL, a ja również opublikowałem skrót innych opublikowanych wartości, aby upewnić się, że nie są one modyfikowane podczas przesyłania. * Klient wprowadza informacje o karcie i klika „Zapłać” * Bezpieczne przekierowanie witryny do określonego zwrotnego adresu URL z ciągiem zapytania zawierającym odpowiednie informacje o transakcji, w tym flagę wskazującą na sukces lub niepowodzenie. W ostatnim kroku oryginalna witryna musi mieć pewność, że żądanie pochodzi z witryny płatności, aby użytkownik nie mógł po prostu przejść do tego adresu URL, podając sam ciąg zapytania, w celu sfinalizowania zamówienia. Obecnie mam ten sam mechanizm mieszający, aby upewnić się, że zmienne ciągu zapytania nie zostaną naruszone. Jest bardzo prymitywna. Dołączam zmienne do jednego długiego ciągu, a następnie dołączam na końcu wspólny tajny klucz, mieszam cały ciąg i wysyłam. Odbiorca robi to samo i porównuje skróty.


title: Migracja danych - niebezpieczna czy niezbędna?

text: Dział rozwoju oprogramowania mojej firmy boryka się z problemem, że migracje danych są uważane za potencjalnie niebezpieczne, szczególnie dla moich menedżerów. Tłem jest to, że nasi klienci używają dużej ilości danych o **niskiej jakości**. Przyczyny tego są tylko **częściowo związane z jakością naszego oprogramowania**, ale raczej z historią danych: większość z nich została **przeniesiona z poprzednich systemów** , niektóre błędy spowodowały (głównie biznesowe) **niespójności ** w ewidencji danych lub **misentry** przez przypadek po stronie klienta (na co nasze oprogramowanie dopuściło przez błąd). Najważniejszym kontrargumentem moich menedżerów jest to, że **wadliwe dane mogą zamienić się w jeszcze gorsze dane** , problemy z danymi mogą **wybudzić niektórych menedżerów u klienta**, a niektóre procesy po stronie **klienta mogą nie działać już**, ponieważ ich procesy są nieco dostosowane do naszego systemu. Osobiście uważam migracje danych za integralną część _rozwoju_ oprogramowania i że migracja danych może być postrzegana jako dane, czym jest refaktoryzacja dla kodu. Myślę, że migracja danych jest **niezbędna do tworzenia oprogramowania, które ewoluuje**. Bez tego musielibyśmy stworzyć bolesne oprogramowanie, które w pewien sposób działa wokół złej struktury danych. _**Pytam Cię:_** * Jakie są Twoje przemyślenia na temat migracji danych, szczególnie w rzeczywistych przypadkach, a nie tylko z perspektywy programisty? * Czy masz jakieś argumenty przeciwko opiniom moich menedżerów? * Jak Twoja firma radzi sobie z migracjami danych i powodowanymi przez nie trudnościami? * Jakieś inne ciekawe przemyślenia, które należą do tego tematu?


title: Wzorzec dla wielu źródeł danych

text: Przeczytałem już to pytanie na CodeReview. Liczyłem na ogólną radę. Piszę serwis, który trafi do wielu źródeł danych. Każde źródło wymaga zebrania dużej ilości danych i zmiany ich na jeden format. Jaki jest najlepszy wzór do takiego zadania? Obecnie mam "podstawową" klasę, która uwidacznia statyczną metodę `GetData`, którą inne klasy dziedziczą i implementują. Nie wydaje się to najczystszym podejściem, więc zastanawiałem się, jakie inne podejścia mogą odpowiadać moim potrzebom?


title: Kiedy JavaScript powinien generować HTML?

text: Staram się generować jak najmniej HTML z JavaScriptu. Zamiast tego wolę manipulować istniejącymi znacznikami, kiedy tylko mogę, i generować kod HTML tylko wtedy, gdy muszę dynamicznie wstawić element, który nie jest dobrym kandydatem do używania Ajax. Uważam, że znacznie ułatwia to utrzymanie kodu i szybkie wprowadzanie w nim zmian, ponieważ znaczniki są łatwiejsze do odczytania i śledzenia. Moja zasada jest taka: HTML służy do struktury dokumentu, CSS do prezentacji, JavaScript do zachowania. Jednak widziałem dużo kodu JS, który generuje kopce HTML, w tym całe formularze i modalne okna dialogowe z dużą zawartością treści. Ogólnie, która metoda jest uważana za najlepszą praktykę? W jakich okolicznościach JavaScript powinien być używany do generowania HTML, a kiedy nie?


title: Czy "rodzina" języków Lisp jest bliżej spokrewniona niż rodzina "składni podobnej do C"?

text: Ostatnio myślałem o dużej różnorodności języków lisp, a konkretnie o tym, że chociaż wszystkie mają podobną składnię i teoretycznie mogą być zaimplementowane z tego samego małego zestawu prostych funkcji, sposób, w jaki zwykle używa się każdego lisp, może się różnić szeroko w porównaniu do wszystkich innych. Zdałem sobie sprawę, że można przekonująco powiedzieć to samo o rodzinie języków ze składnią „podobną do C”. Jednak większość języków „podobnych do C” jest powszechnie odróżniana od siebie, podczas gdy powszechne jest odwoływanie się do „lisp” w ogóle, a nie do konkretnego wariantu seplenienia. Czy zatem języki podobne do C naprawdę różnią się od siebie bardziej niż języki podobne do seplenienia? A może po prostu tak wyglądają, ponieważ mają większą zmienność składni? Dlaczego języki podobne do seplenienia są częściej łączone w jeden „seplenienie”? Nikt nigdy nie nazwałby C, C++, C#, Java po prostu „C”.


title: Jak mogę uniemożliwić klientowi zobaczenie mojego kodu napisanego w języku interpretowanym?

text: Buduję dość złożony program interpretowany w Pythonie. Pracowałem nad większością tego kodu do innych celów od kilku miesięcy i dlatego nie chcę, aby mój klient mógł go po prostu skopiować i spróbować sprzedać, ponieważ uważam, że jest wart uczciwej kwoty. Problem polega na tym, że potrzebuję skryptu, aby działał na serwerze, za który płaci mój klient, więc czy jest jakiś sposób, aby zabezpieczyć określony folder na komputerze przed dostępem roota lub sprawić, by tylko jeden konkretny użytek mógł uzyskać dostęp do katalogu ? System operacyjny to Ubuntu.


title: Ogólnie: strzeżone strony czy sprawdzanie stosu?

text: Chciałbym poznać zalety i wady używania stron ochronnych z alokacją wskaźnika wypukłości w porównaniu z kontrolami sterty z alokacją wskaźnika wypukłości, w tym wydajnością. W nowoczesnej realizacji, która byłaby najbardziej odpowiednia?


title: Gdzie funkcja raportowania wpisuje się w najlepsze praktyki tworzenia oprogramowania dla przedsiębiorstw?

text: W mojej firmie opracowuję i utrzymuję całą sprawozdawczość operacyjną wykorzystywaną przez kierownictwo do prowadzenia działalności. Nie ma stanowiska sprawozdawczego w zespole ds. rozwoju aplikacji. Wziąłem na siebie udział i udział w spotkaniach przeglądowych projektów, aby przekazać zespołowi programistów informacje o tym, jak zmiany wpłyną na raportowanie, konsultować się, jak modyfikować projekty, aby uniknąć wpływu na istniejące raporty i czego będę potrzebować w nowych programach, aby móc do raportowania danych. Z mojego doświadczenia wynika, że raportowanie to kluczowe stanowisko funkcjonalne w zespole ds. rozwoju aplikacji korporacyjnych. Mam nadzieję, że znajdę dokumentację, która obsługuje tę koncepcję jako standard branżowy lub najlepsze praktyki. Czy ktoś może mi tam pomóc?


title: Dlaczego HTML TextArea ma własny znacznik HTML?

text: <input id='input1' type='text'></input> <input id='input2' type='przycisk'></input> <input id='input3' type='pole wyboru'><input> <textarea id='myTextArea'></textarea> W znacznikach HTML większość miejsc, w których użytkownik może wchodzić w interakcję ze stroną, jest oznaczonych znacznikiem `<input>`. Dlaczego textarea ma swój własny znacznik, `<textarea>` w przeciwieństwie do, powiedzmy, `<input type='textarea'>`


title: Wydajny proces rozwoju dla Golanga (lub dowolnego backendu) i JavaScript?

text: Zajmuję się tworzeniem aplikacji internetowej. Frontend jest mieszanką JavaScriptu i HTML generowanego po stronie serwera. Backend jest napisany w Golangu. Może nie jest to bardzo ważne, ale jeśli ktoś dokonał podobnego doświadczenia z tym językiem, może być pomocny. Na razie wszystko było napisane w vimie i "debugowane" w przeglądarce (głównie Chrome). Gdy projekt się rozrasta, napotykam trudności z używaniem mojego stosu programistycznego vim-chrome. Tworzenie backendu nie jest takie trudne, ponieważ Golang ma fajny zestaw testowy, który nie wymaga wiele do uruchomienia. Jednak mieszanka struktur opartych na danych w szablonach Golanga, html i logice JavaScript staje się nieco skomplikowana: * Podczas tworzenia frontendu prawie cały czas rekompiluję szablony. * Cały czas przełączam się między przeglądarką, vimem (cygwin), narzędziami programistycznymi przeglądarki i przeładowywaniem stron, upewniając się, że pamięć podręczna jest czyszczona. Więc moje pytanie brzmi: jak mogę być bardziej wydajny? Jak zmienić cykl rozwojowo-testowy, aby praca była przyjemniejsza, zwłaszcza przełączanie między serwerem (programowanie) a klientem (debugowanie). (Nie szukam JEDNEGO SZCZEGÓLNEGO NARZĘDZIA. Wiem, że skutkuje to głupimi odpowiedziami. Szukam podejść programistycznych, którym akurat towarzyszą narzędzia. Więc nie na temat, ale może być interesujące: Która kombinacja narzędzi się sprawdziła, czy kiedykolwiek napotkałeś taki problem i jak korzystałeś z tych narzędzi?)


title: Dlaczego nie ma złożonych operatorów przypisania dla operatorów logicznych (takich jak ||, && itp.)?

text: Zgodnie z ECMA-262, część 11.13, poniżej znajduje się wyczerpująca lista złożonych operatorów przypisania: `*= /= %= += -= <<= >>= >>>= &= ^= |=`. Zgodnie z częścią 11.11 `var c = a || b` wstawi wartość `a` do `c`, jeśli `ToBoolean(a)` jest prawdziwe, a wartość `b` do `c` w przeciwnym wypadku. Jako taki, _logiczne OR_ jest często używane jako operator koalescencyjny, np. funkcja (opcje) { opcje = opcje || {}; } Często używa się koalescencji do określenia domyślnej wartości zmiennej, jak pokazano powyżej: `a = a || b”. Wydaje się, że operator przypisania złożonego `||=` byłby naprawdę przydatny, pozwalając na pisanie powyższego kodu w krótszy i bardziej przejrzysty sposób: `a ||= b`. Jednak go tam nie ma (chociaż `*=`, `+=` i inne złożone operatory przypisania są). Pytanie brzmi, dlaczego?