title: Używanie wyliczeń w zakresie dla flag bitowych w C++

text: „enum X : int” (C#) lub „enum class X : int” (C++11) to typ, który ma ukryte wewnętrzne pole „int”, które może przechowywać dowolną wartość. Ponadto w wyliczeniu zdefiniowano pewną liczbę predefiniowanych stałych `X`. Możliwe jest rzutowanie wyliczenia na jego wartość całkowitą i na odwrót. To wszystko jest prawdziwe zarówno w C#, jak i C++11. W C# wyliczenia służą nie tylko do przechowywania pojedynczych wartości, ale także do przechowywania bitowych kombinacji flag, zgodnie z zaleceniem Microsoft. Takie wyliczenia są (zwykle, ale niekoniecznie) ozdobione atrybutem `[Flags]`. Aby ułatwić życie programistom, operatory bitowe (OR, AND itp.) są przeciążone, dzięki czemu można łatwo zrobić coś takiego (C#): void M(NumericType flags); M(NumericType.Sign | NumericType.ZeroPadding); Jestem doświadczonym programistą C#, ale programuję C++ dopiero od kilku dni i nie znam się na konwencjach C++. Zamierzam użyć wyliczenia C++11 w dokładnie taki sam sposób, jak robiłem to w C#. W C++11 operatory bitowe w wyliczeniach z zakresem nie są przeciążone, więc chciałem je przeciążyć. Wywołało to debatę, a opinie wydają się różnić między trzema opcjami: 1. Zmienna typu enum jest używana do przechowywania pola bitowego, podobnie do C#: void M(NumericType flags); // Z przeciążeniem operatora: M(NumericType::Sign | NumericType::ZeroPadding); // Bez przeciążania operatorów: M(static_cast<NumericType>(static_cast<int>(NumericType::Sign) | static_cast<int>(NumericType::ZeroPadding))); Ale to byłoby sprzeczne z silnie typizowaną filozofią enum z zakresu enum C++11. 2. Użyj zwykłej liczby całkowitej, jeśli chcesz przechowywać bitową kombinację wyliczeń: void M(int flags); M(static_cast<int>(NumericType::Sign) | static_cast<int>(NumericType::ZeroPadding)); Ale to zredukowałoby wszystko do „int”, nie pozostawiając ci pojęcia, jaki typ powinieneś umieścić w metodzie. 3. Napisz osobną klasę, która będzie przeciążać operatory i przechowywać flagi bitowe w ukrytym polu liczb całkowitych: class NumericTypeFlags { unsigned flags_; public: NumericTypeFlags () : flags_(0) {} NumericTypeFlags (NumericType t) : flags_(static_cast<unsigned>(t)) {} //...zdefiniuj operacje testu/ustawienia BITWISE }; void M(NumericTypeFlags flags); M(NumericType::Sign | NumericType::ZeroPadding); (Pełny kod użytkownika 315052) Ale wtedy nie masz IntelliSense ani żadnej obsługi, która podpowiadałaby możliwe wartości. Wiem, że to subiektywne pytanie, ale: **Jakie podejście powinienem zastosować? Jakie podejście, jeśli w ogóle, jest najbardziej rozpoznawane w C++? Jakiego podejścia używasz, gdy zajmujesz się polami bitowymi i _dlaczego_?** Oczywiście, ponieważ wszystkie trzy podejścia działają, szukam powodów merytorycznych i technicznych, ogólnie przyjętych konwencji, a nie tylko osobistych preferencji. Na przykład, ze względu na moje doświadczenie w języku C#, skłaniam się ku podejściu 1 w C++. Ma to tę dodatkową zaletę, że moje środowisko programistyczne może podpowiedzieć mi możliwe wartości, a przy przeciążonych operatorach wyliczenia jest to łatwe do napisania i zrozumienia oraz całkiem czyste. A sygnatura metody jasno pokazuje, jakiej wartości oczekuje. Ale większość ludzi tutaj się ze mną nie zgadza, prawdopodobnie nie bez powodu.


title: Rozumiesz znaczenie „rozwoju aplikacji o wielu cyklach życia”?

text: Niektóre stanowiska pracy Agile wymagają „dogłębnego zrozumienia tworzenia aplikacji o wielu cyklach życia”, co to oznacza? Więc moje pytanie brzmiałoby: do czego służy ta dziedzina i czego powinienem się nauczyć, wiedząc, że mam doświadczenie w Java EE i Agile ponad 2 lata. Przepraszam, jeśli moje pytanie nie jest dobrze skonstruowane, ani nie poświęciłem trochę czasu na szukanie sensu :) siebie, ale wszystkie moje badania przyniosły oferty pracy :D.


title: Pytania do wywiadu wielowątkowego w języku C# na stanowisko starszego programisty/projektanta

text: Zastanawiam się, jakie pytania podczas rozmowy kwalifikacyjnej zadano starszemu programiście lub konsultantowi technicznemu ds. wielowątkowości. Uprzejmie proszę o podanie niektórych pytań wywiadu, które zostały zadane w wywiadzie na temat wielowątkowości, jeśli to możliwe, proszę umieścić pytania oparte na scenariuszu z pytaniami teoretycznymi. Jak dowiedziałem się po rozmowie z niektórymi osobami, że kiedyś ankieter może dać Ci scenariusz i poprosić o jego wdrożenie? @ Uprzejmie dodaj konkretne pytania, z którymi kiedykolwiek spotkałeś się lub zadałeś drugiej osobie podczas rozmowy kwalifikacyjnej, inne niż tylko wspomnienie koncepcji, ponieważ ludzie przechodzą przez koncepcje i nadal mają trudności z radzeniem z pytaniami podczas rozmowy kwalifikacyjnej. pytanie może faktycznie pomóc osobie w uzyskaniu przewagi w d-day


title: Czy kod proceduralny testowania jednostkowego jest skuteczny?

text: W bieżącym projekcie władze, które chcą, aby testy jednostkowe zostały włączone do naszego cyklu rozwojowego, aby uniknąć stałej liczby błędów, które wydają się przenikać do naszego kodu. Problem polega na tym, że kod spaghetti jest w 95% proceduralny, z którym nigdy nie robiłem testów jednostkowych (całe moje doświadczenie z testowaniem jednostkowym dotyczy kodu OOP) Więc moje pytanie w skrócie brzmi, czy rozsądnie byłoby kontynuować z jednostką testowanie z naszą obecną bazą kodu lub sugerowanie, aby odłożyć to do czasu, gdy aplikacja zostanie zmigrowana do odpowiedniego frameworka OOP? PS: Podczas gdy starałem się zaklasyfikować to pytanie jako agnostyczne językowe, uważam, że stwierdzenie, że dana aplikacja korzysta z PHP i JavaScript, pomoże udzielić bardziej szczegółowych odpowiedzi, które mogłyby odpowiedzieć na to pytanie, ponieważ z doświadczenia wynika, że najczęściej występuje to w takich aplikacjach.


title: Czy powinienem dalej kłaść nacisk na standardy rozwoju?

text: Pracuję w moim zespole programistycznym od około trzech lat i dopiero niedawno przedstawiłem koncepcję konwencji nazewnictwa zmiennych (we wszystkich językach, ale konkretnie w C#/VB.Net). Naprawdę nie mamy żadnych solidnych konwencji nazewnictwa. Spotkałem się z poważnym oporem - i co z tego?, czy to naprawdę ma znaczenie?, pustymi spojrzeniami itp. Udało mi się przekonać innych, aby zgodzili się przynajmniej na zachowanie spójności na danym pliku z kodem (nie idealne, ale z tą grupą, wszelkie standardy oparte na czymkolwiek innym niż SQL to krok naprzód). Moje pytanie jest takie – zawsze otrzymywałem opór wobec rozwijających się standardów. * Czy powinienem po prostu przestać forsować standardy i zaakceptować fakt, że każdy wydaje się robić swoje, kiedy koduje?


title: Tworzenie aplikacji na dużą skalę w systemie Android

text: Ponieważ jestem dość nowy w tworzeniu aplikacji na dużą skalę w Androidzie i Javie, pomyślałem, że poprosiłbym o radę. Mój zespół miał do czynienia z opracowaniem prototypu dość złożonego oprogramowania medycznego. Chociaż to tylko prototyp, myślę, że może to być dobra okazja do poznania nowej platformy i nabrania dobrych nawyków. Nasze wymagania projektowe są dość proste: zestaw typowych plików: motywy, style, obiekty, statyczne metody dla bazy danych itp., a następnie zestaw mniejszych "aplikacji", takich jak: testy cyfrowe, gry itp. Każdy z nich jest dość wyjątkowy. Naszą pierwszą myślą było stworzenie zestawu mniejszych aplikacji, które będą uruchamiane z „głównego ekranu”. Każda aplikacja byłaby osobnym projektem w Eclipse, a następnie zmodyfikowalibyśmy ścieżkę budowania tak, aby zawierała „wspólne pliki”. W ten sposób: każdy programista mógł pracować nad własnymi projektami, nie przeszkadzając innym. Problemy, które napotykam przy takim podejściu: 1. Wdrażanie aplikacji (mając kilka aplikacji zamiast jednej dużej) 2. Testowanie aplikacji 3. Użycie ciągów znaków do uruchomienia innej aplikacji, czyli martwienie się, czy aplikacja została zainstalowana 4. Niemądre ludzkie błędy, m.in. modyfikowanie wspólnych plików i zapominanie o zatwierdzeniu zmian Innym rozwiązaniem byłoby stworzenie jednej dużej aplikacji/projektu z każdym deweloperem pracującym nad osobnym pakietem, który reprezentowałby każdą aplikację. Wprowadza to jednak wspólne zasoby (np. unikalne nazwy ciągów) itp. Jaka jest twoja rada? Jak poradzić sobie z tym problemem? Który z nich jest lepszy na dłuższą metę? Czy istnieją inne, bardziej rozsądne podejścia?


title: Jak programiści radzą sobie z problemem „od czego zacząć” w kontekście przytłaczających trudności spowodowanych zbyt dużą ilością niejednorodnych informacji?

text: Mój przyjaciel, początkujący programista PHP, musi połączyć produkt rozwijany przez jego firmę z produktem innej firmy (zestawem usług internetowych). Otrzymał "odpowiednią" dokumentację (kilkaset stron nieczytelnych rzeczy) od tej firmy, przeczytał dokumentację PHP związaną z klientem SOAP, przeczytał o SOAP i WSDL, ale **nie ma najmniejszego pojęcia Gdzie zacząć**. Zamiast samouczka krok po kroku ma dużo zbyt szczegółowej dokumentacji. Zaproponowałem mu skorzystanie z prototypowania: 1. Wyobraź sobie najbardziej podstawowy scenariusz, w którym można użyć usług internetowych firm trzecich, 2. Wybierz odpowiednią dokumentację, 3. Zbuduj (od zera) najprostszy skrypt PHP, który będzie odtwarzał ten scenariusz, 4 Po uruchomieniu prototypu zintegruj funkcjonalność z istniejącym produktem, 5. Refaktoryzacja, 6. Rozbuduj istniejący produkt o dodatkowe funkcje. Chociaż może to pomóc popchnąć tę osobę we właściwym kierunku, czuję, że moja sugestia jest tylko częściowo pomocna. Wyobrażam sobie, że sześć lat temu nic nie wiem o WSDL i SOAP i muszę przeszukiwać setki stron dokumentacji: zniechęciłbym się już w krokach 2 i 3. Doświadczeni programiści mają kilka wzorców, praktyk i procesów, które pomagają rozwiązywać podstawowe problemy często spotykane w tworzeniu oprogramowania: * Aspekty techniczne funkcji są niepewne? Użyj prototypowania. * Aplikacja „nie reaguje”? Użyj profilowania, aby znaleźć wąskie gardła. * Wymagania podlegają częstym zmianom? Użyj Agile. * Programiści muszą mieć pewność, że ich kod nie zawiera pominięć? Użyj recenzji kodu. * Kolejne wersje produktu nie są wdrażane wystarczająco szybko? Użyj DevOps. Chociaż te wzorce i praktyki pomagają programistom w rozwiązywaniu problemów czysto technicznych/organizacyjnych (takich jak „Wiem, jak zaimplementować gniazda sieciowe w Javie, Pythonie i Node.js, ale teraz muszę to zrobić w Haskell”), te same wzorce i praktyki nie są pomocne dla mniej doświadczonych programistów, którzy muszą rozwiązywać bardziej istotne i mniej techniczne problemy (takie jak „Wierzę, że Web Sockets to rodzaj HTTP, ale dzieje się to w drugą stronę, coś w tym rodzaju; teraz główny programista poprosił mnie o zaimplementowanie tego w mojej aplikacji, ale nie jestem pewien, do czego nam to potrzebne”.) Zaproszenie programisty do spędzenia trzech lat na studiach lub dwunastu miesięcy na czytaniu książek związanych z programowaniem nie zawsze wchodzi w grę: niektórzy ludzie muszą pracować, aby zapłacić rachunki , muszą ukończyć projekt w następnym terminie i nie otrzymują wynagrodzenia za czytanie książek. Jakie są więc inne opcje?


title: Czy istnieje lepszy sposób na zbiorczą aktualizację rekordów NoSQL?

text: Kiedy uruchamialiśmy naszą aplikację, mieliśmy do wyboru tradycyjną znormalizowaną bazę danych MS-SQL lub bazę danych NoSQL (wypróbowaliśmy RavenDB). Oto uproszczona wersja naszego schematu: <Order OrderNumber="1000" OrderVersion="1" ...> <Produkty> <Product Code="X58" Price="5,50 USD" Quantity="3" ... /> <Produkt Code="X70" Cena="9,99 USD" Ilość="1" ... /> </Produkty> <Kontakt> <Kontakt ... /> <Kontakt ... /> </Kontakt> </Zamów > Chociaż mogliśmy skorzystać z bazy danych MS-SQL, nie zrobiliśmy tego, ponieważ chcieliśmy, aby wszystkie nasze dane były przechowywane historycznie; nie chcieliśmy sfałszować kontaktu, nawet jeśli miał to samo nazwisko i adres, ponieważ choć może się to zmienić, zamówienie powinno zawierać dane kontaktowe w **czasie zakupu**. Ponadto, tak, moglibyśmy użyć FK naszych Produktów zamiast używać **Kodu** do odwoływania się do produktu, ale Produkty nigdy nie są usuwane, i znowu... jeśli zostaną zaktualizowane, chcemy przechwycić ich informacje w **czasie zakupu**. Zasadniczo każde zamówienie wydaje się być samodzielnym dokumentem, który nigdy nie powinien opierać się na FK. OrderVersion służy tylko do śledzenia wersji naszego procesu, gdy zamówienie zostało utworzone, moglibyśmy po prostu użyć OrderDate do śledzenia wersji. * * * Tak czy inaczej, naszą decyzją było przejście z RavenDB. Zbudowaliśmy naszą aplikację i stronę internetową, a wewnętrznie ją testujemy. Jedyny scenariusz, w którym napotykamy na problemy, to: _"Jak przeprowadzić zbiorczą aktualizację rekordów tak dobrych jak SQL?"_ Na przykład, gdybyśmy właśnie wypchnęli nasz kod do produkcji podczas konserwacji w trybie offline i w jakiś sposób wszystkie rekordy z MA z kodami pocztowymi, które mają wiodące zero (0), miały usunięte zero (tj. Kod pocztowy teraz odczytuje 1234 zamiast 01234)? Zwykle łatalibyśmy rzeczy natychmiast na jednym serwerze awaryjnym na raz, a aktualizacja rekordów byłaby łatwa: UPDATE c SET c.ZipCode = ... FROM Contact c INNER JOIN Order o ON c.OrderId = o.OrderId WHERE o.Version = 1 AND ... Wydaje się jednak, że najlepszym rozwiązaniem, jakie możemy wymyślić, jeśli użyjemy RavenDB, jest pobranie wszystkich dokumentów, a następnie programowa aktualizacja rekordów za pomocą niestandardowej aplikacji konsoli C#. Wydaje się, że TSQL jest dużo łatwiejszy/szybszy. Nie jestem pewien, czy istnieje lepszy sposób, o którym nie wiemy, czy jest to powszechna wada korzystania z RavenDB (lub dowolnego magazynu dokumentów NoSQL)? Moim największym zmartwieniem jest to, że chociaż nasza aplikacja konsolowa wydawała się działać wystarczająco dobrze z próbką 100 000 zamówień, co się stanie, jeśli dojdziemy do punktu 50 milionów zamówień!? A może jest to również problem z T-SQL, na który w końcu natkniemy się w podanym przeze mnie przykładzie?


title: Planowanie tysięcy *powtarzających się* miejsc pracy

text: Szukam ogólnych podejść i najlepiej bibliotek/narzędzi do planowania wielu tysięcy powtarzających się zadań. Prostym przykładem jest agregator kanałów, w którym chciałbym wielokrotnie odpytywać tysiące kanałów. Nigdy nie chciałbym odpytywać witryny częściej niż raz na godzinę (nadużywa wszystkich zasobów), ale mógłbym zajmować się odpytywaniem witryn mniej niż raz na godzinę, jeśli nie ma czasu, aby zakończyć wszystko w godzinę (i martwić się później o sharding proces lub cokolwiek, aby przyspieszyć, jeśli tak się dzieje). Więc zasadniczo chciałbym mieć framework, w którym mogę powiedzieć „uruchom to zadanie tak często, jak to możliwe, ale nie częściej niż raz na godzinę”. Dodatkową fajną cechą byłoby to, że taki framework wykładniczo rozkładałby nieudane zadania, tzn. gdyby adres URL kanału był zepsuty, byłby zaplanowany na 2 godziny, potem 4 godziny itd. Słyszałem o podejściu z wykorzystaniem drzewa binarnego, które działa jako rodzaj gigantycznej struktury danych podobnej do cronjob. System będzie stale przeszukiwał to drzewo, aby sprawdzić, czy jakieś zadania są spóźnione. Nie mam więcej informacji niż to. Przyjrzałem się narzędziom takim jak Resque, ale tak naprawdę nie obejmują one tego przypadku użycia.


title: Nietrywialne funkcje działające na dowolnej monadzie

text: Szukam przykładów ciekawych metod, które biorą dowolną monadę i robią z nią coś pożytecznego. Monady są niezwykle ogólne, więc metody operujące na monadach mają szerokie zastosowanie. Z drugiej strony znane mi metody, które można zastosować do każdej monady, wydają się być... naprawdę, bardzo trywialne. Ledwie warte wyodrębnienia w funkcję. Oto naprawdę nudny przykład: `joinTwice`. Po prostu spłaszcza `m m m t` do `m t`: join n = n >>= id joinTwice n = (join . join) n main = print (joinTwice [[[1],[2, 3]], [[ 4]]]) -- prints [1,2,3,4] Jedyną znaną mi nietrywialną metodą dla monad jest `bindFold` (patrz moja odpowiedź poniżej). Czy jest więcej?


title: Jak przezwyciężyć opóźnienia w sieci podczas korzystania z danych jako usługi, takiej jak Cloudant?

text: Po prostu nie mogę zrozumieć, bez względu na to, jak dobry i skalowalny jest Cloudant (dane jako usługa), jak można przezwyciężyć problem opóźnień w sieci? Nawet centrum danych znajduje się w tym samym kraju, 100 ms jest zbyt wolne w porównaniu z siecią lokalną. jakieś pomysły?


title: Jak mogę stworzyć łataczkę oprogramowania dla OS X?

text: Tworzę oprogramowanie dla OS X, które nie jest rozpowszechniane za pośrednictwem Mac App Store. Moje oprogramowanie umożliwia użytkownikom pobieranie różnych modułów przesłanych przez różne osoby. Jak mogę utworzyć łataczkę oprogramowania, aby zaktualizować moje oprogramowanie, a także zaktualizować moduły, które użytkownicy mogą w razie potrzeby przesyłać? Przyjrzałem się trochę różnicom i łatkom, które są dostarczane z OS X, ale wydają się być głównie dla zwykłego tekstu. Jakieś pomysły? Googlowałem, ale jestem trochę zakłopotany, co jest zaskakujące, ponieważ łatanie oprogramowania wydaje się być w większości aplikacji.


title: Testy CI w celu wyegzekwowania określonych zasad rozwoju – dobra praktyka?

text: Poniższe informacje są całkowicie hipotetyczne i każda konkretna jego część może, ale nie musi, dokładnie opisywać prawdziwe osoby lub sytuacje, czy to żywe, martwe, czy tylko udawane. Załóżmy, że jestem starszym programistą lub architektem odpowiedzialnym za zespół programistów pracujący nad projektem. Ten projekt zawiera bibliotekę bezpieczeństwa do uwierzytelniania/autoryzacji użytkownika tworzonej aplikacji. Biblioteka musi być dostępna dla programistów do edycji; jednak chciałbym "zaufać, ale zweryfikować", że programiści nie robią rzeczy, które mogłyby zagrozić bezpieczeństwu gotowego systemu, a ponieważ nie jest to moja jedyna odpowiedzialność, chcę, aby odbywało się to w sposób zautomatyzowany. Jako jeden przykład, powiedzmy, że mam interfejs reprezentujący użytkownika, który został uwierzytelniony przez bibliotekę bezpieczeństwa systemu. Interfejs udostępnia podstawowe informacje o użytkowniku i listę rzeczy, do których użytkownik jest upoważniony (aby aplikacja kliencka nie musiała ciągle pytać serwera „czy mogę to zrobić?”), wszystko oczywiście w niezmienny sposób. Jest tylko jedna implementacja tego interfejsu w kodzie produkcyjnym i na potrzeby tego postu możemy powiedzieć, że podjęto wszelkie odpowiednie środki, aby zapewnić, że ta implementacja może być używana tylko przez tę część naszego kodu, która musi być w stanie do tworzenia konkrecji interfejsu. Programiści zostali poinstruowani, że ten interfejs i jego implementacja są święte i wszelkie zmiany muszą przejść przeze mnie. To jednak tylko słowa; źródło biblioteki bezpieczeństwa jest z konieczności otwarte do edycji. Każdy z moich programistów może zdecydować, że ta bezpieczna, prywatna, sprawdzona przez hash implementacja musi być publiczna, aby mogli wykonać X, lub alternatywnie mogliby stworzyć własną implementację tego publicznego interfejsu w innej bibliotece, ujawniając algorytm mieszający, który zapewnia bezpieczną sumę kontrolną, aby zrobić Y. Mogę nie zostać poinformowany o tych zmianach, abym mógł pokonać programistę za to. Atakujący może następnie znaleźć te małe bryłki w nieskomplikowanej bibliotece skompilowanego produktu i wykorzystać je do zapewnienia fałszywym użytkownikom i/lub fałszywie podwyższonych uprawnień administracyjnych, z pominięciem całego systemu bezpieczeństwa. Ta możliwość nie pozwala mi zasnąć przez kilka nocy, a następnie tworzę automatyczny test, który dokładnie sprawdza bazę kodu pod kątem typów pochodzących z interfejsu i kończy się niepowodzeniem, jeśli znajdzie takie, które nie są dokładnie tym, czym i gdzie się znajdują. Kompiluję ten test do projektu w oddzielnym folderze VCS, do którego tylko ja mam prawa się zaangażować, skompiluję go jako zewnętrzną bibliotekę projektu głównego i skonfiguruję go do uruchamiania jako część zestawu testów CI dla zatwierdzenia użytkownika. Teraz mam pod pełną kontrolą zautomatyzowany test, który powie mi (i wszystkim innym), czy liczba wdrożeń wzrośnie bez mojego udziału, czy też implementacja, o której wiedziałem, ma coś nowego dodanego lub ma swoje modyfikatory lub ich modyfikatory. zmienili się członkowie. Mogę wtedy dalej badać i w razie potrzeby odzyskać możliwość pokonania programistów. Czy jest to uważane za „rozsądne”, aby chcieć robić w takich sytuacjach? Czy będę postrzegany w negatywnym świetle za chodzenie za plecami moich programistów, aby upewnić się, że nie robią czegoś, czego nie powinni?


title: Czy jako programista narzędzi/automatyzacji mogę lepiej wykorzystać OOP?

text: Mój czas jako programista (ok. 8 lat) spędziłem na tworzeniu narzędzi/automatyzacji tego czy innego rodzaju. Opracowywane przeze mnie narzędzia zazwyczaj współpracują z jednym lub kilkoma API. Tymi API mogą być win32, WMI, VMWare, aplikacja help-desk, LDAP, masz obraz. Tworzone przeze mnie aplikacje mogą służyć tylko do ściągania danych i przechowywania/raportowania. Może to być zapewnienie grup maszyn wirtualnych w celu tworzenia żywych środowisk, aktualizowania zgłoszeń problemów itp. Rozwijam się w .Net i obecnie czytam wzorce projektowe i próbuję pomyśleć o tym, jak mogę poprawić swoje umiejętności lepiej wykorzystać i zwiększyć moje zrozumienie OOP. Na przykład, nigdy nie korzystałem z własnego interfejsu w gniewie (co prawdopodobnie nie jest dobrą rzeczą), ponieważ szczerze mówiąc nie mogę określić, gdzie korzystanie z niego przyniosłoby później korzyści podczas modyfikowania mojego kodu. Moje klasy są zazwyczaj bardzo specyficzne i nie tworzę podobnych klas o podobnych właściwościach/metodach, które mogłyby używać wspólnego interfejsu (jak może to zrobić w salonie samochodowym lub aplikacji sklepowej). Generalnie używam podejścia n-warstwowego do moich aplikacji, mając warstwę prezentacji, warstwę logiki biznesowej / menedżera, która łączy się z warstwami, które wykonują wywołania do API, z którym pracuję. Moje jednostki biznesowe są zawsze po prostu bezmetodowymi obiektami kontenerowymi, które wypełniam danymi i przekazuję tam iz powrotem między moją warstwą interfejsu API przy użyciu metod statycznych do proxy/walidacji między frontem a zapleczem. Mój kod z natury mojej pracy ma kilka wspólnych elementów, przynajmniej z tego, co widzę. Dlatego staram się zobaczyć, jak mogę lepiej wykorzystać projektowanie OOP i być może wzorce wielokrotnego użytku. Czy mam rację, że obawiam się, że mogę być mądrzejszy w swojej pracy, czy to, co robię teraz, jest odpowiednie dla mojej pracy? A może brakuje mi czegoś fundamentalnego w OOP? **EDYTUJ:** Oto podstawowy kod, który pokazuje, jak działają moje warstwy wierzchnie mgr i api. Używam klas statycznych, ponieważ nie utrwalają żadnych danych, a jedynie ułatwiają przenoszenie ich między warstwami. public static class MgrClass { public static bool PowerOnVM(string VMName) { // Wykonaj logikę w celu sprawdzenia poprawności lub zastosowania logiki biz // wywołaj APIClass w celu wykonania pracy return APIClass.PowerOnVM(VMName); } } public static class APIClass { public static bool PowerOnVM(string VMName) { // Wywołuje zewnętrzne API w celu włączenia maszyny wirtualnej // zwraca prawdę lub fałsz, jeśli na przykład się powiedzie } }


title: Nazwy zmiennych: podkreślenia, bez podkreśleń, czy przypadek wielbłąda?

text: Nazwy zmiennych można zapisać na wiele sposobów, ale najczęstsze, z którymi jestem zaznajomiony, to: * tojestzmienną, * to_jest_zmienną i * tojestZmienna. Które z nich są preferowane i dlaczego?


title: Dynamika C# i obiekt Expando

text: W jakich scenariuszach tworzenia aplikacji można używać dynamiki C# i ExpandoObject lub kiedy należy rozważyć użycie dynamiki C# i ExpandoObject


title: Aktualizacje CMS do subversion -> proces przeglądu

text: Zarządzamy szeregiem witryn klienckich zbudowanych w Wordpress i Joomla, które wymagają regularnych aktualizacji podstawowego systemu CMS i rozszerzeń. Utrzymujemy te witryny w subversion i umieszczamy aktualizacje w subversion. Staramy się do tego użyć jednej wersji. Mamy pewne trudności z usprawnieniem tego procesu, z czasem chcielibyśmy go zautomatyzować, dzięki czemu możemy zaoferować proces za stałą cenę. Obecnie proces wygląda następująco 1. zrób kopię całego folderu 2. svn status |grep ' ^! |sed 's/^!\s*/svn usuń "/g' |sed 's/$/"/g' |sh 3. svn update 4. svn status |grep '^?' |sed 's/^?\s*/svn add "/g" |sed 's/$/"/g' |sh 5. svn ci -m "Zatwierdź wiadomość" 6. svn remove -m"tymczasowo usuń" http://subversion.repository.com/svn/automatem/projects/client/trunk/project/foldername Kroki 5-6 są zwykle powtarzane wiele razy. Z czym szukam pomocy * używamy subversion w wersji 1.6 i 1.7, ponieważ w podkatalogach 1.7 nie ma folderów .svn, zastanawiam się czy proces jest dużo łatwiejszy na 1.7? * dodaliśmy krok 3, ponieważ zmniejsza liczbę powtórzeń w krokach 5-6. Jednak to były tylko próby i błędy i nie mogę zrozumieć, dlaczego tak jest * Jak rozumiem, problem w kroku 5-6 polega na tym, że po zaktualizowaniu rozszerzenia może usunąć cały folder, a następnie wstaw ponownie ten folder ze zmienionymi plikami. W wersji subversion 1.6 spowodowałoby to usunięcie folderu .svn, co powoduje błąd 405 Odmowa dostępu (folder zostaje dodany, ale już istnieje w svn). Potrzebuję czegoś, co wstawia wszystkie foldery .svn z powrotem do mojej kopii roboczej, jeśli folder już istnieje w svn. Czy jest na to sposób? * Oczywiście doceniamy wszelkie inne ulepszenia.


title: Jaka jest najbardziej kompatybilna z różnymi przeglądarkami/systemami opcja grafiki 3D na stronie internetowej?

text: Chciałbym rozwinąć trochę funkcjonalności dla strony internetowej, która wymaga trochę 3D - użytkownik może poruszać się po obiektach, obracać je i teksturować. Do tej pory przyjrzałem się: * WebGL (w szczególności three.js) i wygląda świetnie, ale nie jest obsługiwany w IE ani IOS. * IOS obsługuje znacznik `<canvas>`, ale tylko 2d. Wygląda na to, że three.js ma nieobsługiwane hackowanie, które powoduje, że obiekt 3d używa płótna 2d zamiast tekstur, ale wygląda to na hack. * Rozważałem również skorzystanie z Flasha, który działa na większości przeglądarek, ale nie działa na IOS. Jaka jest moja najlepsza opcja do tworzenia grafiki internetowej 3D w szerokiej gamie przeglądarek i interfejsów? W tej chwili myślę o WebGL dla sieci (i proszę ludzi, aby używali chrome lub firefox, i wzięli hit na IE), a potem może napisać natywną aplikację dla IOS, ale nie jestem pewien, czy są dostępne lepsze alternatywy, które ja nie wiem.


title: Jak if/else działa wewnętrznie we wszystkich językach programowania?

text: if(true/false){ //if warunek jest prawdziwy }else { // if warunek jest fałszywy } Wszyscy wiedzą o strukturze `if-else`. Ale czym właściwie jest „jeśli”? Czy jest to metoda klasowa, statyczna czy słowo kluczowe? Nie jestem z tego powodu zdezorientowany.


title: Jakieś dobre źródło na temat prowadzenia firmy zajmującej się oprogramowaniem usługowym?

text: Firma zajmująca się oprogramowaniem usługowym jest jak firma outsourcingowa. Ty stawiasz nam wymagania, my opasujemy wynik dla Ciebie. To wyjątkowa sytuacja, w której każdy projekt jest krótkotrwały i bardzo różni się od siebie. Chciałbym się dowiedzieć, czy komuś udaje się prowadzić tego rodzaju firmę i czy ktoś ma dobry zasób takich konfiguracji. Dziękuję Ci!


title: Jakie są korzyści z umieszczania znaku konkatenacji na końcu lub początku wiersza?

text: Biorąc pod uwagę wiele wierszy, powiedzmy, ciągów zapytań SQL: $sql = "wybierz * z tabeli". „gdzie a=5”; Jak myślisz, jakie są zalety i wady umieszczania znaku konkatenacji na końcu lub na początku wiersza? Ma to na celu zrewidowanie dokumentu z wytycznymi dotyczącymi kodowania, mamy tutaj 2 osoby, które „czują”, że tak powinno być


title: Co sprawia, że dokumentacja programisty/systemu jest dobra?

text: Dużo czasu marnuje się, aby nowi programiści rozpoczęli pracę z istniejącymi systemami oprogramowania, ponieważ nie ma dobrej dokumentacji. Ale co sprawia, że dokumentacja systemu jest dobra? Jedną rzeczą jest dobra dokumentacja API, taka jak dokumentacja API Java, ale jak przenieść „większy obraz” i inne rzeczy, których nie można umieścić w dokumentacji API? Jednym z ograniczeń jest to, że pisanie dokumentacji nie powinno być zbyt trudne i czasochłonne, ponieważ jest to jeden z powodów, dla których jest on tak często pomijany. Co sprawia, że dokumentacja jest dobra?


title: Debugowanie: zrozumienie szczegółów, dlaczego niektóre poprawki działały?

text: Podczas debugowania czasami stwierdzam, że wprowadzam pewne zmiany i nie jestem w 100% pewien, dlaczego te zmiany poprawiają jakiś błąd w programie. Czy konieczne jest zrozumienie każdego szczegółu, dlaczego wystąpiły pewne błędy i dlaczego niektóre zmiany wyeliminowały te błędy? A może zdarza się, że programiści czasami uruchamiają program, nie znając szczegółów, dlaczego poprawka zadziałała?


title: Dlaczego dekodowanie transmisji z łazika Curiosity przez MRO miałoby trwać godzinami?

text: Ten klip wideo NASA mówi, że dane z Curiosity przekazywane przez Mars Reconnaissance Orbiter (MRO) byłyby przechowywane przez kilka godzin, a następnie przesyłane na Ziemię (podobno zajęłoby to około 14 minut), po czym inżynierowie zajęliby _godziny_ odkodowanie dane. Z tego, co przeczytałem, wydaje się, że MRO może być używane jako zapasowe urządzenie komunikacyjne dla Curiosity w razie potrzeby. W przypadku lądowania Curiosity, uważam, że MRO przechowywałoby dane, dopóki nie okrąży czerwonej planety i nie będzie miało bezpośredniego pola widzenia z Ziemią przed przesłaniem ich (z drugiej strony, tutaj tylko spekuluję), co mogę Rozumiesz. Ale w takim razie dlaczego inżynierowie NASA zajęliby godziny, aby odkodować sygnał przekazany przez MRO po jego odebraniu na Ziemi? ( _Punkt bonusowy: czy zwykle dekodowanie sygnałów MRO zajmuje godziny?_ )


title: Jak pomóc nie-programistom w zatrudnianiu programisty

text: Mój przyjaciel ma programistę (prawdopodobnie typu „szalonego geniusza”), który zbudował pokaźny system, od którego krytycznie zależy ich mała firma. Chcieliby uciec od swojego obecnego faceta i zastąpić go kimś bardziej wiarygodnym, ale pojawia się pytanie, skąd wiedzieć, że osoba, którą go zastępują, jest sama kompetentnym programistą. Jako programista wiem, jakie pytania _ja_ bym zadał i jak zinterpretować odpowiedzi, ale jak poradziłbyś firmie, która nie ma doświadczenia w programowaniu, aby zajęła się identyfikacją tych, którzy znają się na rzeczy?


title: czy można zrobić wyszukiwarkę regex w sieci, a jeśli tak, to w jaki sposób?

text: Myślę, że byłoby świetnym pomysłem, gdybyśmy mieli wyszukiwarkę wyrażeń regularnych, ale czy da się to zrobić? Wydaje się to niemożliwe, ponieważ nie ma możliwego sposobu na prawidłowe indeksowanie tak ogromnej ilości danych i wyświetlanie wyników w kolejności trafności z tego, co mogę wymyślić. Jestem ciekaw, jaka byłaby odpowiedź na to.


title: Pomyłka z wzorcem Factory w odniesieniu do zasady zastępowania Liskov, utrzymania kodu i testowania jednostkowego?

text: Mam zamieszanie dotyczące wzorca fabrycznego, istnieją zasadniczo dwa sposoby, na które można to zaimplementować. Podejście 1: interfejs publiczny IProductFactory { IProduct GetProductA(); IProdukt PobierzProduktB(); IProdukt PobierzProduktC(); } public class ProductFactory : IProductFactory { public IProduct GetProductA() { //tutaj część implementacji } public IProduct GetProductB() { //tutaj część implementacji } public IProduct GetProductC() { //tutaj część implementacji } } Podejście 2: public enum ProductType { ProductA = 1, ProductB = 2, ProductC = 3 } interfejs publiczny IProductFactory { IProduct GetProduct(ProductType productType); } public class ProductFactory : IProductFactory { public IProduct GetProduct(ProductType productType) { switch (productType) { case ProductType.ProductA: //zwróć IProduct z określoną przerwą w implementacji; case ProductType.ProductB: //zwróć IProduct z określoną przerwą w implementacji; case ProductType.ProductC: //zwróć IProduct z określoną przerwą w implementacji; default: //return null } } } **Zalety obu podejść** Podejście 1: 1. korzyści płynące ze sprawdzania czasu kompilacji, czy klasa implementacji będzie zmuszona do dostarczenia odpowiednich metod. Podejście 2: 1. Wdrożenie przyniesie korzyść w postaci krótszego nie. linii kodu. 2. Interfejs nie staje się kruchy, nie zmieni się w miarę dodawania nowych produktów. **Wady obu podejść** Podejście 1: 1. Linie kodu stają się duże. 2. W miarę wdrażania większej liczby Produktów interfejs się zmienia, a zatem trudno jest przestrzegać zasady substytucji Liskov. Podejście 2: 1. Ponieważ ukrywa wewnętrzne szczegóły GetProduct, trudno powiedzieć, co Factory zwróci po przekazaniu określonego typu wyliczenia. 2. Możesz dostać się do wyjątków w czasie wykonywania **Nadal nie mogę zdecydować, którego podejścia użyć?** * * * **Uwaga:** Jestem świadomy tylko tych dwóch podejść, mogą być też różne podejścia.


title: Przekonujące argumenty za „semantycznym CSS” nad „css zorientowanym obiektowo”

text: [Kontekst - jestem programistą Java, dyskutuję z projektantem pracującym w przestrzeni html/css] Rozmawiałem dzisiaj ze współpracownikiem na temat zalet „semantycznego css”. Jego odpowiedź brzmiała: „Och, nie interesuje nas semantyczny css, używamy css zorientowanego obiektowo”. Rozumiem, co ma na myśli, tj. że do opisywania stylów używa właściwości „dziedziczenia” domieszek css i SASS. Ale czuję, że nie próbował zrozumieć „semantycznego CSS”. Próbuję skonstruować przekonujący argument o tym, dlaczego „css zorientowany obiektowo nad semantyczny” jest wadliwy. Oto moje dotychczasowe rozumowanie: * „css nie jest zorientowany obiektowo” http://stackoverflow.com/a/7431746/15441 * Napisz kod html z komponentami semantycznymi http://css.dzone.com/articles/object- orientowane-css-crap-long * Przykłady układu strony z elementami semantycznymi http://woork.blogspot.com.au/2008/11/css-coding-semantic-approach-in-naming.html * Przykłady nie - nazewnictwo semantyczne http://css-tricks.com/semantic-class-names/ Moje pytanie brzmi: „jakie są przekonujące argumenty wyjaśniające semantyczny CSS komuś, kto myśli, że „dziedziczenie”, „klasy” i „domieszki” tworzą obiekt zorientowany i nie musi się martwić o dobre imię?”


title: Czy w języku deklaratywnym, szczególnie w kontekście modelowania, możemy wyraźnie odróżnić kod od danych?

text: W przypadku języków deklaratywnych, a konkretnie (ale nie tylko) z dziedziny modelowania, nie jest dla mnie oczywiste, czy kod można uznać za odrębny od danych. Ten tok rozumowania może mieć zastosowanie tylko do nieturingowych kompletnych języków, takich jak NeuroML. Powiedzmy na przykład, że miałem bardzo specyficzny język deklaratywny, którego używałem do opisywania pozycji planet i ich prędkości, a także opisałem system trzech orbitujących ciał: satelita planeta_ziemia,księżyc,słońce { planeta_ziemia.pozycja = [6,0, 0] planet_earth.velocity = [0,23,-32] planet_earth.mass = 1e3 moon.position = [6,0,0001] moon.velocity = [0,0,3] moon.mass = 1e2 sun.position = [0,0,0] sun.velocity = [0,0,0] sun.mass = 1e12 } Ten język można przekazać do symulatora, który następnie symuluje ruch planet. Z jednej strony jest to kod - opisuje warunki początkowe, a co za tym idzie, w ramach ograniczeń języka, sekwencję kroków do uruchomienia komputera. Z innej perspektywy są to „dane” – to opis systemu fizycznego. Czy ta koncepcja (jest kodem lub danymi) jest czymś, co było dużo badane? Zajrzałem do tego


title: Co decyduje o tym, kiedy aplikacja wymaga mvvm?

text: Zajmuję się tworzeniem aplikacji mobilnych na Windows Phone 7. Ta aplikacja wywołuje niektóre usługi sieciowe i od czasu do czasu wysyła odpowiedzi za pośrednictwem usług internetowych. Niedawno zacząłem przyglądać się MVVM i zauważyłem, że chociaż jest to sugerowane podczas tworzenia aplikacji w WP7, wielu programistów mówi, aby używać go tylko wtedy, gdy jest to konieczne. Wraz z tym powiedzieli, że jeśli aplikacja jest wystarczająco „mała” lub „wystarczająco prosta”, to prawdopodobnie nie jest warta czasu. Stąd moje pytanie. Kiedy powinniśmy używać MVVM? Czy bez tego można budować aplikacje na większą skalę?


title: Rozproszony system dowodzenia i kontroli

text: Mam aplikację, która składa się z zestawu procesów Java i C++ działających na jednym lub wielu systemach i potrzebuję możliwości monitorowania i kontrolowania komponentów tak, jakby były jednym kompletnym systemem. Moje wymagania: 1. statystyki uruchomieniowe (wiadomości na sekundę itp.) 2. dziennik zdarzeń 3. kontrola: „usługa X ustaw szybkość na 1000 mps” lub „zatrzymanie wszystkich usług” 4. konfiguracja otoczenia, aby wszystkie usługi mogły się uruchomić i odkryj tryb pracy (itd.) Ponieważ wiadomości w płaszczyźnie danych są oparte na 0MQ, obecnie robię to za pomocą wiadomości opartych na 0MQ i dystrybutora wiadomości, aby rozłożyć wiadomości sterujące. Jednak interesuje mnie, jak inni poradzili sobie z tym problemem. Dziękuję.


title: Kolejka priorytetowa dla algorytmu Kruskala z czasem działania O(E lg V)

text: Przeglądam moje notatki na temat algorytmu Kruskala i mam pytanie o skrócenie czasu pracy do O(E lg V). Używając PQ z _edges_ i tablicy logicznej, której wierzchołki dodaliśmy do naszego drzewa _T_ , czas wykonania to O(E lg E), ale w moich notatkach jest też wariant z czasem wykonania O(E lg V) , używając PQ z wierzchołkami zamiast krawędzi. Jednak wymaga to od PQ obsługi aktualizacji wag (podświetlona ważna część): > Utrzymuj PQ wierzchołków połączonych krawędzią z T, razem z krawędzią >, która łączy ją z T. Priorytetem tej krotki jest waga > minimalna waga krawędzi łącząca go z T. Dodając nowy wierzchołek do drzewa, > dodajemy wszystkie wierzchołki sąsiadujące z tym nowym wierzchołkiem do PQ, chyba że jest już > w PQ. **Jeżeli jest w PQ i nowa krawędź łącząca go z T ma > mniejszą wagę, aktualizujemy jego wagę i powiązaną z nią krawędź** , jeśli > nie, nic nie robimy. Myśląc o tym, jak faktycznie to zaimplementować, zdałem sobie sprawę, że wszystkie kolejki priorytetowe, które widziałem, mają aktualizacje O(n), ponieważ kolejność jest zbyt słaba, abyśmy mogli szybciej znaleźć element. Próbowałem trochę przeszukać, ale nie mogłem znaleźć żadnych PQ, które obsługują aktualizację w czasie O(lgn), z wyjątkiem niektórych odniesień do stert Fibonacciego, które mogą to zrobić w czasie O(1), ale wygląda na znacznie bardziej złożoną strukturę danych. Czy istnieje prosty sposób na uzyskanie aktualizacji O(lg n) z kolejki priorytetowej? Mógłbym wstawić klucze i odwołania do elementów w tabeli mieszającej i użyć ich do szybkiego znajdowania i aktualizowania elementów, czy to jest realne rozwiązanie? (Zdaję sobie sprawę, że będzie to wymagało O(n) dodatkowej przestrzeni.)


title: Problem z patentem na czcionkę FreeType i platforma Apple

text: Jak wiem, FreeType ogranicza niektóre funkcje przez opatentowaną technologię czcionek firmy Apple. Tak więc, jeśli opracuję program na platformę Apple _tylko_ , czy mogę włączyć i używać tych funkcji?


title: Kto powinien być odpowiedzialny za pisanie przypadków testowych?

text: Czy testy w jakimś projekcie powinny być pisane przez osobę, która zajmuje się kodowaniem (zazwyczaj senior w naszym zespole), czy też mogą to robić młodsi koderzy z mniejszym doświadczeniem?


title: Jakie umiejętności programistyczne zapewniły Ci najlepszy zwrot z inwestycji?

text: Jakie są rzeczy, których nauka zajęła ci niewiele czasu, ale przyniosła dużą korzyść? A ile czasu zajęło nauczenie się wystarczająco dużo, zanim zaczęły się opłacać? Na przykład nie jestem mistrzem wyrażeń regularnych, ale zrozumienie podstaw na tyle zajęło mi prawdopodobnie kilka godzin, aby zacząć ich używać, a przydają się one regularnie.


title: Transakcje i kolejki rozproszone, ruby, erlang

text: Mam problem, który dotyczy kilku maszyn, kolejek wiadomości i transakcji. Na przykład użytkownik klika na stronę internetową, kliknięcie wysyła wiadomość do innej maszyny, która dodaje płatność do konta użytkownika. Może być wiele tysięcy kliknięć na sekundę. Wszystkie aspekty transakcji powinny być odporne na błędy. Nigdy wcześniej nie miałem do czynienia z czymś takim, ale trochę czytania sugeruje, że jest to dobrze znany problem. Więc na moje pytania. Czy mam rację, zakładając, że bezpiecznym sposobem na zrobienie tego jest dwufazowe zatwierdzanie, ale protokół blokuje, więc nie uzyskam wymaganej wydajności? Wygląda na to, że bazy danych, takie jak redis i system kolejkowania wiadomości, taki jak Rescue, RabbitMQ itp., Tak naprawdę nie pomagają mi - nawet jeśli zaimplementuję jakiś rodzaj zatwierdzania dwufazowego, dane zostaną utracone, jeśli redis ulegnie awarii, ponieważ zasadniczo dotyczy tylko pamięci . Wszystko to skłoniło mnie do spojrzenia na erlang - ale zanim wkroczę i zacznę uczyć się nowego języka, naprawdę chciałbym lepiej zrozumieć, czy jest to warte wysiłku. Konkretnie, czy mam rację sądząc, że ze względu na możliwości przetwarzania równoległego erlang jest lepszym wyborem do implementacji protokołu blokującego, takiego jak zatwierdzanie dwufazowe, czy też jestem zdezorientowany?


title: Poprawne echo html w js?

text: Kolega i ja dyskutowaliśmy o tym, jak echo HTML w kodzie javascript. W szczególności w sytuacji podobnej do tej: new Element('div', { html: '{długi ciąg HTML idzie tutaj!}' }.inject($('content')); Krótkie fragmenty wydają się działać dobrze w tym sytuacji, ale co by było, gdybyśmy powtarzali duży zestaw danych?Wiersz stałby się wtedy bardzo długi i trudny do debugowania (bo kto przewija się w poziomie?!) Problem polega również na tym, że oprócz długości wszystkie użyte cudzysłowy potrzebują do ucieczki, zwłaszcza jeśli kod javascript jest wywoływany po stronie serwera, w którym to przypadku jeden ze znaków cudzysłowu byłby „zużyty” per se. Jednym z rozwiązań byłoby rozbicie długiej linii kodu HTML : new Element('div', { html: '{długi ciąg HTML trafia tutaj!}' + '{więcej HTML idzie tutaj}' + '{i jeszcze więcej...}' }.inject($(' content')); Inne dostarczone rozwiązanie obejmowało dołączanie po stronie serwera addslashes(), które obejmuje drugi plik.Chociaż przypuszczam, że jest to również po możliwe jest zdefiniowanie całego kodu HTML, który ma być uwzględniony w zmiennej php i powtórzenie go, gdy jest to potrzebne: <?php $html = addslashes('{zawartość html}'); ?> new Element('div', { html: '<?=$html?>' }.inject($('content')); Która metoda jest najlepsza pod względem czytelności kodu, wydajności i bezpieczeństwa?


title: Czy masz teraz prostotę, czy programujesz z myślą o przyszłości?

text: Obecnie koduję nową aplikację dla mojej firmy, która jest dość zaangażowana. Aby dotrzymać terminu, funkcjonalność została nieco stonowana, dzięki czemu możemy mieć coś gotowego do uruchomienia. Otrzymałem zadanie przygotowania i uruchomienia wersji 1 do końca miesiąca. Jestem mniej więcej w połowie rozwoju i doszedłem do punktu, w którym widać już koniec. Wczoraj spędziłem trochę czasu, wymyślając bardzo ładne, proste rozwiązanie dla jednego z wymagań i jestem całkiem dumny z tego, jak się okazało. Dziś rano został wysłany dokument wersji 2 i jest tam wymóg, który będzie wymagał, aby kod, który napisałem wczoraj, został albo wypatroszony, albo poważnie zmieniony. W przyszłości wymagałoby to dużo pracy, jeśli zostawię to tak, jak jest. Mogę teraz poświęcić dodatkowy dzień, aby moje obecne rozwiązanie było bardziej niezawodne, tak aby można było dodać funkcję v2 przy znacznie mniejszym nakładzie pracy, ale to spowoduje, że będę trochę opóźniony w dodatkowym kodowaniu, którego wymagałoby to. Nie wiem czy będę robił v2. Może to być ja, może to być współpracownik, a nawet stażysta. Gdybyś był na moim miejscu, czy poświęciłbyś teraz czas, aby ułatwić sobie przyszłość, czy też zostawiłbyś swoje rozwiązanie i poradziłbyś sobie z nim, gdy nadejdzie czas?


title: Jak w PHP programować mając na uwadze skalowalność?

text: Wiem, że to może być ogólne pytanie, ale co dokładnie obejmuje skalowanie dla wszystkich użytkowników, z którymi się spotkasz, nawet jeśli nie w ciągu najbliższych kilku miesięcy? Zrobiłem trochę badań i większość tego, co zostało zrobione, jest po stronie serwera, z pamięciami podręcznymi i innymi podobnymi rzeczami. Pomocne byłyby wszelkie wskazówki we właściwym kierunku.


title: Jakich języków programowania powinien uczyć każdy student informatyki?

text: Jakich języków (lub klas (jak w paradygmatach) języków programowania plus zalecany język tej klasy) powinien według Ciebie uczyć każdy student informatyki na studiach? Motywuj swoje odpowiedzi; dlaczego ten język? Jaki będzie z tego pożytek? Jakich pojęć naucza (lepiej niż język X)? **Uwaga/wyjaśnienie** : to pytanie dotyczy informatyki z dużym naciskiem na inżynierię oprogramowania, a nie czystej informatyki. W dalszym ciągu skupiamy się na edukacji informatycznej, a nie na edukacji w zakresie inżynierii oprogramowania.


title: Jak nazywamy RPC, który nie tylko wywołuje funkcje zewnętrzne, ale także aktualizuje struktury danych?

text: Mam prosty C++ RPC, który pozwala na zdalne instancje klas, które obsługują aktualizację elementów członkowskich na żywo (struktury danych), a także wywołania metod. Na przykład miałem zadeklarowaną w ten sposób klasę (pseudokod): class Sum{ public: RPC_FIELD(int lastSum); RPC_METHOD(int summ(int a, int b)) { ostatnia suma = a + b; zwróć ostatnią sumę; } }; Na maszynie `A` miałem jej instancję. Na maszynach `B` i `C` stworzyłem jego instancje i połączyłem je z maszyną `A`. Więc teraz faktycznie wykonują całe przetwarzanie na maszynie `A`, ale maszyny `B`, `C` automatycznie aktualizują pola klasy `lastSum` (i mogą zasubskrybować zdarzenie aktualizacji). Jak wywołać (`Nice Name`) taką funkcjonalność, gdy mamy wiązanie przez sieć wykonywane automatycznie przez bibliotekę RPC? Jak twórca biblioteki RPC może ogłosić taką funkcję?


title: Co firma może zrobić, aby uniemożliwić deweloperom kontraktowym poza siedzibą redystrybucję modyfikacji kodu na licencji GPLv2?

text: Moja firma korzysta z wielu wykonawców onsite i coraz częściej offsite do tworzenia stron internetowych i aplikacji internetowych. Nasza platforma wykorzystuje mieszankę oprogramowania i bibliotek open source, które przez lata wprowadziliśmy wiele modyfikacji. Niektóre zmodyfikowane oprogramowanie jest objęte licencją GPLv2 bez wyjątku łączenia. Z różnych powodów nie chcemy, aby źródło zostało upublicznione. Problem polega na tym, że jeśli dostarczamy pliki binarne na naszą platformę naszym programistom spoza witryny, jesteśmy zobowiązani do dostarczenia kodu źródłowego na żądanie. Dodatkowo będą chwile, kiedy będziemy musieli rozpowszechniać źródła naszych zmodyfikowanych bibliotek. Od tego momentu wydaje się, że nic nie stoi na przeszkodzie, aby wykonawca dokonał redystrybucji pracy. FAQ GPL stwierdza: > . . . gdy organizacja przekazuje kopie innym organizacjom lub osobom >, czyli dystrybucja. W szczególności dystrybucją jest dostarczanie kopii > wykonawcom do użytku poza siedzibą firmy. Ponadto GPL stanowi: > Nie możesz nakładać żadnych dalszych ograniczeń na wykonywanie przez odbiorców > praw przyznanych w niniejszym dokumencie. Pytanie brzmi: **co można zrobić, aby uniemożliwić wykonawcom poza siedzibą redystrybucję naszego zmodyfikowanego kodu?** Uwaga, myślę, że GPLv3 rozwiązuje ten problem za pomocą następującej klauzuli. Tak więc moje pytanie dotyczy konkretnie zmodyfikowanego kodu na licencji GPLv2: > Możesz przekazywać objęte dzieła innym osobom wyłącznie w celu ich posiadania > dokonywać modyfikacji wyłącznie dla Ciebie lub zapewnić Ci udogodnienia do > prowadzenia tych dzieł, pod warunkiem, że przestrzegasz warunki niniejszej Licencji > w przekazywaniu wszelkich materiałów, do których nie masz kontroli nad prawami autorskimi.


title: Abstrakcja: Wojna między rozwiązaniem problemu a rozwiązaniem ogólnym

text: Jako programista staję przed dylematem, gdzie chcę, aby mój program był jak najbardziej abstrakcyjny i ogólny. Takie postępowanie zwykle umożliwiłoby mi ponowne użycie mojego kodu i uzyskanie bardziej ogólnego rozwiązania problemu, który może (lub nie) pojawić się ponownie. Wtedy ten głos w mojej głowie mówi, po prostu rozwiąż problem głuptasie, to takie proste! Po co spędzać więcej czasu niż musisz? Wszyscy rzeczywiście zmierzyliśmy się z tym pytaniem, w którym Abstrakcja jest na prawym ramieniu, a Solve-it-głupi siedzi po lewej. Czego słuchać i jak często? Jaka jest twoja strategia na to? Czy powinieneś wszystko abstrahować?


title: Różnica między klastrami klasowymi a fabryką abstrakcyjną w kakao

text: Czytałem, że klastry klasy Obj-C są implementacją fabryki abstrakcyjnej. Czy ktoś może wyjaśnić, czy są jakieś różnice między tymi 2 jako wzorcami projektowymi. Przeczytałem gdzieś, że istnieją pewne ograniczenia dotyczące klastrów klasowych, które nie dotyczą tradycyjnej fabryki abstrakcyjnej, ale nie podało to więcej szczegółów.


title: Jaka jest rola Architekta Informacji?

text: Słyszałem ten termin, o którym mówiono, zwłaszcza w odniesieniu do tworzenia stron internetowych, ale mam problem z jasnym zrozumieniem tego, czym właściwie zajmuje się architekt informacji. Jakieś pomysły, jaka byłaby ich rola lub rezultaty?


title: Korzystanie z repozytorium Apt do płatnych aktualizacji oprogramowania

text: Próbuję określić sposób rozpowszechniania aktualizacji oprogramowania dla hostowanej/na miejscu aplikacji sieci Web, która może mieć aktualizacje cotygodniowe i/lub miesięczne. Nie chcę, aby klienci korzystający z produktu on-site musieli martwić się o jego ręczną aktualizację. Chcę tylko, aby automatycznie pobierał i instalował ala Google Chrome. Planuję dostarczyć plik OVF z zainstalowanym i skonfigurowanym oprogramowaniem Ubuntu. Moją pierwszą myślą o tym, jak rozpowszechniać oprogramowanie, jest utworzenie sześciu repozytoriów/kanałów Apt (nie jestem pewien, który byłby lepszy w tym momencie), które będą dostępne przez SSH za pomocą kluczy, więc jeśli klient nie odnowi subskrypcji, możemy wyłączyć jego konto : 1. Beta — używane wewnętrznie na danych testowych w celu sprawdzenia pakietu pod kątem poważnych defektów. 2. Wewnętrzne — używane wewnętrznie na podstawie aktualnych danych w celu sprawdzenia opakowania pod kątem wad (etap karmienia psów). 3. Zewnętrzny 1 — Wdrożony do 1% naszej bazy użytkowników (wybranych losowo) w celu sprawdzenia defektów. 4. Zewnętrzny 9 — Wdrożony do 9% naszej bazy użytkowników (wybranych losowo) w celu sprawdzenia wad. 5. Zewnętrzne 90 — wdrożone u pozostałych 90% użytkowników. 6. Hosted — wdrożony w hostowanym środowisku. Przejście do następnego repozytorium w przypadku zgłoszenia problemów będzie wymagało podpisu na każdym etapie. Moje pytania do społeczności to: 1. Czy ktoś już kiedyś próbował czegoś takiego? 2. Czy ktoś widzi minusy tego typu procedury? 3. Czy jest lepszy sposób?


title: Ryzyko związane z utrzymaniem kodu C++ Builder 6?

text: Moja firma ma duże oprogramowanie napisane w C++ Builder 6. Jestem młodszym programistą zaledwie rok po ukończeniu studiów. Moje pytanie brzmi: 1. Ile mają długu technicznego? Jakie są zagrożenia związane z pracą w takim środowisku IDE, które nie jest już obsługiwane?


title: pytania do rozmowy kwalifikacyjnej na temat projektowania oprogramowania

text: Przygotowuję się do rozmowy kwalifikacyjnej w google, która będzie obejmowała pytania programistyczne oraz pytania projektowe. Przeprowadzałem wywiady z Facebookiem i Amazonem, ale nie poszło mi dobrze w części dotyczącej projektowania wywiadu dla obu firm. Poproszono mnie o zaprojektowanie systemu rezerwacji restauracji, szeregu skrytek oraz listy znajomych na Facebooku. Pytania różnią się na bardzo różne sposoby. Czy ktoś może mi dać sugestie, jak przygotować się do tego rodzaju wywiadów i jak ogólnie się w tym poprawić? Zastanawiam się, czy są takie miejsca jak careercup.com, które są bardzo pomocne w przygotowaniu do wywiadów algorytmicznych, mają też pewne problemy projektowe, ale nie w wystarczającym stopniu.


title: Wydajne rozwiązanie do aktualizacji słowników

text: Zacznijmy od problemu: istnieje duży słownik X, który zawiera pary {klucz, wartość}, tj.: X = [{100, 10}, {101, 0}, {103, 0}, {106, 2}, {110, 1}] Co t sekund, X musi być aktualizowane wartościami z podsłownika U i 0 ustawionymi na każdą wartość dla klucza, który nie występuje w nowej zaktualizowanej U, ale był w poprzedniej aktualizacji. Najważniejszym wymaganiem jest, aby aktualizacja była wykonana w taki sposób, aby została wykonana minimalna liczba operacji aktualizacji każdej pary {klucz, wartość} w słowniku X, tj. X zaktualizowane przez U, gdzie U = [{100, 10}, {102, 5}, {103, 0}, {105, 1}, {110, 0}] stałoby się: X = [{100, 10}, {101, 0}, {102, 5}, {103, 0}, {105, 1}, {106, 2}, {110, 0}], ale tylko następujące pary zostały zaktualizowane/dodane w X: {102 , 5} {105, 1} {110, 0} Aby było trochę ciekawiej, istnieje kilka ograniczeń: * iteracja po słowniku X jest bardzo kosztowna. Załóżmy, że X jest bardzo duże. * aktualizacja pary {klucz, wartość} jest bardzo kosztowna, więc zadaniem jest zminimalizowanie tego kosztu. Więc to był problem. Oto moje rozwiązanie: Pierwszym pomysłem, jaki wpadłem na pomysł, było zapisanie słownika U po aktualizacji X. Przy następnej aktualizacji biorę każdy klucz z Uprev i ustawiam go na 0 w X. foreach (var pair w Uprev) { X[pair.Key ] = 0; } Po wykonaniu tej czynności wykonałbym pętlę, aby ustawić nowe wartości dla kluczy obecnych w nowym słowniku U: foreach (var pair w U) { if (X.ContainsKey(pair.Key)) X[pair.Key] = para.Wartość; w przeciwnym razie X.Add(para.Klucz, para.Wartość); } A więc... pytanie: czy istnieje lepsze rozwiązanie problemu, który opisałem powyżej? Czy można lepiej zarządzać aktualizacjami? Wszelkie pomysły są mile widziane, więc nie wahaj się publikować wszystkiego, co przyjdzie Ci do głowy. Dziękuję za wkład


title: Czy kod bajtowy Java jest interpretowany?

text: Definicja interpretacji (popraw mnie, jeśli się mylę) to parsowanie kodu w następujący sposób: **1-** Przetłumacz aktualnie parsowaną linię na jakiś język pośredni. **2-** Uruchom przetłumaczony wiersz. **3-** Przejdź do następnego wiersza. **4-** Przetłumacz to. **5-** Uruchom to. I tak dalej. Jeśli tak, to dlaczego ludzie mówią, że JVM **interpretuje** kod bajtowy Javy? To, co robi, to **wykonanie** go. Kod bajtowy jest już przetłumaczonym kodem źródłowym Java, więc nie ma potrzeby dalszego tłumaczenia. Dlaczego więc w grę wchodzi termin **interpretacja**? Jeśli ten termin jest używany, ponieważ JVM **wykonuje** Bytecode **wiersz po wierszu** , powiedziałbym, że robi to każde wykonanie. Wykonuje możliwy do uruchomienia kod od góry do dołu. Dlaczego więc używać terminu **interpretacja**? _**Interpretacja** w przeciwieństwie do czego?_


title: Jak zastosować zasady OOP, SOLID i wzorce projektowe w bibliotece wykonującej przetwarzanie równoległe bez wiedzy wywołującego?

text: Chcę zbadać spory między dwoma gorącymi tematami: Czysty kod a dobra wydajność. (W toku ... proszę o komentarze, które pomogą mi wypłukać szczegóły tego pytania. Dzięki.) Przykłady, które mogą pomóc mi zdefiniować pytanie: * Windows GDI+ jest znany z wykonywania pracy na osobnych wątkach, co miałoby miejsce równolegle do kodu użytkownika, jeśli jest uruchamiany na maszynie wieloprocesorowej. * Component Object Model (COM) to framework, który daje programistom klas możliwość zapewnienia równoległych implementacji interfejsów, jednak błędy, które z tego wynikają, nie są niespotykane. * Jednym ze sposobów zapewnienia bezpieczeństwa zrównoleglenia jest zapewnienie, że praca zrównoleglona ma miejsce tylko w ramach pojedynczego wywołania metody obiektu na najbardziej zewnętrznym poziomie interfejsu API; metoda nie powinna wracać do obiektu wywołującego, dopóki praca zrównoleglona nie zostanie zakończona. (Obiekty i metody, które nie są widoczne na zewnątrz, można zrównoleglać.) Czy to sprawia, że konieczne jest zbudowanie całego zestawu obiektów typu flyweight tylko po to, aby oddzielić "Obiekty publiczne" od "Obiekty prywatne"? * Zasady SOLID zachęcają do rozszerzalności, pozwalając użytkownikom bibliotek na dostarczanie własnych implementacji interfejsów (poprzez Dependency Injection). W jaki sposób biblioteka zapewnia, że implementacja użytkownika spełnia wymagania dotyczące bezpieczeństwa wątków? * Component Object Model wykorzystuje „modele wątków”, co było próbą rozwiązania tego problemu, jednak w większości przypadków powoduje tylko zakleszczenia lub nieudane wywołania funkcji z powodu „wywoływania z niewłaściwego zestawu wątków”.


title: jak często musimy robić wycenę dla programisty?

text: Mam to pytanie, ponieważ mój przyjaciel powiedział mi, że jeśli mamy częste oceny, takie jak 4 miesiące lub 6 miesięcy raz, ludzie zostaną zwróceni do myślenia o pieniądzach. Ale myślę o tym w innym aspekcie, na przykład, ludzie będą otrzymywać informacje zwrotne i szybciej niż ocena roczna. Nie musimy zbytnio podnosić pensji. Ale awans żetonowy pomógłby im uzyskać trochę odświeżenia.


title: Diagramy sekwencji UML - obejmują

text: Obecnie wykonuję zadanie OCPJEA. Muszę narysować kilka diagramów sekwencji dla przypadków użycia przedstawionych w dokumentacji. Jeden z przypadków użycia (A) mówi, że po pewnej interakcji system wykonuje inny przypadek użycia (B). Narysowałem już diagram dla B, czy jest jakiś sposób w UML2 na pokazanie włączenia, czy muszę zduplikować wszystkie te interakcje do A?


title: Ktoś koduje przy biurku na bieżni?

text: od jakiegoś czasu myślałem o zdobyciu biurka na bieżni, ale po prostu nie wiem, czy można na nim kodować. Widzę, jak robię normalną pracę na komputerze, chodząc bardzo wolno, ale po prostu nie wiem, czy potrafisz pisać kod, aby to zrobić. Jak wiele osób mógłbym znieść utratę wagi i po prostu nie jestem już w formie. Siedzę przy komputerze przynajmniej 12 godzin dziennie, a potem jeszcze kilka godzin na laptopie. Muszę coś zrobić, aby pomóc mojemu zdrowiu. Widziałem również wiele raportów na temat długoterminowych problemów zdrowotnych związanych z pracą biurową. Lubię to. Zanim wrzucę kilkaset dolarów na nowe biurko, zastanawiam się, czy ktoś wypróbował biurko z bieżnią, a jeśli tak, to które?


title: Oprogramowanie do zarządzania projektami / 1 może 2 programistów

text: Poszukuję oprogramowania, które mogę wykorzystać do "zarządzania" wieloma projektami (5 - 10). Oto funkcje, które chciałbym, ale każda rekomendacja jest mile widziana. 1. Śledzenie błędów/funkcji na podstawie projektu. 2. Jakiś sposób na przechowywanie wszystkich dokumentów, diagramów, specyfikacji, wymagań w jednym miejscu z projektem. Jeszcze lepsze narzędzie, w którym wszystkie te rzeczy lub większość z nich może zostać napisana. 3. Zarządzanie zadaniami w fazie rozwoju z kamieniami milowymi i szacunkami/rzeczywistymi. 4. Integracja z Git Wykonywałem prace kontraktowe i radziłem sobie bardzo dobrze, jeśli chodzi o pozyskiwanie projektów, ale BARDZO trudno jest wszystkim efektywnie zarządzać. Staram się poznać najlepsze praktyki, jeśli chodzi o metodologie programowania oprogramowania i im więcej czytam, tym bardziej zdaję sobie sprawę, że po prostu słabo zarządzam tymi projektami. Robię wszystko, ale im więcej się przyjmuję, tym wszystko jest mniej „solidne”. Obawiam się, że jeśli nie otrzymam dobrych, solidnych narzędzi/praktyk, zrobię krzywdę moim klientom i sobie. Problem polega na tym, że istnieje tak wiele opcji, że trudno je wszystkie przezwyciężyć. Byłem dzisiaj w punkcie, w którym zdecydowałem, że po prostu zakoduję swój własny (jest tu pewna ironia)! Oczywiście każdy ma swoje upodobania i niechęć, które chciałbym usłyszeć od niektórych z was, samotnych programistów i jak zarządzacie wszystkim, ponieważ nasze potrzeby nie są dokładnie tym samym, czego może potrzebować duży zespół. Chcę również rozwiązania, które można skalować do 2, może 3 programistów, jeśli w końcu zatrudnię kilka osób do pomocy w obciążeniu pracą. Jeszcze raz dziękujemy za zwykłe spostrzeżenia!


title: Czy podczas tworzenia aplikacji internetowej MVC najpierw należy tworzyć widoki lub modele?

text: Muszę zbudować nową aplikację od podstaw, więc chcę ją zaimplementować przy użyciu MVC3 i starać się jak najdokładniej przestrzegać ogólnych najlepszych praktyk. Jednak rozwijam ją jako jednoosobowa armia. Czy tworzenie widoków najpierw daje więcej, więc mam kilka "ekranów makiety", a następnie buduję modele i kontrolery? Albo na odwrót?


title: Czy zmiana pracy to najlepszy sposób na poruszanie się i naukę w pracy?

text: Pomijając wszystko, co możesz robić poza pracą, jak OSS lub samodzielna nauka, czy uważasz, że zmiana pracy to dobry sposób na ciągłe uczenie się nowych umiejętności? W tym kontekście moja definicja zmiany pracy to co 2-3 lata przenoszenie firm, a może nawet domen. Zmieniając się na odpowiednią pracę, możesz teoretycznie nauczyć się nowego języka / ram i uzyskać dostęp do innych dziedzin wiedzy. Szybka aktualizacja: To nie jest moja obecna sytuacja, ani nie jest to podejście, które zastosowałem. Ta myśl właśnie mnie uderzyła i pomyślałem, że to dobre pytanie.


title: Jak zdecydować, do której klasy powinna należeć metoda?

text: Mam `TopicBusiness.class` i `PostBusiness.class`. Nie mam problemu z podjęciem decyzji, które metody klasowe, takie jak `addPostToDatabase()` lub `getAllPostsFromDatabase()` powinny się udać. Ale co z `getAllPostsFromTopic(TopicEntity temat)` lub `getNumberOfPostsInTopic(TopicEntity temat)`? Czy parametr powinien być decydującym czynnikiem? Więc kiedy metoda przyjmuje TopicEntity jako parametr, powinna należeć do `TopicBusiness.class`? Jestem tym dość zdziwiony. EDYCJA: Więcej informacji na żądanie. `TopicBusiness.class` i `PostBusiness.class` to klasy przechowujące całą logikę biznesową aplikacji dotyczącą odpowiednio tematów i postów - czyli pobieranie danych z bazy danych i/lub wykonywanie na nich pewnych operacji. `TopicEntity` to dane (w tym przypadku reprezentujące pojedynczy temat) pobrane z bazy danych. `getAllPostFromTopic(TopicEntity topic)` pobiera wszystkie posty z bazy danych, które należą do określonego tematu, podczas gdy `getNumberOfPostsInTopic(TopicEntity topic)` wykonuje zapytanie do bazy danych i zwraca liczbę postów, z których składa się temat przekazany jako parametr.


title: Czy taki model można by dobrze przełożyć na bazę danych dokumentów lub wykresów?

text: Próbuję zrozumieć, jakie typy modeli, które tradycyjnie utrwalałem relacyjnie, dobrze przełożyłyby się na jakąś bazę danych NoSQL. Załóżmy, że mam model z następującymi zależnościami: Produkt 1-----0..N Zamówienie Klient 1-----0..N Zamówienie I załóżmy, że muszę często zadawać pytania takie jak Wszystkie zamówienia, Wszystkie produkty, Wszystkie Klienci, wszystkie zamówienia dla danego klienta, wszystkie zamówienia dla danego produktu. Mam wrażenie, że tego rodzaju model nie uległby denormalizacji - gdybym miał dokumenty `Produktu` i `Klienta` z osadzonymi `Zamówieniami`, oba dokumenty miałyby zduplikowane zamówienia. Myślę więc, że potrzebowałbym oddzielnych dokumentów dla wszystkich trzech podmiotów. Czy taka cecha zazwyczaj wskazuje, że baza danych dokumentów nie jest dobrze dopasowana do danego modelu? Ogólnie rzecz biorąc, czy baza danych dokumentów sprawdziłaby się równie dobrze jak relacyjna baza danych w takiej sytuacji? Niewiele wiem o bazach danych wykresów, ale rozumiem, że baza danych wykresów obsługuje relacje wydajniej niż baza danych dokumentów — czy baza danych wykresów byłaby odpowiednia dla tego rodzaju modelu?


title: Ruby - kiedy używać zmiennych instancji vs parametrów między metodami?

text: Piszę kilka metod, które wywołują inne metody. Aby przekazać informacje, mam kilka możliwości: 1. Przekaż informacje jako parametry 2. Ustaw zmienne instancji, aby inne metody miały do nich dostęp Kiedy należy wybrać jedną opcję zamiast drugiej? Wydaje się, że pierwsza opcja jest dobra, ponieważ jest bardzo konkretna w odniesieniu do tego, co jest przekazywane. minusem wydaje się być to, że wiele wartości jest przekazywanych. Druga metoda nie wymaga przekazywania wszystkich wartości, ale wydaje się prowadzić do wielu magii, gdy metody ustawiają zmienne instancji 'gdzieś'. Czy są wyjątki więc to?


title: Strategie zgodności przeglądarek w aplikacjach internetowych w środowisku korporacyjnym

text: Dzięki nowej technologii CSS 3 i HTML 5 aplikacje internetowe zyskały wiele nowych narzędzi dla lepszej interakcji UI (interfejsu użytkownika), piękne szablony, a nawet responsywny układ, aby dopasować się do tabletów i smartfonów. W środowisku korporacyjnym te nowe technologie są wymagane, aby firma mogła „śledzić” ewolucję IT i jej równoczesne działanie, ale chcą również, aby te nowe aplikacje internetowe obsługiwały stare przeglądarki. Jak mam sobie poradzić z tą sytuacją? Z jednej strony jesteśmy proszeni o śledzenie ewolucji technologii, tworzenie responsywnych layoutów i korzystanie z wielu fajnych wtyczek jQuery. Z drugiej strony jesteśmy proszeni o obsługę starych przeglądarek, które nie obsługują tych nowych responsywnych funkcji, wtyczek lub komponentów. * Chciałbym porady i strategie, jak tworzyć „nowoczesne” aplikacje internetowe, które są również obsługiwane w starych przeglądarkach. * Jak Twoja firma radzi sobie z tą sytuacją? * Czy możliwe jest, aby ta sama aplikacja internetowa działała dobrze i pięknie w starych przeglądarkach, a w nowszych przeglądarkach była responsywna i interaktywna?


title: Podzbiór, którego suma jest najbardziej zbliżona do nasycenia pewnej granicy

text: Mam problem, który sprowadza się do posiadania zbioru liczb całkowitych i szukania podzbioru tych liczb całkowitych, których suma jest najbliższa jakiejś wartości docelowej bez przekraczania jej. Jaki jest dobry algorytm do tego? Może to nawet dobrze znany problem, którego nazwy nie znam?


title: Czuję się śpiący i zmęczony, gdy napotykam problemy w ciągu dnia pracy, czy to normalne?

text: Myślę, że to trochę dziwne, ale właśnie zauważyłem, że mam ten dziwny nawyk odczuwania zmęczenia, senności i zawrotów głowy, gdy napotykam problem (programowanie), którego nie mogę rozwiązać po pewnym czasie próbowania. Zwykle pojawia się, gdy mam do czynienia z svn, czytam czyjś kod lub rozwiązuję problemy z regresją (stary błąd pojawia się ponownie). W moim rozumieniu nie ma to nic wspólnego z byciem wyczerpanym czy zmęczonym, ponieważ po prostu czułem się genialnie jak 30 minut temu, a teraz, po 30 minutach zmagania się z problemem, którego (najwyraźniej) nie potrafię rozwiązać, nagle poczułem potrzebę idź spać. I naprawdę mogę iść spać, kiedy tak się czuję. Jeśli skupię się na czymś innym lub po prostu odejdę, to po około 10 minutach znów czuję się normalnie i jestem gotowy, aby kontynuować. W końcu udało mi się o tym porozmawiać z kolegą, który siedzi tuż obok mnie i czasami czuje to samo w niektórych skrajnych przypadkach ciągłych niepowodzeń i też uważa to za dziwne i nowe, ale jest inna osoba, która siedzi trochę dalej, ale on czy nie czuje nic takiego, gdy napotyka trudności :-? Pomysły? EIDT: Zdałem sobie sprawę, że strach przed porażką całego projektu wydaje się odgrywać ważną rolę. Ponieważ jestem zwinnym menedżerem w zespole, kiedy napotykam problem, którego nie mogę od razu rozwiązać, podświadomie zaczynam sobie powtarzać: to sprawi, że cała sprawa się nie powiedzie. Zwłaszcza, gdy dochodzi do regresji.


title: BDD ma zastąpić pracę zespołów testowych - jak najlepiej to zrobić?

text: System, który rozwijamy, wykorzystując .NET, jest niezwykle duży, złożony, a niektóre moduły są słabo napisane. Mamy duży zespół testujący akceptację użytkowników, którego celem jest 100% pokrycie scenariusza biznesowego, co zajmuje około 6 tygodni. Czy możemy użyć programowania opartego na zachowaniu, aby zastąpić niektóre testy ręczne wykonywane przez zespół testowy? W jaki sposób te informacje byłyby czytelne dla zespołów testowych, aby mieć pewność, że wszystko działa? Czy BDD zastępuje nasze testy integracyjne?


title: Jakie kwalifikacje są najważniejsze dla menedżera outsourcingu?

text: Rozważam zatrudnienie kogoś wyłącznie do zarządzania outsourcingiem stosunkowo małych projektów na Guru.com lub VWorker.com. Osoba powinna znajdować się blisko mnie, abym mógł komunikować się twarzą w twarz, a także, aby uzyskała wiedzę domenową. Projekty będą dotyczyć szerokiej gamy technologii, od projektów o znaczeniu krytycznym do projektów całkowicie eksperymentalnych. Czasami terminy również będą wyjątkowo napięte. Moje pytanie brzmi, jacy kandydaci byliby najlepsi w podjęciu takiej pracy? Czy ostatnio absolwenci są najlepsi? Technicy-eksperci, którzy potrafią rozpoznać i komunikować się z innymi ekspertami? Doświadczeni liderzy projektów? Jednym z aspektów tego jest to, że chcę mieć najlepszy stosunek kosztów do korzyści, biorąc pod uwagę, że doświadczeni liderzy projektów są prawdopodobnie znacznie drożsi niż absolwenci, którzy niedawno ukończyli studia. Uważam też, że jednym z aspektów jest to, że jest to dość nietypowa struktura organizacyjna, więc nie jestem pewien, czy ludzie przyzwyczajeni do biurokratycznego zarządzania projektami w dużych firmach potrafiliby przystosować się do takiego środowiska pracy.


title: Wywoływanie zmian danych w N-warstwie

text: Ostatnio studiowałem architektury n-warstwowe, szczególnie w VB.NET z Entity Framework i/lub LINQ to SQL. Rozumiem podstawowe pojęcia, ale zastanawiałem się nad najlepszymi praktykami w zakresie wyzwalania operacji typu CRUD z danych wejściowych/akcji użytkownika. Tak więc architektura wygląda mniej więcej tak: [warstwa prezentacji] -> [warstwa biznesowa] -> [warstwa danych] -> (baza danych) Pobieranie informacji z bazy danych do warstwy prezentacji jest proste i abstrakcyjne. To tylko kwestia utworzenia instancji nowego obiektu z warstwy biznesowej, która z kolei wykorzystuje warstwę danych, aby uzyskać prawidłowe informacje. Wydaje się jednak, że zapisywanie (aktualizowanie i wstawianie) oraz usuwanie wymaga określonych interfejsów API w odpowiednich obiektach biznesowych. Muszę założyć, że jest to standardowa praktyka, chyba że obiekt biznesowy oszczędzi się na różnych operacjach (co wydaje się nieefektywne) lub na pozbyciu się (co wydaje się po prostu nie działać lub może być nieporęczne i zawodne). Czy wszystkie moje „zapisane” obiekty biznesowe powinny implementować określony interfejs „ISavable” lub „IDatabaseObject”? Czy to uznany (anty)wzorzec? Czy są inne, lepsze wzorce, których powinienem używać, a których po prostu nie jestem świadomy? Pytanie TLDR, jak sądzę, brzmi: **W jaki sposób warstwa prezentacji wyzwala zmiany w bazie danych?**


title: Rozpoczęcie projektów oprogramowania

text: Zawsze, gdy próbuję rozpocząć nowy projekt, z tym, co myślę, z nowymi pomysłami, przede wszystkim przeszukuję sieć, aby znaleźć coś takiego, przez większość czasu (jeśli nie wszystkie) stwierdzam, że moje pomysły na nowy projekt mają została wdrożona setki razy. Myślę, że każdy w branży oprogramowania czuje to na co dzień. Pytanie brzmi: * kiedy powinienem zatwierdzić pomysł i zacząć go budować, mimo że jest on wdrażany setki razy na całym świecie? * jak mogę zrobić swoją drogę, próbując zbudować coś nowego?


title: Jak Tortoise svn obsługuje współbieżną aktualizację plików?

text: Nie wiem zbyt wiele o Tortoise SVN, ale używam go od jakiegoś czasu. Rozumiem, że jest w stanie zarządzać równoczesnymi użytkownikami tego samego pliku, ale jak to robi? Pracuję nad plikiem, którego jednocześnie używa inny użytkownik i który zatwierdził kilka razy przede mną. Teraz moje pliki nie zawierają zmian, które wprowadził. Za każdym razem, gdy kończę w takiej sytuacji, wpadam w konflikt i utknąłem. Czy jest więc coś innego, co powinienem zrobić zamiast po prostu „popełniać” i powodować „konflikt”? Czy bezpieczne jest wykonanie najpierw `aktualizacji`, a potem `commit`? Czy w takim przypadku stracę moje lokalne zmiany? Proszę nie bić mnie, jeśli jest to coś podstawowego, link do jakiegoś samouczka przyda się w takim przypadku :)


title: Kiedy C jest lepszym wyborem niż C++?

text: Nie wyobrażam sobie, by istniał jakikolwiek powód, by nie używać funkcji OOP w C++. Jest tak samo szybki jak C i - co dla mnie ważniejsze - jest przezroczysty, tak jak C. (mam na myśli "przezroczysty", który znam, do jakiego źródła jest skompilowany. Albo, jak sądzę, wiem.) Czy jest jakiś powód, aby nie wykorzystywać mocy OOP w programowaniu C? Jako wyjątki akceptuję tylko systemy wbudowane lub inne platformy z ograniczeniami, w których nie jest dostępne takie zarządzanie pamięcią, które jest wymagane przez C++. Akceptuję również rozwój systemu operacyjnego. Albo programy zaczęły pisać przed C++. Dobra, to wszystko. **AKTUALIZACJA:** pytanie dotyczy tylko C vs C++, a nie C/C++ vs innych języków. Używam C/C++ tylko w "ostatecznym przypadku".


title: Co powinna zawierać właściwa definicja Ready for Sprint?

text: Zespoły w naszej firmie mają do czynienia z Product Ownerami, którzy są w takiej sytuacji, że nie mogą spędzać z nami tyle czasu, ile byśmy chcieli, na właściwe Backlog Grooming. Tak więc, aby złagodzić niektóre ograniczenia czasowe, zaczęliśmy wdrażać sztukę tworzenia historii „Gotowych do sprintu”, czyli innymi słowy doprowadzania ich do stanu, w którym wiemy/rozumiemy wystarczająco dużo, aby wziąć je do sprintu. Niestety, wciąż nie wiemy, jaka byłaby właściwa definicja „Ready For Sprint”, a więc pytanie, o czym warto pamiętać, umieszczając historię w backlogu Ready for Sprint? [EDYTUJ] W odpowiedzi na odpowiedzi i komentarze Ryathala i Donala Fellows chciałbym wyjaśnić, że nie zamierzamy tworzyć historii. Chcielibyśmy zastosować praktykę otrzymywania istniejących historii „Gotowych do sprintu”, jak wyjaśniono w tym wpisie na blogu. Właściciele produktów powinni prawdopodobnie dodawać do tego, ale jak wspomniano, nie jesteśmy w najlepszej pozycji wśród naszych właścicieli produktów (jeszcze). Przeczytaliśmy, że możesz tworzyć definicje, takie jak historia jest w stanie gotowości, jeśli jej punkty wysiłku wynoszą 5 lub mniej, lub historia musi mieć zdefiniowane kryteria minimalnej akceptacji, musi mieć makieta Balsamiq itp. Moje pytanie jest ukierunkowane na znalezienie czego inni używali w swoich definicjach i co się dla nich sprawdziło. :)


title: Jak powszechne jest programowanie w parach w miejscu pracy?

text: Zawsze intrygowało mnie programowanie w parach, ale w ciągu 12 lat rozwoju nigdy nie pracowałem w miejscu, w którym stosowano tę praktykę, więc zawsze byłem sceptycznie nastawiony do tego, jak ludzie to widzą. Zastanawiam się, czy to z powodu pieniędzy/czasu (Szpiczastowłosy szef zauważa dwie osoby przy jednym komputerze pracujące na tym samym kodzie!!!! jak oni śmią!) czy z innych powodów?


title: Dlaczego JavaScript nie jest używany do tworzenia klasycznych aplikacji (oprogramowania skompilowanego)?

text: Podczas moich lat tworzenia stron internetowych z JavaScriptem doszedłem do wniosku, że jest to niesamowicie potężny język i można z nim robić niesamowite rzeczy. Oferuje bogaty zestaw funkcji, takich jak: * Dynamiczne pisanie * Funkcje pierwszej klasy * Funkcje zagnieżdżone * Zamknięcia * Funkcje jako metody * Funkcje jako konstruktory obiektowe * Oparte na prototypie * Oparte na obiektach (prawie wszystko jest obiektem) * Regex * Literały tablicowe i obiektowe Wydaje mi się, że prawie wszystko można osiągnąć za pomocą tego rodzaju języka, można też emulować programowanie OO, ponieważ zapewnia on dużą swobodę i wiele różnych stylów kodowania. Myślę, że dzięki większej liczbie niestandardowych funkcji zorientowanych na oprogramowanie (I/O, FileSystem, Input Devices itp.) będzie wspaniale tworzyć aplikacje. Chociaż, o ile wiem, jest używany tylko w tworzeniu stron internetowych lub w istniejącym oprogramowaniu tylko jako język skryptowy. Dopiero niedawno, być może dzięki silnikowi V8, jest on używany bardziej do innych zadań (zobacz na przykład node.js). Dlaczego do tej pory ograniczało się to tylko do tworzenia stron internetowych? Co trzyma go z dala od rozwoju oprogramowania?


title: Jak zarządzać częstymi wydaniami oprogramowania dla wielu klientów?

text: mamy wieloplatformowy produkt oprogramowania pośredniczącego, który zazwyczaj dostosowujemy/naprawiamy indywidualnie dla każdego klienta. W niektórych przypadkach udostępnianie aktualizacji tak często, jak raz/dwa razy w tygodniu. Mamy wiele problemów ze sprawnym zarządzaniem aktualizacjami i ich udostępnianiem naszym klientom. Zrobiłem trochę kopania, ale nie mogę znaleźć niczego, co konkretnie rozwiązałoby ten problem. Czy ktoś może podzielić się swoimi doświadczeniami - jak sobie radzisz z tym scenariuszem, czy znasz dobry cms dostarczania oprogramowania?


title: Czym są *ISTQB* i czy są godne zaufania?

text: Słyszałem, że mój współpracownik chce uzyskać certyfikat ISTQB. Ale usłyszałem to po raz pierwszy. Więc trudno mu ufać. W rzeczywistości nie rozumiem pojęcia kwalifikacji do testowania oprogramowania. 1. Jaka jest organizacja. Jaka jest wartość certyfikacji? 2. Jak o tym myślisz? Czy jest godny zaufania publicznie? 3. Ile firm uznaje certyfikację?


title: Główny programista nie może wykonać INNER JOIN

text: W przeszłości pracowałem dla małej firmy zajmującej się tworzeniem aplikacji internetowych. Wtedy ~~current~~ główny programista, który jest również jednym z szefów, powiedział mi, że nie jest w stanie wykonać `JOIN` wewnątrz zapytania `SQL`. Byłem zdumiony, że osoba, która opracowała i utrzymuje dużą witrynę e-commerce, nie jest w stanie tego zrobić. Czy normalizacja bazy danych i zależności funkcjonalne to strata czasu? Czy są potrzebne tylko w dużych, wymagających projektach?


title: Czy sprawdzanie liczby/rozmiaru/długości jest mniejsze niż 0 we współczesnych językach?

text: Czy sprawdzanie liczby/rozmiaru/długości jest już mniejsze niż 0 we współczesnych językach? Na przykład w C# cytuję często sprawdzam, czy liczba kolekcji jest mniejsza lub równa 0. Zakładam, że zostało to zrobione w starszych językach, takich jak C, gdzie potencjalnie można mieć rozmiar mniejszy niż 0. Czy kiedykolwiek przypadek, w którym rozmiar/długość/liczba obiektu lub typu pierwotnego może być mniejsza niż 0?


title: Najlepszy sposób na ukrycie klucza API w kodzie źródłowym

text: Potrzebuję pomysłów na sposób ochrony prywatnego klucza API w aplikacji, w szczególności w aplikacji c# .NET. Po pierwsze, rozumiem, że teoretycznie nie da się ukryć czegokolwiek w kodzie źródłowym, więc wpadłem na inny pomysł, ale nie jestem pewien na ile jest prawdopodobny. W każdym razie, czy byłoby możliwe komunikowanie się z serwerem sieciowym, aby zweryfikować klucz prywatny, a następnie porozmawiać z aplikacją, aby potwierdzić, że jest to prawidłowy uścisk dłoni? Mam dwa klucze do pracy: klucz publiczny (jak sama nazwa wskazuje, nie musi być traktowany z taką samą ostrożnością jak prywatny) oraz klucz prywatny, który należy chronić przed innymi. Wszelkie pomysły, jak mógłbym to zrobić, byłyby bardzo mile widziane.


title: Czy SRP z ORM prowokuje SOA?

text: Przepraszam za wiele skrótów w tytule... Z moich obserwacji wynika, że aplikacje zbudowane z mapowaniem obiektowo-relacyjnym, takie jak Hibernate, mają tendencję do podążania za architekturą zorientowaną na usługi zamiast zorientowaną obiektowo. Niektórzy (np. tutaj) twierdzą, że zasada pojedynczej odpowiedzialności sugeruje, że zajmowanie się odczytywaniem/zapisywaniem atrybutów utrwalonych obiektów oraz tworzeniem i znajdowaniem tych obiektów jest wystarczającą odpowiedzialnością dla jednej klasy. Każda logika biznesowa wykorzystująca taki obiekt powinna trafiać do osobnych klas. To prowadzi nas do projektu z dwoma oddzielnymi typami klas: z pełnymi stanami, ale głupimi, przechowującymi dane i z logiką, ale bez stanów. Oto dlaczego nie lubię tego rodzaju projektowania: (1) Dla mnie to oddzielenie danych i kodu nie jest celem architektury zorientowanej obiektowo, ale jest projektowaniem architektury zorientowanej na usługi. OOD mówi, że operacje powinny trafiać do klas, w których zdefiniowane są atrybuty, których używa. (2) Ponadto jest to fałszywe rozwiązanie: za każdym razem, gdy zmieni się struktura jednej z klas z pełnym stanem, będę musiał również zmienić wszystkie klasy usług, które z niej korzystają. Gdybym miał logikę wewnątrz tych klas, zmiana zostałaby w jednej klasie. (3) Używam frameworka ORM, który prawie generuje cały kod niezbędny do uzyskania dostępu do utrwalonych danych dla mnie do klasy. Gdybym nie dodawał do tego logiki biznesowej, klasa pozostałaby raczej „pusta”, czyli zawierałaby tylko wygenerowany kod. Wiem, że wielu programistów kieruje się projektowaniem zorientowanym na usługi, zwłaszcza używając frameworków, które to sugerują, takich jak Spring. Gdybym używał takiego frameworka, również bym poszedł z separacją kodu i danych. Nie chcę prowokować dyskusji, czy SOA jest dobre, czy nie. Interesuje mnie pytanie, czy dobrze jest OOD (zgodnie z SRP) oddzielić logikę biznesową od klas reprezentujących encje.


title: Skrypty SQL w TFS bez umieszczania ich w rozwiązaniach?

text: Pracuję nad dodaniem istniejących skryptów SQL do kontroli wersji. Mam Team Foundation Server 2012 skonfigurowany z Visual Studio 2008 i SQL Server Management Studio 2008 R2 z MSSCCI. Jestem całkiem nowy w TFS, więc nie wiem, czy brakuje mi prostszego sposobu robienia rzeczy. Zarządzanie projektami SSIS, a nawet projektami SSRS ma sens z TFS, ponieważ projekt jest potrzebny do używania lub modyfikowania go w Visual Studio/BIDS. Dodajesz projekt do kontroli źródła, a następnie zaewidencjonujesz, podobnie jak zapisywanie rozwiązania/projektu normalnie na komputerze lokalnym. Skrypty SQL wydają się nieco bardziej kłopotliwe w użyciu z TFS. Wygląda na to, że muszę tworzyć rozwiązania SQL Server, aby dodać dowolny rodzaj skryptu sql do mojej kontroli źródła z SQL Server Management Studio (funkcja dodawania do kontroli źródła). Chociaż mogę tworzyć nowe rozwiązania w SSMS i dość łatwo dodawać je do kontroli źródła, trochę denerwujące jest dodawanie wszystkich moich istniejących skryptów, które są po prostu plikami .sql, do nowych rozwiązań. Idealnie chciałbym w jakiś sposób dodać skrypty do kontroli źródła, móc je modyfikować w SSMS, a następnie w łatwy sposób je ponownie sprawdzić. Gdyby to była subwersja, mógłbym po prostu zatwierdzić i zaewidencjonować pojedynczy plik w Eksploratorze Windows i skończyć z tym, zarządzając i modyfikując plik tak, jak chcę. Czy w TFS istnieje odpowiednik tego?


title: Co sprawia, że JVM jest tak wszechstronna, że obsługuje tak wiele języków JVM?

text: JVM obsługuje wiele języków innych niż Java, takich jak `Groovy, Clojure, Scala` itp., które są językami funkcjonalnymi w przeciwieństwie do Javy (mam na myśli _Java przed wersją 8_, gdzie `Lambda` nie są obsługiwane), które nie obsługują możliwości funkcjonalnych. wysoki poziom co sprawia, że JVM jest tak wszechstronna, że może obsługiwać zarówno języki obiektowe, jak i funkcjonalne?


title: Jak źle byłoby uzyskać zamek na każdym przedmiocie?

text: Wyobraź sobie hipotetyczne środowisko programistyczne, które jest w dużej mierze podobne do Java lub .NET, tj. zorientowane obiektowo, zbierające śmieci itp., ale z jedną małą zmianą: za każdym razem, gdy wywołujesz metodę na obiekcie, uzyskuje się blokadę, dzięki czemu nie ma dwóch wątki mogą jednocześnie wykonywać metody na tym samym obiekcie. Blokada jest zwalniana, gdy metoda powraca. Blokada jest również tymczasowo zwalniana po wywołaniu Thread.Join (ma to na celu zapobieganie pewnym rodzajom zakleszczeń). Jak poważny byłby to naprawdę wpływ na wydajność? Jak bardzo zakłóciłoby to współbieżność? Czy są jakieś algorytmy/programy, których zrównoleglenie byłoby niemożliwe w tego rodzaju środowisku? W moim wcześniej opublikowanym pytaniu podano link do tej strony o GIL w CPython, która twierdzi, że z tym związane są poważne problemy z wydajnością i współbieżnością. Jednak stwierdza również, że to środowisko używa zliczania odwołań, a zwiększenie/zmniejszenie tego licznika odwołań jest operacją, która uzyskuje taką blokadę. Nie zakładajmy tego; GC .NET jest metodą znakowania i zamiatania, a nie zliczania odwołań.


title: Jak szacować zadania w scrumie?

text: Załóżmy, że mamy zaległości w historii użytkowników, z których każda zawiera szacunkową liczbę punktów historii, a teraz zajmujemy się planowaniem sprintu. Teraz Historie powinny być podzielone na zadania, a wiele zasobów Scrum sugeruje, że każde zadanie powinno być szacowane w osobogodzinach. Ponieważ wszystkie pytania zostały już omówione przez zespół, oszacowanie zadania nie powinno trwać dłużej niż minutę. Ponieważ jednak zadanie nie powinno trwać dłużej niż jeden dzień, założenie trzytygodniowego sprintu z 8 programistami to 120 zadań, a poświęcenie dwóch godzin tylko na estymację wydaje mi się trochę za dużo. Wiem, że doświadczone zespoły mogą pomijać lub skracać szacowanie zadań, ale powiedzmy, że nie jesteśmy jeszcze na tym etapie. Z Twojego doświadczenia wynika, ile zadań jest w sprincie i ile czasu powinno zająć oszacowanie ich wszystkich? (Szacowanie tylko połowy z nich nie ma większego sensu, prawda?) Wyjaśnienia: Wiem, że odpowiedź zależy od długości sprintu i wielkości zespołu, więc załóżmy, że 8 programistów i trzy tygodnie. Wspomniane liczby mogą być regułami praktycznymi, ale nawet jeśli są wyłączone (np. więcej zadań, mniej czasu potrzebnego na ich oszacowanie), otrzymamy około 2 godzin na oszacowanie. Może więc pytanie powinno brzmieć: „Jaki procent spotkania planistycznego należy zarezerwować na czystą ocenę zadań, a czy nie mamy lepszych rzeczy do zrobienia?”


title: Czy istnieje formalne wyliczenie sposobów, w jakie komponenty mogą być sprzężone/zależne od siebie?

text: Załóżmy, że masz class A { } class B { } Jedna zależność typu to "parametr metody": class A { } class B { public void M(A a) { } } Inna to "metoda zwraca": class A { } klasa B { public A M() { } } Wtedy C, adapter z A do B, może być zidentyfikowany przez klasę, która wykazuje obie powyższe cechy zależności: class C { public B M(A a) { } } Po prostu wyglądam jak coś do których można podejść za pomocą pewnych formalnych metod i chciałbym o nich przeczytać, jeśli są dostępne?


title: Czy baza danych grafów Neo4j wystarcza sama dla wszystkich typów zapytań?

text: Neo4j ułatwia nawiązywanie relacji => szczególnie przydatne na przykład w sieciach społecznościowych. Ale czy istnieją scenariusze, w których zaleca się skojarzenie dodatkowej relacyjnej bazy danych (lub innej bazy danych NoSQL, która nie jest specjalnie zorientowanym wykresem) dla określonych typów zapytań. Krótko mówiąc, czy Neo4j wystarczy sam do wszystkich zadań związanych z zapytaniami?


title: Nauka języków wysokiego poziomu

text: Aktywnie programowałem z asemblerem, ale teraz tracę motywację. Moja produktywność jest po prostu śmiesznie niska w porównaniu z tym, co inni wydają się mieć z językami wysokiego poziomu. Wiem, że powinienem zacząć używać języków wysokiego poziomu, ale z jakiegoś powodu zawsze wracam do asemblera. Jak mogę przyzwyczaić się do języków wyższego poziomu i wreszcie stać się produktywnym? Naprawdę chciałbym opanować przynajmniej jedną.


title: Jak zrobić dobry raport o błędzie, który nie pojawia się u każdego użytkownika?

text: Znalazłem błąd na moim XFCE i kilka innych nie może powtórzyć błędu, a mianowicie http://askubuntu.com/questions/495947/a-logo-disappear-in-xubuntu . Jak mam to zgłosić programistom, jeśli te również nie mogą się powtórzyć?


title: Uzyskiwanie logo i grafiki do projektu Open Source

text: Pracuję nad projektem open source od około 2 lat. Chciałbym stworzyć stronę internetową, ale zasadniczo mam zerowy budżet. Potrzebuję też logo. Moje pytanie: W jaki sposób programista open source powinien poprawić „atrakcyjność wizualną” projektu bez wydawania dużych pieniędzy? Czy są graficy gotowi poświęcić czas? Jak je znaleźć (jeśli istnieją). Z projektem, nad którym spędzasz tak dużo czasu - chcesz nadać mu ładnie wyglądającą stronę internetową, aby przyciągała wzrok ludzi. Z drugiej strony nie chcesz wydawać pieniędzy na coś, co rozdajesz za darmo. Czy ktoś miał jakieś osobiste doświadczenia, którymi mógłby się podzielić?


title: Plusy i minusy wyboru między różnymi typami zwrotów

text: Ma to miejsce w kontekście architektury klient-serwer, chociaż nie sądzę, aby ustawienie architektoniczne było potrzebne do rozwiązania problemu. Mam funkcję, której wyjście można podzielić na różne kategorie: function makeCar() { /* make a car */ } Teraz, aby zdecydować o strukturze zwracanej wartości `makeCar`, mam kilka opcji: ## Opcja 1 Zwraca wartości całkowite i posiada strukturę danych, która odwzorowuje wartości całkowite na różne typy samochodów. Przykład: codeToCar = { "1": { "model": "Jaguar XJS", "color": "Czarny", "rok": "1975" }, "2": { "model": "Chevrolet Camaro", "color": "Blue", "year": "1966" } ... } W tym przypadku funkcja `makeCar` zwróci klucze `codeToCar`. ## Opcja 2 Zwróć sam obiekt samochodu i usuń kody całkowite. ## Opcja 3 Zwróć strukturę hybrydową z pewnymi kodami całkowitymi i określonymi wartościami. Przykład: codeToColor = { "1": "Czarny", "2": "Niebieski", ... } codeToMaker = { "1": "Jaguar", "2": "Chevrolet", ... } W tym przypadku funkcja `makeCar` mogłaby zwrócić { "color": 2, "maker": 1, "model": "Camaro" } Jakie są zalety i wady korzystania z różnych opcji? ## Edycja: Myślę, że powinienem był bardziej rozwinąć kontekst. Tak więc zasadniczo funkcja `makeCar` jest wykonywana w przeglądarce klienta, a wartość zwracana przez funkcję jest przekazywana do serwera w żądaniu HTTP. Każda reprezentacja zwracanego typu `makeCar` po stronie klienta zostanie ostatecznie przetłumaczona na pełną reprezentację obiektu ( **opcja 2** ) na serwerze. Dwa parametry, które wybrałem do porównania różnych opcji, to: 1. Liczba bajtów przesłanych przez HTTP 2. Rozszerzalność w przypadku dodawania nowych właściwości do samochodów lub dodawania nowych wartości do istniejącej właściwości samochodu. Chciałbym jednak również wiedzieć, jakich innych parametrów można użyć ( _w obecnym kontekście_ ) do porównania dostępnych opcji, wraz z wyborem między różnymi opcjami w oparciu o wybrane parametry.


title: Jak mam śledzić stan elementów w oknie/widoku?

text: Staram się zaimplementować widok, który zawiera wiele elementów, których stan zmienia się w zależności od wykonywanych na nim akcji. Myślę, że jest to coś, na co ludzie często się natykają, więc chciałbym wiedzieć, jakie podejście jest dla Ciebie najlepsze. To, co zwykle robię, to zdefiniowanie kilku stanów dla mojego widoku: {Loaded,Initialized,...}, a następnie ustawienie stanu każdego elementu dla tego stanu. Rzecz jest nawet najbardziej trywialnym zdarzeniem, na przykład kliknięcie przycisku powoduje zmianę stanu, więc potrzebuję wielu różnych stanów, z których wiele zawiera zduplikowane informacje, ponieważ są do siebie bardzo podobne. Wydaje się to bardzo powtarzalne i nieefektywne, ale działało dla mnie do tej pory, kiedy potrzebuję lepszego sposobu na robienie tego rodzaju rzeczy. Ten problem musiał istnieć już od dłuższego czasu, więc byłoby miło znać ludzkie sztuczki i wskazówki, najlepsze praktyki i dokumenty referencyjne.


title: Czy przedstawiciel wewnętrzny, głosowanie i odznaki mogą zachęcać do dobrych praktyk programistycznych?

text: Po prostu głośno myśląc – my, programiści, uwielbiamy te wszystkie głosowania/odznaki/przedstawiciele, więc czy taki schemat można wprowadzić do procesu przeglądu kodu firmy, aby zachęcić do lepszego kodowania. Coś w stylu * Ty (lub inne osoby w Twoim imieniu) możesz opublikować recenzję (może to być fragment, pojedyncze zatwierdzenie lub serię) do przeglądu kodu * Inni mogą ją komentować (byłoby to podobne do odpowiedzi w SE) * Można przyznawać plakietki /sugerowane (niektóre byłyby dobre, inne złe, takie jak „Komentarz Pustynia” lub inne) * Możesz głosować w górę/w dół na sam kod oraz komentarze i odznaki (np. jeśli ktoś zasugerował odznakę, a Ty to zrobiłeś/nie zrobiłeś t zgadzam się) Celem takiego schematu byłoby * Wprowadzenie trochę zabawy, aby zachęcić do korzystania z przeglądów kodu * Poprawa jakości (w tym schemacie zarówno recenzent kodu, jak i recenzenci prawdopodobnie się nauczą) * Zmniejszenie szansy na iskrzenie przeglądów kodu 'wojny ego' * Podaj wskaźniki, aby _pomóc_ zmierzyć indywidualne wyniki Czy to zadziała? Myśli?


title: Czy przeprowadzono badania nad skutecznością OOP w zarządzaniu złożonością oprogramowania?

text: OOP jest często uważany za skuteczną strategię zarządzania złożonością oprogramowania, w przeciwieństwie do programowania proceduralnego nie-OOP. Czy były jakieś badania testujące to pojęcie? Czy udowodniono, że OOP często pomaga zarządzać złożonością w dużych projektach?


title: Które języki programowania nie używają pierwszeństwa operatorów poza językami podobnymi do Lisp?

text: A co myślisz o pierwszeństwach operatorów? Czy trudniej byłoby programować w języku, w którym operacje są wykonywane w kolejności sekwencyjnej? Np.: 2 + 3 * 4 == 20 2 + (3 * 4) == 24 Ok, rodzina Lisp z definicji nie ma pierwszeństwa. Porozmawiajmy o językach proceduralnych i obiektowych korzystających z tej "funkcji".


title: Koszty przejścia na Javę

text: Jestem programistą C# i mam w planach rozpoczęcie tworzenia aplikacji dla Androida, co oczywiście oznacza Javę. Słyszałem dobre rzeczy o Mono dla Androida i pomysł ponownego wykorzystania mojego zestawu umiejętności jest atrakcyjny, jednak koszt licencji (na razie) jest dla mnie nieco zaporowy. Z drugiej strony, z tego co widzę, Java jest bardzo podobna do C#, więc przewiduję, że przeniesienie moich umiejętności na nią będzie mniej lub bardziej łatwe (łatwiejsze niż przejście do Obj-C, jak sądzę). Czy mylę się zakładając, że? Czy są jakieś ukryte koszty, na które jestem ślepy?


title: Czy w zespole zajmującym się projektowaniem opartym na domenach cały zespół powinien uczestniczyć w spotkaniach z interesariuszami?

text: Z mojego doświadczenia wynika, że zespół programistyczny, który składa się z: * 1 Project Manager * 1 Tech Lead * 1 - 2 Senior Dev * 2 - 3 Junior Dev (Fresh grad) Tylko **Tech Lead & PM (i/lub Senior Dev/ s)** weźmie udział w spotkaniu z **Klientami, Ekspertami Domen, Zasobem Technicznym Klienta**. Przychodzą mi do głowy potencjalne pułapki: * Utracone zostają ważne informacje 1. Błąd ludzki (TL/PM może zapomnieć o rozpowszechnieniu informacji z powodu presji lub zwykłego błędu ludzkiego) 2. Informacje niewerbalne (może prezentacja za pomocą diagramu przedstawionego przez Ekspert domeny) * Utrzymanie wszechobecnego języka jest trudniejsze do zbudowania, ponieważ nie wszyscy członkowie zespołu słyszą osoby niebędące programistami * Potencjał kreatywnych umysłów nie jest w pełni realizowany (osobiście jestem bardziej zmotywowany do myślenia/badania, gdy jestem w to zaangażowany ważne spotkania) Zalety takiego podejścia: * Tylko jeden punkt kontaktu * Mniej czasu spędzonego na spotkaniach? Szczerze mówiąc, jestem stronniczy i przeciwny temu podejściu. Chciałbym poznać Wasze opinie. Czy tak to robisz w swoim zespole?


title: Implementacja programowania wyszukiwania binarnego

text: Wyszukiwanie binarne, jak wszyscy wiemy, wymaga posortowania elementów. Ale w najgorszym przypadku musimy też zadbać o elementy nieposortowane. Jeśli rozmiar danych wejściowych jest bardzo duży, czy dobrym pomysłem jest sortowanie elementów za każdym razem? Czy nie możemy po prostu sprawdzić, czy elementy nie są posortowane lub nie, i przejść do sortowania i przejść do sortowania tylko wtedy, gdy są nieposortowane?


title: Techniki szacowania dla rozwoju jądra Linux

text: Pracuję w obszarze jądra Linuksa i moja praca obejmuje: badanie kodu / Zrozumienie przenoszenia (powiedzmy z jednej wersji jądra na inną wersję jądra) Wdrożenie nowego modułu jądra / Sterownik urządzenia Jak wykonać estymację w takich przypisaniach jądra Linuksa? Czy jest jakaś technika? Jak radzi sobie społeczność?


title: Czy Ubuntu działa jako laptop dla konsultanta IT?

text: Pracuję jako programista konsultant, zazwyczaj w dużych firmach. Używam laptopa z systemem Windows, a wielu moich kolegów używa komputera Mac. Moją osobistą preferencją byłoby uruchomienie Ubuntu, gdybym miał pełną kontrolę nad moim środowiskiem programistycznym. Ale od czasu do czasu będę potrzebował konkretnych produktów Microsoftu, zwłaszcza IE. Moi koledzy, którzy używają Maca, często uruchamiają system Windows na maszynie wirtualnej w takich sytuacjach. Moje pytanie brzmi: czy Ubuntu jest praktycznym rozwiązaniem dla laptopa programisty korporacyjnego? Na przykład, czy uruchomienie systemu Windows na maszynie wirtualnej w systemie Ubuntu jest równie łatwe, jak na komputerze Mac? Czy ktoś tam próbował tego? Czy jest jakiś szczególny powód, dla którego Ubuntu nie służyłby tak dobrze jak Mac do rozwoju w tym środowisku? Zauważ, że nie zajmuję się programowaniem .NET, więc zazwyczaj mam do czynienia z Javą, która będzie uruchamiana na serwerze Apache i używana przez klientów z systemem Windows.


title: W jakim języku używa Wprowadzenie do algorytmów Cormena?

text: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/3ZXno.jpg) Jaki język, jeśli w ogóle, jest używany w tej książce? Moja szkoła używa obecnie okropnej książki na kursie o algorytmach, na który muszę przejść w przyszłym roku, i chciałbym przekonać kierownika wydziału, że Wprowadzenie do algorytmów Cormena jest znacznie lepszą książką.


title: Czy legalne jest naśladowanie wyglądu interfejsu API?

text: Chcę stworzyć coś z grafem o otwartym kodzie źródłowym, który wygląda i zachowuje się bardzo podobnie do Google Visualization API, ale byłby oparty na Flocie. Czy jest to legalne, czy nie powinienem naśladować interfejsu Google Visualization API?


title: Czego firma zazwyczaj oczekuje od programisty Perla?

text: Czy są jakieś **wspólne oczekiwania** z perspektywy pracodawców, gdy zatrudniają programistę Perla? Czego poleciłbyś dowiedzieć się studentowi, który lubi Perla i Linuksa i chciałby dostać pracę jako programista Perla? **Szukam rzeczy, które są ogólne i mają zastosowanie do większości/wszystkich pozycji Perla** , w przeciwieństwie do konkretnych szczegółów wymagań danej firmy. Innymi słowy, jakie rzeczy powinienem/powinnam umieć/wiedzieć, aby stać się bardziej atrakcyjnym dla KAŻDEJ firmy szukającej programisty Perla.


title: Jak rozmiar pobierania wpływa na potencjalnych użytkowników Twojego produktu?

text: Czy ktoś wie (lub, jak sądzę, mam przeczucie), w jaki sposób rozmiar pobierania oprogramowania wpływa na potencjalnych użytkowników, niezależnie od przepustowości łącza? Na przykład: Czy większy plik do pobrania sprawia, że sądzą, że jest bardziej w pełni funkcjonalny niż w rzeczywistości (np. ogromne środowiska wykonawcze .NET, jeśli są wdrożone z twoim pakietem)? Powodem jest tworzenie dodatku VSTO, w którym jest mój dodatek (mały MB), środowisko uruchomieniowe VSTO, środowisko uruchomieniowe platformy .NET i podstawowe interops. To może sprawić, że będzie miał ponad 70 MB całkowitego rozmiaru, tylko dla dodatku, który robi kilka rzeczy dobrze. _Ale to wszystko — to tylko kilka rzeczy._ Dzięki wdrożeniom VSTO wiem, że mogę wdrożyć mniejszy rozmiar pakietu, zakładając, że mają środowisko uruchomieniowe .NET (a jeśli nie, zainicjuj pobieranie/instalację to, ale wydaje się, że to niezgrabny sposób na zrobienie ze mnie tylko dupy). Naprawdę chcę, aby ludzie po prostu pobrali aplikację (wersja próbna), aby sprawdzić, czy im się podoba. Czy istnieje jakiś magiczny próg szczęścia - na przykład użytkownicy aplikacji o innych nazwach są bardziej skłonni pobrać coś, co ma mniej niż 20 MB niż 50 MB?