title: Czy rada starszych programistów, aby zawsze używać książek, to dobry pomysł?

text: Jestem młodszym programistą i pracuję w branży dopiero od 5 lat. W mojej obecnej firmie jest senior, nazwijmy go Infestus. Od czasu do czasu mam okazję zabłysnąć i zrobić coś zupełnie nowego od zera. Jednym z ostatnich przykładów było to, że musiałem zrobić singletona w aplikacji wielowątkowej. Postanowiłem skorzystać z tej metody. Jak tylko Infestus to zobaczył, szybko zaczął nazywać mnie głupim i kazał mi zastosować to podejście. Zapytałem go, dlaczego po prostu to zlekceważył, bo tak jest lepiej i dlatego ta i ta książka o javie mówi, że jest lepsze. I to jest częsty wzorzec, gdy tylko mam okazję zrobić coś nowego, szybko zostaję zestrzelony przez Infestusa i jedynym uzasadnieniem jego metody są książki pisane przez znanych programistów. Zawsze stara się dawać mi książki do przeczytania, abym mógł „nauczyć się”, jakie sposoby programowania. Programuję dla pieniędzy dopiero od 5 lat, ale czy zawsze dobrym pomysłem jest ślepe podążanie za książką najlepszych sposobów rozwiązania problemu, czy też powinienem próbować od czasu do czasu eksperymentować? Nieustanna fala skarg z Infestusa sprawia, że nigdy nie próbuję niczego nowego i nie naśladuję przykładów z książek. EDIT: Jestem całkowicie zagubiony. Tak, wiem, że ślepe śledzenie czegokolwiek to zły pomysł. Ale ten boski programista Infestus, który wydaje się dużo wiedzieć, mówi mi, że jedynym sposobem na prawidłowe programowanie jest czytanie książek i przestrzeganie wszystkiego aż do T. Wszystkie zasady, które narzuca, są zapisane w książkach, więc po prostu się zastanawiam jeśli książki są jedynym właściwym sposobem. EDIT2: Infestus nie jest moim szefem. Jest tylko jednym ze starszych programistów odpowiedzialnych za przegląd kodu. A większość jego komentarzy po recenzjach to tytuły książek, w których taka a taka metoda jest błędna.


title: Test jednostkowy - Enigma?

text: Jestem programistą aplikacji Objective-c/iOS i zastanawiałem się, czy przeprowadzam testy jednostkowe na moim kodzie, jak mam się do tego zabrać? Czym właściwie jest test jednostkowy? Czy nie testuję określonej części kodu podczas uruchamiania całej aplikacji? Jakie jest jego zastosowanie? Przeczytałem kilka artykułów, wikipedię itp., ale nie jestem pewien, czy testowanie jednostkowe jest procesem czasochłonnym, czy też oszczędzającym czas. Znam definicję, ale mam dylemat co do jej przeznaczenia. Plz poprowadź tutaj nową pszczołę. :) Przeszedłeś już przez następujące czynności: Najlepsze praktyki testowania jednostkowego dla początkujących testerów jednostkowych


title: Jak mam zmienić metody szyfrowania istniejących haseł?

text: Jeśli mam aplikację, która używa mniej bezpiecznej metody przechowywania haseł, takiej jak SHA-1, jak mam przejść na SHA-256 lub SHA-512?


title: Jak mogę przejść z Javy i ColdFusion na Ruby on Rails?

text: Obecnie pracuję z ColdFusion 9+ i trochę Javą w środowisku Windows. Przed ColdFusion pracowałem w Javie i JSP. Rozważam przejście w kierunku Ruby on Rails, ponieważ uważam, że byłoby to prawdziwe wyzwanie, utrzymałoby świeżość i zapewniłoby więcej możliwości pracy. Aby się do tego dostać, zacząłem budować swoją osobistą stronę internetową w Rails 3.0. Ale co jeszcze mogę zrobić, aby przejść z tego, co znam teraz, do Ruby i Rails? Czy są jakieś specyficzne lub idiomatyczne aspekty Ruby lub Rails, o których powinienem pamiętać, przechodząc z nastawienia na ColdFusion i Java?


title: Alternatywy dla wzorca repozytorium do hermetyzacji logiki ORM?

text: Właśnie musiałem zmienić ORM i było to stosunkowo trudne zadanie, ponieważ logika zapytań przeciekała wszędzie. Jeśli kiedykolwiek musiałbym tworzyć nową aplikację, moim osobistym upodobaniem byłoby enkapsulować całą logikę zapytań (za pomocą ORM), aby zabezpieczyć ją na przyszłość. Wzorzec repozytorium jest dość kłopotliwy w kodzie i utrzymaniu, więc zastanawiałem się, czy istnieją inne wzorce do rozwiązania problemu? Mogę przewidzieć posty o nie dodawaniu dodatkowej złożoności, zanim jest to rzeczywiście potrzebne, byciu zwinnym itp., ale interesują mnie tylko istniejące wzorce, które rozwiązują podobny problem w prostszy sposób. Moją pierwszą myślą było stworzenie repozytorium typów generycznych, do którego w razie potrzeby dodaję metody do określonych klas repozytorium typów za pomocą metod rozszerzających, ale testowanie jednostek statycznych metod statycznych jest strasznie bolesne. IE: public static class PersonExtensions { public static IEnumerable<Person> GetRetiredPeople(this IRepository<Person> personRep) { // logic } }


title: Jakie jest uzasadnienie skojarzenia operatora potęgowego Pythona z prawej strony?

text: Piszę kod do analizowania ciągów wyrażeń matematycznych i zauważyłem, że kolejność, w której połączone operatory potęgowe są oceniane w Pythonie różni się od kolejności w Excelu. Z http://docs.python.org/reference/expressions.html: _"Zatem w nienawiasowej sekwencji operatorów potęgowych i jednoargumentowych operatory są oceniane od prawej do lewej (nie ogranicza to kolejności oceny dla operandów ): -1_ *2 daje -1."* Oznacza to, że w Pythonie: `2**2**3` jest obliczane jako `2**(2**3) = 2**8 = 256` W Excelu działa to w drugą stronę: `2^2^3` jest oceniane jako `(2^2)^3 = 4^3 = 64` Muszę teraz wybrać implementację dla własnego parsera. Kolejność w Excelu jest łatwiejsza do zaimplementowania, ponieważ odzwierciedla kolejność oceny mnożenia. Zapytałem kilka osób w biurze, jakie są ich przeczucia przy ocenie „2^2^3” i otrzymałem mieszane odpowiedzi. Czy ktoś zna jakieś dobre powody lub przesłanki przemawiające za implementacją Pythona? A jeśli nie masz odpowiedzi, proszę skomentuj wynik _wyciągasz_ z intuicji - `64` czy `256`?


title: Zrozumienie poziomów przetwarzania

text: Przepraszam, za moje zdezorientowane pytanie. Szukam wskazówek. Do tej pory pracowałem głównie z Javą i Pythonem na warstwie aplikacji i mam tylko mgliste zrozumienie systemów operacyjnych i sprzętu. Chcę zrozumieć znacznie więcej na temat niższych poziomów przetwarzania, ale jakoś staje się to naprawdę przytłaczające. Na uniwersytecie wziąłem udział w zajęciach o mikroprogramowaniu, czyli o tym, jak procesory są okablowane na stałe do implementacji kodów ASM. Do tej pory zawsze myślałem, że nie zrobię więcej, jeśli dowiem się więcej o „niskim poziomie”. Mam jedno pytanie: jak to możliwe, że sprzęt jest prawie całkowicie ukryty przed deweloperem? Czy można powiedzieć, że system operacyjny jest warstwą oprogramowania dla sprzętu? Jeden mały przykład: w programowaniu nigdy nie spotkałem się z potrzebą zrozumienia, czym jest pamięć podręczna L2 lub L3. W typowym środowisku aplikacji biznesowych prawie nigdy nie trzeba rozumieć asemblera i niższych poziomów przetwarzania, ponieważ obecnie istnieje stos technologii na prawie wszystko. Myślę, że celem tych niższych poziomów jest zapewnienie interfejsu na wyższe poziomy. Z drugiej strony zastanawiam się, jak duży wpływ mogą mieć niższe poziomy, na przykład cała ta sprawa z grafiką komputerową. Z drugiej strony istnieje teoretyczna gałąź informatyki, która zajmuje się abstrakcyjnymi modelami obliczeniowymi. Rzadko jednak spotykałem się z sytuacjami, w których pomocne było myślenie w kategoriach modeli złożoności, weryfikacji dowodu itp. Poniekąd wiem, że istnieje klasa złożoności nazywana NP i że są one w pewnym sensie nie do rozwiązania. duża liczba N. Brakuje mi odniesienia do frameworka do myślenia o tych rzeczach. Wydaje mi się, że istnieją różne rodzaje obozów, z którymi rzadko się spotykają. Przez ostatnie kilka tygodni czytałem o kwestiach bezpieczeństwa. Tutaj w jakiś sposób łączy się wiele różnych warstw. Ataki i exploity prawie zawsze występują na niższym poziomie, więc w tym przypadku konieczne jest poznanie szczegółów warstw OSI, wewnętrznego działania systemu operacyjnego itp.


title: Potrzebne sugestie dotyczące architektury dla wielu klientów i konfigurowalnej aplikacji internetowej

text: Nasz produkt to internetowy system zarządzania kursami. Mamy ponad 10 klientów, aw przyszłości możemy zdobyć więcej klientów. (Asp.net, SQL Server) Obecnie, jeśli jeden z naszych klientów potrzebuje dodatkowej funkcjonalności lub niestandardowej logiki biznesowej, zmienimy schemat i kod bazy danych, aby spełnić jego potrzeby. (mamy tylko jedną bazę kodu oddziału i jeden schemat bazy danych) Aby zmiana nie wpłynęła na siebie nawzajem tras, używamy flagi klienta, która jest zdefiniowana w pliku konfiguracyjnym sieci, dlatego te dodatkowe pola i logika biz dotyczą tylko konkretnego klienta system. if(ClientId = 'ABC') { //DO ABC Stuff } else { //Normalna trasa } Jeden z naszych starszych kolegów powiedział, że w ten sposób mała firma, taka jak my, może zaoszczędzić zasoby na obsłudze wielu zasobów. Ale czuję, że ta strategia sprawia, że nasz kod i baza danych są jeszcze trudniejsze w utrzymaniu. Ktoś tam przeszedł podobną sytuację? Jak sobie z tym radzisz?


title: Czy programista powinien „myśleć” za klienta?

text: Doszedłem do punktu, w którym nienawidzę zbierania wymagań. Klienci są zbyt niejasni dla własnego dobra. W zwinnym środowisku, w którym możemy pokazać klientowi część pracy do końca, nie jest tak źle, ponieważ możemy dokonywać drobnych regularnych poprawek/aktualizacji funkcjonalności. W środowisku typu „wodospad” (najpierw wymagania, następnie prawie kompletny produkt) sprawy mogą stać się brzydkie. Takie środowisko skłoniło mnie do ciągłego kwestionowania wymagań. NP. Klient chce „automatycznie przekonwertować dane wejściowe na liczbę 1” (odnosi się do ilości w zamówieniu). Ale nie myślą o tym, że „dane wejściowe” mogą być prostym typem. „X” w polu tekstowym może oznaczać „ups”, a nie chcę jednego z tych produktów „pasta do zębów”. Ale w powietrzu jest tak wiele wymagań, że mogłem wytrzymać i poprawiać godzinami, rozwalając to, czego chcą. To po prostu nie jest zdrowe. Pracując dla korporacji, mogłem spróbować dostosować kulturę do zwinnego modelu, który by nam pomógł (niezbyt mała praca, powyżej mojej płacy). Albo zamiataj brzydkie detale pod dywan i miej nadzieję na najlepsze. Może mój klient próbuje za bardzo zbliżyć się do kodu? Jak poradzić sobie z problemem „myślenia dla klienta” bez wkurzania go zbyt wieloma pytaniami?


title: Rozdzielanie projektów Java

text: Mam duży projekt java i używamy maven do naszego cyklu kompilacji. Ten jeden projekt jest szeroko wykorzystywany - w innych projektach, w różnych aplikacjach, z których część jest w nim zawarta, a część gdzie indziej... Szczerze mówiąc to trochę bałaganu (różne bity dodawane w różnym czasie dla konkretnych celów) i chciałbym to trochę posprzątać. Ponadto nie jest w pełni przetestowany (dodano wiele bitów bez odpowiednich testów jednostkowych i integracyjnych) i są pewne testy, których uruchomienie zajmuje dużo czasu lub w rzeczywistości nie przechodzą... (uh-oh) - więc testy są wyłączane w cyklu kompilacji maven (ponownie, uh-oh). Zastanawiam się nad rozdzieleniem tego dużego projektu na mniejsze konkretne projekty, tak aby „końcowy” podprojekt (lub kilka podprojektów) wybrał różne podprojekty, których potrzebował. Moje myślenie jest następujące: * jeśli podzielę duży projekt na różne podprojekty, to wyjaśnię, jaka jest odpowiedzialność każdego projektu. * dzieląc się na podprojekty, mogę posprzątać testowanie każdego podprojektu indywidualnie i włączyć testowanie tego podprojektu w cyklu kompilacji maven. Jestem nieco zaniepokojony tym, jaki wpływ może to mieć na czas kompilacji. * Czy nałożenie struktury na duży projekt (tj. na mniejsze podprojekty) spowolni kompilator? Mam też niewielkie obawy, jaki wpływ może to mieć na czas edycji w IDE (głównie używamy Intellij). Intellij wydaje się budować każdy projekt po kolei przez drzewo zależności - tj. jeśli C zależy od B zależy od A, a ja zmienię A, nie spróbuje zbudować B, chyba że A skompiluje się i tak dalej. Prawdopodobnie jest to korzystne, ale odkryłem, że jeśli - na przykład zmienię interfejs w A, który jest powszechnie używany w B i C, potrzeba trochę czasu, aby naprawić wszystkie błędy z tej zmiany ... Inne pytanie dotyczy tego, jak używać klasy fabryczne. Niektóre aspekty projektu zależą od zewnętrznych słoików. Od czasu do czasu (na szczęście nie często) są one aktualizowane i musimy przeprowadzić migrację. Zwykle radzimy sobie z tym za pomocą klasy Factory, która wskazuje prawidłowe wersje kodu zewnętrznego (więc nie musimy zmieniać wszystkich implementacji w całej bazie kodu). W tej chwili to wszystko w dużym projekcie, ale myślę, że przełączając się na podprojekty, mógłbym opracować nowy projekt implementacji nowego kodu zewnętrznego, upewnić się, że podprojekt jest w pełni funkcjonalny i przetestowany oraz następnie przełącz zależności / klasę fabryki w projekcie użytkownika. Jednak komplikuje to szerokie wykorzystanie interfejsów w całym dużym projekcie. Na przykład * podprojekt A - zawiera interfejsy * podprojekt B - zależny od A dla interfejsów i starego zewnętrznego jara * podprojekt C - zależny od B (a więc A i starego zewnętrznego jara) i zawiera klasę Factory, która korzysta z implementacji interfejsów B. Jeśli potrzebuję zmienić zewnętrzny jar B, mogę: * utworzyć podprojekt B_ii - znowu zależny od A, a teraz nowy zewnętrzny jar * gdy będzie już w pełni funkcjonalny, mogę dodać zależność od C do B_ii, i zmień klasę Factory, aby korzystać z nowych implementacji interfejsów. * kiedy to wszystko działa, mogę usunąć zależność C od oryginalnego B, a jeśli to konieczne, usunąć podprojekt B. * Czy to rozsądny sposób na to? Więc ogólnie moje pytania to: * Czy ktoś ma jakieś doświadczenie w rozbijaniu dużych projektów? Czy są jakieś wskazówki/sztuczki, którymi chciałbyś się podzielić? * Jaki wpływ miało to na czas rozwoju i budowania? * Jaką radę mógłbyś udzielić w sprawie zorganizowania takiego rozpadu takiego projektu?


title: Najnowsze a najczęściej używane

text: Budujemy aplikację biznesową (a dokładniej system zarządzania laboratorium) głównie do użytku wewnętrznego firmy. Aby ułatwić użytkownikom znalezienie przedmiotów, nad którymi pracują, wprowadzamy listę najczęściej używanych przedmiotów. Odbyliśmy krótką dyskusję na temat tego, która metoda byłaby lepsza do wdrożenia: wyświetl najnowszą vs wyświetlaj najczęściej używaną. **Moje argumenty na temat najnowszych** * Trochę łatwiejsze do zaimplementowania. Myślę, że warto o tym wspomnieć, ponieważ mamy do czynienia z aplikacją biznesową, która będzie sprzedawana jako pojedynczy egzemplarz, więc może to bezpośrednio wpłynąć na cenę aplikacji. Również prostsza implementacja oznacza mniej kodu i może mieć wpływ na kod konserwacyjny. * Kontrargument: różnica w trudności implementacji w tym przypadku jest zbyt mała. * Użytkownikom łatwiej jest odgadnąć, co znajdą na tej liście, aby wiedzieli, czy w ogóle warto do niej zajrzeć. * Przedmioty, które były względne wczoraj i często używane, mogą dziś nie mieć znaczenia, a na liście ostatnich przedmiotów szybko znikają. **Moje argumenty na temat najczęściej używanych** * Właściwie dość łatwo jest wyświetlić mieszaną wersję ostatnio używanego i najczęściej używanego, łącząc datę ostatniego dostępu i liczbę dostępu, coś takiego `(dzisiaj - lastaccess) * number_of_access ` * Kontrargument: wymaga to dopracowania Jakie argumenty podalibyście za jednym lub drugim?


title: Dlaczego jako firma zleca się wyłącznie projekty?

text: Potencjalny pracodawca powiedział mi, że podjął decyzję na poziomie firmy, aby wykonywać tylko projekty outsourcingowe. Nie rozumiem, dlaczego podjęli taką decyzję, a facet, z którym rozmawiałem, nie rozwinął. Dalej powiedział tylko, że „ich intencją jest budowanie komponentów oprogramowania”. Skoro rozwijają się dość szybko i docierają do około 300 pracowników, czy nie powinni przynajmniej być otwarci na możliwość posiadania własnego projektu? Wszystkie inne firmy, z którymi miałem kontakt, były przynajmniej otwarte, aby mieć taką w przyszłości. Rozmawiałem z kilkoma ich pracownikami, a niektórzy pracują równolegle nad więcej niż 2 projektami zleconymi na zewnątrz (dzieląc czas mniej więcej 4 + 4 godziny dziennie). Wydawało się, że wiele projektów trwa kilka miesięcy, może pół roku, przychodzą i odchodzą. Dlaczego firma miałaby decydować się na świadczenie tylko takich usług outsourcingowych? Jak to działa, aby zatrzymać setki osób na zleconych projektach z pozornie wysokim wskaźnikiem rotacji projektów?


title: Dlaczego wycofano sklep Java App Store?

text: Java App Store brzmi jak fajny pomysł, prawda? Cóż, zwróciłem się do Google i znalazłem pozostałości sklepu z aplikacjami, który rozwijał Oracle. Wygląda na to, że od tego czasu został wycofany, ale nie byłem w stanie znaleźć zbyt wiele komentarzy na temat tego, dlaczego został porzucony. Dlaczego więc został przerwany? Bardzo mile widziane byłyby linki do innych odnośników, na przykład postów na blogu omawiających trudności ze sklepem z aplikacjami Oracle.


title: Książka Entity Framework Wydanie pierwsze

text: Niedawno kupiłem książkę O'Reilly: Programming Entity Framework autorstwa Julii Lerman. Niestety jest to pierwsza edycja. Nie zdawałem sobie sprawy, że jest nowsze wydanie. Co z perspektywy czasu wyjaśnia cenę wynajmującego za książkę. Więc moje pytanie... Czy powinienem go zwrócić i dostać drugie wydanie czy przeczytać pierwsze wydanie? Pierwsza edycja spędza dużo czasu w wersji 1 EF, a druga edycja spędza dużo czasu w wersji 2 (tam właśnie chcę być). Myślę, że chcę go zwrócić, ale pomyślałem, że najpierw zadam pytanie... Myśli?


title: Ile dokumentacji powinien klient oczekiwać od jednoosobowego zespołu?

text: Pracuję dla małej firmy zajmującej się elektroniką i oprogramowaniem pomocniczym, która niedawno podpisała umowę z dużą firmą, która bardzo rygorystycznie podchodzi do dokumentacji (robię oprogramowanie pomocnicze, głównie Windows lub aplikacje przeglądarkowe). Po zapoznaniu się z wymaganą dokumentacją dużej firmy zdaję sobie sprawę, że noszę więcej kapeluszy, niż sądziłem. Mianowicie, musimy stworzyć dokumentację opisującą: * Analizę wymagań (ja) * Projekt architektoniczny (ja) * Projekt szczegółowy (ja) * (Rzeczywisty) Rozwój oprogramowania (ja) * Rozwój projektu bazy danych (ja) * Plan testowania, przygotowanie i wyniki (ja) * Dowód zgodności z wymaganiami (ja) * Instrukcja obsługi (ja) Większość (jeśli nie wszystkie) testów będę również przeprowadzał sam. Oraz wdrożenie, szkolenie i obsługę klienta. Jeśli jest jakiś technik, który potrzebuje wsparcia sprzedaży, to ja też. Czy to powszechne? Czy małe firmy programistyczne, które otrzymują duże kontrakty, często pytają o to pojedynczych programistów?


title: Jakimi cechami i cechami wyróżniają się motywy „darmowe” i „premium”

text: Zainwestowałem dużo czasu w tworzenie szablonów Wordpress. Chcę wydać kombinacje tych szablonów wraz z różnymi stylami i fantazyjnymi stronami frontowymi jako "Premium Wordpress Themes". Muszę wiedzieć, co oznacza „Premium”? Czego ludzie oczekują od motywu GPL w porównaniu z motywem Premium? Czy istnieją funkcje, które są uważane za wymagane jako premium? Czy istnieją funkcje, które są pożądane, ale uważane za „wyjątkowe”, tj. nie są częścią każdego motywu premium? Jak mogę odróżnić? Słyszałem zgryźliwe odpowiedzi, które mówią, że każdy motyw, który zarabia pieniądze, jest premium, ale mam na myśli pytanie o to, co zapewnia wyjątkowemu motywowi jakość. Dlaczego warto więcej? Technicznie jestem w stanie zrobić wiele rzeczy, ale jako samotny programista z rodziną do wyżywienia, nie mogę sobie pozwolić na spędzanie czasu na funkcjach, na których nikogo nie obchodzi. Muszę starać się odizolować rzeczy, których ludzie chcą. To dla mnie poważne jedzenie i czynsz. Jak mogę uzyskać tego rodzaju informacje, aby mój projekt odniósł sukces?


title: Jaka jest rola jQuery i JavaScript w MVC?

text: Nie jestem pewien, czy rozumiem rolę jQuery/JavaScript w MVC. Znalazłem artykuł na ten temat w _A List Apart_ , ale nie wyjaśnia on niczego. Czy łączy komunikację między widokiem a kontrolerem, czy robi coś innego?


title: ASP.Net MVC czy formularze internetowe?

text: > **Możliwy duplikat:** > Dlaczego miałbyś używać MVC przez formularze internetowe? Jaka jest różnica między formularzami ASP.Net MVC a formularzami sieci Web? Czy któryś z nich jest lepszy? Chcę używać rozwoju ASP.Net jako trampoliny do samodzielnego uczenia się C#. Jak najlepiej się do tego zabrać?


title: Wyzwalacz Salesforce Zapobiegaj duplikowaniu

text: Napisałem wyzwalacz, który zapobiega powielaniu nazwy. proszę odnieść się do następującego warunku. " **Test** " i " **Test** " mają taką samą nazwę (co oznacza, że nie trzeba uwzględniać żadnych spacji). " **TEST** " i " **test** " są ta sama nazwa (co oznacza ignorowanie wielkich i małych liter.) Moje pytanie : Jeśli mam już w systemie wstawiony rekord o nazwie " **Test** ". a teraz próbuję wstawić nowy rekord o nazwie " **test** "(co jest oczywiste, niepoprawne ze względu na duplikację). Jak mogę obsłużyć ten wyjątek? Z góry dziękuję.


title: Czy zmiana nazwy programu jest uważana za legalną modyfikację programu?

text: Jeśli licencja na oprogramowanie uniemożliwia modyfikację programu (tj. „Nie możesz modyfikować…”), zmiana nazwy programu (np. zmiana z a.exe na b.exe) uważana jest za legalną modyfikację oprogramowania, jeśli oprogramowanie pozostaje identyczne w postaci binarnej, ponieważ wszystko, co naprawdę się zmieniło, to ścieżka do programu? Edytować. Nie proszę o pomoc prawną tutaj pytam jakie jest orzecznictwo w tym zakresie. Czym jest modyfikacja, musiała być w pewnym momencie zajęta.


title: Współpraca Git z pull request w firmie

text: Zastanawiam się nad sposobem na współpracę między programistami w firmie, załóżmy, że mamy 2 typy serwerów: Production i Staging. Teraz chcemy przejrzeć wszystkie zmiany wprowadzane do produkcji za pomocą żądania ściągnięcia, jednocześnie chcemy, aby programiści mogli wprowadzać zmiany eksperymentalne w dowolnym momencie do Staging. Celem tutaj jest upewnienie się, że nasi ludzie mogą robić eksperymentalne rzeczy i nie mogą (przypadkowo) zepsuć produkcji. Moim pomysłem jest stworzenie 2 oddzielnych repozytorium dla produkcji (tylko do odczytu) i Staging (odczyt-zapis). Czy to będzie idealna konfiguracja? Jakieś inne rodzaje konfiguracji, o których powinienem wiedzieć? ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/KhtPf.png)


title: Jakie są dobre sposoby na oddzielenie API od implementacji *całych projektów* w Javie?

text: Wyobraź sobie, że masz moduł oprogramowania, który jest wtyczką do jakiegoś programu (podobnie jak Eclipse) i chcesz, aby miał interfejs API, który mogą wywoływać inne wtyczki. Twoja wtyczka nie jest swobodnie dostępna, więc chcesz mieć osobny moduł API, który _jest_ dostępny za darmo i jest jedyną rzeczą, do której inne wtyczki muszą się bezpośrednio łączyć - klienci API mogą kompilować tylko za pomocą modułu API, a nie modułu implementacji, na ścieżce budowania. Jeśli API jest ograniczone, aby ewoluować w kompatybilny sposób, wtyczki klienta mogą nawet zawierać moduł API we własnych plikach jar (aby zapobiec jakiejkolwiek możliwości wystąpienia błędów wynikających z dostępu do nieistniejących klas). Licencjonowanie to nie jedyny powód, aby API i implementację umieścić w osobnych modułach. Możliwe, że moduł implementacji jest złożony i ma niezliczone własne zależności. Wtyczki Eclipse zazwyczaj zawierają pakiety wewnętrzne i niewewnętrzne, przy czym pakiety niewewnętrzne są podobne do modułu API (oba są zawarte w tym samym module, ale można je rozdzielić). Widziałem kilka różnych alternatyw: 1. API znajduje się w oddzielnym pakiecie (lub grupie pakietów) od implementacji. Klasy API wywołują bezpośrednio klasy implementacyjne. API _nie można_ skompilować ze źródła (co jest pożądane w niektórych rzadkich przypadkach) bez implementacji. Nie jest łatwo przewidzieć dokładne efekty wywołania metod API, gdy implementacja nie jest zainstalowana - dlatego klienci zwykle tego unikają. pakiet com.pluginx.api; importuj com.pluginx.internal.FooFactory; public class PluginXAPI { publiczne statyczne Foo getFoo() { return FooFactory.getFoo(); } } 2. API znajduje się w oddzielnym pakiecie i używa odbicia w celu uzyskania dostępu do klas implementacyjnych. API można skompilować bez implementacji. Użycie odbicia może spowodować spadek wydajności (ale obiekty odbicia mogą być buforowane, jeśli jest to problem. Łatwo jest kontrolować, co się stanie, jeśli implementacja nie będzie dostępna. package com.pluginx.api; public class PluginXAPI { public static Foo getFoo () { try { return (Foo)Class.forName("com.pluginx.internal.FooFactory").getMethod("getFoo").invoke(null); } catch(ReflectiveOperationException e) { return null; // lub throw RuntimeException, dodaj logowanie lub zgłaszaj błąd krytyczny w jakimś globalnym systemie obsługi błędów itp. } } } 3. Interfejs API składa się tylko z interfejsów i klas abstrakcyjnych oraz sposobu na pobranie instancji klasy. .api; publiczna klasa abstrakcyjna PluginXAPI { public abstract Foo getFoo(); prywatna statyczna instancja PluginXAPI; publiczna statyczna instancja PluginXAPI getInstance() {return instance;} public static void setInstance(PluginXAPI newInstance) { if(instance != null) throw new IllegalStateException("instancja już ustawiona"); w przeciwnym razie instancja = newInstance; } } 4. To samo co powyżej, ale kod klienta musi pobrać początkowe odwołanie z innego miejsca: // Pakiet API com.pluginx.api; interfejs publiczny PluginXAPI { Foo getFoo(); } // Pakiet implementacyjny com.pluginx.internal; public class PluginX extends Wtyczka implementuje PluginXAPI { @Override public Foo getFoo() { ... } } // Kod klienta używa go w ten sposób PluginXAPI xapi = (PluginXAPI)PluginManager.getPlugin("com.pluginx"); Foo foo = xapi.getFoo(); 5. Nie. Spraw, aby klienci łączyli się bezpośrednio z wtyczką (ale nadal uniemożliwiaj im wywoływanie metod innych niż API). Utrudniłoby to wielu innym wtyczkom (i większości wtyczek typu open source) korzystanie z interfejsu API tej wtyczki bez napisania własnego opakowania.


title: Odczytywanie plików z przodu

text: Czy jest jakiś sposób na przygotowanie pliku @ sam interfejs, który powinien być również obsługiwany przez IE 8 i IE 9. Proszę podać wszelkie dostępne sugestie. Szukam kodu do odczytu pliku Excela w kodzie interfejsu/javascript.


title: Zmień nazwę pliku stron wyodrębnionego z PDF z pojedynczej broszury PDF w odpowiedniej kolejności

text: Mam ogromne pliki PDF w formacie broszury. Przykład, Załóżmy, że plik pdf broszury ma 24 strony, z których każda zawiera 2 strony, które znajdują się na dwóch stronach - lewej i prawej stronie. Pierwsza strona ma numer 48 z lewej strony i numer pierwszej strony z prawej strony Druga strona ma numer strony 2 z lewej strony i numer strony 47 z prawej strony Trzecia strona ma numer strony 46 z lewej strony i Numer trzeciej strony po prawej stronie Wyciąłem pionowo pliki Booket PDF, aby oddzielić pojedyncze pliki PDF, używając operacji zbiorczej w osobnym folderze. na przykład, wycięty plik PDF będzie wyglądał następująco w powyższym przypadku 1. plik pdf - 48 strona 2. plik pdf - 1. strona 3. plik pdf - 2. strona 4. plik pdf - 47 strona 5. plik pdf - 46 strona 6. plik pdf - 3. strona... Podobnie dla innych plików PDF.... jeśli plik PDF ma 95 stron.... pierwsza strona ma numer 95 po lewej stronie i numer pierwszej strony po prawej Teraz problem polega na tym, jak zmienić nazwę i prawidłowo ułożyć pliki w kolejności dla KAŻDEGO pliku PDF, abyśmy mogli scalić plik PDF jako jeden w końcu dla każdego pliku PDF... Po poprawnym zmianie nazwy w odpowiedniej kolejności dla powyższego pliku pierwszy plik pdf powinien wskazywać na pierwszą stronę Drugi plik pdf powinien wskazywać na drugą stronę Trzeci plik pdf powinien wskazywać na trzecią stronę... Problem polega na tym, że wszystkie pliki PDF, które planujemy podzielić będą miały inny zestaw stron..przykładowy plik PDF1 - ma 48 stron jak wyżej - > pliki należy zmienić nazwy i ułożyć poprawnie 1, 2, 3, 4...48 plik PDF2 - ma 96 stron -> pliki należy zmienić nazwy i ułożyć ed jako 1, 2, 3, 4.....96 poprawnie plik PDF3 - ma 56 stron -> pliki należy zmienić i ułożyć jak 1, 2, 3, 4....56 poprawnie Po zmianie nazwy, ostateczna plik będzie wyglądał następująco 1. plik pdf - należy wskazać na 1. stronę..tj. nazwę 2. pliku pdf należy zmienić na 1. plik pdf 2. plik pdf - należy wskazać na 2. stronę, tj. nazwę pliku 3. pdf należy zmienić na 2. pdf plik 3 plik pdf - należy wskazać na 3 stronę tj. 6 plik pdf powinien zmienić nazwę na 3 plik pdf Czy ktoś mógłby mi pomóc z programem, który zmieni nazwy plików wyciętych pionowo w odpowiedniej kolejności? Z góry dziękuję.


title: Dlaczego używanie spójników w nazwach metod jest złą konwencją nazewnictwa?

text: W moim zespole ściśle współpracujemy z kilkoma architektami oprogramowania. Zatwierdzają wszystkie decyzje projektowe naszych projektów, dokonują przeglądów kodu itp. Nasze projekty składają się głównie z funkcjonalności backendu zaimplementowanej w PHP z wykorzystaniem frameworka Symfony 2. Tak więc składniowo kod, konwencje nazewnictwa i struktura projektu wyglądają niemal identycznie jak Java (Symfony 2 zachęca do takiej struktury). Wspominam o tym, ponieważ konwencje specyficzne dla Javy również mają zastosowanie w naszym przypadku (jeśli to możliwe). Ostatnio zasugerowali coś, co wydaje mi się bardzo dziwne: wszystkie metody powinny mieć w nazwie spójniki, np. `getEntityOrNull`, `setValueOrException` itp. Taka konwencja nazewnictwa jest dla mnie bardzo niewłaściwa, ale nie mogę wymyślić żadnych konkretnych argumentów ani artykułów/stron internetowych, które konkretnie to kwestionują. Jedyne, co wymyśliłem, to: * takie informacje powinny być obecne w adnotacjach metody, np. `@return` lub `@throws` * użycie spójników ("i", "lub" itp.) w nazwach metod zwykle sugerować, że zasada pojedynczej odpowiedzialności nie jest właściwie przestrzegana. Jakie są inne konkretne argumenty przeciwko tej konwencji nazewnictwa?


title: Ten program w Javie nie przestaje działać!

text: Napisałem ten program, ale nie przestaje działać. Czy możesz mi w tym pomóc? /* * Aby zmienić ten nagłówek licencji, wybierz opcję Nagłówki licencji we właściwościach projektu. * Aby zmienić ten plik szablonu, wybierz Narzędzia | Szablony * i otwórz szablon w edytorze. */ pakiet inplacesort; import java.util.*; /** * * @author ASUS */ public class InplaceSort { static Scanner Console = new Scanner(System.in); /** * @param args argumenty wiersza poleceń */ public static void main(String[] args) { Vector <Integer> intList = new Vector <Integer> (); //pobranie liczb od użytkownika char ans = 'y'; while (ans == 'Y' || ans == 'y') { System.out.print("Wprowadź liczbę: "); intList.addElement(konsola.nextInt()); System.out.print("Czy chcesz kontynuować?(T/N)"); ans = konsola.next().charAt(0); } System.out.println(intList); for (int i = 1; i < intList.size(); i++) { //if (intList.elementAt(i) < intList.elementAt(i-1)) //{ int j = i - 1; while (j > 0 && intList.elementAt(i) < intList.elementAt(j)) { j--; } for (int k = intList.size() - 1; k >= j; k--) { intList.insertElementAt(intList.elementAt(k),k + 1); } intList.insertElementAt(intList.elementAt(i+1),j); intList.removeElementAt(i+1); //} } System.out.print(intList); } }


title: Czy można przenieść aplikację desktopową Pythona (wiersz poleceń) do chmury?

text: Jestem nowy w Pythonie i przetwarzaniu w chmurze. W ramach mojego nowego projektu planuję przenieść aplikację desktopową Pythona (wiersz poleceń) do chmury. Czy to możliwe


title: Następny krok, od starszego programisty do architekta

text: **Małe tło:** Licencjat z inżynierii, tytuł magistra w Comp Sci. Wylądował junior dev prosto z Uni. 2 lata później odszedł do Senior Dev. Teraz planujemy kolejny krok... Platforma: _.NET, VB,C# (do 4.0, LINQ, PLINQ) ,F#,Winform,ASP.NET+(zwykłe technologie internetowe,js,xslt,dxhtml,etc),WPF,db - >MS T-SQL_ **Pytanie:** Jakie są następne kroki, o których powinienem pomyśleć, jeśli moim celem jest zostanie architektem .NET? W jakich rzeczach potrzebuję doświadczenia, zarówno umiejętności miękkich, jak i technicznych. Jaka jest tam najszybsza trasa? Czy są jakieś ogólne porady dotyczące zostania architektem? Z góry dziękuję.


title: Zarządzanie zmianami kodu w tym środowisku kodowania

text: Mam następujące środowisko kodowania: * Trzech programistów * Kod źródłowy znajduje się w Team Foundation Server (2010) * Środowisko programistyczne * Środowisko etapowe * Środowisko produkcyjne Jako starszy programista muszę przejrzeć kod przed jego przeniesieniem do środowiska pomostowego. Po sprawdzeniu kodu jest on umieszczany na scenie, gdzie jest testowany przez nasz (mały) zespół testowy. Po przetestowaniu i zaakceptowaniu zmian przechodzę do produkcji. Załóżmy, że: „Deweloper A” przesyła zmianę, przeglądam ją i przenoszę na scenę. `Deweloper B` zgłasza zmianę, ja ją przeglądam i wprowadzam na scenę. Podczas testowania użytkownik twierdzi, że zmiana wprowadzona przez programistę A zawiera błędy i wymaga naprawy. Jednak zmiany wprowadzone przez programistę B muszą przejść do wersji produkcyjnej. Dzieje się to częściej niż nie. Obecnie muszę poczekać, aż programista A naprawi błędy i ponownie przetestuje lub każe programiście A wyłączyć ich zmiany. Jak rozwiązać ten dylemat?


title: Jakie są wady alfabetycznego nazywania rzeczy?

text: Podam przykład, jak alfabetycznie nazywam swoje klasy: * Car * CarHonda (podklasa Car) * CarHondaAccord (podklasa CarHonda) Są dwa powody, dla których typ klasy umieszczam wcześniej w jej nazwie: 1. Kiedy przeglądanie plików alfabetycznie w eksploratorze plików, powiązane elementy są wyświetlane razem, a klasy nadrzędne pojawiają się nad klasami podrzędnymi. 2. Mogę stopniowo udoskonalać autouzupełnianie w moim IDE. Najpierw wpisuję typ główny, potem typ drugorzędny i tak dalej bez konieczności zapamiętywania, jak dokładnie nazwałem ostatnią część rzeczy. Moje pytanie brzmi: dlaczego prawie nie widzę innych programistów, którzy to robią? Zwykle nazywają rzeczy w odwrotnej lub przypadkowej kolejności. Weźmy na przykład zestaw SDK systemu iOS: * UIViewController * UITableViewController Jakie są wady mojej konwencji nazewnictwa i zalety jej konwencji?


title: Czy powinienem dodać stary kod do mojego repozytorium?

text: Mam repozytorium SVN witryny PHP i ostatni programista nie używał poprawnie kontroli źródła. W rezultacie tylko kod, odkąd zacząłem tu pracować, znajduje się w repozytorium. Mam kilka starych kopii pełnego kodu zapisanego w _files_ jako "kopie zapasowe", ale nie są one pod kontrolą źródła. Nie wiem, dlaczego większość kopii została zapisana, ani nie mam rozsądnego sposobu na oznaczenie ich numerem wersji. Mam _ma_ daty wykonania kopii zapasowych, wszystkie kopie zapasowe mają odpowiednie znaczniki czasu systemu plików. Z powodu aktualizacji frameworków i sterowników baz danych, stary kod jest dość martwy; nie działa już na bieżącej konfiguracji serwera. Jednak poprzedni programiści mieli pewną _unikalną_ logikę, więc nienawidzę być całkowicie pozbawionym starych kopii, które mogłyby odnosić się do tego, co u licha robili. Czy powinienem trzymać te rzeczy w kontroli wersji? Jak? Odciąć stary kod w osobnych tagach/gałęziach?


title: Korzystanie z BSD i GPL w jednym projekcie

text: Jestem autorem projektu, który składa się z dwóch części: demona i biblioteki. Chcę licencjonować bibliotekę na licencji BSD (lub MIT, zadecyduje później), a demona na GPLv3. Chcę zezwolić na łączenie biblioteki z produktami o zamkniętym kodzie źródłowym, ale chcę, aby demon był na licencji GPL, ponieważ intensywnie używa kodu GPL, a nie chcę jego komercyjnych widełek. Chodzi o to, że ta biblioteka zapewnia interfejs klienta dla demona, w którym demon działa jak rodzaj serwera. Czy dozwolone jest licencjonowanie mojego projektu przy użyciu oddzielnych licencji dla różnych części mojego projektu, połączonych z jakimś protokołem RPC?


title: Jak przekazać parametry do funkcji w C

text: Załóżmy, że piszę program w języku C, w którym kilka parametrów jest zadawanych użytkownikowi na początku wykonania, a następnie pozostaje do końca. Teraz muszę przekazać te parametry do jakiejś funkcji. Ponieważ są one niezmienione w programie, moją pokusą byłoby zadeklarowanie ich jako zmiennych globalnych, aby były widoczne dla wszystkich funkcji. Widzę jednak, że nie jest to dobra praktyka, jeśli wymiar programu jest duży (tu zadano to pytanie i udzielono na nie odpowiedzi). Jednak nie widzę sensu tworzenia funkcji z, powiedzmy, 6 argumentami, gdy te zmienne mają tylko 2. Czy istnieje bardziej elegancki sposób na zrobienie tego bez zbytniego narażania manipulacji kodu?


title: Nazwa problemu rundy Countdown Numbers - a rozwiązania algorytmiczne?

text: Dla nie-Brytyjczyków na widowni jest segment dziennego teleturnieju, w którym zawodnicy mają zestaw 6 liczb i losowo wygenerowaną liczbę docelową. Muszą osiągnąć liczbę docelową za pomocą dowolnej (ale niekoniecznie wszystkich) z 6 liczb, używając tylko operatorów arytmetycznych. Wszystkie obliczenia muszą dawać dodatnie liczby całkowite. Przykład: Youtube: Countdown – najbardziej nadzwyczajna gra liczbowa w historii? Szczegółowy opis znajduje się na Wikipedii: Countdown (Game Show) Na przykład: * Uczestnik wybiera 6 liczb - dwie duże (możliwości to 25, 50, 75, 100) i cztery małe (liczby 1 .. 10, każda zawarta dwukrotnie w basen). * Wybrane liczby to „75”, „50”, „2”, „3”, „8”, „7” są podane z liczbą docelową „812”. * Jedna próba to (75 + 50 - 8) * 7 - (3 * 2) = 813 (To daje 7 punktów za rozwiązanie w obrębie 5 celu) * Dokładna odpowiedź to (50 + 8) * 7 * 2 = 812 (to by dało 10 punktów dokładnie pasujących do celu). Oczywiście ten problem istniał przed pojawieniem się telewizji, ale artykuł w Wikipedii nie podaje mu nazwy. Widziałem tę grę również w szkole podstawowej, do której uczęszczałem, gdzie gra nazywała się „Crypto” jako zawody międzyklasowe – ale wyszukiwanie jej teraz nic nie ujawnia. Kilka razy brałem w tym udział i mój tata napisał arkusz kalkulacyjny w Excelu, który próbował brutalnie wymusić problem, nie pamiętam jak to działało (tylko, że _nie_ działało, co z limitem 65535 wierszy w Excelu), ale z pewnością musi istnieć algorytmiczne rozwiązanie problemu. Być może istnieje rozwiązanie, które działa tak, jak ludzkie poznanie (np. równolegle, aby znaleźć liczby „wystarczająco blisko”, a następnie wziąć kandydatów i wykonać „mniejsze” operacje).


title: Obsługa limitu czasu sesji użytkownika w aplikacjach SaaS – omówienie kilku podejść

text: Wiem, że istnieje duże prawdopodobieństwo, że zostanie oznaczony jako duplikat, ale nie mogę znaleźć dokładnie tego, czego szukam Jest to częsty problem i jestem pewien, że ma dobrze zdefiniowane rozwiązanie oparte na najlepszych praktykach # Tło 1. Pojedyncza strona Aplikacja SaaS, ma wiele funkcji przeciągania i upuszczania, użytkownik może wchodzić z nią w interakcję bez dużej komunikacji z serwerem przez pewien czas 2. Sesja serwera przechowuje tylko obiekt użytkownika, używając nietrwałego pliku cookie sesji 3. Sesja wygasa na serwerze po X godzinach 4. Niektóre rzeczy ładują się dopiero podczas logowania # Problem 1. Użytkownik pracuje w aplikacji, po zakończeniu użytkownik nie wylogowuje się, tylko utrzymuje otwartą przeglądarkę 2. Użytkownik wraca po ponad X godzinach (sesja jest nieważna na serwerze ) 3. Użytkownik wchodzi w interakcję z aplikacją bez konieczności połączenia z serwerem (przeciąganie i upuszczanie rzeczy, edytowanie tekstu...) 4. Dopiero przy następnej interakcji z serwerem (załóżmy, że nie ma automatycznego zapisu) użytkownik jest wyrzucany na stronę logowania i przegrywa niektóre z ich prac ## Możliwe rozwiązania Oto kilka rozwiązań, które mam Mam na uwadze, chciałbym dowiedzieć się, czy są jakieś inne i czy jest z nimi coś fundamentalnie nie tak. **1\. Nigdy nie wylogowuj użytkownika** * **Jak?** albo utrzymuj długą sesję, utrzymuj trwałe ciasteczko, albo pinguje javaScript "utrzymaj przy życiu" * **Zalety**: użytkownik nie musi się niczym martwić, poprawki problem dla nich * **Wady** : niezgodny z PCI, niezabezpieczony i wymaga zmian rozwojowych, np. rzeczy ładowane do sesji tylko po zalogowaniu użytkownika muszą przejść do podmodelu pubu (nasłuchiwanie zmian zdarzeń) lub mieć limit czasu pamięci podręcznej. **2\. Pamięć lokalna** * **Jak?** używać nowej pamięci lokalnej do tymczasowego przechowywania stanu po wylogowaniu, przekierowywać do strony logowania, utrzymywać po zalogowaniu * **Zalety** : Również podstawa do obsługi „pracy offline”, nie tylko obsługa limitu czasu sesji * **Wady** : trudniejsze do zaimplementowania, konieczność łączenia stanów drzewa danych, nie wszystkie przeglądarki obsługują **3\. Autozapis** Każda akcja użytkownika, która zmienia model, powinna zostać natychmiast utrwalona (lub poprzez jakąś kolejkę po stronie klienta), np. jeśli zaznaczą pole wyboru, zmienią pole tekstowe lub przeciągną i upuszczą coś, po zakończeniu utrwalaj zmiany. * **Jak?** Użyj frameworka MV** (Backbone.js / Knockout.js / Ember.js / Angular.js itp.), aby powiązać model i zachować zmiany. * **Zalety** : Wygląda na czyste rozwiązanie, sesja jest aktywna tak długo, jak użytkownik jest aktywny, żadna praca po stronie klienta nie jest wykonywana bez jej utrwalania. * **Wady** : Ostatnia czynność wykonywana przez użytkownika po utracie limitu czasu sesji. **4\. Wyloguj użytkownika po wygaśnięciu sesji** może to mieć kilka podejść 1. Zapytaj serwer "ma sesja wygasła" - to trochę haczyk 22 / kot Schrodingera, ponieważ samo pytanie do serwera przedłuża sesję (restartuje timeout), * **Jak?** Albo masz serwer, który obsługuje takie pytanie (nie znam żadnego, ale pochodzę z krainy Javy) albo możesz po prostu zachować tabelę identyfikatorów sesji i czasu ostatniego dostępu ręcznie i zapytaj serwer, przekazując identyfikator sesji jako parametr zamiast cookie, nie jestem pewien, czy jest to w ogóle możliwe, ale brzmi to niebezpiecznie, niebezpiecznie i źle projektowana strona w ogóle.login, utrzymuje się po zalogowaniu * * *Zalety** : Jeśli było takie natywne wsparcie na serwerach, brzmi to jak czyste, uzasadnione pytanie (pytanie, czy użytkownik X nadal ma sesję, czy nie bez jej odnawiania, jeśli tak) * **Wady**: Jeśli serwer nie nie obsługują go (i znowu nie wiem, czy jakikolwiek serwer lub framework ma tę funkcjonalność), to obejście ma ogromne bezpieczeństwo r potencjalnie. 2. Jedyne obejście, o którym słyszałem, to krótka sesja po stronie serwera i ping po stronie klienta, który ma maksymalną liczbę pingów * **Jak?** Krótka sesja na serwerze, klient pinguje co sesjęTimeOut/ 2, ma maksymalną liczbę ponownych prób Y. * **Zalety**: Rozwiązuje problem, szybko i brudnie * **Wady**: Czuję się jak włamanie, samodzielnie zarządzam odnowieniem sesji, zamiast pozwalać na to serwerowi 3. Zegar po stronie klienta * **Jak?** Miej zegar po stronie klienta i synchronizuj go z serwerem, uruchamiając go ponownie przy każdym żądaniu, aby był równy maksymalnemu limitowi czasu sesji serwera minus pewne uzupełnienie, gdy użytkownik nie wyśle żadnego żądania do serwera interfejs użytkownika pokazuje komunikat „sesja ma się zakończyć, czy chcesz kontynuować?” (tak jak w przypadku bankowości internetowej ) * **Zalety** : Rozwiązuje problem * **Wady** : Nie przychodzi mi do głowy nic oprócz konieczności upewnienia się, że synchronizacja działa # Pytanie, w którym prawdopodobnie czegoś brakuje powyższa analiza może zawierać kilka głupich błędów i proszę o pomoc w ich naprawieniu. Jakie inne rozwiązania mogę mieć na to?


title: Kontrola źródła: projekty, które dzielą trzecią bibliotekę, która jest wciąż rozwijana w RTC

text: nie jest to nowe pytanie dotyczące kontroli kodu źródłowego, ale Rational Team Concert firmy IBM jest nieco innym zwierzęciem niż Git, SVN itp. Mamy wiele witryn internetowych .NET, które są opracowywane przy użyciu programu Visual Studio. Każda witryna internetowa jest reprezentowana przez rozwiązanie VS. Wszystkie mają wspólną bibliotekę .NET, również w fazie rozwoju. Czy istnieje sprytny sposób na skonfigurowanie w RTC, aby repozytorium każdej witryny internetowej nie zawierało własnej kopii źródła wspólnej biblioteki? Moją pierwszą myślą było po prostu skonfigurowanie biblioteki z własnym repozytorium w RTC, a następnie sprawienie, aby każde rozwiązanie witryny „podrzędnej” odnosiło się do wspólnej biblioteki w piaskownicy. Ale jestem nowy w RTC i nie jestem pewien, czy jest to najbardziej RTC-owski sposób, ani jakie kłopoty napotkam później. Myśli? Dzięki za rzucenie światła.


title: Czy architektura zorientowana na misję (MOA) jest lepszym sposobem opisu rzeczy niż SOA?

text: Może brzmię jak troll, ale chciałbym poważnie to zrozumieć głębiej. Miejsce, w którym pracuję, zaczęło używać terminu MOA w przeciwieństwie do SOA, ponieważ uważamy, że zapewnia to większą przejrzystość i chcemy porównać go z prawdziwymi celami SOA. Architektura zorientowana na misję to podejście, w którym aplikacja jest podzielona na różne elementy misji biznesowej, przy czym baza danych, zasoby plików, funkcje wsadowe i czasu rzeczywistego są ściśle powiązane pod względem dostarczania tej części funkcjonalności. Misja pozwala programistom skoncentrować się na konkretnej funkcjonalności, aby zrobić to dobrze, i zbudować ją z możliwością skalowania tego elementu jako niezależnej jednostki w ramach całej aplikacji. Dzięki ścisłemu połączeniu danych, zasobów plikowych i logiki biznesowej osiągasz cele pracy nad bardzo dużym problemem w kawałkach wielkości kęsa. Niektóre definicje SOA mieszają to z tym, co jest zasadniczo wywołaniem metody w usłudze sieciowej, a nie prawdziwą „usługą”. Jako architekt zawsze bawiłem się, gdy wszyscy byli na tej samej stronie w zakresie SOA. Czy lepiej nazwać to „misją” czy „usługą”?


title: Odpowiedni projekt/technologie do obsługi dynamicznego formatowania ciągów?

text: ostatnio otrzymałem zadanie zaimplementowania sposobu dodania obsługi wersjonowania specyfikacji pakietów sprzętowych do jednej z naszych bibliotek. Najpierw trochę informacji o projekcie. Mamy bibliotekę sprzętową, która zawiera klasy dla każdego z różnych poleceń, które obsługujemy wysyłając do naszego sprzętu. Te moduły sprzętowe to w zasadzie tylko światła z kilkoma przyciskami i 2 lub 4 cyfrowym wyświetlaczem. Pakiety zazwyczaj mają format `{SOH}AADD{ETX}`, gdzie AA to nasz kod akcji wartownika, a DD to identyfikator urządzenia. Te specyfikacje pakietów różnią się oczywiście w zależności od polecenia, a różne wersje oprogramowania układowego, które posiadamy, obsługują różne specyfikacje. Na przykład w wersji 1 kod akcji 14 może mieć specyfikację `{SOH}AADDTEXT{ETX}`, która będzie AA = 14 literal, DD = ID urządzenia, TEXT = literalny tekst do wyświetlenia na urządzeniu. Następnie wychodzimy z wersją z dodawaniem rozszerzonego bajtu(ów) na końcu pakietu, tak jak to `{SOH}ADDTEXTE{ETX}`. Załóżmy, że w tym przykładzie pole TEKST ma stałą szerokość. Dodaliśmy teraz na końcu nowe pole, które można wykorzystać do określenia koloru lub szybkości flashowania tekstu/przycisków. Obecnie ta biblioteka java obsługuje tylko jedną wersję poleceń, najnowszą. W naszej bibliotece sprzętowej mielibyśmy klasę dla tego polecenia, powiedzmy DisplayTextArgs.java. Ta klasa miałaby pola dla identyfikatora urządzenia, tekstu i rozszerzonego bajtu. Klasa poleceń ujawniłaby metodę, która generuje ciąg (`"{SOH}AADDTEXTE{ETX}"`) przy użyciu wartości z klasy. W praktyce stworzylibyśmy klasę Args w razie potrzeby, wypełnili pola, wywołali metodę, aby uzyskać ciąg naszego pakietu, a następnie przesłał go przez CAN. Niektóre z naszych innych specyfikacji poleceń mogą się różnić dla tego samego polecenia, w tej samej wersji, w zależności od stanu środowiska wykonawczego. Na przykład innym poleceniem dla wersji 1 może być `{SOH}AA{ETX}`, gdzie ten kod akcji czyści wszystkie moduły znajdujące się za określonym urządzeniem kontrolera z ich tekstu. Możemy przeciążyć ten pakiet, aby zawierał pola opcji o wielu znaczeniach, takie jak `{SOH}AAOC{ETX}`, gdzie OC jest tekstem dosłownym, co mówi kontrolerowi, aby czyścił tylko tekst w określonym typie modułu, a pozostałe pozostawił w spokoju, lub specyfikacja może również mieć format opcji `{SOH}ADD{ETX}`, aby usunąć tekst z określonego urządzenia. Obecnie w metodzie, która generuje ciąg pakietów, ocenialibyśmy pola w klasie args, aby określić, której specyfikacji użyjemy podczas formatowania pakietu. W tym przykładzie wyglądałoby to następująco: if m_DeviceID != null then użyj {SOH}AADD{ETX} w przeciwnym razie if m_ClearOCs == true then użyj {SOH}AAOC{EXT} w przeciwnym razie użyj {SOH}AA{ETX} Rozważałem użycie XML lub bazy danych do przechowywania ciągów formatu String.format, które były połączone z numerami wersji oprogramowania układowego w jakiejś tabeli. Załadowalibyśmy je przy starcie i przekazali numer wersji oprogramowania sprzętowego, którego aktualnie używamy (mogę zapytać urządzenia o ich wersję oprogramowania, ale wersja nie jest zawarta we wszystkich pakietach jako część specyfikacji). To się dość szybko załamuje ze względu na dynamiczną naturę tego, jak wybieramy wersję polecenia, której chcesz użyć. Następnie rozważyłem użycie silnika reguł do tworzenia wyrażeń, które mogłyby być zinterpretowane w runtume, do oceny stanu klasy args, a następnie wybrania odpowiedniego ciągu formatu do użycia, ale moje krótkie spojrzenie na silniki reguł dla javy odstraszyło mnie jego złożoność. Chociaż wydaje się, że może to być realne rozwiązanie, wydaje się zbyt skomplikowane. Dlatego tu jestem. Nie powiedziałbym, że projektowanie to moja najmocniejsza umiejętność i mam problem ze znalezieniem najlepszego sposobu rozwiązania tego problemu. Prawdopodobnie nie będę w stanie radykalnie zmienić klas argumentów, ale jeśli kompromis był wystarczająco dobry, być może uda mi się przekonać szefa, że zmiana jest odpowiednia. To, czego chciałbym od społeczności, to informacje zwrotne na temat niektórych najlepszych praktyk / metodologii projektowania / API lub innych zasobów, których mógłbym użyć, aby osiągnąć: Logika określająca, który zestaw poleceń należy użyć dla danej wersji oprogramowania układowego tych poleceń, której wersji każde polecenie do użycia (na podstawie stanu klas args) Utrzymuj logikę reguł oddzieloną od aplikacji, aby uniknąć konieczności wydania wersji dla każdej wersji oprogramowania. Bądź na tyle prosty, aby nie potrzebować tygodni nauki i prób i błędów, aby skutecznie wdrożyć.


title: Wyświetlanie kontaktów urządzenia ze wskazaniem, że kontakt jest zarejestrowany w aplikacji

text: Opracowujemy aplikację mobilną, która musi pobierać kontakty z urządzenia, wyświetlać je i wskazywać, czy kontakt jest już zarejestrowany w tej aplikacji. Na serwerze mamy naszą bazę danych, a aplikacja pobiera dane za pomocą usług internetowych. Jakie będzie najlepsze podejście do realizacji powyższego scenariusza, biorąc pod uwagę wydajność. **Opcja 1:** Za każdym razem, gdy użytkownik otwiera aplikację, pobierz kontakty i wyślij listę adresów e-mail na serwer, sprawdź zarejestrowane identyfikatory e-mail i zwróć listę zarejestrowanych użytkowników na liście kontaktów. W tym podejściu za każdym razem, gdy użytkownik otwiera daną stronę, musi odczekać kilka sekund, aby załadować dane, ale kontakty będą najnowsze z urządzenia. **Opcja 2:** Po pierwszym otwarciu aplikacji przez użytkownika pobierz kontakty, wyślij całą listę kontaktów i zapisz ją w bazie danych, pobierz listę zarejestrowanych użytkowników w kontaktach, a następnie zapisz ją w lokalnej bazie danych. Od teraz dane będą pobierane z lokalnej bazy danych i wyświetlane. Gdy nowy użytkownik zarejestruje się w aplikacji, ponownie sprawdź rekordy w centralnej bazie danych i wyślij listę nowych użytkowników, którzy są w Twoich kontaktach, którzy zarejestrowali się w Twojej aplikacji. Ta lista zostanie dodana do lokalnej bazy danych. i proces trwa. W takim przypadku nowe kontakty dodane przez użytkownika nie będą aktualizowane w aplikacji, ale pobieranie i wyświetlanie rekordów byłoby szybkie. Jakie byłoby właściwe podejście? Jeśli istnieje lepszy sposób na zrobienie tego, daj mi znać.


title: Jakiego algorytmu należy użyć, aby utworzyć funkcję automatycznego planowania personelu?

text: Wyobraź sobie małą lokalną firmę (w moim przypadku psią świetlicę) zatrudniającą kilkudziesięciu pracowników na pół etatu. Celem jest automatyczne tworzenie tygodniowych harmonogramów pracy personelu. Moje pytanie dotyczy tego, jakie podejścia algorytmiczne należy zbadać w tym problemie. Należy pamiętać o wielu ograniczeniach, głównie (1) dostępności personelu i (2) potrzebach każdej zmiany, nie tylko liczbie pracowników na każdą zmianę, ale umiejętnościach potrzebnych na każdej zmianie (np. na określonej zmianie, możesz potrzebować kogoś, kto wie, jak prowadzić samochód, aby odbierać / wysadzać psy, dla kogoś innego, kogoś, kto wie, jak kąpać psy itp.). Inne ograniczenia obejmują takie rzeczy, jak unikanie lub wymaganie pewnych kombinacji personelu – być może z jednej strony z powodu konfliktów osobowości lub z drugiej strony potrzeby szkolenia przez osmozę od starszego do młodszego personelu. Należy również wziąć pod uwagę preferencje. Niektórzy pracownicy wolą poranki, inni dwa dni z rzędu, niż poniedziałek i czwartek itp. Wiemy, że nie zawsze możemy dostosować się do preferencji wszystkich. W rzeczywistości mamy hierarchię, według której pracownicy otrzymują pierwsze wskazówki dotyczące swoich wyborów. Mam przeczucie, że istnieje sposób na zredukowanie lub wyrażenie tego problemu w istniejący, już rozwiązany algorytm. Ale nie wiem, które algorytmy zbadać. Które z istniejących, konkretnych algorytmów byłyby najbardziej obiecujące?


title: Jakie są wymagania licencyjne dotyczące dostarczania Javy wraz z aplikacją?

text: Mamy aplikację w Javie. Teraz chcemy wyeksportować tę aplikację do klientów (bezpłatnie). Czy możemy wysłać JRE7 razem z aplikacją (ostrożnie, ponieważ klient może nie mieć zainstalowanej Javy). Czy jest to legalne?


title: Analiza języka w celu znalezienia ważnych słów

text: Szukam informacji i teorii, jak podejść do tematu leksykalnego. Załóżmy, że mam zbiór ciągów, który może być tylko jednym zdaniem lub potencjalnie wieloma zdaniami. Chciałbym przeanalizować te ciągi i usunąć najważniejsze słowa, być może z wynikiem wskazującym, jak prawdopodobne jest, że słowo jest ważne. Spójrzmy na kilka przykładów tego, co mam na myśli. **Przykład #1:** > "Naprawdę chcę Keuriga, ale nie stać mnie na niego!" To bardzo prosty przykład, tylko jedno zdanie. Jako człowiek łatwo widzę, że „Keurig” jest tutaj najważniejszym słowem. Również „aford” jest stosunkowo ważne, chociaż wyraźnie nie jest to główny punkt zdania. Słowo „ja” pojawia się dwa razy, ale nie jest to wcale ważne, ponieważ tak naprawdę nie przekazuje nam żadnych informacji. Mógłbym się spodziewać, że zobaczę hash słów/wyników mniej więcej tak: "Keurig" => 0,9 "afford" => 0,4 "chcę" => 0,2 "naprawdę" => 0,1 itd... **Przykład #2:* * > "Właśnie odbyłem jeden z najlepszych treningów pływackich w moim życiu. Mam nadzieję, że utrzymam swoje czasy w zawodach. Gdybym tylko pamiętał o zdjęciu mojego niewodoodpornego zegarka." Ten przykład zawiera wiele zdań, więc w całym tekście będą ważniejsze słowa. Bez powtarzania ćwiczenia punktowego z przykładu nr 1, prawdopodobnie oczekiwałbym, że wyjdą z tego dwa lub trzy naprawdę ważne słowa: „pływanie” (lub „praktyka pływacka”), „konkurencja” i „obserwacja” (lub „wodoodporność”). zegarek” lub „zegarek niewodoodporny” w zależności od sposobu obsługi łącznika). Biorąc pod uwagę kilka takich przykładów, jak byś zrobił coś podobnego? Czy istnieją jakieś biblioteki lub algorytmy (open source) w programowaniu, które już to robią?


title: Jak doskonalić umiejętności programowania jako Junior bez Seniora

text: W tej chwili mam 23 lata i pracuję jako młodszy programista u dostawcy usług oprogramowania. Chociaż jestem naprawdę zadowolony ze swojej pracy i moich kolegów, czasami chciałbym mieć kogoś, kto mógłby mi powiedzieć, co jest złego w moim kodzie (architektura itd.), dlaczego jest zły ORAZ co mogę zrobić, aby go ulepszyć . Ponieważ nie mamy już starszych programistów java (jestem ostatnim, który może programować java), chciałbym uzyskać twoją radę, jak zostać lepszym programistą. Zastrzeżenie: Czasami pytam moich kolegów, którzy nie są programistami java, czy mój kod jest „dobry” czy „zły”, ale mam wrażenie, że nie mogą ocenić, ponieważ nie są programistami java. (Prawie nic nie programują) Czy są jakieś społeczności, które chętnie udzielają mentoringu młodszym programistom? Czy pomogłoby, gdybym przeczytał mnóstwo książek? Jakieś rady, jak mogę poprawić swoje dotychczasowe umiejętności i dowiedzieć się, czy to, co robię, jest złe, czy dobre? Epilog: Nawet nie myślałem o zmianie pracodawcy w maju, kiedy zadałem to pytanie, ale to, co wszyscy powiedzieliście, utkwiło mi w głowie i zdecydowałem się zmienić w kwietniu. Teraz znalazłem nowego pracodawcę i otrzymałem stanowisko junior Java developer w nowej firmie. Mam nadzieję, że wraz z nowym pracodawcą mój rozwój zawodowy będzie w przyszłości lepszy. Chciałem tylko podziękować za wszystkie rady.


title: Jak stworzyć połączony interfejs dla dwóch logicznie niezależnych modułów?

text: Mam problem z wymyśleniem dobrego sposobu na uporządkowanie interfejsów dla dwóch modułów, które są logicznie niezależne, ale których implementacje można łączyć w celu uzyskania wydajności lub wydajności. Moja konkretna sytuacja to zastąpienie oddzielnych modułów kolejkowania i rejestrowania w aplikacji routingu wiadomości połączoną implementacją opartą na bazie danych (nazwijmy to `DbQueueLog`). Dla `DbQueueLog` łatwo jest zaimplementować zarówno interfejsy `IQueue` jak i `ILogger`, dzięki czemu klienci starych modułów kolejkowania i rejestrowania mogą z niego bezproblemowo korzystać. Wyzwanie polega na tym, że najbardziej wydajna i wydajna implementacja `DbQueueLog` polega na połączeniu metod `EnqueueMessage(Message m)` i `LogMessage(Message m, List<LogParams> p)` w metodę `EnqueueAndLogMessage(Message m, List<LogParams > p)` metoda minimalizująca liczbę wywołań wieloprocesowych baz danych oraz ilość danych zapisanych na dysku. Mógłbym stworzyć nowy interfejs `IQueueLog` za pomocą tych nowych metod, ale nie czuję się komfortowo z tym, co by to oznaczało, gdyby przyszła iteracja aplikacji przeniosła się z powrotem do oddzielnych modułów kolejkowania i rejestrowania. Czy istnieją jakieś podejścia projektowe do tej sytuacji, które pozwoliłyby mi teraz zbudować wydajną, wydajną implementację `DbQueueLog` bez stałego łączenia modułów kolejkowania i rejestrowania aplikacji? Edycja: aplikacja jest zbudowana w systemie Windows przy użyciu języka C# na wypadek, gdyby istniały jakiekolwiek techniki specyficzne dla platformy, które mogą być dostępne.


title: Jak stworzyć generator losowy

text: Jak można wdrożyć generator losowy? Nie mówię o wywołaniu metody języka _mathRandom()_, ale implementacji procedur, które prowadzą do generowania liczb całkowicie losowych.


title: Czy użycie debuggerów ma wpływ na wydajność programistów?

text: > **Możliwy duplikat:** > Czy umiejętności debugowania są ważne, aby zostać dobrym programistą? Jestem młodym programistą Java i systematycznie korzystam z debuggera Netbeans. W rzeczywistości często rozwijam swoje aplikacje podczas debugowania krok po kroku, aby od razu zobaczyć, czy mój kod działa. Czuję, że spędzam dużo czasu na programowaniu w ten sposób, ponieważ użycie debuggera wydłuża czas wykonywania i często czekam, aż moja aplikacja przeskoczy z punktu przerwania do drugiego (tak dużo, że mam czas, aby zadać to pytanie). Nigdy nie nauczyłem się korzystać z debuggera w szkole, ale w pracy od razu powiedziano mi, żebym korzystał z tej funkcjonalności. Zacząłem uczyć się go używać dwa lata temu i nigdy nie otrzymałem żadnych kluczowych wskazówek na ten temat. Chciałbym wiedzieć, czy istnieją pewne zasady, których należy przestrzegać, aby efektywnie korzystać z debugera. Zastanawiam się też, czy korzystanie z debuggera jest w końcu dobrą praktyką? A może to strata czasu i muszę przestać teraz ten zły nawyk?


title: Czy debugowanie to strata czasu?

text: Pracuję nad wieloma projektami dla przyjemności, więc mam swobodę wyboru, kiedy chcę ukończyć projekt i nie ograniczają mnie terminy. Dlatego, gdybym chciał, mógłbym podążać za tą filozofią: > Kiedy natrafisz na błąd, nie debuguj. Zamiast tego poświęć czas na poznawanie > tematów związanych z błędem z podręczników i pracuj nad innymi projektami, aż > pewnego dnia będziesz mógł wrócić do błędu i natychmiast go rozwiązać dzięki > zgromadzonej wiedzy. Jednak może ta „filozofia” jest zła, ponieważ 1. debugowanie jest umiejętnością, którą należy ćwiczyć, aby gdy muszę zakończyć projekt w terminie, szybko nabyłem umiejętności niezbędne do debugowania. 2. wpatrywanie się w wiersze kodu i _zmaganie się_ z ich zrozumieniem, gdy debugowanie czyni cię znacznie lepszym programistą niż pisanie nowych wierszy kodu. 3. debugowanie nie jest stratą czasu z jakiegoś powodu, o którym mam nadzieję, że mi powiesz.


title: Czy twoje historie zawierają zadania z różnych dyscyplin? Jak planujesz wydajność?

text: Moja organizacja zajmuje się projektami internetowymi i wykorzystuje kilka dyscyplin, takich jak backend dev, frontend, BA, UX, projektowanie graficzne, QA. Naciskaliśmy, aby mieć zadania dla każdej dyscypliny w naszych sprintach z wyraźnymi zależnościami (nie można zbudować strony bez kompozycji, nie można wykonać kompozycji bez przewodów itp.). Słyszałem, że inne organizacje mówią, że scrum jest przeznaczony tylko do zadań programistycznych. Czy szczekamy na niewłaściwe drzewo? A jeśli nie, to czy istnieją dobre narzędzia do planowania wydajności, gdy tylko określone zasoby mogą wykonywać określone zadania?


title: Jak często doświadczeni programiści mają problemy z doprowadzeniem kodu do zamierzonego celu?

text: Nie mam doświadczenia w programowaniu (mniej niż rok) i ostatnio zaczynam się zniechęcać, głównie do tego, że nie jestem w stanie rozwiązywać problemów własnym kodem (nie zapominając o nawiasach czy problemach ze składnią, ale bardziej logicznych). Chciałem tylko wiedzieć, czy jest to coś, co zniknie wraz z praktyką i czasem, czy też będzie tylko gorzej, gdy moje programy staną się bardziej złożone?


title: Chcę zbudować maszynę wirtualną, czy są jakieś dobre referencje?

text: Chcę zbudować maszynę wirtualną jako niezależny od platformy sposób uruchamiania kodu gry (zasadniczo skryptów). Maszyny wirtualne, które znam w grach, są raczej stare: Z-Machine firmy Infocom, SCUMM firmy LucasArts, Quake 3 firmy id Software. Jako programista .net jestem zaznajomiony z CLR i zapoznałem się z instrukcjami CIL, aby uzyskać przegląd tego, co faktycznie wdrażasz na poziomie maszyny wirtualnej (w porównaniu z poziomem języka). Bawiłem się też trochę w asemblerze 6502 w ciągu ostatniego roku. Chodzi o to, że teraz, gdy chcę to zaimplementować, muszę kopać nieco głębiej. Wiem, że istnieją maszyny wirtualne oparte na stosie i rejestrach, ale tak naprawdę nie wiem, która z nich jest lepsza w czym i czy jest więcej lub hybrydowych podejść. Muszę zająć się zarządzaniem pamięcią, zdecydować, które typy niskopoziomowe są częścią maszyny wirtualnej i muszę zrozumieć _dlaczego_ rzeczy takie jak ldstr działają tak, jak to robią. Moją jedyną książką referencyjną (poza materiałami Z-Machine) jest CLI Annotated Standard, ale zastanawiam się, czy istnieje lepszy, bardziej ogólny/podstawowy wykład dla maszyn wirtualnych? Zasadniczo coś takiego jak Dragon Book, ale dla maszyn wirtualnych? Znam sztukę programowania komputerowego Donalda Knutha, która wykorzystuje maszynę wirtualną opartą na rejestrach, ale nie jestem pewien, na ile ta seria ma nadal zastosowanie, zwłaszcza, że wciąż jest niedokończona? Wyjaśnienie: celem jest zbudowanie wyspecjalizowanej maszyny wirtualnej. Na przykład Z-Machine firmy Infocom zawiera kody operacyjne do ustawiania koloru tła lub odtwarzania dźwięku. Muszę więc dowiedzieć się, ile idzie do maszyny wirtualnej jako OpCodes vs. kompilator, który pobiera skrypt (język TBD) i generuje z niego kod bajtowy, ale do tego muszę zrozumieć, co naprawdę robię. * * * ¹ Wiem, nowoczesna technologia pozwoliłaby mi po prostu interpretować w locie język skryptowy wysokiego poziomu. Ale gdzie jest w tym zabawa? :) Jest też trochę trudno googlować, ponieważ maszyny wirtualne są obecnie często kojarzone z wirtualizacją systemu operacyjnego typu VMWare...


title: Czy korzystanie z technik z kodu OpenSource narusza prawa autorskie?

text: Jeśli przeczytam kod źródłowy programów w podobnej dziedzinie zastosowań, jak ta, nad którą pracuję (np. symulacja wyścigów samochodowych 3D) i znajdę niektóre techniki lub wzorce, których używają lepiej niż te, których używam, i użyję ich w moim projekcie - czy to kradzież? (Żaden kod źródłowy nie zostanie w żaden sposób bezpośrednio skopiowany).


title: Czy implementacja algorytmów poprawia Twoje umiejętności programistyczne?

text: Od jakiegoś czasu uczę się samodzielnie algorytmów i struktur danych i obecnie się tym cieszę. Ilekroć rozumiem algorytm, zwykle próbuję zakodować go od zera dla zabawy i zawsze odkryję jakąś logikę, o której nigdy wcześniej nie myślałem. Nie jestem tego pewien, ale zawsze myślę, że kiedy koduję algorytmy, może ćwiczę swoje umiejętności programowania. Czy to prawda? Wiem, że są ważne, ale czy moje umiejętności programowania naprawdę poprawią się dzięki ich kodowaniu?


title: Jak ważne jest studiowanie algorytmów i teorii, aby zostać świetnym programistą?

text: > **Możliwy duplikat:** > Czy powinienem nadal inwestować w struktury danych i algorytmy? Jestem studentem CS. Chcę zostać naprawdę świetnym programistą, co muszę zrobić, aby zostać świetnym programistą? Poza pisaniem dużej ilości kodu, słyszałem, że studiowanie algorytmów i teorii (logiki!) jest pomocne. Co polecasz, aby stać się najlepszym? Co muszę przeczytać? Czego potrzebuję się uczyć?


> **Możliwy duplikat:** > Jak ważne jest studiowanie algorytmów i teorii, aby zostać > świetnym programistą? Dzisiaj nauczyłem się algorytmu szybkiego sortowania. Wątpię, czy kiedykolwiek zaimplementuję moją własną wersję, ponieważ C# ma własną wbudowaną metodę Sort dla list i tablic. Jak ważna jest nauka algorytmów dla programistów języków wysokiego poziomu? W moim przykładzie nie odniosłem żadnych korzyści ze znajomości algorytmu, ale być może mój przykład był zbyt trywialny, aby był dokładny?


title: Licencja na oprogramowanie: Open Source, ale bez dystrybucji (za darmo lub dla zysku)

text: Napisałem program w PHP. Chcę, aby ludzie mogli używać kodu do uczenia się, a nawet umieszczania bitów we własnych aplikacjach, ale chcę również zachować prawo do jego sprzedaży i jasno powiedzieć, że inni nie mogą rozpowszechniać kopii ani za darmo, ani dla zysku. Nie używałem niczyjego kodu, więc nie muszę się martwić o kompatybilność licencji. Która licencja jest do tego odpowiednia? Wiem, że nie mogę powstrzymać ludzi przed ignorowaniem licencji, ale chcę tylko, aby przynajmniej wiedzieli, że ona tam jest i wiedzieli, że robią coś złego, jeśli spróbują. Nie mogę znaleźć nigdzie, które wyjaśniałoby licencje w prostym języku angielskim i tak, próbowałem przeczytać licencje GNU i BSD, ale nie mogę tego zrozumieć. Dziękuję. Ok, oto wyjaśnienia, o które prosili inni: zamierzam sprzedać ten program za bardzo tanio. Ludzie mogą używać tyle kodu, ile chcą z niego, o ile najpierw kupili program i nie czerpią korzyści z mojego kodu. Nie miałbym nic przeciwko, gdyby ludzie po prostu wzięli całość, dodali i ulepszyli, ale wtedy ludzie nie byliby szczerzy i po prostu dodaliby coś i oddali za darmo, a wtedy nikt nie kupiłby mojego produktu. Przypuszczam, że powinienem po prostu pozwolić ludziom je mieć i poprosić o datki. Więc może powinienem to na licencji GPL lub BSD. EDYCJA: Rozumiem, dlaczego wszyscy się mylą. Jest to sprzeczne, ale rzecz w legale polega na tym, że wszystko wydaje się czarne lub białe. Staram się osiągnąć szarą strefę. Chcę, żeby ludzie kupowali tę rzecz ode mnie, a nie kopiowali i rozdawali innym, a nawet używali jej części. Mówiąc „używaj części”, to, co powiedziałbym, gdyby ktoś zapytał mnie od niechcenia, byłoby „po prostu rozsądne”. Więc w zasadzie nie używaj większości mojego kodu w swojej pracy, a potem całkowicie przyćmij to, co zrobiłem, ponieważ będzie ci łatwo, tak jak ja już wykonałem większość brudnej roboty! To znaczy, oczywiście, użyj mojego skryptu DB connect w swoim projekcie, nie obchodzi mnie to. LUB... użyj całego kodu i dodaj do niego! Ale tylko do użytku osobistego i nie waż się zaczynać go rozdawać, ponieważ będę na tym zarabiał, a to całkowicie podkopuje moją pracę. I byłoby miło pokazać mi swoje dodatki, a ja dam uznanie, ale najważniejszą rzeczą jest nie redystrybucja mojego oprogramowania, na którym muszę zarabiać na życie. Trudno przełożyć ten sentyment na język prawniczy. I po prostu nie rozumiem wszystkich tych licencji.


title: Czy najlepsze praktyki internetowe są tak ważne, jeśli są zawsze łamane przez duże firmy?

text: Zwykle istnieje kilka zasad i najlepszych praktyk, które pomagają zoptymalizować stronę internetową, pozyskać nowych klientów i ogólnie sprawić, że korzystanie z niej będzie szybkie, płynne i przyjemne, przy jednoczesnym (czasem) zmniejszeniu obciążenia serwera. Ponadto zwykle największe firmy nie zadają sobie trudu, aby korzystać z tych najlepszych praktyk. Poza kilkoma firmami (jak Google) na największych serwisach możemy zobaczyć: * układy tabel, niezminifikowany JavaScript, brak sprite'ów CSS tam, gdzie powinny być, kilka plików CSS, natrętny JavaScript nawet w sytuacjach, w których łatwo było być dyskretnym , wywołania plików JavaScript w `<head/>` itp. * bezsensowne błędy, irytujące wyskakujące okienka, formularze rejestracyjne z ogromną ilością pól do wypełnienia, problemy z UX na rejestrze¹, głupie pytania i sytuacje uniemożliwiające korzystanie ze strony², mylące sytuacje w kluczowych częściach witryny³, wielokrotne przekierowania, powolne strony itp. Z jednej strony firmy te płacą ogromne pieniądze na rozwój, optymalizację⁴ i hostowanie swoich witryn, ponieważ ich sukces zależy częściowo⁵ lub całkowicie⁶ od tego; z drugiej strony stale łamią najlepsze praktyki, a osoby opowiadające się za tymi najlepszymi wyjaśniają, że ich przestrzeganie pomaga osiągnąć lepszy UX i szybsze strony internetowe o mniejszym wpływie na środowisko (co może być nie bez znaczenia na stronach hostowanych na tysiącach serwerów) . W takim przypadku logiczne jest pytanie: * Jeśli duże firmy, które naprawdę odnoszą sukcesy, mają dużo pieniędzy na swoje strony internetowe i kompetentnych pracowników, a dbające o optymalizację stron internetowych stale łamią te dobre praktyki, ** to te najlepsze praktyki są prawdziwe?** * Innymi słowy, jeśli te sprawdzone metody są tak ważne i bardzo pomagają w optymalizacji witryn, **dlaczego te firmy się nimi nie przejmują?** Weźmy za przykład witrynę Dell.com. Jestem prawie pewien, że zatrudniają najlepszych z najlepszych do tworzenia swojej strony głównej. Ich strona główna wykorzystuje układy tabel. Czy to oznacza, że ludzie, którzy twierdzą, że układy stołów są złe, są w błędzie? Czy to oznacza, że najlepsi z najlepszych zatrudnionych przez firmę Dell są niekompetentni? * * * ¹ Pierwszy przykład: eBay uniemożliwia podczas rejestracji _wklejanie_ twojego adresu e-mail w obu polach, co powoduje, że korzystanie z formularza rejestracyjnego nie ma żadnego powodu, z wyjątkiem denerwowania użytkowników; najlepszą praktyką byłoby zabronić _kopiowania_ , ale zezwolić na wklejanie. Drugi przykład: Microsoft Live ogranicza długość hasła do 16 znaków, bez wyraźnego powodu. ² Na przykład, gdy nie jesteś w Amazon przez bardzo długi czas, mówi, że hasło jest nieprawidłowe, a następnie, aby je odzyskać, prosi o informacje o ostatniej transakcji, co czyni konto bezużytecznym, jeśli nigdy wcześniej nie robiłeś żadnej transakcji z kontem. ³ Na przykład firma Dell uniemożliwia zamówienie serwera do montażu w szafie serwerowej bez żadnego dysku twardego, co może być całkowicie uzasadnione, jeśli masz już dyski twarde, które chcesz ponownie wykorzystać. ⁴ Taka optymalizacja obejmuje częściowe opróżnianie w celu szybszego wysyłania najważniejszych treści, badania nad zależnością między czasem oczekiwania na wczytanie stron a liczbą osób korzystających ze strony itp. ⁵ W przypadku Della, Microsoftu i innych. ⁶ Jak w przypadku eBay lub innych firm internetowych.


title: tworzenie stron internetowych bez znajomości skryptów lub programowania po stronie klienta?

text: > **Możliwy duplikat:** > Ile HTML i CSS powinien wiedzieć programista po stronie serwera? Co się stanie, jeśli ktoś będzie chciał zostać web developerem, ale nie jest zainteresowany nauką skryptowania lub programowania po stronie klienta. Zadaję to pytanie, bo myślę, że nie jest to możliwe, ale kilka dni temu pokłóciłem się z jednym z moich sztywnych znajomych programistów. Nie mogłem sprawić, by zrozumiał. Zgadzacie się ze mną? Uważam, że bez dobrej wiedzy po stronie klienta nie da się być dobrym web developerem.


title: C# Dev - próbowałem Lisps, ale nie rozumiem

text: Po kilku miesiącach nauki i zabawy z Lispem, zarówno CL, jak i odrobiną Clojure, nadal nie widzę przekonującego powodu, aby pisać w nim cokolwiek zamiast C#. Naprawdę chciałbym mieć jakieś przekonujące powody, lub aby ktoś wskazał, że **brakuje mi czegoś _naprawdę dużego_**. Mocne strony Lisp (według moich badań): * Zwarta, ekspresyjna notacja - Bardziej niż C#, tak... ale wydaje mi się, że jestem w stanie wyrazić te idee również w C#. * Niejawna obsługa programowania funkcjonalnego - C# z metodami rozszerzenia LINQ: * mapcar = .Select( lambda ) * mapcan = .Select( lambda ).Aggregate( (a,b) => a.Union(b) ) * car/first = .First() * cdr/rest = .Skip(1) .... itd. * Obsługa lambda i funkcji wyższego rzędu - C# ma to, a składnia jest prawdopodobnie prostsza: * "(lambda (x) ( body ))" versus "x => ( body )" * "#(" with "%", "%1", "%2" jest fajne w Clojure * Wysyłanie metody oddzielone od obiektów - C# ma to za pomocą metod rozszerzających * Multimethod wysyłka - C# nie ma tego natywnie, ale mógłbym zaimplementować to jako wywołanie funkcji w kilka godzin * Code is Data (i Macros) - Może nie "dostałem" makr, ale nie widziałem ani jednego przykład, w którym idea makra nie mogła zostać zaimplementowana jako funkcja, nie zmienia to "języka", ale nie jestem pewien, czy to jest mocna strona * DSLs - Można to zrobić tylko poprzez kompozycję funkcji ... ale to działa * Niewpisane programowanie "eksploracyjne" - dla s tructs/classes, autowłaściwości C# i "object" działają całkiem dobrze i możesz łatwo eskalować do silniejszego pisania w miarę postępów * Działa na sprzęcie innym niż Windows - Tak, więc? Poza studiami znam tylko jedną osobę, która nie używa Windowsa w domu, a przynajmniej maszyny wirtualnej Windows na *nix/Mac. (Z drugiej strony, może to jest ważniejsze niż myślałem i właśnie wyprano mi mózg...) * REPL dla projektowania oddolnego - Ok, przyznaję, że jest naprawdę fajny i brakuje mi tego w C#. Czego mi brakuje w Lispie (ze względu na mieszankę C#, .NET, Visual Studio, Resharper): * Przestrzenie nazw. Nawet w przypadku metod statycznych lubię wiązać je z "klasą", aby kategoryzować ich kontekst (Clojure wydaje się mieć to, CL nie wydaje się.) * Świetne wsparcie w czasie kompilacji i projektowania * system typów pozwala mi określić "poprawność" struktur danych, które przekazuję * wszystko, co jest błędnie napisane, jest podkreślane w czasie rzeczywistym; Nie muszę czekać do czasu uruchomienia, aby wiedzieć * ulepszenia kodu (takie jak użycie podejścia FP zamiast imperatywnego) są automatycznie sugerowane * Narzędzia programistyczne GUI: WinForms i WPF (wiem, że Clojure ma dostęp do bibliotek Java GUI, ale są dla mnie całkowicie obce.) * Narzędzia debugowania GUI: punkty przerwania, wkraczanie, przechodzenie, inspektorzy wartości (tekst, xml, niestandardowe), zegarki, debugowanie po wątku, warunkowe punkty przerwania, okno stosu wywołań z możliwość przeskoczenia do kodu na dowolnym poziomie stosu * (Szczerze mówiąc, mój stint z Emacs + Slime wydawał się zapewniać część tego, ale jestem stronniczy w podejściu opartym na VS GUI) Naprawdę podoba mi się hype otaczający Lisp i dałem mu szansę. Ale czy jest coś, co mogę zrobić w Lispie, czego nie mogę zrobić tak dobrze w C#? Może być nieco bardziej gadatliwy w C#, ale mam też autouzupełnianie. czego mi brakuje? Dlaczego powinienem używać Clojure/CL?


title: Jak wspierać decyzje projektowe?

text: Są złe decyzje projektowe. Na tym samym boisku bycie starszym inżynierem może być czasami trudne. Młodzież ma niesamowite i radykalne pomysły, nad którymi starszy inżynier zastanawia się, czy sprawdzi się w terenie i czy warto poświęcić cały ten wysiłek. Doświadczenie sugeruje, że są to rozwiązania krótkoterminowe, które na dłuższą metę są bardzo drogie. Jednak może być trudno przekonać inaczej. Jak sobie radzić w tym scenariuszu? **Wzory** to dobry początek, jednak potrzeba trochę doświadczenia, aby dowiedzieć się, gdzie zastosować wzór, ponieważ nowicjusz może zmienić problem, aby dopasować wzór. Również wzory nie pomagają na grubszych/komponentowych poziomach. Innym pomysłem jest **odwołanie się do dobrego projektu**, który _działa w terenie_ i znajduje się poza organizacją. Problem polega na tym, że czasami narysowanie paraleli może być trudne. Czy są jakieś inne pomysły?


title: Czy licencja BSD jest zgodna z Apple AppStore?

text: Chciałbym wiedzieć, czy jest możliwe stworzenie aplikacji do sprzedaży w Apple AppStore, która jest połączona (podczas kompilacji) z biblioteką na licencji BSD.


title: Wpływ przeprojektowania witryny na Google Analytics

text: Właśnie ukończyłem przeprojektowanie witryny, która obecnie korzysta z Google Analytics. Chcę nadal korzystać z Google Analytics, ale nie jestem pewien, czy powinienem utworzyć nowy profil dla nowej witryny, czy po prostu użyć starego numeru UA. Nowa strona internetowa ma zupełnie inną strukturę adresów URL, a wiele treści zostało zaktualizowanych/usuniętych/dodanych.


title: Mam jedno popołudnie, aby wychwalać zalety platformy .NET w porównaniu z VB6... co mam powiedzieć?

text: Moja firma to mała dwudziestoosobowa firma inżynierska. Całe tutaj programowanie aplikacji jest wykonywane w VB6 przez dwie osoby, które nauczyły się VB6 od podstaw podczas pracy tutaj od ponad 25 lat, oraz przeze mnie. W rezultacie kod VB6 jest pełen przerażających zapachów kodu, takich jak mnóstwo zmiennych wpisywanych łańcuchowo, strasznie długie funkcje, setki publicznych zmiennych globalnych (niektóre z nich są preferowane w stosunku do przekazywania argumentów i zwracania wartości), a nie pojedynczy obiekt klasa. Refaktoryzacja jest prawie niemożliwa, a wszelkie zmiany wymagają zbytniego przekopywania się przez kod, a raz wykonane, zawsze wydają się wprowadzać więcej dziur. Mój szef zdaje sobie sprawę, że VB6 to martwa technologia i chętnie wysłucha moich próśb o przejście na .NET w celu rozwoju. Przechodzimy do .NET, ale on postrzega to jako sposób na zachowanie kompatybilności z nowszymi systemami operacyjnymi Windows, a nie jako sposób na pisanie lepszego kodu. Jak najlepiej wyjaśnić zalety języka .NET w porównaniu z VB6, poza samą aktualnością? Co mogę powiedzieć, aby podkreślić, że przejście na .NET jest dobrym posunięciem _ale także_, że oznacza to, że nasz obecny paradygmat programowania również powinien zacząć się zmieniać? Gdy tylko mój szef usłyszy, że Visual Basic .NET wygląda jak VB6, wiem, że jego pierwszym odruchem będzie po prostu przekonwertowanie naszego starego kodu na .NET. Rozumiem, że nie da się zmienić czyjegoś nastawienia w ciągu jednego popołudnia, ale jak mam przynajmniej przekonać mojego szefa zajmującego się montażem, że takie rzeczy jak zmienne o silnym typie, niestandardowe klasy i pola prywatne nie są _całkowitą_ stratą czasu i energia?


title: Dlaczego drzewa rosną w dół?

text: Dlaczego drzewa rosną w dół w informatyce? Mam wrażenie, że wraca do drukarki i że program przemierzający drzewo najpierw drukuje korzeń i używa pojęcia stosu papieru bez dna do wyrażenia nieokreślonych poziomów rekurencji, które można napotkać. Odnośniki: > Drzewa rosną w dół, mają korzenie u góry strony, a liście w dół > OD ŚWIĘTYCH WOJN I PROŚBY O POKÓJ. > zgodnie z konwencją, drzewa są rysowane rosnąc w dół Z artykułu Wikipedii o strukturach danych drzew. > Prawdziwe drzewa rosną od korzenia w górę do nieba, ale informatyka > drzewa rosną od korzenia w dół Z notatek z wykładu Davida Schmidta.


title: darmowe jak w darmowym piwie

text: Kilka lat temu (dokładniej w 1998 r.) zamieszanie, jakie anglojęzyczni ludzie zaczęli robić z terminem **wolny** w odniesieniu do oprogramowania, skłoniło niektórych członków fundacji wolnego oprogramowania do stworzenia nowego terminu: **open source** ( http://www.gnu.org/philosophy/free-software-for-freedom.html) Wielką obawą było to, że ludzie nie rozumieli wolnego jak wolnego słowa, wolnego jak darmowe piwo (patrz wikipedia: http:/ /en.wikipedia.org/wiki/Free_and_open_source_software ). Wolność odnosi się tutaj do wolności używania i dzielenia się twoim oprogramowaniem, w sposób, który jest sprzeczny z własnościowym oprogramowaniem "prawa autorskiego" (i opatentowanym). Został po raz pierwszy wprowadzony przez Richarda Stallmana w 1986 roku. Rdzeniem jest zestaw wolności: * Wolność 0: Wolność uruchamiania programu w dowolnym celu. * Wolność 1: Wolność studiowania, jak działa program i zmieniania go, aby robił to, co chcesz. * Wolność 2: Wolność rozpowszechniania kopii, dzięki czemu możesz pomóc bliźniemu. * Wolność 3: Swoboda ulepszania programu i publicznego udostępniania swoich ulepszeń (i ogólnie zmodyfikowanych wersji), aby cała społeczność skorzystała. Cóż, wszyscy o tym wiemy (przynajmniej ci, którzy śledzą tę dyskusję od zawsze). Moim zdaniem termin open-source wyjaśnił nam. Ale to już zapewniała Freedom 1. W innych językach (jak na przykład hiszpański czy portugalski) możemy powiedzieć free jako libre lub livre. I inne znaczenie darmowe, jak w darmowym piwie, jak gratis. Tak więc dla innych nigdy nie było zamieszania (właściwie tylko podczas czytania angielskich artykułów na ten temat). Wolność numer 2 gwarantuje mi prawo do redystrybucji kopii do woli. Rozumiem, że ponieważ nie muszę płacić właścicielowi żadnych tantiem za każdą kopię, którą rozdaję moim przyjaciołom lub studentom. I oczywiście się z tym zgodzimy. To ostatecznie oznacza, że **mogę** dawać darmowe (gratis) kopie, lub też mogę pobierać opłaty za kopie (wsparcie, media, itp.). Otóż, jeśli coś można rozdać za darmo (gratis), to za darmo (gratis). Bez względu na to, czy ktoś lub jakieś przedsiębiorstwo chce sprzedawać, nadal masz sposoby (strony, pliki do pobrania, znajomi itp.), aby uzyskać to za darmo (bezpłatnie). Tak więc, z mojego nieanglojęzycznego punktu widzenia, mamy tutaj 3 różne rzeczy. Najważniejsza, bez wątpienia, jest wolna (wolność, wolność, libre, livre, więc możesz wszystko, co chcesz) jakość oprogramowania. Drugim jest bycie open-source (dzięki czemu możesz zobaczyć kod w środku). Ostatni **JEST** kolejna **WSPANIAŁA** jakość, czyli **ISTNIEJE** darmowe (bezpłatne) oprogramowanie. Bycie wolnym (gratis) nie oznacza, że jest ono przymusowo wolne (gratis). Możesz mieć ludzi, którzy sprzedają, płacą i odbierają/wysyłają za darmo. Jednak to jest jakość. Nie rozumiem jednak, dlaczego po tylu latach ludzie z FSF wciąż ostrożnie mówią, że jest też darmowe (darmowe) oprogramowanie. Tak, za darmo jak w darmowym piwie. Jeśli jest to cecha, po co ją ukrywać? Tylko po to, by zapobiec zamieszaniu? Cóż, powiem ci nowość: zamieszanie powstało już od początku. Żyłem i interesowałem się tym tematem, kiedy się zaczął, i pamiętam wiele dyskusji o tym, że wolność jest wolna od opłat lub ograniczeń. Po wielu konsultacjach prawnicy pomogli napisać pierwszą „licencję” w terminach, które mogłyby być użyte w sądzie, wprowadzili termin „copyleft” i „jasno”, że za darmo nie chodzi o cenę. W tym czasie, ze względu na nowość ok, zgadzam się na podkreślenie tej połówki darmowej. Ale teraz to już koniec. Czy nie czas powiedzieć ludziom, że mamy RÓWNIEŻ za darmo, jak za darmo. Trzy cechy są lepsze niż dwie: livre/gratis/open. Dlaczego więc nie powiemy ludziom, że wolne oprogramowanie może być po prostu wolne? Zredagowano: Bardziej obiektywnie: 1- Czy wolne (wolnościowe) oprogramowanie jest koniecznie wolne (darmowe)? 2- Jest darmowym (darmowym) oprogramowaniem koniecznie wolnym (wolność). Pierwsze z nich to ważne pytanie, ponieważ drugie służy tylko do szybkiego pisania (wszyscy znamy odpowiedź). Kolejne pytanie, które pojawiło się w dyskusji: Czy gratis (gratis) to jakość? (Założyłem, że jako oczywiste we wstępie do pytania)


title: Czy widzisz zastosowanie „Programowania arkuszy kalkulacyjnych”?

text: Jakiś czas temu natknąłem się na koncepcję wykorzystania arkuszy kalkulacyjnych (mam na myśli komórki i formuły, a nie kod Makro) jako sposobu na określenie logiki programowania. Pomysł polega na: * utworzeniu arkusza kalkulacyjnego z wyraźnie zdefiniowanym przepływem obliczeń (które czasami lepiej pasują do paradygmatu „przepływu danych” w arkuszach kalkulacyjnych zamiast stylów programowania proceduralnego lub obiektowego) * zdefiniuj komórki wejściowe * zdefiniuj komórki wyjściowe * skompiluj całość w samodzielną klasę wykonywalną (lub funkcję, procedurę, ...) * używaj go w normalnym kodzie w szerszym projekcie oprogramowania * używaj arkusza kalkulacyjnego jako kodu źródłowego, który ma być utrzymywany w czasie Pomysł polega na użyciu tej techniki w przypadku problemów naprawdę pasuje do modelu i że doprowadzi to do naturalnie dobrze udokumentowanego i łatwego w utrzymaniu kodu. Ciekawe, czy miałeś do czynienia z tą techniką i po co. Przykładową aplikacją, która przyszła mi do głowy, są kalkulatory taryf ubezpieczeniowych, które zazwyczaj są sporządzane, tworzone i weryfikowane przez aktuariuszy w arkuszach Excela, a dopiero później kodowane (to bolesny proces) w jakiejś trudnej do utrzymania logice programistycznej.


title: czego powinienem użyć z uruchomieniem crona lub uzyskaniem przez zapytanie?

text: Mam tabelę która ma ilość,data wejścia i pole dnia, które ma się zmniejszać z dnia na dzień. więc co jest lepsze codzienne uruchamianie zadania cron, aby zmniejszyć ilość. lub lub w momencie pobierania danych oblicz kwotę dzienną za pomocą pola daty , mogę uzyskać nie. dnia > kwota = kwota-ilość dnia * rano, więc co jest dobre Proszę zasugerować ?


title: Wzorce projektowe — dlaczego potrzebne są interfejsy?

text: OK. Uczę się wzorców projektowych. Za każdym razem, gdy widzę, jak ktoś koduje przykład wzorca projektowego, używa interfejsów. Oto przykład: http://visualstudiomagazine.com/Articles/2013/06/18/the-facade-pattern-in-net.aspx?Page=1 Czy ktoś może mi wyjaśnić, dlaczego interfejsy w tym przykładzie były potrzebne do zademonstrować wzór elewacji? Program zadziała, jeśli przekażesz klasy do fasady zamiast do interfejsu. Czy to znaczy, że nie mam interfejsów


title: Prosta strona internetowa z frameworkiem GPL V3

text: Piszę oprogramowanie webowe oraz prostą stronę internetową ("Strona główna", "Kim jesteśmy", "Kontakt"). Dla prostej strony internetowej używam objętego frameworkiem GPL v3. Użytkownik surfuje po stronie, wysyła e-maile, pobiera informacje itp. Powtarzam: prosta strona, a nie Joomla czy Wordpress. 1) Czy strona będzie objęta GPL? Nie modyfikuję frameworka. Korzystam z jego zajęć na innych zajęciach... (OOP). 2) W punkcie 1, jeśli tak, czy muszę dodać (np. w stopce) nazwę frameworka i jego link? 3) Muszę zezwolić na pobranie całej witryny, aby przestudiować kod (nic, czym programista nie jest zainteresowany)? Np. umieszczenie go na Github? 4) Jeśli 2 jest NIE, jak możesz „zrozumieć”, że używamy tego frameworka? W efekcie żadne wiersze php nie są widoczne dla przeglądarki... Nie możesz zrozumieć, że kiedy wciśniesz "Wyślij e-mail" strona wywołuje `$this->send($email)`. Jeśli napiszesz do mnie maila "Czy używasz frameworka XXX"? Mogę odpowiedzieć NIE.


title: przeglądanie za pomocą curl zamiast firefox (lub dowolnej innej przeglądarki)

text: Moja firma posiada 2 Intranety (jeden techniczny i jeden komercyjny), jestem administratorem intranetu technicznego. Musimy sprawdzić, czy klient ma umowę na oferowaną przez nas usługę. W związku z tym, dla ułatwienia obsługi (dla nas w dziale technicznym) zrobiłem przycisk w naszym Intranecie, który odczytuje dane przez `ajax->php->curl->dom` z komercyjnego intranetu, pobiera typ umowy, a jeśli jest prawidłowy, drukuje kontrakty w znaczniku DIV. Nie musimy więc otwierać nowej zakładki, wyszukiwać klienta, przeglądać wszystkich informacji handlowych, aby zobaczyć coś tak prostego jak „tak jest ok” lub „nie wyłączanie usługi”). Teraz administrator komercyjnego intranetu (bratanek kogoś z zarządu) udał się do zarządu skarżąc się, że kradniemy od nich informacje zgodnie z tą wewnętrzną decyzją: Jakiekolwiek dodanie nowych funkcji, jakiekolwiek zmiany w obecnych funkcjach lub procedurach działania usługa związana z komercyjnymi bazami danych udostępnianymi przez firmę będzie wykonywana wyłącznie za zgodą Zarządu. Ale nie dodaliśmy nowych funkcji, nie zmieniliśmy istniejących funkcji ani procedur, po prostu odczytujemy dane za pomocą curl zamiast normalnej przeglądarki. Zajmuję się optymalizacją, wydajnością i przyjaznym dla użytkownika doświadczeniem, więc w naszym intranecie za pomocą 2 lub 3 kliknięć (i maksymalnie 3 sekund) otrzymujesz potrzebne informacje, w przeciwnym razie myślę, że zrobiłem coś złego i staram się poprawić. Skrypt, o którym mówimy, zwraca dane użytkownikowi w około 1 - 3 sekundy, ale teraz Board zabrania nam go więcej używać, a nasz zespół jest wolniejszy (potrzebujesz około 2-5 minut, a około 8-12 kliknięć znaleźć klienta z komercyjnym intranetem (to prawdziwy bałagan) Twoim zdaniem istnieje różnica prawna między używaniem curl w firefox (lub dowolnej innej przeglądarce), aby czytać prostą stronę HTML (bez javascript), zgodnie z decyzja powyżej lub ogólnie ?PS Wiem, że nie jesteś prawnikiem, po prostu daj punkt widzenia programisty.Dziękuję


title: Jak często powinienem/czy robisz commity?

text: Jestem niedawnym (od wczoraj) absolwentem studiów licencjackich z informatyki. Byłem wielkim fanem kontroli wersji, odkąd wkurzyłem się na zadanie, nad którym pracowałem i zacząłem od zera, niszcząc kilka godzin naprawdę dobrej pracy. Ups! Od tego czasu używałem Bazaar i Git (i SVN, kiedy musiałem na zajęciach z inżynierii oprogramowania), choć głównie Git do kontrolowania wersji we wszystkich moich projektach. Zwykle jestem dość wierny co do tego, jak często zatwierdzam, ale czasami robię to przez chwilę (kilka funkcji itp.) przed napisaniem nowego zatwierdzenia. Więc moje pytanie do ciebie brzmi: jak często powinieneś robić commity? Jestem pewien, że nie ma sztywnych i szybkich zasad, ale jakiej wytycznej (próbujesz) przestrzegać?


title: Czy commity można uznać za zbyt małe?

text: > **Możliwe duplikaty:** > git / inny VCS - jak często zatwierdzać? > Jak często powinienem/czy robisz commity? Korzystanie z kontroli źródła różni się bardzo od jednego dewelopera do drugiego i od innego projektu. Niektórzy popełniają bardzo często; inni mogą spędzić cały dzień lub kilka dni bez zobowiązań (zwłaszcza, gdy pracują sami nad projektem lub wiedzą, że inni członkowie zespołu pracują nad zupełnie inną częścią projektu). ## Przykłady Czasami widziałem bardzo małe zatwierdzenia, zarówno w prawdziwym życiu, jak iw webcastach i innych materiałach edukacyjnych. Niektóre przykłady, głównie z życia, to: * Zatwierdzenie, które rozwiązuje błąd #... lub implementuje funkcję #... poprzez zmianę jednej linii kodu. IMHO, jest to całkowicie uzasadniony przypadek zatwierdzenia, zwłaszcza jeśli system śledzenia błędów jest połączony z kontrolą wersji i jest aktualizowany automatycznie zgodnie z poprawkami. Nawet bez tego linku przydatne jest śledzenie, które zatwierdzenie zostało rozwiązane, niezależnie od liczby zmian wymaganych do rozwiązania błędu lub wdrożenia funkcji. * Zatwierdzenie, które zmienia pojedyncze ustawienie konfiguracji (biorąc pod uwagę, że w kontekście ustawienia konfiguracji muszą znajdować się w kontroli źródła). IMHO, może to być czasami połączone z innym zatwierdzeniem, chyba że poprzednie ustawienie zepsuje kompilację lub wprowadzi błąd lub może wpłynąć na innych programistów (na przykład parametry połączenia, które zmieniły się po migracji serwera testowej bazy danych). * Zatwierdzenie, które koryguje pisownię słowa, na przykład w łańcuchu wyświetlanym użytkownikowi. IMHO, w większości przypadków można to połączyć z innym zatwierdzeniem (chyba że ponownie zepsuje kompilację). Jedynym przypadkiem, w którym nie można go połączyć, jest sytuacja, w której błędna pisownia może być propagowana przez kod i byłaby zbyt skomplikowana lub niemożliwa do późniejszej zmiany, jak w przypadku nagłówka HTTP _referer_. * Zatwierdzenie, które dodaje komentarz do metody (chociaż metoda była już wystarczająco wyraźna) lub rozwiązuje inną pomniejszą regułę związaną ze stylem. Przykład: w .NET Framework, StyleCop wymaga udokumentowania każdej metody, a komentarz XMLDoc dla konstruktora (który jest również metodą) musi zaczynać się od: > Inicjuje nową instancję klasy <Class name here>. Zatwierdzenie może wymusić tę ostatnią regułę, zastępując komentarz w starszym kodzie: > Tworzy nowy pojazd z określoną liczbą kół. przez: > Inicjuje nową instancję klasy Pojazd, używając określonej liczby > kół. Innymi słowy, wersja nie ma innego znaczenia niż dostosowanie fragmentu kodu do standardów stylów używanych w bazie kodu. IMHO, w każdym przypadku można to połączyć z innym zatwierdzeniem (w końcu zasady związane ze stylem muszą być egzekwowane przy zatwierdzeniach, aby odrzucić zatwierdzenia kodu, który do nich nie pasuje), chyba że w kilku miejscach jest kilka zmian. ## Pytania Czy się mylę w tych punktach? Czy istnieje coś takiego jak zbyt małe zatwierdzenie, czy też praktyka popełniania bardzo często jest najlepszą praktyką? Czy warto wprowadzać zbyt małe zmiany, biorąc pod uwagę, że zanieczyściłoby to dziennik wersji i utrudniłoby znalezienie odpowiednich zmian wśród drobnych zmian, którymi nikt się nie przejmuje i które nie psują ani nie przerywają kompilacji ani nie wpływają na inne programiści?


title: Używasz Gita - lepiej zrobić dużo aktualizacji przyrostowych czy jedną dużą codzienną aktualizację?

text: Właśnie zacząłem pracować z Git (Github) w oczekiwaniu na nadchodzący projekt, którym zarządzam projektami, projektuję i rozwijam frontend. Jedyną rzeczą, której nie mogłem wypracować, jest to, czy lepiej jest publikować każdą indywidualną zmianę w trakcie jej wprowadzania, tj. zaktualizowano js paska bocznego, zaprojektowano nową stronę FAQ (każdy jako indywidualne zatwierdzenia), a programiści zaplecza zrobiliby to samo. dodałeś tę klasę, zrefaktorowałem to.. A może lepiej jest robić codzienne / pół dzienne zobowiązanie z całej pracy, którą wykonałeś? Pomyślałem, że jeśli robisz dużo małych zmian, łatwiej jest je cofnąć, ale jednocześnie każdy commit, który robisz, reszta zespołu musi uzyskać dostęp lokalnie, zanim będzie mógł zatwierdzić swój kod. Oczywiście nie masz tego problemu, jeśli wykonujesz codzienne lub pół-dzienne zatwierdzenia, ale trochę bardziej skomplikowane jest wycofanie, jeśli zajdzie taka potrzeba? Czy istnieje najlepsza praktyka w tym zakresie, czy zależy to od preferencji zespołu? Tło: używam Github za pośrednictwem aplikacji komputerowej Mac, a nie CL.


title: Git dla programisty solo

text: Jestem programistą pracującym nad projektem Wordpress. Pracuję nad tym sam i chcę ulepszyć sposób, w jaki używam Git, ale nie wiem od czego zacząć. Obecnie używam git do zatwierdzania całej pracy, którą wykonałem na dany dzień, o ile ta konkretna praca została wykonana. Oto kilka przypadków, w których zatwierdzam konkretną pracę: * Konkretną funkcję, której kod można napisać w ciągu jednego dnia * Poprawka błędu W przypadku większych funkcji, których ukończenie może zająć tygodnie, tworzę dla niej gałąź, a następnie zatwierdzam podfunkcje, gdy zostaną one gotowe. Ale często czuję, że angażuję się zbyt wiele; na przykład, gdy próbuję rozwiązać wiele błędów, nie zgłaszam każdego błędu, który rozwiążę. Czasami kończę też pracować z 2 lub więcej rzeczami, które powinny być w swoich własnych zatwierdzeniach. Wtedy trudno będzie po prostu wskazać konkretne pliki w ramach określonej zmiany, więc umieszczam je wszystkie w jednym zatwierdzeniu i kończę z komunikatem o zatwierdzeniu, takim jak `dodaj funkcję wyszukiwania i dodaj funkcję buforowania`. To, co chcę wiedzieć, to najlepsze praktyki dla samotnych programistów pracujących z Git. W przypadku samotnych programistów możesz również odpowiedzieć za pomocą własnego przepływu pracy.


title: Kiedy zatwierdzić kod?

text: Podczas pracy nad projektem kod może być rozwijany dość szybko w ciągu jednego dnia lub kawałek po kawałku przez dłuższy okres kilku tygodni/miesięcy/lat. Ponieważ zatwierdzenia kodu zaczynają być uważane za miarę rozwoju projektu, nie oznacza to, że ma więcej napisanego kodu niż projekt, który ma mniej zatwierdzeń. Więc pytanie brzmi, kiedy naprawdę dokonać zatwierdzenia do repozytorium, aby zatwierdzenie było uzasadnione? Jako dodatek: Czy poprawną praktyką jest mierzenie rozwoju projektu na podstawie jego zatwierdzeń?