title: Formatowanie plików Sass - jakie problemy mogą wystąpić z poniższymi regułami?

text: Od jakiegoś czasu zastanawiam się nad formatowaniem plików sass, aby zmaksymalizować ich użyteczność przez innych programistów i myślę, że byłoby to idealne miejsce, aby uzyskać informację zwrotną na temat zasad, które staram się stosować podczas pisania pliku sass. Szczególnie interesuje mnie użyteczność kodu źródłowego, ponieważ jest on tworzony i utrzymywany przez człowieka, a także poprawne tworzenie kodu css. Niektóre z tych zasad można zastosować do css sass lub vanilla. Zasady, które szlifuję są następujące: 1. **Zacznij generalnie i bądź konkretny**. Zacznij więc od rozmiaru czcionki w treści, zmiennych kolorów, domyślnych deklaracji tagów itp., następnie przejdź przez części witryny, które są wspólne dla wszystkich stron, następnie przejdź do elementów, które można ponownie wykorzystać w witrynie, a na koniec zakończ ze stylami specyficznymi dla strony, z prawdopodobieństwo ponownego wykorzystania kaskadowego i możliwość wzrostu nadpisanych stylów w miarę poruszania się po dokumencie(ach) 2. Spróbuj **pogrupować selektory w sposób zgodny z rozkładem html wśród widoków**. Więc jeśli spojrzę na widget.view, plik lub blok pliku o nazwie widget.scss będzie zawierał te style. Notabene, konkretnie nie chodzi mi w tym przypadku o podążanie za strukturą html z hierarchicznym sassem. 3. Kontynuując od tego. **Zminimalizuj ilość hierarchii zdefiniowanej w sass**. Używaj dziedziczenia opartego na bezczelnym {} tylko wtedy, gdy jest to konieczne. 4. **Grupuj właściwości w logiczne zestawy** , czyli szerokość i wysokość razem, deklaracje czcionek razem, a nie wszystko alfabetycznie. 5. Zawsze **rozważ wynikowy rozmiar pliku css** i bądź przygotowany na użycie klas, jeśli to konieczne, zamiast domieszek, fragmentów edytora lub innych technik zwiększania rozmiaru. 6. Umieść **więcej niż jedną właściwość w wierszu** w niektórych przypadkach, zgodnie z logicznym pogrupowaniem elementów, co oznacza, że więcej kodu można zmieścić na ekranie monitora bez posuwania się tak daleko, aby wiersze były zbyt długie, aby można je było łatwo odczytać. Nie więcej niż 3/4 właściwości na linię. 7. **Zablokuj kod w plikach** poprzez wcięcie wszystkich selektorów po wstępnym komentarzu, aby lewa strona pliku była łatwa do przeskanowania i szybkiego odkrycia jej zawartości. Jeśli plik jest duży, podaj również mapę plików tych bloków na górze pliku. 8. Używaj **oznaczeń miejsc do operacji wyszukiwania** , takich jak ^NAVIGATION 9. **Używaj klas tylko do stylów**. I nie bój się używać klas do precyzji i aby ponowne użycie było bardziej atomowe. [edytuj dla jasności - nie mam na myśli używania tylko klas, mam na myśli używanie klas zamiast identyfikatorów] 10. Użyj całkowicie **oddzielnego zestawu klas specyficznych dla javascript** do powiązania funkcjonalności z elementami html, co oznacza, że albo forma albo funkcja można wymienić bez uszkadzania drugiego. Klasy te nie są wymienione w css. 11. **Selektory po jednym w wierszu** i w kolejności alfabetycznej, ponieważ ich nazwa jest arbitralna


title: Czy istnieje zmodyfikowana licencja LGPL, która umożliwia łączenie statyczne?

text: LGPL wymaga, aby jeśli program korzysta z biblioteki LGPL, użytkownicy muszą mieć możliwość ponownego połączenia programu z inną wersją biblioteki: > ... > > d) Wykonaj jedną z następujących czynności: > > 0) Przekaż Minimalnego odpowiedniego źródła zgodnie z warunkami niniejszej Licencji, > oraz Odpowiedniego Kodu Aplikacji w formie odpowiedniej dla i zgodnie z > warunkami, które pozwalają użytkownikowi na ponowne połączenie lub ponowne połączenie Aplikacji ze zmodyfikowaną wersją Wersji połączonej w celu uzyskania zmodyfikowana Praca Połączona, > w sposób określony w sekcji 6 GNU GPL dla przekazywania > Odpowiednie źródło. > > 1) Użyj odpowiedniego mechanizmu biblioteki współdzielonej do połączenia z Biblioteką. Odpowiedni mechanizm to taki, który (a) wykorzystuje w czasie wykonywania kopię Biblioteki > już obecną w systemie komputerowym użytkownika oraz (b) będzie działał poprawnie > ze zmodyfikowaną wersją Biblioteki, która jest zgodna z interfejsem > Wersja połączona. > > ... Jednak w niektórych przypadkach może to stwarzać znaczne trudności. W szczególności programy Haskella są prawie zawsze kompilowane statycznie. Co więcej, kompilator przeprowadza optymalizacje między modułami, więc nie jest możliwe wyjęcie części kodu i zastąpienie jej inną. Tak więc bardzo trudno jest spełnić ten warunek. (Zobacz ten link na Haskell Wiki.) _Aktualizacja:_ Rozwiązaniem byłoby dynamiczne łączenie, ale w wielu przypadkach nie jest to możliwe. Na przykład: * Niektóre platformy mogą w ogóle nie mieć dynamicznego linkowania. * Niektóre języki nie mają możliwości dynamicznego łączenia. Lub nie jest możliwe, aby moduły były wieloplatformowe. * W niektórych przypadkach dynamiczne łączenie uniemożliwiłoby ważne optymalizacje. Chociaż powiedziałbym, że rzadko jest to poważny problem, w językach takich jak Haskell spadek wydajności może być znaczny. Dlatego szukam standardowej licencji podobnej do LGPL, która nie wymagałaby możliwości ponownego linkowania (i rozumiem, że to odbiera trochę swobody użytkownikom). Niektóre projekty wykorzystują własną modyfikację LGPL, na przykład wxWidgets. Ale wolałbym użyć jakiejś standardowej licencji, która jest nieco bardziej oficjalna, być może sprawdzona przez niektórych ekspertów prawa i zgodna z (L)GPL. Czy są takie? (Chciałbym również wiedzieć, czy istnieją jakieś nieprzewidziane konsekwencje takiej modyfikacji LGPL.)


title: Czy można sfałszować część testowanej klasy?

text: Załóżmy, że mam klasę (wybacz wymyślony przykład i zły projekt): class MyProfit { public dziesiętny GetNewYorkRevenue(); publiczny dziesiętny GetNewYorkExpenses(); publiczny dziesiętny GetNewYorkProfit(); publiczny dziesiętny GetMiamiRevenue(); publiczny dziesiętny GetMiamiExpenses(); publiczny dziesiętny GetMiamiProfit(); public bool BothCitiesProfitable(); } (Zauważ, że metody GetxxxRevenue() i GetxxxExpenses() mają zależności, które są wygaszone) Teraz testuję jednostkowo BothCitiesProfitable(), która zależy od GetNewYorkProfit() i GetMiamiProfit(). Czy można skrótem GetNewYorkProfit() i GetMiamiProfit()? Wygląda na to, że jeśli nie, to jednocześnie testuję GetNewYorkProfit() i GetMiamiProfit() wraz z BothCitiesProfitable(). Muszę się upewnić, że skonfiguruję skróty dla GetxxxRevenue() i GetxxxExpenses() tak, aby metody GetxxxProfit() zwracały prawidłowe wartości. Do tej pory widziałem tylko przykład zastępowania zależności od klas zewnętrznych, a nie metod wewnętrznych. A jeśli jest w porządku, czy jest jakiś konkretny wzór, którego powinienem użyć, aby to zrobić? **AKTUALIZACJA** Obawiam się, że możemy przeoczyć podstawowy problem i prawdopodobnie jest to wina mojego kiepskiego przykładu. Podstawowe pytanie brzmi: jeśli metoda w klasie jest zależna od innej publicznie ujawnionej metody w tej samej klasie, czy jest w porządku (a nawet zalecane), aby usunąć tę drugą metodę? Może czegoś mi brakuje, ale nie jestem pewien, czy dzielenie klasy zawsze ma sens. Być może innym minimalnie lepszym przykładem może być: class Person { ciąg publiczny Imię() ciąg publiczny Nazwisko() ciąg publiczny PełneNazwisko() } gdzie pełne imię jest zdefiniowane jako: ciąg publiczny PełneNazwisko() { return FirstName() + " " + LastName( ); } Czy można używać skrótów FirstName() i LastName() podczas testowania FullName()?


title: Czy IronScheme jest wystarczająco kompletny lub wystarczająco stabilny, aby warto było się uczyć?

text: IronScheme jest wymieniony w Wikipedii jako następca nieudanego projektu o nazwie IronLisp, który przenosi Lisp do CLR i .NET, tak jak Clojure robi dla JVM. Czy ktoś ma doświadczenie z tym językiem? Wygląda na dość kompletny (99%), ale nie jestem pewien, jak ocenić, czy warto poświęcić czas na jego konfigurację, czy nie. Przez stabilne lub kompletne rozumiem używanie go do rzeczywistych projektów, a nie tylko majstrowanie przy narzędziach i problemach w stylu Project Euler.


title: Czy podczas czytania książki wykonujesz ćwiczenia?

text: Ilu z was faktycznie wykonuje ćwiczenia, ucząc się z książki (dowolna książka związana z programowaniem), obecnie pracuję nad książką C++ i stwierdzam, że niektóre ćwiczenia, które czuję, że mogę wykonać dość łatwo, pomijam. Czy większość ludzi to robi? A może czytają całą książkę i wracają do ćwiczeń, które wyglądały na trudne?


title: Czy mniej linii kodu zawsze jest lepsze?

text: Który z tych stylów programowania jest lepszy? var wynik = metodaJeden(metodaDwa(a, metodaTrzy(b)), c, d); lub var wynik3 = methodThree(b); var wynik2 = metoda druga(a, wynik3); var wynik = metodaJeden(wynik2, c, d);


title: Dlaczego GOTO zostało zawarte w PHP 5?

text: Jakiś czas temu odkryłem, że słowo kluczowe GOTO control zostało wprowadzone w PHP 5.3.0. http://php.net/manual/en/control-structures.goto.php Dlaczego to sie stalo? Jakie są za tym cele projektowania języka? Czy społeczność programistów PHP o to prosiła?


title: Aplikacja internetowa - projektowanie/infrastruktura baz danych

text: Właśnie rozpocząłem tworzenie aplikacji internetowej (która zostanie wdrożona za pomocą silnika aplikacji Google), bez wchodzenia w szczegóły, aplikacja internetowa pozwoli użytkownikom na wdrożenie własnej małej strony internetowej, część aplikacji umożliwia użytkownikom stworzenie formularz umożliwiający klientom zarejestrowanie się w witrynie użytkownika, jednak każdy użytkownik może wymagać zbierania różnych danych o swoich klientach, na przykład jeden użytkownik może wymagać podania imienia i adresu e-mail klienta tylko wtedy, gdy inny może również wymagać wieku klienta. Moje pytanie brzmi, jaki byłby najlepszy sposób na uporządkowanie baz danych? Przez strukturę bazy danych mam na myśli, jak mogę je zaimplementować, aby móc przechowywać różne zbiory danych dla każdego użytkownika, a następnie przechowywać informacje, które są pobierane przez każdego z tych użytkowników od ich klientów? Na przykład nie sądzę, że to jest w porządku, ale początkowo myślałem, że musiałbym wdrożyć bazę danych dla każdego z użytkowników, ale wydaje się to przesadą lub dodać nową tabelę dla każdego z użytkowników (nawet nie wiem, czy te dwie opcje są dostępne). Miałem tylko doświadczenie z trywialnymi bazami danych i ten problem mnie zdezorientował.


title: Czy istnieje sposób na opublikowanie projektu architektonicznego oprogramowania do otwartego użytku i zapobieganie patentowaniu?

text: Nie jestem pewien, czy moje pytanie jest poprawne, więc pozwól, że wyjaśnię: Co rozumiem przez „architektoniczny projekt oprogramowania”: * Mam (w co wierzę) unikalną i użyteczną koncepcję projektową dla architektury, która obejmuje wiele klienci, stany współdzielone, bla-bla, itp. itd. * Ta architektura byłaby używana w grach wieloosobowych ze stałymi światami. * Chociaż ułatwiłoby to nowy rodzaj rozgrywki, nie jest to opis „rozgrywki”. Co rozumiem przez „dla innych”: * Darmowe do użytku osobistego/edu/komercyjnego. (Licencja w stylu MIT/BSD?) Co rozumiem przez „zapobieganie patentowaniu”: * Chcę się upewnić, że ten konkretny projekt nie może zostać opatentowany/zastrzeżony prawem autorskim przez kogoś innego. (Zasadniczo, spory sądowe o architektury oprogramowania dla gier takich jak MMO itp. obrzydzają mnie i chcę, aby ten konkretny pomysł na projekt był bezpłatny.) Czy jest to coś, co mogę łatwo osiągnąć? Czy mogę po prostu napisać dokument projektowy dla architektury i opublikować go w Internecie na, powiedzmy, licencji MIT, mimo że nie jest to rzeczywisty kod? Czy muszę ubiegać się o patent?


title: Szukasz lepszego sposobu na połączenie głębokiej refaktoryzacji architektury z rozwojem opartym na funkcjach

text: ## **Oświadczenie o problemie:** **Dane:** * TFS jako kontrola źródła * Ciężka aplikacja kliencka na komputery stacjonarne z tonami starszego kodu ze złą lub prawie nieobecną architekturą. * Klienci stale wymagają nowych funkcji z jakością dźwięku, szybką dostawą i stale narzekają na nieprzyjazny interfejs użytkownika. * * * **Problem:** Aplikacja bez wątpienia wymaga głębokiej refaktoryzacji. Proces ten nieuchronnie sprawia, że aplikacja jest niestabilna i potrzebna jest dedykowana faza stabilizacji. **Próbowaliśmy:** Refaktoryzacja w master z okresowymi scaleniami z master (MB) do Feature branch (FB). (mój błąd) _Rezultat:_ Wiele niestabilnych gałęzi. * * * **Co nam radzi:** Link do artykułu (pdf) Utwórz dodatkowy oddział do refaktoryzacji (RB) okresowo synchronizując go z MB poprzez scalenie z MB do RB. Po ustabilizowaniu RB zastępujemy mastera RB i tworzymy nową gałąź do dalszej refaktoryzacji. To jest plan. Ale tutaj spodziewam się prawdziwego piekła łączenia MB z RB po połączeniu dowolnego FB z MB. **Główna zaleta:** Stabilny mistrz przez większość czasu. Czy istnieją lepsze alternatywy dla procesów?


title: Jaka jest ścieżka kariery dla programisty, który nie lubi zarządzania?

text: Jeśli jesteś programistą (Senior lub Lead Developer) i wolisz pozostać przy kodowaniu/projektowaniu niż realizować karierę menedżerską, jakie są dostępne ścieżki kariery w Twojej firmie lub o jakich słyszałeś? Jak daleko możesz się posunąć? Czy można dalej być maniakiem, dopóki nie ugryziesz się w pył, czy to zbyt naiwne? Czy ludzie tacy jak na przykład wujek Bob nadal są uważani za programistów, jak twierdzą?


title: Czy notacja muzyczna jest Turing-Complete?

text: Zastanawiam się, czy język notacji muzycznej jest Turing-Complete? Moja pierwsza myśl jest taka, że w notacji muzycznej są pętle, ale nie ma sposobu na zapisanie gałęzi warunkowych, prawda? Nie jestem muzykiem, więc może ktoś może pomóc wypełnić luki?


title: Czy duża firma powinna standaryzować narzędzia inżynierskie we wszystkich zespołach na arenie międzynarodowej?

text: Dużo myślałem o problemie standaryzacji w dużych firmach. Dla mnie odpowiedź jest dość jasna: nie standaryzuj arbitralnie narzędzi tylko dlatego, że tak robią wszyscy inni. To jest nieproduktywne. Myślę przede wszystkim o kontroli źródła, śledzeniu błędów i narzędziach do testowania. Wydaje mi się to tak oczywiste, że nie potrafię wymyślić wielu dobrych kontrargumentów. Kilka, o których myślałem: 1. Łatwiejsze udostępnianie między zespołami 2. Łatwiejsze zarządzanie przez dział IT (1) jest zdecydowanie prawdziwe, jeśli różne zespoły pracują nad tym samym kodem/produktem. Ale w przypadkach, gdy jeden zespół nie pracuje bezpośrednio z kodem, nie sądzę, aby był to uzasadniony powód. (2) to po prostu trochę mnie wkurza, jeśli to naprawdę kłótnia. Uważam, że ograniczenia nałożone na programistów są bardziej uciążliwe niż jakakolwiek dodatkowa praca nałożona na IT. Ale nie jestem informatykiem. Liczę na lepsze argumenty niż te.


title: Współpracownik, który niszczy każdą drobiazg

text: Hipotetycznie mówiąc, wyobraź sobie, że istnieje współpracownik, który ma bardzo płytkie rozumienie informatyki. Aby uniknąć stereotypów, nadaj temu współpracownikowi neutralne pod względem płci imię Chris. Teraz możliwości diagnostyczne Chrisa są niskie i nie może znaleźć prawidłowych adresów IP, na które należy ustawić swoje maszyny wirtualne. Chris również nie potrafi poprawnie scalić kodu i nadpisuje zatwierdzenie, które zrobiłem naprawiając coś, tym samym wprowadzając ponownie błąd. Pozwolę się temu wyślizgnąć, naprawię błąd i nie wypowiadam się o tym kierownictwu. Otrzymawszy zadanie, Chris albo 1) skarży się, że nie ma wystarczających informacji, w wyniku czego 2) przekazujesz Chrisowi zbyt szczegółowe instrukcje, aby spełnić 1). Im więcej szczegółów podasz na liście czynności do wykonania, tym większe prawdopodobieństwo wystąpienia błędu w Twoich instrukcjach. Chris dostaje te instrukcje, próbuje je wykonać, kończy się niepowodzeniem i staje się to twoją winą, ponieważ twoje instrukcje nie są wystarczająco dobre. Jak sobie z tym radzisz?


title: Jak właściwie odróżnić MVC od trójwarstwowego?

text: Wiele frameworków webowych, m.in. Spring, nazywają siebie frameworkami MVC, ale jak dokonuje się rozróżnienia między MVC a trójwarstwowym? Wygląda na to, że niektóre frameworki nazywają się frameworkami MVC, ale tak naprawdę są to frameworki trójwarstwowe, czyli jak właściwie oznaczamy, który jest który?


title: Klasyczny ASP na ASP.net lub ASP.net MVC

text: Posiadamy aplikację webową napisaną w klasycznym ASP, która ewoluowała przez 5 lat do obecnej postaci, która ma setki stron, ogromną bazę danych i ponad 10000 aktywnych użytkowników przeglądających co najmniej ponad 10 stron dziennie. Teraz chcieliśmy zaktualizować go do najnowszej wersji .net. Początkowo myśleliśmy o przepisaniu całej aplikacji, ale po przeanalizowaniu scenariusza stwierdziliśmy, że nie jest to opłacalna opcja również nie sugerowana przez wielu ekspertów. Nie zdecydowaliśmy jeszcze, jak to zrobić inaczej, ale mamy kilka przemyśleń, jak osiągnąć przepisanie twarzy. **Opcja 1:** Pomyśleliśmy o zidentyfikowaniu głównych modułów w tej aplikacji i przepisaniu ich jeden po drugim, dzieląc aplikację na różne warstwy, takie jak baza danych (istniejąca), następnie logika biznesowa i widok. W ten sposób nowo opracowane moduły zostaną dodane do istniejącego systemu, a nowe strony zastąpią stare strony w tym konkretnym module. Jednocześnie możemy testować nowe warstwy ze starym systemem i wypuszczać je, gdy poczujemy się pewnie. Pomyśleliśmy również o opracowaniu struktury API dla logiki biznesowej, która będzie dostępna przez widok jako zewnętrzna aplikacja. **Opcja 2:** W tej chwili zrobiliśmy prosty moduł i używaliśmy go na klasycznej stronie ASP przez ramkę IFrame, choć przesyłanie danych między klasyczną ASP a nową stroną w ramce IFrame było dość kłopotliwe. To dopiero etap planowania, w jaki sposób powinniśmy osiągnąć przepisanie całej aplikacji bez zakłócania bazy użytkowników. Chcę zasięgnąć opinii, opinii i sugestii innych programistów, czy powinniśmy podejść w takim scenariuszu? jeśli ktoś miał do czynienia z tego rodzaju scenariuszem, podziel się również swoją opinią. Chciałbyś również wiedzieć, że użycie ASP.net MVC pomoże mi w tym? **AKTUALIZACJA** : Dziękujemy za obie odpowiedzi za przedstawienie swoich opinii. Chciałbym uzyskać więcej danych wejściowych na temat obu wymienionych powyżej opcji podczas migracji aplikacji z klasycznego asp do asp.net lub asp.net mvc. Byłoby dla mnie wielką pomocą, gdybyście wszyscy mogli poprzez swoje poglądy, punkty i przemyślenia na temat części migracji, a nie punkt wyboru asp.net lub asp.net mvc.


title: Javascript przechowujący dane

text: Cześć Jestem początkującym programistą internetowym i próbuję zbudować interfejs prostej witryny e-commerce jako osobisty projekt. Witryna ma wiele stron z polami wyboru. Kiedy ktoś sprawdza element, pobiera cenę elementu i przechowuje go w zmiennej. Ale kiedy przechodzę do następnej strony i klikam nowe pola wyboru produktów, zmienna automatycznie resetuje się do pierwotnego stanu. Jak mogę zapisać wartość tej zmiennej w JavaScript? To jest kod, który napisałem przy użyciu sessionStorage, ale nadal nie działa, gdy przechodzę na następną stronę, wartość jest resetowana. Jak mogę napisać ten kod, aby nie resetował się przy każdej zmianie strony. Wszystkie strony w mojej witrynie używają tego samego skryptu. $(document).ready(function () { var total = 0; $('input.check').click(function () { if ($(this).attr('checked')) { var check = parseInt ($(this).parent().children('span').text().substr(1, 3)); total += check; sessionStorage.var_name = 0 + total; alert(sessionStorage.var_name); } else { var uncheck = parseInt($(this).parent().children('span').text().substr(1, 3)); total -= uncheck; } }) })


title: Jak PHP wewnętrznie reprezentuje ciągi?

text: UTF8? UTF16? Czy łańcuchy w PHP również śledzą używane kodowanie? Spójrzmy na przykład na ten skrypt. Powiedzmy, że uruchamiam: $original = "शक्नोम्यत्तुम्"; Co się właściwie dzieje? Oczywiście myślę, że `$original` nie będzie zawierał tylko 7 znaków. Te glify muszą być tam reprezentowane przez kilka bajtów. Następnie robię: $converted = mb_convert_encoding ($original , "UTF-8"); Co się stanie z `$converted`? Czym „$converted” będzie się różnić od „$original”? Czy będzie to dokładnie ta sama sekwencja bajtów co `$original`, ale z innym kodowaniem?


title: Do czego używasz odwracania ciągów?

text: W PHP jest to `strrev()`, w Railsach `.reverse`, ale większość języków nie posiada funkcji odwracania łańcucha. Niektóre mają funkcje odwracania tablicy, których można używać na znakach. Myślałem, że to musi być poważne przeoczenie, ale wtedy przyszło mi do głowy, do czego właściwie byś używał odwracania ciągów??? Jedyny raz, kiedy myślę, że widziałem go, to na pokazach i lekcjach, aby włączyć „Hello World!” na "!dlrow olleH". Moje pytanie brzmi; Czy odwracanie struny ma sens, czy jest to całkowicie bezcelowe? . **Uzupełnienie** Było znacznie więcej odpowiedzi, których się spodziewałem i nie wszystkie były całkowicie akademickie. Postawiłbym pieniądze, których nikt nie mógłby podać słusznego przykładu. Nie sądziłem też, że nauczę się niczego nowego, ale sugestia Marka Canlasa dotycząca regexów jest po prostu genialna i nie mogę się doczekać, żeby się sprawdziła. Dziękuje za wszystko.


title: Praca Inżyniera Oprogramowania VS „Trudniejsze”

text: _Powinien to znaleźć się w kolumnie Dear Abby, niemniej jednak..._ Jestem jedynym inżynierem w całej mojej rodzinie (włączając w to dalszą rodzinę). Czasami słyszę, jak członkowie rodziny mówią, że bycie inżynierem oprogramowania nie jest tak trudne, jak powiedzmy kierowcom UPS. Chociaż obaj mogą pracować w tych samych godzinach, z natury rzeczy praca inżyniera SW jest oceniana jako mniej trudna niż druga. Ogólny konsensus jest taki, że po prostu siedzimy przed komputerami przez cały dzień z kilkoma okazjonalnymi spotkaniami. Uważam, że bycie Inżynierem Oprogramowania nie jest wymagające fizycznie, ale wyczerpujące psychicznie. Dla tych, którzy już wcześniej zetknęli się z tym tokiem myślenia, jaki jest najlepszy sposób, aby przekonać znajomych i rodzinę, że jest inaczej? Edycja: Moja Żona powiedziała jej Mamie... Jestem zmęczona po pracy i nie chcę załatwiać spraw... Jej Matka powiedziała, że jestem cały dzień w biurze przy komputerze, jak mogę być zmęczona. Uwaga dodatkowa: jestem również oficerem rezerwy armii, członkiem komisji planowania mojego miasta i niezależnym blogerem dla mojej lokalnej gazety. Plate jest całkiem pełny, poza byciem inżynierem SW – ALE, w rodzinie wciąż panuje przekonanie, że bycie inżynierem SW nigdzie nie jest tak trudne, jak bycie kierowcą UPS, którym obecnie pracuje mój szwagier.


title: Czy model spiralny/zwinny rozwój nie jest zasadniczo tylko szybszym i skompresowanym modelem wodospadu?

text: Odkąd dowiedziałem się o spiralnym modelu tworzenia oprogramowania, próbowałem zastosować go w różnych projektach, w które byłem zaangażowany. Jednak zaczynam czuć, że tak naprawdę jest to po prostu kompresowanie i szybsze iterowanie przez tradycyjny wodospad Model. Nawet w każdym cyklu spiralnym lub zwinnym wciąż istnieją zadania/cele krok po kroku, które należy ukończyć, aby ukończyć spiralę, a ten proces krok po kroku wydaje się naprawdę podobny (chociaż krótszy całkowity cykl i być może mniej kroki) do modelu wodospadu. Czy główną różnicą jest wprowadzenie pętli sprzężenia zwrotnego do procesu rozwoju na wcześniejszym etapie i w jego trakcie, czy też istnieje zasadnicza różnica w faktycznym, stopniowym wykonywaniu zadania?


title: Jak radzisz sobie z kradzieżą?

text: Ostatnio włamywałem się do projektu, który rozpocząłem kilka miesięcy temu. To był prosty pomysł. Umożliwienie ludziom zbierania osiągnięć do kodu, który udostępnili na Github. Zacząłem więc to szlachetne przedsięwzięcie, starając się zgarnąć moich przyjaciół, aby uzyskać kodowanie i pomoc. Cały swój wolny czas spędziłem pracując nad tym, aby go uruchomić i zbudować. _Wprowadź upływ czasu muzycznego_ Moi przyjaciele włączyli się, kiedy mogli. Jak możesz sobie wyobrazić, bardzo przywiązałem się do jego sukcesu. Kiedy szykowałem się do premiery, firma wypuszcza bardzo podobny produkt. Byłem bardzo zniechęcony, gdy usłyszałem, że mój mały projekt został wydany przez kogoś innego, ale to nie było tak, że miałem prawa do tego pomysłu. Przełknąłem dumę i wysłałem im maila, w którym napisałem coś w stylu > Hej, pracowałem nad czymś podobnym. Powinniśmy porozmawiać! To super > fajne rzeczy. Rozmawiamy, mam wrażenie, że on naprawdę nie chce współpracować, chociaż serdecznie pozwalamy sobie wzajemnie na dostęp do stron. Mija kilka dni i **Widzę, że niektóre opisy mojego osiągnięcia pojawiają się na ich stronie osiągnięć.** Po rozmowie z nim, **_byłem_** wysłać im ładnie sformułowany e-mail z opisem mojego planu dla mojego systemu osiągnięć i zadzwoń do zakończenia. **Kiedy zobaczyłem opisy moich osiągnięć na ich stronie, nie mogłem tak po prostu odpuścić.** Postanowiłem walczyć. Otworzyłem projekt na zasadach open source, po prostu wyrównując szanse i uwalnia mnie to od radzenia sobie z konkurencją, ponieważ pracuję nad nim tylko w niepełnym wymiarze godzin. Nie jest to działanie, które mogę podjąć za każdym razem, zastanawiam się, jakie mam opcje, jeśli w przyszłości znajdę się na tym stanowisku? pozew sądowy? surowy e-mail? Na wszelki wypadek szukam porady, jak sobie z tym poradzić bez prawników; czy tak właśnie dzieje się w prawdziwym świecie?


title: Czy Cleanroom jest nadal używany w projektach oprogramowania?

text: Cleanroom to proces inżynierii oprogramowania, o którym często wspomina się w podręcznikach. Było pewne udokumentowane użycie tego procesu w latach 90-tych (wydaje mi się, że był on używany w Laboratorium Inżynierii Oprogramowania NASA), ale od lat nic o tym nie słyszałem. Czy ktoś ma bezpośrednie doświadczenie w używaniu go w projekcie oprogramowania?


title: Pytanie o SDLC. Jak na to odpowiedzieć?

text: Widziałem to pytanie wielokrotnie podczas rozmów kwalifikacyjnych, ale nadal nie jestem pewien, jak na to odpowiedzieć. Od dłuższego czasu jestem programistą stron internetowych, ale nadal mam problem z wyjaśnieniem OOP i SDLC (zaznajomiony z cyklem rozwoju systemu). Jak przygotować się do powyższych 2 tematów do punktu widzenia rozmowy kwalifikacyjnej. Nadal używam obu przez cały czas podczas tworzenia. Nie mam jasności co do OOP SDLC Czy istnieje jakaś najprostsza odpowiedź na oba te pytania?


title: Jak decydujesz, ile będzie kosztować Twoje oprogramowanie?

text: Jeśli jesteś samodzielnym programistą lub pełnisz wiodącą rolę w firmie programistycznej, być może będziesz musiał zdecydować, ile Twoje oprogramowanie będzie kosztować jednego lub drugiego dnia... Jakie masz doświadczenie w obliczaniu, ile kosztuje oprogramowanie dla Twojego klienta? Dlaczego ta metoda działa dla Ciebie?


title: Czy istnieje zdefiniowany sposób tworzenia historii zmian dla Git

text: Pracowałem (sam) nad projektem open-source bez użycia jakiejkolwiek formalnej kontroli wersji. Niedawno zacząłem używać Git i GitHub do tego projektu i zastanawiam się, czy jest możliwe zbudowanie historii kodu/zatwierdzeń na podstawie zarchiwizowanych, starszych wersji kodu, które posiadam. Dotychczas rozwój był wyłącznie liniowy. Rozwinął się z wersji 0.1 do 0.9.6.3 bez żadnych rozgałęzień. Przejrzałem podręcznik użytkownika Git i najbliższa rzecz, o której mogę pomyśleć, to tworzenie zatwierdzeń oznaczonych lub nazwanych dla każdej poprzedniej wersji. Jak najlepiej sobie z tym poradzić? Czy muszę utworzyć nowe repozytorium i zacząć wpychać do niego oznakowane zatwierdzenia, kończąc na bieżącej wersji? Czy można zmienić daty istniejących zatwierdzeń? Czy istnieje prostszy sposób? Używam Gita na Windows XP (natywnym, nie Cygwin), ale jeśli byłoby to łatwiejsze, mogę go skonfigurować na moim Ubuntu.


title: Czy przewodniki po stylu kodu zwiększają produktywność?

text: Nasz 12-osobowy zespół rozważa obecnie wdrożenie przewodnika po stylu. Pojawiło się pytanie, czy długoterminowe korzyści w zakresie produktywności przewyższają krótkoterminową utratę produktywności, gdy wszyscy się dostosowują. Jakie masz doświadczenia z przewodnikami po stylu? Powinienem również zauważyć, że nasza baza kodu jest dość duża i prawdopodobnie będziemy musieli przeprowadzić nasz kod przez uncrustify lub coś podobnego, aby zapewnić zgodność całej bazy kodu z przewodnikiem.


title: Nauka programowania z książki, która używa C++98

text: Uczę się programowania z książki „Zasady programowania i praktyka” Bjarne Stroustrup. To było gorąco polecane tu i gdzie indziej. Moim jedynym problemem jest to, że używa C++98 i jak rozumiem, istniały dwa inne standardy c++2003 i c++2011. Przeczytanie tej książki będzie dla mnie znaczną inwestycją czasu i wysiłku (zalecane 210 godzin) i nie chciałbym się angażować, jeśli moje umiejętności lub zdobyta wiedza mogą być przestarzałe lub nie tak przydatne itp. Z drugiej strony ta książka jest napisany przez eksperta i jest powszechnie uznawany za jeden z najlepszych do programowania na poziomie podstawowym (zakładając brak wcześniejszej wiedzy). Pomimo wielu poszukiwań z trudem znalazłem kolejną książkę, napisaną przez tak czołowy autorytet i zapewniającą dobre i dokładne wprowadzenie dla początkujących. Czy ktoś mógłby podzielić się pewnym wglądem w to, na czym i ile straciłbym, gdybym skorzystał z tej książki i nauczył się C++98. I czy przejście przez to byłoby dobrym wyborem dla osoby w mojej sytuacji i warte zainwestowania czasu i wysiłku. Jeśli posiadasz tę książkę lub jesteś doświadczonym użytkownikiem C++, Twój wgląd zostanie doceniony jeszcze bardziej. Dziękuję.


title: Preferowana składnia lambda?

text: Bawię się trochę moją własną gramatykę C, taką jak DSL i chciałbym trochę opinii. Zarezerwowałem użycie "(...)" dla wywołań. np.: foo(1,2); Moja gramatyka obsługuje "końcowe zamknięcia" , podobnie jak bloki Rubiego, które mogą być przekazywane jako ostatni argument wywołania. Obecnie moja gramatyka obsługuje końcowe domknięcia w następujący sposób: foo(1,2) { //zamknięcie bezparametrowe przekazane jako ostatni argument do foo } lub foo(1,2) [x] { //zamknięcie z jednym argumentem (x) przekazane jako ostatni argument do foo print (x); } Powodem, dla którego używam [args] zamiast (args) jest to, że (args) jest niejednoznaczny: foo(1,2) (x) { } W tym przypadku nie ma sposobu, aby stwierdzić, czy foo oczekuje 3 argumentów (int, int,closure(x)) lub if foo oczekuje 2 argumentów i zwraca zamknięcie z jednym argumentem (int,int) -> closure(x) Więc to jest właściwie powód, dla którego używam [] na razie. Mógłbym to zmienić na coś takiego: foo(1,2) : (x) { } lub foo(1,2) (x) -> { } Tak więc aktualne pytanie brzmi, jak myślisz, co wygląda najlepiej? [...] jest nieco nieprzyjazny dla nadgarstków. niech x = [a,b] { } Idee?


title: Jaka jest najlepsza technika zarządzania błędami i nowymi funkcjami z kontrolą wersji w CVS/SVN dla zespołu od 6 do 9 osób?

text: W firmie pracującej nad długoterminowym projektem oprogramowania w jednym biurze pracuje od 6 do 9 programistów. Zespół programistów używa JIRA do śledzenia błędów i CVS (i niektórych SVN) do kontroli wersji różnych aplikacji internetowych Java związanych z aplikacją. Zespół używa REST do komunikacji między aplikacjami internetowymi na różnych serwerach. Środowisko składa się z aplikacji Amazon EC2 i Google App Engine, wszystkie napisane w językach Java, HTML, CSS i JavaScript. Zespół programistów codziennie zatwierdza kod. Korzystając z tej strategii, wdrożenia odbywają się co 20–25 dni, ale zamiast tego chcą celować raz w tygodniu lub raz na 2 tygodnie. Gdy kod przechodzi przez testowanie, testerzy znajdują i zgłaszają błędy, ale gdy zespół programistów naprawia błędy i wdraża oprogramowanie, oprogramowanie czasami zawiera więcej błędów, ponieważ programiści pracujący nad nowymi funkcjami nadal przesyłają kod do repozytorium. Czasami zespół sprzedaży lub klienci znajdują błędy również w systemach produkcyjnych. Naszą myślą jest to, że moglibyśmy sprawdzić kopię kodu, który jest stabilny i wprowadzić tam zmiany. Podejrzewam, że jest to problem z wykorzystaniem kontroli wersji, ale może to być coś innego w procesie. W jaki sposób ten zwinny zespół programistów składający się z 6-9 osób powinien upewnić się, że wydania są częste, raz w tygodniu lub raz na 2 tygodnie, oraz że wdrożenia są wysokiej jakości bez błędów regresji?


title: Tworzenie oprogramowania a technologia informacyjna

text: Jakie są główne różnice między rozwojem oprogramowania a technologią informacyjną. Jeśli ukończyłeś specjalizację z informatyki, czy jest to fajna specjalizacja, ale tak różna, jak rozwój oprogramowania i informatyka, o czym pisze na blogu Joela?


title: Jak sprawić, by strefa czasowa starszego systemu była wrażliwa?

text: Muszę zaimplementować strefy czasowe w bardzo dużym i starym systemie Delphi, gdzie znajduje się centralna baza danych SQL Server i być może setki instalacji klienckich na całym świecie w różnych strefach czasowych. Aplikacja już wchodzi w interakcję z bazą danych, używając tylko daty/godziny serwera bazy danych. Tak więc wszystkie znaczniki czasu zapisane zarówno w bazie danych, jak i na komputerach klienckich to data/czas serwera bazy danych, kiedy to się stało, nigdy czas komputera klienckiego. Tak więc, gdy klient ma wyświetlić datę/godzinę czegoś (na przykład transakcji), która pochodzi z tej bazy danych, musi pokazać datę/godzinę przekonwertowaną na lokalną strefę czasową. Tu się gubię. Oczywiście założyłbym, że w SQL powinno być coś, co rozpoznaje strefę czasową i dynamicznie konwertuje pole DateTime. Nie jestem jednak pewien, czy coś takiego istnieje. Jeśli tak, to byłoby idealnie, ale jeśli nie, muszę znaleźć inny sposób. Ten system Delphi (wiele projektów) wykorzystuje bazę danych SQL Server przy użyciu komponentów ADO, kontrolek VCL data-aware i QuickReports (przy użyciu źródeł danych). Tak więc jest wiele miejsc, w których dane trafiają bezpośrednio z zapytania do bazy danych do renderowania na ekranie, bez żadnego kodu, który faktycznie umieściłby te dane na ekranie. Na koniec muszę wiedzieć, kiedy i jak powinienem uzyskać odpowiednio przeliczony czas? Jaki jest właściwy sposób upewnienia się, że w starszej aplikacji poprawnie obsłużę daty i godziny?


title: Używanie gramatyk do wyodrębniania cytowań bibliograficznych

text: Moje zadanie leży w obszarze eksploracji tekstu / etykietowania, a dokładniej wyodrębniania cytatów bibliograficznych (odniesień) ze zwykłego tekstu, jak pokazano tutaj: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/ CjLn6.png) W zasadzie za tekst wejściowy algorytm powinien rozpoznać: * Początek i koniec cytowania * Nazwa czasopisma, tytuł, autor, numer, tom, strony Do tego zadania podeszliśmy już m.in. Analiza cytowań przy użyciu maksymalnej entropii i napraw (Ng Yong Kiat, 2005), która wykazała, że modele CRF radzą sobie lepiej niż MEMM lub podejścia oparte na wzorcach. Obecnie działają dwa projekty: * ParsCit, program w Perlu zbudowany na szczycie projektu CRF++ * Grobid – moduł Java, również oparty na CRF++. Otrzymałem zadanie, aby zrobić to samo, ale z użyciem gramatyk bezkontekstowych. Rzeczywiście, informacje wyglądają na bardzo ustrukturyzowane, ale nie jestem pewien, czy to podejście może przewyższyć CRF pod względem czułości, przynajmniej mam nadzieję, że może je pokonać pod względem dokładności. Mój pomysł jest następujący: * Zdefiniuj stałe reguły gramatyczne dla znanych już typów: `ROK → (19|20)\d\d | \d\d\d\d` `STRONA → \d{1,3}\-\d{1,3} | e\d{1,3}` `PROBLEM → \d{1,3}` * Z zestawu uczącego można wywnioskować prawdopodobieństwa alternatyw reguł, np.: `PAGE → \d{1,3}\-\d {1,3} przy P=0,8 | e\d{1,3} z P=0.2` * Ze zbioru uczącego z adnotacjami wygeneruj reguły wysokiego poziomu (wszystkie znaki pomiędzy nie-terminalami są terminalami): `CITATION → AUTORS, JOURNALTITLE, ISSUE, PAGES, YEAR | AUTORZY, TYTUŁ, TOM, ROZDZIAŁ, TYTUŁ ROZDZIAŁU, REDAKCJE, WYDAWCA, WYDANIE | ...` `CYTATY → CYTAT | CYTATY; CYTAT | CYTATY; i CITATION` Problematyczne miejsca to: * `AUTORZY`: Nie ma dla nich ustalonej reguły, ale można napisać funkcję, która oceni, że dany tekst wygląda jak autor. Również lista możliwych (angielskich) nazwisk nie jest zbyt duża, ale jeśli stworzę tysiące reguł, spowolni to parser gramatyczny. Powiedzmy, że dla autorów mamy jakąś funkcję oceniającą, która dla danego wejścia zwraca liczbę [0 .. 1] odzwierciedlającą to, jak dane wejście naprawdę wygląda jak autor. Parser gramatyczny powinien podać wszystkie możliwe warianty dla „AUTHORS” i zatrzymać się na jednym z najlepszym wynikiem. * `JOURNALTITLE`: Ta sama historia. Oczywiście nie ma ogólnej zasady, która by to definiowała. Jest lista wszystkich czasopism, ale potem pojawia się podproblem skrótu: _Ann. Akademia Nowego Jorku. Nauka. = Ann NY Academy Sci = Roczniki Nowojorskiej Akademii Nauk_. Ponownie, możemy zdefiniować do tego funkcję oceniającą; w najgorszym przypadku funkcja może zmierzyć odległość między żądłem wejściowym a wszystkimi znanymi tytułami czasopism przy użyciu algorytmu Damerau-Levenshteina. * Teksty takie jak „Tom”, „Rozdział”, „edytowany przez” mogą być bardzo przydatne jako terminatory poprzedzające odpowiednie wartości (a tym samym zmniejszające niejednoznaczność gramatyki), ale czy można je zidentyfikować i nauczyć się automatycznie? * To samo dla terminatorów przed i po cytowaniu, co może być bardzo przydatne (być może przyspieszy parsowanie): `SUPERCITATION → ( CITATIONS ) | ( patrz np. CYTAT ) | patrz np. CYTAT | opisane w np. CYTAT | ujawnia CITATION` Czy ma sens „zakodować” je na stałe lub próbować się ich nauczyć? * Tekst „szum” między cytatami: jak sobie z tym poradzić? Być może celem analizy leksykalnej nie jest znalezienie najbardziej prawdopodobnego drzewa parsowania, ale także maksymalizacja funkcji AUTORZY i TYTUŁ DZIENNIKA. Czy ktoś może mi doradzić: * Czy SCFG jest właściwym sposobem podejścia do problemu? Jeśli tak, w jaki sposób można dostosować to podejście do tworzenia drzewa parsowania opartego na prawdopodobieństwach, a także na funkcjach scoringowych? * Czy są jakieś inne prace/artykuły powiązane? * Czy są jakieś biblioteki, które mogą pomóc w chunkowaniu tekstu (napisane w sposób, który można zastosować również do np. chińskiego tekstu)? Znalazłem kilka potworów, takich jak UIMA, Mallet, MinorThird... Zastanawiam się nad twoimi osobistymi doświadczeniami podczas używania ich do zadania takiego jak powyżej. Z góry dziękuję za odpowiedź.


title: Jakich umiejętności nietechnicznych potrzebuję?

text: Oprócz: 1. bycia silnym technicznie 2. umiejętności efektywnej komunikacji Jakie są najważniejsze formalne/nieformalne umiejętności wymagane, aby naprawdę zabłysnąć jako programista? (Oczywiście walczę z pierwszymi dwoma, ale i tak...).


title: Odpowiedź push do użytkownika, dla którego tworzone jest żądanie w Asp.Net (Chat Server)

text: Pracuję nad aplikacją Chat Server w Asp.Net z C#. Załóżmy, że jest 5 użytkowników online, powiedzmy Użytkownik A,B,C,D,E. Załóżmy, że A wysyła wiadomość w oknie czatu do użytkownika B, więc w jaki sposób okno czatu (Pole tekstowe/Obszar tekstowy czatu) Użytkownika B załaduje nową zawartość? Jedną z opcji jest odświeżanie okna czatu co 10 sekund lub 15 sekund, ale jest to dość nieprzydatny sposób, ponieważ jakby nie było nowej wiadomości dla użytkownika, czat nadal będzie odświeżany. * * * Mam stronę aspx, powiedz client.aspx z client.aspx.cs jako kod za plikiem i serwerem, powiedz server.cs. Na stronie aspx znajduje się przycisk wysyłania po kliknięciu tego przycisku. Wywołałem metodę mojego pliku serwera, powiedz UpdateChatbox (od, do, treść) teraz od to Użytkownik A, do to Użytkownik B, a zawartość to moja wiadomość w czacie, Teraz pytanie brzmi: Jak plik Server.cs aktualizuje ChatBox na stronie client.aspx użytkownika B?


title: Czy powinienem zablokować listę obiektów, gdy gniazdo odbiera komunikaty?

text: Mam scenariusz, w którym będę otrzymywać wiadomości przez połączenie z gniazdem. Muszę też prowadzić listę 100 wiadomości (np. Lista) i okresowo wyrzucać stare wiadomości z listy, gdy spełniony jest warunek. List<Wiadomość> WiadomośćList = nowa Lista<Wiadomość>(); Wiadomość Bieżąca wiadomość = nowa wiadomość(); public void ReceiveSocketMessage (SocketMessage Message) { if (Message.Type == duplikat) { CurrentMessage = MessageList.FirstOrDefault(x=> x.MessageText == Message.Text); CurrentMessage.Time = DateTime.Now; } else { MessageList.Add(Message); } } Ponieważ gniazdo wysyła komunikaty bardzo szybko, wygląda na to, że każda inna metoda próbująca uzyskać dostęp do MessageList spowoduje problem. Inne metody będą wymagały dostępu do listy w wielu losowych momentach. Po prostu nie mogę sobie wyobrazić pracy nad listą obiektów bez powodowania kłopotów. Jaka jest tradycyjna metoda radzenia sobie z tym? AKTUALIZACJA: Czy prościej byłoby po prostu utrzymywać listę elementów w tabeli bazy danych zamiast listy obiektów c#? Baza danych z pewnością miałaby wszystkie główne problemy z blokowaniem rozwiązane do punktu, w którym nie powinienem się tym martwić.


title: Jakie jest najlepsze rozwiązanie do drukowania dokumentu z platformy Azure przy ograniczonej interakcji użytkownika?

text: Obecnie mam aplikację sieci Web hostowaną na platformie Azure z kilkoma zadaniami roboczymi w tle. Moim celem jest, aby użytkownik kliknął przycisk drukuj na stronie, a drukarka magicznie rozpocznie drukowanie dokumentu (ze względów bezpieczeństwa). Konfiguracja będzie wyglądać mniej więcej tak: Azure | _____________ | | | B1 B2 B3 Gdzie każde „B” to budynek. Gdy użytkownik z B2 kliknie aplikację internetową, aby wydrukować dokument, dokument rozpocznie drukowanie na wyznaczonej drukarce w B2. Każdy budynek jest we własnej sieci, jeśli chodzi o stacje robocze i komputery. Nie jestem w 100% pewien, jak do tego podejść. Jedną z opcji jest uruchomienie zadania Windows na każdej stacji roboczej, które będzie stale pingować magazyn BLOB w poszukiwaniu nowych dokumentów. Jeśli pojawi się jeden, rozpocznie się drukowanie. Jest to prawdopodobnie najłatwiejsza trasa, ale wygląda na to, że byłoby to piekło konserwacji dla ponad 100 budynków. Wydaje się to również marnotrawstwem, gdy dziennie może być tylko jeden dokument. Czy istnieją inne możliwości drukowania dokumentu w taki sposób?


title: SQL Server CE 4, graficzne narzędzia do projektowania tabel itp.?

text: Myślałem, że Visual Studio 2010 SP1 będzie zawierał obsługę SQL Server Compact Edition 4 wewnątrz projektanta, ale wydaje się, że tak nie jest. Czy się myliłem, czy udało mi się jakoś zepsuć instalację? Zainstalowałem SQL Server CE 4 ze strony pobierania, a nie przez instalator sieciowy. Jeśli dodatek SP1 dla programu Visual Studio 2010 nie obejmuje i nie powinien obejmować takiej obsługi, jakie mam wybory, jeśli w ogóle?


title: Zastosowanie semantyki denotacyjnej do projektowania programów

text: Poczytałem trochę o semantyce denotacyjnej (DS) i bardzo intryguje mnie proces projektowania programów komputerowych, w którym typy i funkcje mają silne i wyraźne odwzorowania na matematykę. Czy są jakieś zasoby, które szczegółowo omawiają projektowanie programów opartych na DS? Widziałem kilka powierzchownych zabiegów na ten temat. Jestem biegły w Haskell, Scali, Common Lisp i odrobinie Scheme, więc wszelkie zasoby, które używają tych języków, byłyby bardzo mile widziane.


title: Różnica między dwoma wyliczeniami

text: Natknąłem się na definicję wyliczenia :- typedef enum NSInteger { kBorderTypeNone = 0, kBorderTypeLeft = 1 << 0, kBorderTypeRight = 1 << 1, kBorderTypeTop = 1 << 2, kBorderTypeBottom = 1 << 3 } BorderType; a także (być może) może być odpowiednikiem typedef enum NSInteger { kBorderTypeNone = 0, kBorderTypeLeft = 1 , kBorderTypeRight = 2, kBorderTypeTop = 4, kBorderTypeBottom = 8 } BorderType; Jakie są różnice wewnętrzne (jeśli występują)? Czy jest jakaś przewaga jednego nad drugim? Który jest polecany? Jeśli oba są takie same, to jak kompilator sobie z tym poradzi? W jakiej fazie kompilatora jest redukowany do tego samego zestawu instrukcji?


title: Czy często używa się wzorca polecenia do pobierania/ustawiania właściwości?

text: Załóżmy, że mam klasę kontrolera z kilkoma właściwościami. Za każdym razem, gdy zmienia się właściwość, chcę zaktualizować model. Załóżmy teraz, że używam wzorca polecenia do wykonywania aktualizacji modelu. Czy często używa się klas poleceń w ramach właściwości get i zestawów klasy kontrolera, czy istnieje lepszy sposób? Oto przykład tego, czego aktualnie używam: class MyController { private int _myInt; public int MyInt { get { return _myInt; } set { MojePolecenie cmd = new MojePolecenie(); cmd.Argument = _myInt; cmd.Wykonaj(); // Obiekt polecenia aktualizuje model } } }


title: Zasoby dotyczące korzystania z TFS na potrzeby Agile Project Development?

text: Nasza firma właśnie zainstalowała TFS, abyśmy mogli zacząć używać go do procesów rozwoju projektu i kontroli źródła. Chcą, abyśmy zaczęli używać go również do zarządzania naszymi projektami. Mamy mały zespół, nie mamy aktualnego oprogramowania do śledzenia błędów ani zadań, a 2 programistów z 3 ma doświadczenie z jakimikolwiek rzeczywistymi metodologiami. Jakie książki, witryny internetowe i/lub inne informacje możesz nam polecić na początek?


title: Jakikolwiek język, w którym każda instancja klasy też jest klasą?

text: Czerpiąc inspirację z prototypów JavaScript, wpadłem na pomysł języka, w którym każda instancja może być używana jako klasa. Zanim potencjalnie wymyślę koło na nowo, chciałbym zapytać, czy istnieje już język wykorzystujący tę koncepcję: //Aby zadeklarować klasę, rozszerz klasę bazową (w tym przypadku Type) Type(Weapon,{price:0}) ; //Ta sama składnia do dziedziczenia; po prostu rozszerz rodzica: Weapon(Sword,{price:3}); Broń(Topór,{cena:4}); Miecz(Katana,{cena:7}); Miecz(Sztylet,{cena:3}); //I to samo przy tworzeniu instancji: Katana(myKatana,{nickname:"Leon"}); mojaKatana.cena; // 7 mojaKatana.nick; // Leon // Operator zwracający dzieci klasy; Miecz_; // [Katana, Dagger] // Operator zwracający tablicę potomków; Miecz__; // [Katana, Dagger, myKatana] // Operator zwracający tablicę rodziców; Miecz^; // Broń // Tablice mogą być użyte jako elementy Sword__.price += 1; //zwiększa cenę potomków Sworda o 1 mySword.price; //8 // I dostęp do określonego elementu (używając jego nazwy zamiast indeksu) var name = "mySword" Katana_[nazwa]; // [mySword] Katana_[name].nick; // Leon Czy takie podejście zostało już przestudiowane/wdrożone?


title: Google-Gson Konwersja JSona do CSV

text: Jaki jest najłatwiejszy sposób przekonwertowania danych Json na String w formacie CSV? Nie przeczytałem jeszcze wszystkich api, ale wygląda na to, że podklasowanie domyślnego JSonWriter pozwala usunąć niepotrzebny znak, aby być bliżej formatu CSV. Czy istnieje prostsze rozwiązanie?


title: Tworzenie edytora wykresów — jak utworzyć wykres oparty na danych

text: Zajmuję się tworzeniem edytora wykresów, który wykorzystuje metodę przeciągania i upuszczania do budowania wykresów hierarchicznych (zawierających węzły i łącza). Każdy węzeł na wykresie powinien być powiązany z tabelą w naszej bazie danych (SQL Server). Przeprowadziłem wiele badań na temat bibliotek opartych na specyfikacjach javascript lub/i JSON do rysowania węzłów i linków. Jest wiele świetnych przykładów do naśladowania, ale nie mam pojęcia, w jaki sposób mogę połączyć wykres z bazą danych (SQL Server, Oracle, MySQL...). Myślałem o tej architekturze (Pytanie zamieszczone na stackexchange.com) Przyjrzałem się bibliotece D3. Tworzy wykresy oparte na danych, ale myślę, że używa tylko płaskich plików, a nie relacyjnych baz danych. Po pierwsze, czy możesz mi powiedzieć, czy moja architektura jest dobrze przemyślana? A po drugie, czy możesz dać mi kilka pomysłów na temat sposobu, w jaki mogę połączyć moje wykresy z DBMS? Wielkie dzięki.


title: Gdzie należy przechowywać zmienne programu wyszukującego w javie?

text: **Zastanawiam się, która metoda przechowywania jest bardziej efektywna w java.** Czy lepiej byłoby zapisać stałe w klasie lub zasobie? Stałe będą później przeszukiwane przez mój program Search, który przegląda listę stałych, aby rozpoznać możliwe opcje. Również jeśli istnieje bardziej wydajna metoda ich przechowywania, proszę o tym powiedzieć lub jeśli nie ma znaczenia, gdzie je przechowuję. **1). Klasa Java o nazwie Search zostanie wprowadzona z dwiema lub więcej stałymi, które następnie uzyskają dostęp do klasy Java, która przekieruje je w razie potrzeby.** **2). Wyszukiwanie otrzyma te same informacje, ale sprawdzi w zasobach zewnętrznych, jakie możliwe pliki pasują do nich, a następnie odniesienie do podanych informacji otworzy ścieżkę do skorelowanej klasy Java.** Która wersja powinna być lepsza, czy też nie będzie to miało znaczenia? wartościami zawartymi w stałych będą ints, ale każdy int będzie miał swoje unikalne znaczenie. Aby wyjaśnić, dlaczego potrzebuję tych tablic, każda liczba będzie miała znaczenie, a listy tablic będą zawierały liczby, takie jak 1 może oznaczać praca 2 może oznaczać prywatną, więc prywatny dokument roboczy miałby nazwę PDocument ma [1,2] i tak dalej i więc z nadzieją, która wyjaśnia Więc która opcja jest bardziej skuteczna #1 czy #2


title: Jak skonfigurować środowisko programistyczne, aby umożliwić szybkie przełączanie się między projektami?

text: Często zdarza się, że rozwijam wiele różnych projektów na raz, więc potrzebuję rozwiązania, aby przełączyć się z jednego środowiska na drugie. Stworzyłem pliki wsadowe, aby wykonać tę pracę, ale w miarę jak to się rozwija, wkrótce będę potrzebować czegoś lepszego. Niektóre rzeczy, które robię, to: * Mapowanie dysków * Uruchamianie aplikacji * Ładowanie testowych baz danych * Ustawianie zmiennych środowiskowych * itp. Jakieś sugestie na ten temat? **Zmodyfikowano:** chcę w jakiś sposób ujednolicić proces tworzenia. Używamy VS, Eclipse, Notepad++ lub czegokolwiek potrzebuje programista. Celem jest możliwość załadowania projektu na dowolnym komputerze z systemem Windows bez kompilacji lub innych problemów. Przykład: * Rozwiązanie może wymagać odwoływania się do plików, folderów sdk, testowych ścieżek danych lub innych rzeczy. Aby rozwiązać ten problem: zmapowałem kod na dysk. Projekt nie musi wiedzieć, czy programista korzysta z folderów c:\dev czy c:\programming (wybór użytkownika). Muszą tylko zmapować swój folder kodowania na dysk (powiedzmy W:) każdy plik rozwiązania znajduje się pod W: * Innym problemem są SDK. Zestaw SDK może znajdować się w c:\programfiles\Microsoft sdks\etc.. lub w c:\programfiles **x86** \Microsoft sdks\etc.. Te zestawy SDK powinny również wymagać mapowania do standardowego folderu, który zna rozwiązanie. Inną rzeczą jest to, że chcemy, aby usługi działały (powiedzmy Apache), jeśli tworzymy stronę internetową. Nie chcemy, żeby to trwało cały czas. Dotychczasowym rozwiązaniem jest dystrybucja plików wsadowych, które programista edytuje raz, aby dopasować ich ścieżki do rozwiązań, i uruchamiają partię przed rozpoczęciem nowego zadania. Zastanawiam się nad stworzeniem aplikacji, która ustawi środowisko zgodnie z oczekiwaniami. Wstępnie skonfigurowane zestawy, które są dystrybuowane. Deweloper wykonuje je w celu ustawienia środowiska zgodnie z potrzebami. Mam nadzieję, że teraz wyjaśnię problem. Jakieś sugestie, jak zrobić to w lepszy sposób?


title: Różnice między różnymi kreatywnymi bibliotekami kodowania

text: Wcześniej pracowałem z Cinder w systemie Windows, ale ostatnio przeszedłem na Ubuntu. Ponieważ Cinder nie działa na Linuksie (::sadface::) zacząłem szukać alternatyw. Mając to na uwadze, czy mógłbyś mi powiedzieć, jakie są różnice między Processing, openFrameworks i Polycode, i porównać je z Cinder? W szczególności chciałbym wiedzieć * Jeśli istnieją różnice w _funkcjonalności pakietów_ w porównaniu z Cinder (tj. robi się coś, czego Cinder nie robi i na odwrót). * Chciałbym również wiedzieć, jak różni się _składnia pakietu_ od Cindera. Widziałem już następujące artykuły: tu i tutaj i odwiedziłem również odpowiednią stronę internetową dla każdej z bibliotek, ale nie mogłem znaleźć jasnej i zwięzłej odpowiedzi na moje pytanie.


title: Frameworki JavaScript dla aplikacji internetowych o tradycyjnej strukturze

text: Szukam sposobu na kontrolowanie dużych ilości kodu JavaScript w aplikacji sieci web ASP.Net MVC. Patrzyłem na Ember.js i chociaż jest dość atrakcyjny, przejmuje kontrolę nad routingiem i jako taki traktuje serwer jako niewiele więcej niż miejsce, z którego można odbierać wywołania API. To nie jest przydatne do tego, czego potrzebuję. Zastanawiałem się, czy istnieją rekomendacje dla podobnych projektów, które pozwalają na szybszy, bardziej ustrukturyzowany JavaScript, ale w tradycyjnych aplikacjach internetowych opartych na serwerze?


title: Transfer danych między „główną” witryną a zabezpieczoną wirtualną podwitryną

text: Obecnie pracuję nad stroną C# ASP.Net 3.5, którą napisałem kilka lat temu, która składa się z "głównej" strony publicznej oraz podstrony, która jest naszą aplikacją do zarządzania klientami, wykorzystującą uwierzytelnianie oparte na formularzach. Podwitryna jest skonfigurowana jako folder wirtualny w IIS i chociaż jest podfolderem „głównego”, działa jako oddzielna aplikacja internetowa, która obsługuje dostęp CRUD do naszej bazy danych klientów i jest dostępna tylko dla naszych pracowników. Strona główna zawiera obecnie formularz do wypełnienia nowych leadów, który generuje wiadomość e-mail do naszych sprzedawców, aby mogli się z nimi skontaktować i przekonać ich do zostania klientami. Jeśli ten proces się powiedzie, pracownicy ręcznie wprowadzają informacje z wiadomości e-mail do bazy danych. Nic dziwnego, że mam teraz nowy wymóg, aby dane z nowego formularza kontaktowego były przesyłane bezpośrednio do bazy danych, dzięki czemu personel może po prostu zaznaczyć pole, na przykład, aby zamienić potencjalnego klienta w klienta. Dlatego moje pytanie brzmi: jak się do tego zabrać? Możliwe opcje, o których myślałem: 1. Przenieś nowy formularz kontaktowy do podstrony bazy danych klientów (z wyłączonym uwierzytelnianiem). 2. Dodaj kod obsługi bazy danych do strony głównej. (Nie, nie zastanawiając się poważnie nad tym powielaniem wysiłków! :) 3. Zaprojektuj jakiś mechanizm (poprzez REST?), aby strona poza podstroną bazy klientów mogła wprowadzać dane do bazy klientów Jak zorganizować kod do tej sytuacji, najlepiej z rozszerzalnością na uwadze, a zwłaszcza czy są jakieś opcje, o których nie pomyślałem?


title: Architektura Rest API z książki Rest in Practice

text: Utrzymujemy API, które w ramach swojego celu wykonuje wywołanie do zewnętrznego API. Ten zewnętrzny interfejs API potrzebuje kilku sekund, aby spełnić żądanie, które do niego kierujemy. W naszej obecnej architekturze żądanie jest wykonywane synchronicznie, co oznacza, że odpowiedź http, którą zwracamy na żądanie użytkownika, jest blokowana do momentu, gdy nasza usługa otrzyma odpowiedź z zewnętrznego API. Zastanawiam się nad zmianą naszej architektury, aby móc poradzić sobie z żądaniem asynchronicznie... Rozumiem przez to akceptację żądania użytkownika do naszego API i umieszczenie wiadomości w kolejce, dzięki czemu odpowiedź http zostanie zwrócona dużo szybciej. Odpowiedź zawierałaby adres, pod którym można znaleźć pełny/kompletny wynik. Zadanie w tle odbierze wiadomości z kolejki i wykona wywołanie do zewnętrznego interfejsu API, a następnie zapisze wynik pod adresem podanym w naszej odpowiedzi. Adres może być następnie odpytywany przez użytkownika/klienta aż do osiągnięcia żądanego stanu zasobu (tj. gdy zadanie w tle zakończy wywoływanie zewnętrznego interfejsu API i zapisze wynik). Tę architekturę głównie zaczerpnąłem z książki REST in Practice. Sednem jest jednak to, że nasz zewnętrzny interfejs API potrzebuje tylko 2-3 sekund, aby zwrócić odpowiedź. Przykład w książce opisuje proces zamawiania, który może zająć minuty lub godziny. Czy to sugerowane rozwiązanie jest warte zwiększenia złożoności przy tak krótkim czasie odpowiedzi od naszej zewnętrznej zależności? tj. czy aplikacja będzie nadal skalować się z istniejącą architekturą synchroniczną?


title: Klasa fabryczna a klasa statyczna

text: Mam mały problem z wyborem najlepszego projektu. Mam kilka (w tej chwili) operacji przetwarzania obrazu w moim coe (Java). Każdy krok przetwarzania niezależny od pozostałych i składa się z niewielkiej ilości kodu, ogólnie 5-15 wierszy. Są to głównie opakowania do JAI, AWT i tak dalej. Mój obecny projekt jest klasą abstrakcyjną: public abstract class AbstractPreProcessingStep { protected Logger logger = Logger.getLogger(this.getClass().getName()); protected AbstractPreProcessingStep() { }; public abstract BufferedImage startProcessing(BufferedImage input); } Każdy krok przetwarzania implementuje tę klasę i może być nazwany uniform. (jak Wzorzec Strategii). Ponieważ każdy krok przetwarzania może mieć inny zestaw parametrów, stworzyłem klasę fabryczną, taką jak: public class PreProcessingFactory { public static AbstractPreProcessingStep createColorInverter() { return new ColorInverter(); } public static AbstractPreProcessingStep createRescaler(float rescaleFactor) { return new Rescaler(rescaleFactor); } public static AbstractPreProcessingStep createEdgeDetector() { return new EdgeDetector(); } public static AbstractPreProcessingStep createBlackAndWhite() { return new BlackAndWhite(); } ... Tak więc, jeśli chcesz stworzyć czarno-biały obraz z odwróconymi kolorami, musisz to zrobić (pseude kod) bw = PreProcessingFactory.createBlackAndWhite(); inv = PreProcessingFactory.createInverter(); wynik = bw.startProcessing(wynik); wynik = inv.startProcessing(wynik); Moim zdaniem jest to dobry projekt, ponieważ szczegóły implementacji są ukryte, a nowe kroki przetwarzania można łatwo dodać, dodając nową klasę. Inne podejście, które miałem na myśli, polegało na stworzeniu pojedynczej klasy z każdym krokiem jako metody statycznej - jednak nie lubię 'static'. Czy masz jakieś sugestie dotyczące ulepszenia kodu?


title: Dystrybucja operatorów w wyrażeniach - cukier składniowy

text: Podczas wypisywania wyrażeń logicznych często musisz użyć czegoś w rodzaju: A == dowolne z B1, ..., Bn C < wszystkie z D1, ..., Dm Ale w kodzie musisz używać form rozszerzonych: A == B1 lub ... lub A == Bn C < D1 i ... i C < Dm Wygląda na to, że _każdy z_ i _wszystko z_ są po prostu rozproszoną formą _lub_ i _i_. To sprawiło, że zacząłem się zastanawiać, czy można zastosować rozdzielność do operatorów w sposób zrozumiały dla kompilatorów/interpretatorów. Dla powyższego przykładu powiedzmy coś takiego: A == B1 +_lub ... +_lub Bn C < D1 +_and ... +_i Dm Zasadniczo, biorąc operatory jako relacje, powinno działać mniej więcej tak: R1( A, distributive_R2(B1, ... , Bn)) staje się R2(R1(A, B1), ... , R1(A, Bn)) Może to dotyczyć więcej niż tylko wartości logicznych: X / Y1 +_+ . .. +_+ Yn staje się X/Y1 + ... + X/Yn Oczywiście mój prefiks `+_` może nie być idealną składnią; Jestem pewien, że są tam lepsze. Niemniej jednak wydaje mi się, że jest to prawdopodobnie całkiem przydatne i zrozumiałe. jakieś pomysły?


title: Czy CountDownLatch powinien być używany do oczekiwania na wydarzenie?

text: Mam tutaj sytuację, w której mam pętlę, która zapętla się x razy. Wartość x jest określana przez użytkownika. Za każdym razem, gdy się zapętla, chcę, aby poczekał na kliknięcie przycisku przed kontynuowaniem pętli. tj. coś takiego (pseudokod): loop(x razy){ Przycisk b; poczekaj na kliknięcie po kliknięciu{ b.onclicklistener{ setText(x); } } } Używam tego dla aplikacji na Androida, więc dzięki Thread.wait()/Thread.notify() dowiedziałem się, że przerywa główny UIthread, więc nie mogę tego użyć. Więc uważam, że jedyne dwie opcje, których mogę użyć do pewnego rodzaju „wstrzymania” pętli, to CountDownLatch.await() lub AsyncTask (nie wiem, co to robi, nie badałem tego) Czy CountDownLatch.await() /CountDownLatch.countDown() to najlepsze metody i klasy do użycia w tym przykładzie, czy też powinienem zajrzeć do AsyncTask?


title: Czy korzystanie z licencji Creative Commons bez utworów zależnych jest sprzeczne z warunkami usługi GitHub?

text: Kiedy projekt oprogramowania chce korzystać z licencji Creative Commons Attribution- NonCommercial-NoDerivs 3.0 Unported, która odmawia tworzenia pochodnych, jest to sprzeczne z klauzulą F.1 warunków korzystania z usługi GitHub, która mówi: > Ustawiając swoje repozytoria do publicznego wyświetlania, zgadzasz się na > inni, aby wyświetlić i rozwidlić swoje repozytoria. Np. to rozwidlenie (dozwolone przez GitHub) tak samo jak tworzenie instrumentów pochodnych (zabronione przez CC). Widelec ma właściciela, ma własne linki do pobierania, ma oddzielną historię od oryginalnego repozytorium itp. Oraz wszelkie inne funkcje, których można oczekiwać od „pochodnej”. Wiem, że używanie CC do projektu oprogramowania nie jest najlepszym pomysłem, ale niektórzy nadal to robią i zastanawiam się, czy jest to w ogóle dozwolone przez warunki GitHub. IANAL jest w porządku, chcę tylko zobaczyć kilka opinii na ten temat


title: Dlaczego spryt jest przez niektórych uważany za szkodliwy w programowaniu?

text: Zauważyłem ostatnio wiele pytań związanych z różnymi technikami abstrakcji i odpowiedzi mówiące, że techniki, o których mowa, są „zbyt sprytne”. Myślę, że częścią naszej pracy jako programistów jest określanie najlepszych rozwiązań problemów, które mamy rozwiązać, a spryt jest w tym pomocny. Więc moje pytanie brzmi: czy ludzie, którzy uważają, że pewne techniki abstrakcji są zbyt sprytne, sprzeciwiają się sprytowi per se, czy też istnieje jakiś inny powód sprzeciwu? EDYCJA: Ten kombinator parsera jest przykładem tego, co uważam za sprytny kod. Pobrałem to i przeglądałem przez około pół godziny. Następnie przeszedłem przez rozszerzenie makro na papierze i zobaczyłem światło. Teraz, kiedy to rozumiem, wydaje się o wiele bardziej elegancki niż kombinator parsera Haskella.


title: Czy powinienem przekazać tablicę czy wskaźnik?

text: Piszę bibliotekę C++ (ale preferuję funkcje interfejsu w stylu C) i jedna z funkcji zwraca tablicę pływaków. Nie jestem pewien, czy powinienem przekazać wskaźnik lub stałą tablicę, aby uzyskać te dane? // w pliku nagłówka biblioteki #define MAX_ITEMS_SIZE 1000 int getData(float * data, int &size ); lub int getData(float (&data)[MAX_ITEMS_SIZE], int & size ) Jeśli przekazuję wskaźnik, klient powinien przydzielić mu MAX_ITEMS_SIZE. Czy to rozsądne i uczciwe oczekiwania? Przekazanie go jako tablicy wymusza na kliencie przekazanie wymaganej maksymalnej pamięci. Który jest lepszy? Trochę więcej tła, MAX_ITEMS_SIZE to maksymalna liczba elementów zmiennoprzecinkowych, które można zwrócić. W rzeczywistości tablica będzie zawierała mniej elementów, które wypełnia parametr size. Funkcja zwraca int, który jest kodem błędu, gdzie zero oznacza brak błędu. Moim nadrzędnym celem jest zwrócenie danych w postaci tablicy pływaków w łatwy do zrozumienia i niezawodny sposób. Mimo że używam C++, chciałbym pozostać przy funkcjach interfejsu C, aby biblioteka mogła być szerzej używana.


title: Jak zapewnić wszechobecny obiekt bez umieszczania go na każdej liście parametrów?

text: Piszę małą klasę C++, **Block** , aby przekształcić dane serializowane w strukturę pamięci i dostarczyć dane strukturalne do wywołujących za pomocą kilku metod akcesorów. Staram się, aby jego zakres był konkretny i ograniczony. Użytkownicy klasy są bardzo niskopoziomowi - oni również są bardzo wąscy w swoim skupieniu i mają jak najmniej zależności zewnętrznych. W ten sposób nauczono mnie konstruować rzeczy, jeśli to w ogóle możliwe. Minimalizując zależności i pełzające cechy, łatwiej jest testować jednostki i łatwiej jest ponownie używać. Problem polega na tym, że moja klasa zależy od klasy innej osoby, **Metadane**. Robi też jedną bardzo konkretną rzecz: odczytuje z tabeli bazy danych dane, które definiują charakterystykę strumienia danych, który będę przekształcał, i przekazuje je do mnie. Jego klasa sprawdza błędy MySQL, które powinny być rzadkie, i rejestruje wszelkie błędy w obiekcie **Log**. Ten obiekt **Log** pojawia się we wszystkich aplikacjach naszej firmy. Utworzenie instancji to wielka sprawa — chce mieć numery zadań, chce dużo informacji konfiguracyjnych z bazy danych, które normalnie są tam umieszczane w produkcji przez menedżerów kont za pomocą GUI. Musisz wykonać dużo pracy, zanim twój program będzie mógł utworzyć wystąpienie dziennika. Jednak ta mała, niskopoziomowa klasa ( **Metadane** ) z jednym małym zadaniem chce, aby została przekazana przeze mnie. Mój obiekt z pewnością nie ma żadnego interesu w tworzeniu wystąpienia **Log** , więc muszę wziąć go jako parametr od każdego, kto mnie woła. I tak dalej, w górę hierarchii wołania. Rozumiem, dlaczego kierownictwo chce, aby klasa hermetyzowała i standaryzowała rejestrowanie komunikatów. Ale potrzeba przekazywania go do i przez prawie każdą metodę jest wyjątkowo brzydka i znacznie utrudnia testowanie i ponowne użycie. Ten rodzaj problemu musi być dość powszechny. Jak można to zrobić bez zaśmiecania podpisu każdej metody, którą piszesz? Czy to uzasadniona sprawa dla Globals? Czy istnieje jakieś podejście zorientowane obiektowo? A czy jest to obiekt Boga?


title: Klasy CSS dla semantyki a style w ogólnych przypadkach

text: Specyfikacja W3C dotycząca atrybutu `class` mówi > Nie ma żadnych dodatkowych ograniczeń dotyczących tokenów, które autorzy mogą używać w atrybucie > class, ale zachęca się autorów do używania wartości opisujących > charakter treści, a nie wartości opisujących pożądane > prezentacja treści. Odniesienia Pracuję na ogromnej stronie internetowej, która ma wiele różnych stron. Mamy domyślny arkusz stylów, który jest wspólny dla praktycznie wszystkich stron. Uważam, że przydatne są takie zestawy reguł CSS: .center { text-align: center; } .czerwony { kolor: czerwony; } Jednak te klasy nie opisują semantycznie treści. Jestem pewien, że rozumiesz, że istnieje niezliczona liczba przypadków, w których muszę wyśrodkować tekst lub pokolorować go na czerwono, a każdy z tych konkretnych przypadków może nie mieć ze sobą nic wspólnego. Na przykład klasa „ostrzeżenie” może być użyteczna w jednym miejscu, ale w innym może być po prostu „na uboczu”. Niekoniecznie chciałbym, żeby _wszystkie_ ostrzeżenia były czerwone. Zdaję sobie sprawę, że to hipertechniczne pytanie, ale chcę hipertechnicznej odpowiedzi. Czy istnieje poprawny sposób pogodzenia ogólnych reguł stylu, które nie wyrażają semantyki ze specyfikacją HTML? Czy to jest przypadek dla stylów wbudowanych _shudder_?


title: Czy powinienem nadal używać proceduralnego kodu php, czy przejść do frameworka?

text: Od zeszłego roku nie robiłem żadnych poważnych rzeczy związanych z tworzeniem stron internetowych z powodu problemów rodzinnych/czasowych. Muszę do tego wrócić, ponieważ to mój wybór zawodowy i wkrótce skończę studia z moimi współpracownikami. Postanowiłem zmodernizować poprzednią stronę internetową, którą pomogłem właścicielowi zbudować. Po podjęciu decyzji, co zmienić, nie mogłem się zdecydować, czy powinienem kontynuować pisanie kodu proceduralnego, czy przejść do frameworka. Wiem bez wątpienia, że mogę to zrobić za pomocą kodu proceduralnego, ale jestem między tym niezdecydowany. Chyba szukam drugiej opinii, co byś zrobił, gdybyś był w podobnej sytuacji?


title: Jak publikować płatne aplikacje na Androida, jeśli nie jesteś z USA/Wielkiej Brytanii?

text: Byłem bardzo podekscytowany tworzeniem jednej z moich aplikacji, ale okazuje się, że nie możesz zarejestrować się w Google Checkout, jeśli nie mieszkasz ani w USA, ani w Wielkiej Brytanii. A ponieważ Google Checkout to jedyny sposób, w jaki Android Market zapłaci Ci, wszystkie moje wysiłki wydają się iść na marne. Ponieważ mieszkam w Indiach, nie mogę sprzedawać swoich aplikacji. Próbowałem skontaktować się z Google na różne sposoby, ale jak dotąd nie otrzymałem żadnej odpowiedzi. Próbowałem również przeszukiwać sieć, aby dowiedzieć się, że nie można zapłacić w żaden inny sposób. Jestem prawie pewien, że wiele osób tutaj mogło przejść przez ten sam problem. Jak to rozwiązałeś? Mam konto PayPal i konto AdSense. Czy mogą w jakikolwiek sposób pomóc? A jeśli nic nie wyjdzie, jak mam sprzedawać swoją aplikację?


title: Wyodrębnić moduł lub bezpośrednio użyć modułu Singleton?

text: Pracuję nad modułem, który jest zależny od innego modułu pod względem funkcjonalności. Teraz moduł zależny zapewnia wiele funkcji, a potrzebuję tylko kilku z nich, stąd pomysł stworzenia abstrakcji tego samego w moim module, który ponownie będzie tylko singletonem. Moje pytanie brzmi, kiedy wyabstrahować, a kiedy bezpośrednio użyć klasy singleton? Czy są jakieś wytyczne dotyczące tego samego? Czy to zależy od projektu do projektu?


title: Zmiana nazwy metody o długiej nazwie w C#

text: Pracuję nad projektem, w którym istnieje jedna metoda z ciągiem tytułu ValidateNewPasswordExpireCurrentPasswordAndCreateNewPassword(...) Jestem pewien, że należy zmienić nazwę metody. Ale nie mogę znaleźć dobrej i opisowej alternatywy. Nie mogę też rozdzielić metody na wiele metod, takich jak ValidateNewPassword(), ExpireCurrentPassword() i CreateNewPassword(). Jak zmienić nazwę metody i jednocześnie nie stracić umiejętności samoopisywania?


title: Wdrażanie a zwalnianie

text: Więc jest ta aplikacja komputerowa. I chcę poinformować jego użytkowników, że została wydana nowa wersja. Czy bardziej poprawne jest stwierdzenie, że nowa wersja aplikacji komputerowej została „wypuszczona” lub „wdrożona” (jak w przypadku aplikacji internetowej)?


title: Wydać jako open source po przyznaniu praw użytkowania?

text: Napisałem oprogramowanie i przyznałem prawa użytkowania różnym firmom w ramach umowy. Czy można później zmienić licencję oprogramowania na licencję open source? W jakich okolicznościach jest to niemożliwe i jak wpłynie to na obecne umowy? Podobnie jak jedna z firm może modyfikować i odsprzedawać oprogramowanie. Jeśli przejdę na GPL, czy oni też będą zmuszeni przejść na GPL?


title: Czy to usprawiedliwia deklaracje goto?

text: Natknąłem się na to pytanie sekundę temu i wyciągam z niego część materiału: Czy istnieje nazwa dla konstrukcji 'break n'? Wydaje się, że jest to niepotrzebnie skomplikowany sposób, aby ludzie musieli nakazać programowi wyjście z podwójnie zagnieżdżonej pętli for: for (i = 0; i < 10; i++) { bool broken = false; for (j = 10; j > 0; j--) { if (j == i) { uszkodzony = prawda; przerwanie; } } jeśli (zepsuty) pęknie; } Wiem, że podręczniki lubią mówić, że deklaracje goto są diabłem, a ja w ogóle ich nie lubię, ale czy to usprawiedliwia wyjątek od reguły? Szukam odpowiedzi, które zajmują się n-zagnieżdżonymi pętlami for. **UWAGA:** Niezależnie od tego, czy odpowiesz tak, nie, czy też gdzieś pomiędzy, całkowicie ograniczone odpowiedzi są **nie** mile widziane. Zwłaszcza jeśli odpowiedź brzmi „nie”, podaj dobry, uzasadniony powód (który i tak nie jest zbyt daleki od przepisów Stack Exchange).


title: Przejrzyste dodawanie warstwy interfejsu bazy danych

text: Obecnie szukam sposobów na optymalizację aplikacji zużywającej niedopuszczalne ilości pamięci. Proces zasadniczo pobiera dane wejściowe i przetwarza je w drzewo. Drzewo jest aktualnie przechowywane w pamięci. W przypadku przeciętnego wejścia może zużywać od 100 MB do 2 GB pamięci. W przypadku większych wejść może zużywać do 6 GB, czyli więcej niż większość naszych maszyn może obsłużyć, gdybyśmy chcieli przetestować go lokalnie. Obawiamy się, że w przyszłości pojawią się jeszcze większe nakłady, więc nadszedł czas, aby znaleźć bardziej skalowalne rozwiązanie. Zamiast przechowywać wszystko w pamięci, chciałbym przenieść drzewo lub jego części do pamięci zewnętrznej. Analiza porównawcza skutków niezapisywania niektórych części drzewa w pamięci zaowocowała 90% zmniejszeniem zużycia pamięci. Mamy framework (no cóż, po prostu naszą własną bibliotekę), który pozwala nam pracować z drzewem przy użyciu zestawu standardowych metod pobierających i akcesorów. Używamy ustandaryzowanych metod tworzenia, odczytywania, aktualizowania i usuwania węzłów. Nasze parsery zazwyczaj wchodzą w interakcję bezpośrednio z węzłami. Na przykład przykładowa metoda może powiedzieć // Pobiera pewne dane i aktualizuje drzewo o nowe dane private void managePerson(String id) { // to zwraca węzeł o podanym identyfikatorze lub tworzy go, jeśli jeszcze nie istnieje / / i zwraca do niego referencję NodePerson node = getPerson(id) // dodaj lub zaktualizuj niektóre atrybuty node.age.set(25) node.name.set("John") // dodaj kilka punktów do istniejącej wartości int points = node.points.get() node.points.set(points + 5) } Biorąc pod uwagę te informacje, myślę o użyciu bazy danych. Jednak chciałbym również móc wdrażać zmiany w sposób przejrzysty, aby nie wpływać na dziesięcioletni kod, który opiera się na drzewie. Czego mogę użyć, co pozwoli mi pobrać dane do bazy danych, jednocześnie pozwalając programistom uzyskać referencję do obiektu (np.: węzeł osoby) i traktować go jak każdy inny obiekt bez żadnej wiedzy o tym, gdzie i jak jest przechowywane drzewo wewnętrznie? Byłoby też miło, gdyby rozwiązanie próbowało zoptymalizować ilość wykonywanych zapytań. Na przykład, zamiast wstawiać węzły 10000 osób pojedynczo, jakoś wymyśliłby sposób na wstawienie ich zbiorczo. Ma to być tymczasowe przechowywanie: po zakończeniu parsowania wszystkie dane można odrzucić, ponieważ serializujemy dane w pliku (ponownie, w oparciu o praktyki, które zostały wdrożone lata temu. Można to zmienić, ale my nie mam jeszcze planów)


title: Zalecane standardy kodowania .NET/C#?

text: Jakie standardy kodowania Twoim zdaniem są ważne dla projektów .NET/C#? Może to być wszystko, od radzenia sobie z kręconymi nawiasami klamrowymi, odstępami i pedanterią. Lub mogą to być bardziej podstawowe pytania, takie jak obszary nazw w .NET Framework, których należy unikać, najlepsze praktyki z plikami konfiguracyjnymi itp. Staraj się unikać tworzenia posta, który jest po prostu następstwem innego. Na przykład dobrze byłoby mieć jeden post skupiający się na nawiasach klamrowych. Nie potrzebujemy dwóch, aby wspierać jeden styl kontra drugi. Nie chodzi o to, aby głosować na standard swojego zwierzaka, ale raczej o to, o czym należy pomyśleć podczas tworzenia standardów.


title: Konwencja nazewnictwa pól prywatnych/publicznych

text: Czytałem następujące informacje w witrynie MSDN: > Używaj wielkości liter Pascal dla wszystkich publicznych nazw członków, typów i przestrzeni nazw > składających się z wielu słów. >> Zauważ, że ta reguła nie dotyczy pól instancji. Z powodów, które są > wyszczególnione w Wytycznych projektowych elementu, nie należy używać pól wystąpień publicznych >. >> Użyj wielkości liter wielbłąda dla nazw parametrów. * * * Cóż, jest napisane, że nie dotyczy pól instancji, więc co dotyczy pól instancji? Wiem, że nie powinienem ich używać, ale jeśli to zrobię, jaka jest prawidłowa konwencja? Myślę, że byłby to Pascal, ale nie jestem tego pewien...


title: Opracowanie algorytmu wyszukiwania

text: Chcę utworzyć podstawową wyszukiwarkę i chcę, abyś podsunął mi kilka pomysłów, jak odfiltrować najlepsze wyniki dla moich odwiedzających. Mam trzy pola dotyczące produktu, w którym użytkownik może wyszukiwać: 1. Tytuł 2. Kategoria 3. Opis Wpadłem na te pomysły i proszę o ich kompetentną krytykę lub dodanie do nich. 1. Jeśli wyszukiwane hasło występuje we wszystkich trzech polach, powinno znaleźć się wśród pierwszych wyników. 2. Jeśli jest w dwóch polach, jest poniżej wyników 1. 3. Połącz liczbę zdarzeń i wypisz wartość w procentach. Na przykład, jeśli we wszystkich polach razem termin zegar pojawił się 50 razy, a we wszystkich polach razem jest 200 słów, to wartość procentowa wynosi 50/200*100 = 25%. Inna pozycja produktu wynosi powiedzmy 20%, więc produkt pierwszy mający 25% jest wymieniony przed produktem drugim mającym 20%.


title: Wywołania funkcji do wywołań w Windows api

text: Jestem początkującym programistą, który uczy się C. Trudno mi ogarnąć całą koncepcję programowania, dlatego mam pytania. Podczas programowania w systemie Windows, w jaki sposób system Windows komunikuje się z uruchomionymi na nim programami? Pytanie, nad którym się zastanawiałem, dotyczy tego, w jaki sposób włączasz wywołanie funkcji, która znajduje się w innej lokalizacji pamięci na dysku lub w pamięci (nie jest to funkcja, którą sam napisałeś i jest ona dołączona do kompilacji), zwłaszcza Windows API, czy kompilator wie gdzie jest lokalizacja funkcji, aby po uruchomieniu programu można było wywołać tę funkcję? Na przykład bardzo prosty program wyświetlający okno z napisem hello world. Trzeba by wywołać funkcje Windows API, aby uzyskać takie funkcje, jak tworzenie okna, jego rozmiar, kolory itp. Więc w zasadzie staram się zrozumieć, w jaki sposób programy, które piszę, komunikują się z platformą, frameworkiem, na którym są uruchamiane on (zazwyczaj Windows dla Windows API). Oprócz wyjaśnienia na ten temat powyżej, chciałbym zasób, który wyjaśnia tę koncepcję dalej.


title: Przejście z WinForm do WPF

text: Jestem od dawna doświadczonym programistą **Windows Forms**, ale teraz nadszedł czas, aby **przenieść się na WPF**, ponieważ wkrótce nadchodzi nowy projekt WPF i mam tylko krótki czas na przygotowanie się do nauki WPF . Jaki jest najlepszy sposób dla doświadczonego programisty WinForm? Czy możesz dać mi kilka wskazówek i zaleceń dotyczących nauki WPF w bardzo krótkim czasie! Czy istnieją proste przykładowe rozwiązania WPF i krótkie (wideo) **samouczki**? Które **książki** polecasz? Czy www.windowsclient.net to dobry punkt wyjścia? Czy istnieją alternatywy dla oficjalnej strony Microsoftu?


title: Nauka projektowania graficznego jako programista

text: Jestem głównie programistą i zaproponowano mi pracę jako webmaster. Prawdopodobnie od czasu do czasu będę proszony o wprowadzenie kosmetycznych zmian na stronie internetowej. Czy ktoś dokonał tego przejścia? Jeśli tak, jak poszło? Ponadto, czy są jakieś dobre źródła internetowe, aby dowiedzieć się, jak to się robi dzisiaj?


title: Wyłapywanie literówek lub innych błędów w internetowych językach skryptowych

text: Moje tło to głównie języki mocno typowane (java, c++, c#). Po niedawnym powrocie do trochę javascriptu, uznałem za trochę irytujące, że jeśli przypadkowo coś napiszę (na przykład wpiszę „myvar” zamiast „myVar”), cały skrypt się zawiesza. Sama przeglądarka przez większość czasu nawet nie mówi mi, że mam błąd, mój program będzie po prostu pusty itd. Następnie muszę znaleźć kod wiersz po wierszu i znaleźć błąd, który jest bardzo czasochłonny. W językach, do których jestem przyzwyczajony, kompilator informuje mnie, czy zrobiłem literówkę. Moje pytanie do Ciebie brzmi: jak przezwyciężyć ten problem w skryptach (javascript)? Czy możesz dać mi kilka wskazówek? (to pytanie jest skierowane głównie do osób, które również pochodzą z mocno typowanego języka). Uwaga: głównie używam terminala / VIM ... to głównie b / c Lubię terminal i dużo SSH


title: Jak skonfigurować moją „osobistą” bibliotekę?

text: Poprzez przeglądanie SO/P.SE zbierałem przydatne fragmenty kodu Pythona (np. Mutable memoizer, wydajny generator prime), które chciałbym trzymać w jednym miejscu, aby były dostępne, jeśli będę ich potrzebować w przyszłych projektach . Jakie są najlepsze praktyki dotyczące konfiguracji „osobistej” biblioteki kodu klas/funkcji/modułów wielokrotnego użytku? Na przykład, czy po prostu wrzucę to wszystko do jednego modułu? A może powinienem go modelować według standardowej biblioteki, mimo że niektóre moduły mogą mieć w sobie 1 klasę/funkcję?


title: Zalety składni języka od lewej do prawej

text: Oglądałem wywiad z Herbem Sutterem na Channel9 i wspomniał na końcu, że składnia języka od lewej do prawej będzie na szczycie jego listy życzeń dla przyszłego standardu C++ (chociaż przyznaje, że modyfikowanie C++ w ten sposób byłoby zupełnie inną bestią). Poza: * bardziej zrozumiałym dla człowieka, wyraźniejszym gołym okiem; //Składnia C /*wskaźnik do funkcji przyjmujący wskaźnik do funkcji (który przyjmuje 2 liczby całkowite jako argumenty i zwraca int) oraz int jako argumenty i zwraca int*/ int (*fp)(int (*ff)( int x, int y), int b) //Idź do analogicznej składni, która pozostaje do napisania f func(func(int,int) int, int) int * łatwiejsza do parsowania (prowadzi do lepszej obsługi narzędzi, jak wspomniano w filmie - np. refaktoryzacja kodu), jakie inne zalety ma składnia „od lewej do prawej” w języku programowania. Wiem tylko o Pascalu i Go używających tego rodzaju składni (a Go nawet nie idzie do końca, jak rozumiem z tego wpisu na blogu, z którego wziąłem również przykłady) Czy byłoby możliwe posiadanie języka programowania systemów z takim rodzajem składni?


title: Równoodległe wielokąty

text: Rozważ te wielokąty: ![Rozważ te wielokąty](http://i.stack.imgur.com/jSeLV.png) Dla uproszczenia rozważam tylko trójkąty lub wielokąty z 4 wierzchołkami. Te kształty są określone przez wierzchołki, wyjściem programu powinny być zmodyfikowane wierzchołki. Próbuję znaleźć algorytm, aby utworzyć spację między wielokątami, kolorowy obszar przedstawia przestrzeń: ![wielokąty ze spacją](http://i.stack.imgur.com/yQD6h.png) Próbowałem tych rzeczy : * skalowanie każdego wielokąta wokół jego środka ciężkości * skalowanie obwiedni każdego wielokąta Żadne z tych nie zadziałało. Zastanawiam się nad algorytmem do modyfikacji punktów narożnych każdego wielokąta, aby stworzyć równoodległą przestrzeń. Jaki byłby możliwy do zrealizowania algorytm dla tego problemu?


title: Logika biznesowa a logika prezentacji/widoku

text: Często zadaję sobie pytanie, gdzie umieścić logikę organizującą dane w widoku, który niekoniecznie jest logiką biznesową w architekturze trójwarstwowej (DAO, Business, View). Podam przykład, aby był jaśniejszy: mam interfejs użytkownika w mojej aplikacji, który pokazuje oczekujące bilety i odpowiedzi na zgłoszenia w dwóch różnych zakładkach. Aby uzyskać dane z bazy danych, wykonuję jedno zapytanie. Ponieważ nie ma logiki biznesowej, zwracam całą listę do kontrolera (widoku) i rozdzielam ją na dwie listy, aby przejść do szablonu widoku. Czy powinienem oddzielić to w warstwie biznesowej? A może słuszne jest rozdzielenie w kontrolerze, ponieważ logika jest dołączona do tego pojedynczego interfejsu użytkownika?


title: Plusy/minusy struktury danych obejmującej wiele baz danych?

text: Mam zamiar rozbudować system zawierający dwa oddzielne systemy. Lub domeny, jeśli postrzegamy system jako poziom domeny. **Dzisiaj** Jedna domena jest używana wewnętrznie. Drugi jest publiczny, co oznacza, że jest bardziej narażony na wszystko, co może się wydarzyć „tam”. Pewnego rodzaju usługi (ma zastosowanie kilka opcji) wykonują operacje między dwoma oddzielnymi systemami. System publiczny i wewnętrzny mają oddzielne magazyny baz danych i nie są ze sobą powiązane. Nazwijmy klienta i sklep domen. **Jutro** Zajmę się nową aplikacją, która będzie zawierała dużo bardziej specyficznych dla użytkownika informacji w domenie klienta. Projekt może być porównywalny do „prywatnej bazy danych”, w której kluczem jest link do konta na Facebooku. Można to porównać do bazy danych, która zawierała działania użytkownika, ale nie zawierała żadnych konkretnych danych użytkownika (takich jak adres, data urodzenia, adres e-mail itd.), tylko klucz do serwera Facebooka. Z drugiej strony, baza danych STORE (w porównaniu z serwerem Facebooka w tym przypadku) nie wie nic o działaniach użytkownika. **Cel** Około 85-90% zapytań będzie znajdować się we własnej domenie (klient w przypadku klienta, sklep w przypadku sklepu). Są jednak sytuacje, w których klient musi pobrać dane z bazy STORE, a STORE musi utworzyć/obsługiwać użytkowników w bazie danych KLIENTA. **Pytania z mojej głowy** * Czy to dobry sposób? * Za I przeciw? Sieroty? Wydajność bazy danych? Problematyczne kodowanie .NET? * Zasady wyboru granic danych? .. i inne rzeczy, które możesz znać lub myśleć **Przykład struktury** ..dbStore.Users * userid (PK) * name * dateOfBirth * emailAddress -> Wallet (inna tabela) ..dbStore.Wallet * walletid ( PK) * userid * createddate -> BankAccount (inna tabela, nie wpisana) ..dbClient.users * storeUserId (unikalny, nieinc) <\-- odpowiada dbStore.User, bez ograniczeń * accessLevel * lastLoggedIn * serviceXxEnabled * udpAccessKey ..dbClient.action * actionid (PK) * isSomething * someDate * anyElse ..dbClient.installation * installid (PK) * userid Nie będziemy zbierać informacji o koncie bankowym, tylko po to, aby przedstawić obraz struktury danych i ich znaczenie w utrzymywaniu go w oddzielnych systemach. Mam nadzieję, że to Q jest wystarczająco zrozumiałe.


title: Dlaczego powinienem dbać o mikrowydajność i wydajność?

text: Wiele pytań i odpowiedzi na stronach C/C++, konkretnie lub pośrednio omawia problemy z wydajnością mikro (takie jak obciążenie funkcji pośredniej vs bezpośredniej vs wbudowanej) lub użycie algorytmu O(N2) vs O(N _log_ N) na Lista 100 pozycji. Zawsze koduję bez obaw o mikrowydajność i niewiele o wydajność makr, skupiając się na łatwym w utrzymaniu, niezawodnym kodzie, chyba że dowiem się, że mam problem. Moje pytanie brzmi: dlaczego wielu programistom tak bardzo zależy? Czy to naprawdę problem dla większości programistów, czy po prostu miałem szczęście, że nie musiałem się tym martwić, czy też jestem złym programistą?


title: Czy kompilatory nie są lepsze w informowaniu programisty, co jest nie tak w kodzie?

text: Pracowałem trochę z kompilatorem Microsoft z Visual C++, ale długo pracowałem z G++ i pamiętam, że często miałem złe chwile w zrozumieniu, co jest nie tak w moim kodzie z tym pierwszym. Poza generowaniem i optymalizacją kodu binarnego, myślę, że jest to bardzo ważna cecha kompilatora C++: danie programiście wskazówki, która pozwoli mu jak najszybciej zrozumieć, co jest nie tak z jego kodem. Rozumiem, że niektórzy programiści rozumieją programowanie jako rodzaj „konkurencji”, aby popełniać mniej błędów, ale dla mnie jest to opinia kontrproduktywna. Kiedyś wypróbowałem kompilator Clang dla C z rzeczy LLVM, nie używałem go przez długi czas, ale byłem pod wrażeniem tego, jak wyraźne i łatwe do zrozumienia były komunikaty o błędach. Jakie są twoje doświadczenia i jak myślisz, jakie to ma znaczenie? Niektóre WIP C++ Clang: http://clang.llvm.org/cxx_status.html


title: Tworzenie modelu wydajności dla starszego produktu

text: Otrzymałem zadanie stworzenia modelu wydajności dla starszego produktu. Produkt ma około 10 lat i nigdy wcześniej nie miał żadnych wymagań dotyczących wydajności ani modeli wydajności. Ogólnie rzecz biorąc, w przeszłości klient narzekał, że dana funkcja jest powolna lub nie uzyskuje przepustowości, której chce/potrzebuje, a programiści zbadają i zobaczą, czy można wycisnąć kod funkcji. Ponieważ produkt nie ma żadnych twardych pomiarów i metryk dla poprzednich wersji, uważam, że jedyne, co mogę zrobić, to stworzyć linie bazowe dla bieżącej wersji i przejść od tego. Inni programiści czasami _zauważają_, że zużycie pamięci jest naprawdę wysokie i pytają dlaczego. Ponadto jestem nowy w produkcie, więc nie znam wszystkich punktów funkcji (których są setki do tysięcy) i kosztów wydajności każdego z nich. Program jest aplikacją webową ASP.NET/.NET 2.0 na IIS 6. Zacząłem przyglądać się licznikom wydajności i CLR Profiler, aby rozpocząć pobieranie pomiarów. Przeczytałem również następujące dokumenty: Pomiar wydajności ASP.NET Poprawa wydajności ASP.NET Moje pytanie brzmi: ** Jak mogę utworzyć model wydajności dla starszego produktu, który również jestem nowy i nie miał modelu wydajności /wymaganie w przeszłości?**


title: Jaka jest idealna ścieżka edukacyjna do tworzenia aplikacji na Androida w Scali bez wcześniejszego doświadczenia z Javą

text: Niestety nie ma obecnie żadnych książek na temat „Naucz się programowania na Androida ze Scala”, które byłyby idealnym rozwiązaniem. Domyślam się, że będę musiał wybrać tutaj co najmniej 3 książki, po jednej na każdy temat. Nie mam jednak pojęcia, w jakiej kolejności je czytać, czy czytać je jednocześnie, jakie części książki o Javie mogę bezpiecznie pominąć itp. Jaka jest dla mnie najlepsza droga do rozpoczęcia budowania aplikacji na Androida przy użyciu Scali?


title: Czy dane wprowadzone przez użytkownika w formularzu kontaktowym powinny być weryfikowane?

text: Na stronach firm programistycznych, które odwiedzam po raz pierwszy, często otwieram stronę "Kontakt" i próbuję wypełnić formularz kontaktowy z pustymi wszystkimi polami. Jestem tylko ciekawa, czy sprawdzają poprawność danych wejściowych użytkownika. Jeśli jest tylko przesłany lub tylko słabo zweryfikowany (np. tylko walidacja Javascript), często słyszę, jak myślę > Och, spójrz, jakie są niechlujne! Nie można nawet zweryfikować danych wprowadzonych przez użytkownika. To nazywa siebie > firmą programistyczną? Nie, nie wydaje mi się, żebym chciał kupować jakieś oprogramowanie > ich usługi. Mój przyjaciel ma taki „niechlujny” formularz kontaktowy. Możesz przesłać całkowicie pusty formularz. Zapytałem go, dlaczego nie sprawdza poprawności danych wprowadzonych przez użytkownika, a on odpowiedział: > Słuchaj, chcę, aby klienci mogli się ze mną skontaktować. Powinni wpisać > dowolne informacje. Jeśli chcą tylko wpisać wiadomość i pozostawić > pozostałe pola puste, dlaczego miałoby mnie to obchodzić? Wprowadzają odpowiednie informacje > i tak. Nie chcę dodawać żadnych barier podczas kontaktu ze mną. Nie pytałem go jednak, ile otrzymuje pustych wiadomości. Jednak jaka jest teraz lepsza opcja? Oba argumenty (sprawdź, jak firma radzi sobie z inputem użytkowników vs. nie dodawanie żadnych barier w kontaktach) wydają mi się sensowne. Chcę, aby użytkownik mógł łatwo się ze mną skontaktować, ale nadal mam wrażenie, że jestem precyzyjny podczas programowania stron internetowych.


title: Budowanie sekwencyjnej listy w językach z wadami/listami połączonymi

text: W językach, w których listy wad są głównym typem danych, bardzo łatwo jest utworzyć listę od ostatniej do pierwszej, dodając pozycje poprzedzające. Jednak podczas przetwarzania z jakiegoś pliku wejściowego najprawdopodobniej napotkamy elementy w kolejności od pierwszej do ostatniej. Czy języki takie jak te zazwyczaj są rekursywne? (define (parse file) ... (cons datum (parse file))) Czy użyć operacji dołączania na każdym kroku? Zbudować listę w odwrotnej kolejności, a potem ją odwrócić? Czy istnieje jakiś kanoniczny wzorzec projektowy, który może rozwiązać problem polegający na tym, że dane wejściowe są zwykle w odwrotnej kolejności niż sposób tworzenia listy?


title: Globalnie ważne pojęcia do zrozumienia?

text: Mam historię tworzenia stron internetowych przy użyciu LAMP + html/css (choć przyznaję, że aspekt LAMP nie jest zbyt głęboki) i chciałbym podążać ścieżką kariery programisty, więc obecnie uczę się C, po czym przyjrzymy się C++. **Zastanawiałem się, czy ktoś mógłby mi podać listę obszarów tematycznych w ramach programowania komputerowego jako całości, które są ważne do pełnego zrozumienia, aż do „starszego” poziomu rozwoju kariery?** Oczywiście wiem, że to sposób myślenia i wiedza kiedy używać różnych technik, które czynią dobrego programistę, ale od czegoś trzeba zacząć! Przez obszary tematyczne mam na myśli przykłady: * Typy danych * Zmienne * Funkcje * OO * itp. Wielkie dzięki.


title: Jak przeglądarka internetowa zapisuje hasła?

text: W jaki sposób obecne przeglądarki internetowe (lub mobilne klienty poczty i ogólnie dowolne oprogramowanie) zapisują hasła użytkowników? Wszystkie odpowiedzi dotyczące przechowywania haseł mówią, że powinniśmy przechowywać tylko skróty, a nie samo hasło. Ale mam trudności z przeszukiwaniem sieci, próbując znaleźć najlepsze techniki przechowywania haseł, gdy wiemy, że będziemy ich później potrzebować w postaci zwykłego tekstu — bez przechowywania ich w postaci zwykłego tekstu, bez używania słabego szyfrowania (znanego klucza) i bez pytania użytkownika o hasło główne. Jakieś pomysły?


title: Poprawa wydajności kodu web scrapingu

text: Mam witrynę, w której kod wyszukuje inne witryny w celu uzyskania dokładnych danych. Chociaż kod działa dobrze, ale ma przyzwoite opóźnienie w wydajności, ponieważ kod najpierw pobiera strumień html z różnych witryn (czasem 9 witryn), wyodrębnia względną część, a następnie renderuje stronę html. Co powinienem zrobić, aby uzyskać optymalną wydajność. Czy powinienem przejść z hostingu współdzielonego (godaddy) na własny serwer, czy nie ma to nic wspólnego z moim hostingiem i muszę wprowadzić zmiany w kodzie?


title: Jaka jest presja bycia inżynierem oprogramowania?

text: Myślę o karierze w inżynierii oprogramowania, ale zanim zacząłem szukać pracy, chciałem zorientować się, czego się spodziewać szczególnie pod presją. To będzie moja pierwsza praca programistyczna (więc szukam poziomu podstawowego), więc nie jestem jeszcze dojrzały jako programista. Moje pytanie brzmi, jaka jest presja w tych zawodach? Jak wysokie może być ciśnienie? Jeśli twój szef da ci zadanie, które ma się odbyć za dwa tygodnie, ale zajmie ci to 3, czy zostaniesz zwolniony, ponieważ nie możesz wykonać? Czy masz czas, aby dowiedzieć się więcej o technologii, rozwinąć umiejętności kodowania i rozwijać się, czy też oczekuje się, że już to znasz i przebijesz się przez cały projekt? Jeśli masz problemy z kodem, czy oczekujesz, że sam sobie z tym poradzisz i będziesz pracować samodzielnie, czy też możesz poprosić innych o pomoc, jeśli utkniesz? Czy oczekujesz, że będziesz spędzać dużo nocy, aby dotrzymać terminów? Wiem, że może to również zależeć od firmy, ale chciałem tylko profesjonalnego wglądu w możliwą presję bycia programistą/programistą itp. Wiem również, że inne stanowiska też mają presję! Chciałbym tylko poznać presję charakterystyczną dla inżynierii oprogramowania. Powodem, dla którego zadaję to pytanie, jest to, że miałem kiedyś złe doświadczenia z programowaniem i chciałem wiedzieć, czy większość z tych prac jest taka sama. Jeśli inżynieria oprogramowania/rozwój/programowanie jest trudną presją, z którą nie chcę sobie radzić, czy istnieją inne rodzaje rozwoju, takie jak tworzenie stron internetowych, administrator systemu itp., które są mniej presji, na którą mogę się dostać i nadal kodować? Dziękuję za przeczytanie i czekam na opinie wszystkich.


title: Jak mogę uniemożliwić użytkownikom łączenie pochodzenia/X z Y w git?

text: Czy można zmusić git do łączenia oddziałów zdalnego śledzenia tylko z odpowiednimi oddziałami lokalnymi? Np. załóżmy, że origin/X śledzi X w punkcie początkowym i odpowiada lokalnemu X, tak samo dla pochodzenia/Y i Y. Chcę uniemożliwić użytkownikom wykonywanie `git checkout Y; git merge origin/X`. Czy to możliwe? Jak? **Edytuj:** Dla jasności: Przepływ pracy nie jest problemem. Ludzie próbują połączyć niewłaściwe gałęzie, ponieważ zapomnieli pobrać właściwą gałąź przed połączeniem. Nie chodzi o „przestępców” czy przepychanie się do centralnego repozytorium. To po prostu ludzie zapominający, w której branży się znajdują. Ostatni „incydent” brzmiał dosłownie: > „Powinienem zatwierdzić i wypchnąć naprawdę szybko, zanim wyjdę. > > git add . > git commit -am 'Funkcja Y' > git push origin > > Ups, co to. Merge branch origin/X first. OK whatevs.>> git merge origin/X>> Ups, co to teraz. Wiele konfliktów scalania. Co ja zrobiłem. Lepiej > zadzwoń do kogoś..." Użytkownik pracował w branch Y i nie rozumie, co mówi `początek git push`. Powiedziano mu, że origin/X potrzebuje połączenia i tak właśnie zrobił, ponieważ chciał „naprawić szybko”. W powyższym przypadku gałąź X była o jedno zatwierdzenie przed lokalnym X, więc wypchnięcie wszystkich gałęzi spowodowało błąd "połączenia potrzeb". Dostosowałem teraz „workflow”, aby zawsze wyraźnie wypychać gałąź, np. `git push origin Y` zamiast po prostu `git push origin`, ale to nie rozwiązuje problemu. Nie powinno (zwykle) być dozwolone bez ostrzeżenia, aby scalić origin/X z Y. W celu scalenia gałęzi funkcji X i Y można połączyć.


title: Jak wybrać odpowiednią dokumentację dla mojego zespołu?

text: Zadałem to pytanie kilka dni temu, ile dokumentacji należy zrobić, a teraz zdaję sobie sprawę, że mogłem zadać tylko połowę pytania. Moim celem jest promowanie pewnego rodzaju dokumentacji w celu zwiększenia ciągłej wiedzy wewnątrz zespołu. Mój zespół pracuje głównie nad usługami po stronie serwera, które rozszerzają zastrzeżone urządzenia, które są dystrybuowane lokalnie (krajowo, a nie globalnie). Dodatkowo dostarczamy do tych usług API i administracyjne aplikacje webowe. **Jakie rodzaje dokumentacji byłyby najlepsze dla mojego zespołu?** **Czy powinniśmy skupić się na DFD, diagramach sekwencji, diagramach klas, po prostu zwykłym tekście... ?** **Czy niektóre metodologie dokumentacji są lepsze dla określonych branż lub czy są takie, które są po prostu stratą czasu?** _Obawiam się, że to ostatnie pytanie zostałoby odrzucone jako zbyt subiektywne, ale mam nadzieję, że są jakieś standardowe odpowiedzi na to pytanie, podobnie jak wtedy, gdy ktoś pyta o dobre techniki OOP i dostaje ukierunkowany na wzorce projektowe i zasady SOLID._


title: Język wszechobecny i typy niestandardowe

text: Zauważ, że moje pytanie odnosi się do tych atrybutów, które nawet same w sobie już reprezentują _pojęcie_ (tj. same dostarczają _spójne znaczenie_). Tak więc taki atrybut nie wymaga dodatkowego wsparcia funkcjonalnego i jako taki jest _samowystarczalny_. Zdaję sobie również sprawę, że nawet przy _samodzielnych_ atrybutach _typy niestandardowe_ mogą okazać się korzystne (np. dają możliwość dodawania nowych zachowań później, gdy zmienią się wymagania biznesowe). Dlatego moje pytanie skupia się tylko na tym, czy _typy niestandardowe_ dla _samowystarczalnych_ atrybutów naprawdę wzbogacają wszechobecny język **UL** a) Czytałem, że w większości przypadków nawet proste, _samodzielne_ atrybuty powinny mieć raczej niestandardowe, bardziej opisowe typy niż _podstawowe typy wartości_ ( _podwójne, łańcuchowe_ ... ), ponieważ między innymi _typy opisowe_ dodają do **UL** , podczas gdy użycie _podstawowych typów_ zamiast tego osłabia język. Rozumiem znaczenie **UL** , ale w jaki sposób posiadanie _typu podstawowego_ dla atrybutu _samodzielnego_ osłabia język, ponieważ w przypadku atrybutów _samodzielnych_ nazwa atrybutu już adekwatnie opisuje _koncepcję_, a tym samym przyczynia się do * Słownictwo *UL**? Na przykład, termin `osoba_wiek` już adekwatnie wyjaśnia koncepcję _określania ilości lat, które dana osoba ma_ : class Osoba { string osoba_wiek; } więc co możemy zyskać, wprowadzając również termin `RzeczyWiek` do **UL** : class osoba { RzeczWiek osoba_wiek; }      Dziękuję


title: Entity Framework Łączenie tabel z relacjami klucza obcego w zakresie

text: Nie jestem pewien, czy „Ranged Foreign Key Relationship” jest rzeczywistym terminem, czy po prostu go wymyśliłem, ale mówię o tym: AgeGroup Table int MinAge { get; ustawić; } int MaxAge { get; ustawić; } napis Opis { get; ustawić; } Tabela klientów public int IDKlienta { get; ustawić; } ciąg publiczny Nazwa { get; ustawić; }` public int Wiek { get; ustawić; } public wirtualny AgeGroup AgeGroup { get; ustawić; } Biorąc pod uwagę powyższe dwie tabele, jak mogę dołączyć do nich za pomocą (EntityFramework, DataAnnontations, DbContext) i uzyskać dostęp do `Customer.AgeGroup.Description`? Rozważ następujące przykładowe dane: Grupa wiekowa MinWiek MaxWiek Opis 0 12 Młodych 13 19 Nastolatek 20 29 Dwudziestoki 30 39 Trzydziestki 40 9999 Stary klient Identyfikator klienta Imię Wiek 345 Joe Smith 17 493 Kobaltikus 31 631 Jane Doe 29 Jak mogę to powiązać? Cobaltikus ma wiek 31. Nie ma odpowiadającego rekordu AgeGroup z 31. Odpowiadający rekord AgeGroup to ten z MinAge = 30 i MaxAge = 39. Mogę to łatwo zrobić w SQL, ale jak to zrobić z EntityFramework? SELECT AgeGroup.Description FROM Customer, AgeGroup WHERE Customer.CustomerID = 493 AND AgeGroup.MinAge <= Customer.Age AND AgeGroup.MaxAge >= Customer.Age