title: Wyzwalacze Application Logic Vs DB do czyszczenia bazy danych

text: Czy podczas czyszczenia starych danych z zestawu tabel bazy danych bezpieczniej jest mieć logikę w aplikacji, czy w wyzwalaczu bazy danych? Aktualizuję aplikację, którą napisałem jakiś czas temu (i w pośpiechu), a jedną z rzeczy, które chcę najpierw wyczyścić, jest upewnienie się, że dane, które nie są już używane, zostaną natychmiast usunięte. Obecnie odbywa się to w mojej samej aplikacji poprzez szereg wywołań SQL do różnych tabel. Niektóre z tych zapytań wymagają trochę czasu, a ponieważ aplikacja jest oparta na PHP, nie chcę, aby użytkownicy musieli zbyt długo czekać. Dlatego myślałem o stworzeniu wyzwalacza bazy danych na jednej tabeli, który beztrosko wyczyściłby wszystkie inne tabele, a następnie umożliwiłby usunięcie pojedynczego wiersza z mojej tabeli głównej. Rozważam w tej chwili te zalety i wady: * _Wyzwalacz bazy danych_ * (+) Niewidoczny dla aplikacji * (+) Upraszcza logikę aplikacji - nowe obiekty można uprościć * (-) Zwiększa złożoność ogólnej konserwacji - trzeba utrzymywać kod i wyzwalacze podczas zmian tabel itp. * _Logika aplikacji_ * (+) Utrzymuje wszystkie zadania konserwacyjne w jednym miejscu * (-) Dłuższe ładowanie strony dla niektórych zadań * (-) Większa szansa na przekroczenie limitu czasu żądania — osierocenie danych Jeśli masz dalsze informacje , rozważania, o których tutaj nie pomyślałem, doświadczenia z jednym kontra drugim lub mogą wskazać mi lekturę na temat, który chciałbym usłyszeć. Edycja: początkowo myślałem, że moje strony będą działały szybciej, ale jeśli tworzę wyzwalacz _Before Delete_, czy strona ładuje się tak samo - jak w aplikacji wysyła małe zapytanie, ale nie będzie działać, dopóki cały zestaw oświadczeń w spuście zakończonych?


title: Jak nazywa się proces planowania oprogramowania? A jak nazywa się stanowisko kogoś, kto zajmuje się planowaniem oprogramowania?

text: Na przykład, powiedzmy, że przychodzi do mnie osoba nietechniczna ze swoją wstępną specyfikacją. Siadam z nimi przez kilka tygodni i pomagam im doskonalić, sformalizować i lepiej zaplanować aplikację, którą chcą zbudować. Jak to się nazywa? Architektura informacji, architektura oprogramowania, pisanie specyfikacji, planowanie oprogramowania, analiza wymagań? Jaki jest na to najlepszy, najbardziej rozpoznawalny termin?


title: Czy istnieje strona internetowa, na której możesz wgrać losowe, przydatne aplikacje, które stworzyłeś?

text: Od czasu do czasu muszę rozwiązać jakiś problem i szybciej znajduję aplikację na konkretny problem, zamiast szukać jej w całym Internecie. Najczęściej jest to aplikacja stworzona w .NET framework, ale zdarzają się też sytuacje, kiedy tworzę aplikacje dla linuxa. Moje pytanie brzmi: czy istnieje strona internetowa, na której mogę przesłać swoje bezpłatne aplikacje? Wiem, że mogę oczywiście wgrać wszystko na moją osobistą witrynę, ale ponieważ nie jestem zbyt popularny, obawiam się, że większość użytkowników, którzy potrzebują moich aplikacji, nie będzie w stanie ich znaleźć, jeśli są na mojej stronie. Pamiętaj, że nie mówię o wydaniu mojego kodu źródłowego (tylko binaria i dokumentacja) i nie mówię o dużych aplikacjach. Aby dać ci lepszy pomysł, w większości przypadków aplikacje, o których mówię, nie będą miały nawet procedury instalacyjnej: wystarczy kilka plików wykonywalnych i plik config/data. Z góry dziękuję.


title: Framework MVC, który używa klas zamiast metod do działań

text: W większości struktur MVC klasa Controller zawiera wiele metod, z których każda reprezentuje jedną akcję. Następnie do odpowiedniego wywołania tych metod używane są adnotacje i refleksje. Ale z punktu widzenia OOP, cała klasa ma wiele obowiązków, m.in. po jednym na każdą akcję. Następnie każda akcja powinna być reprezentowana przez swoją własną klasę. Czy istnieje framework MVC, który implementuje takie działania? I czy jest jakaś dyskusja, która omawia zalety i wady obu podejść? Uważam, że znacznie czystsze byłoby zrobienie tego w sposób klasowy, ponieważ umożliwiłoby to prostą rozszerzalność poprzez dziedziczenie bez potrzeby adnotacji. Ale byłby to „narzut” na znacznie więcej klas, co utrudniłoby utrzymanie kodu.


title: Czy jednoosobowy start-up może stosować metodyki zwinne, takie jak Scrum?

text: Czy w przypadku małego start-upu z jednym lub dwoma programistami możliwe jest wdrożenie zwinnych metod, takich jak Scrum? Jeśli NIE, jaka jest wymagana minimalna wielkość zespołu? Wydaje mi się, że Scrum również potrzebuje kilku programistów? _**_Zredagowano **** Myślę, że metody Agile są przeznaczone do współpracy zespołowej i usprawnienia przepływu pracy, więc pojedynczy człowiek może niewiele zyskać.


title: Czy istnieją zadania, które wymagają znacznie mniej pracy z Ruby niż C# 4.0?

text: Właśnie skończyłem czytać rubinowy rozdział książki 7 języków w 7 tygodni. Pomijając trochę cukru składniowego tu i tam, naprawdę nie widzę niczego, czego nie można zrobić w C# o podobnej składni. Rozumiem, że oba języki są z natury różne, ale moje pytanie dotyczy raczej ich użycia niż projektu. Odpowiednie pytania sprawiają, że wierzę, że Ruby oferuje niewiele więcej niż C#: * Dlaczego programiści c# nie są przyciągani do Rubiego tak jak programiści java? * Czy blok kodu Rubiego jest taki sam jak wyrażenie lambda w C#? Prawie nie pracowałem z Ruby, a moje zrozumienie języka jest nadal bardzo ograniczone, więc być może ktoś, kto eksperymentował zarówno z .NET 4.0, jak i Ruby, może odpowiedzieć na konkretne przykłady. **Które zadania wymagają znacznie mniej pracy z Ruby niż C# 4.0?** P.s.: To pytanie zostało zamknięte na StackOverflow jako zbyt subiektywne i kłótliwe, chociaż przyciągnęło trochę uwagi. Miałem nadzieję, że zostanie on połączony z tym miejscem, ale zamiast tego będę musiał go ponownie opublikować.


title: Co sprawia, że oprogramowanie jest silnikiem?

text: Deskryptor „Silnik” jest często rzucany: silnik graficzny, silnik RegEx, silnik AI itp., ale co tak naprawdę sprawia, że oprogramowanie jest silnikiem? Projekt, wejście/wyjście, cel, rozmiar?


title: Prezentacja źródła PHP w sieci

text: Napisałem łatkę do biblioteki JavaScript wydanej na GPL. Aby sprawdzić, jak działa łatka, potrzebny jest przykładowy backend CGI (lub PHP). Chcę napisać demo PHP, aby pokazać, że mój JS działa i umieścić otwarty kod na mojej stronie. Pytanie: Jaki jest najlepszy sposób, aby PHP na serwerze było uruchamiane i oglądane jako źródło? Zauważ, że ostatnio zamówiłem wirtualny serwer prywatny z dyskiem 5 GB, więc nie ma dla mnie problemów z instalacją nowego oprogramowania (jeśli jest potrzebne).


title: Jaka jest ścieżka kariery dla generalisty oprogramowania?

text: Inspiracją do tego pytania było pytanie dotyczące specjalności oprogramowania. Jak cenny jest generalista oprogramowania w porównaniu ze specjalistą? Kiedy mówię generalista, mam na myśli kogoś, kto może przeprowadzić projekt od wymagań do wdrożenia i jest kompetentny we wszystkich fazach cyklu życia oprogramowania. Kogoś, kto potrafi połączyć wszystkie specjały w spójną całość. Ekspert generalny zna swoje słabości i wypełnia je, opierając się na specjalistach – np. specjalistach Oracle czy specjalistach UX. Co uważasz za ostateczną ścieżkę kariery generalisty oprogramowania?


title: Pytania do rozmowy kwalifikacyjnej ScrumMaster

text: Mam kilka pomysłów na pytania, które mogę zadać potencjalnemu kandydatowi na stanowisko ScrumMastera, ale chciałem skontaktować się z niesamowitą społecznością, aby zadać pytania/ćwiczenia do rozmowy kwalifikacyjnej na potencjalną rolę ScrumMastera: 1. Jakie pytania byś zadał ? 2. Jakie ćwiczenia kazałbyś im wykonać?


title: Jak projektowane są języki programowania?

text: Po trochę programowaniu zacząłem interesować się samym projektowaniem języka. Nadal jestem nowicjuszem (robię to od około roku), więc większość mojego kodu dotyczy tylko dwóch pól (projektowanie GUI w Pythonie i podstawowe algorytmy w C/C++). Zaintrygował mnie sposób pisania samych języków. Mam na myśli to w obu znaczeniach. Na przykład jak został napisany dosłownie (tj. w jakim języku został napisany język). A także różne funkcje, takie jak białe odstępy (Python) lub orientacja obiektowa (C++ i Python). Od czego zacząć naukę pisania w języku? Jakie są podstawy projektowania języka, rzeczy, które sprawiają, że jest to „kompletny” język?


title: Dwa pola bazy danych na datę i godzinę - czy powinny być połączone?

text: W poniższym pytaniu zmieniono nazwy pól i tabel, aby chronić ich tożsamość. Jeśli mam dwie kolumny bazy danych: MONKEY_DATE DATETIME NULL (z danymi np. 2012-05-14 00:00:00.000) MONKEY_TIME DATETIME NULL (z danymi np. 1753-01-01 16:30:53.025) _Składnik daty pola czasu jest **głównie** ustawiony na 1 stycznia 1753... ale niektóre dane mają 1 stycznia 1899, a niektóre 1 stycznia 1900._ Uważam, że utrzymywanie kodu do zapytań i raportów w tych kolumnach powoduje, że ja (i nasz zespół) ból głowy, który można łatwo rozwiązać, łącząc dwie kolumny. Jednak doświadczenie (i Terry Goodkind) nauczyło mnie, że nic nie jest łatwe. Zobacz poniżej kilka przykładów, dlaczego jest to ból głowy. **Moje podejście** Myślę, że następujące podejście przyniesie pożądany efekt połączenia dwóch kolumn: 1. Użyj SQL do aktualizacji danych, ustawiając zarówno wartość pola daty, jak i pola czasu na ta sama wartość, która jest mieszanką składnika daty z pola daty i składnika czasu z pola czasu 2. Napisz dowolny nowy kod tylko za pomocą pola MONKEY_DATE 3. Ostateczne wycofanie pola MONKEY_TIME i dowolnego składnika daty/czasu SQL (patrz przykłady) 4. Usuń MONKEY_TIME Oznacza to, że nie będziemy musieli od razu wprowadzać retrospektywnych zmian w całym systemie... cały istniejący kod będzie nadal działał... i możemy zacząć działać Droga. SQL dla #1 może być (Oracle): UPDATE MONKEY SET MONKEY_DATE = TO_DATE(TO_CHAR(MONKEY_DATE, 'MM/DD/RRRR ') || TO_CHAR(MONKEY_TIME, 'HH24:MI:SS'), 'MM/DD/RRRR HH24:MI:SS') MONKEY_TIME = TO_DATE(TO_CHAR(MONKEY_DATE, 'MM/DD/RRRR ') || TO_CHAR(MONKEY_TIME, 'HH24:MI:SS'), 'MM/DD/RRRR HH24:MI:SS' ) **Pytanie** Moje pytania do Ciebie to: * Czy te pola powinny zostać połączone? * Czy moje podejście do połączenia tych dwóch kolumn jest rozsądne? * Czy uważasz, że lepiej byłoby pominąć krok drugi i trzeci? * Czy masz jakieś inne (konstruktywne) uwagi lub sugestie? **Przykłady** Na przykład, aby wybrać wszystkie moje małpy daty i godziny i uporządkować je według daty i godziny, muszę zrobić coś takiego (SQL Server): SELECT CONVERT(DATETIME, CONVERT(VARCHAR, MONKEY_DATE, 101), 101) AS MONKEY_DATE , CONVERT(DATETIME, CONVERT(VARCHAR, MONKEY_TIME, 108), 108) AS MONKEY_TIME Z MONKEY ORDER BY CONVERT(DATETIME, CONVERT(VARCHAR, MONKEY_DATE, 101), 101) DESC , CONVERT(DATETIME, CONVERT(VARCHAR , MONKEY_TIME, 108), 108) DESC lub to (Oracle - nieco bardziej precyzyjne): SELECT TO_DATE(TO_CHAR(MONKEY_DATE, 'MM/DD/RRRR'), 'MM/DD/RRRR') AS MONKEY_DATE , TO_DATE(TO_CHAR( MONKEY_TIME, 'HH24:MI:SS'), 'HH24:MI:SS') AS MONKEY_TIME Z MONKEY ORDER BY TO_DATE(TO_CHAR(MONKEY_DATE, 'MM/DD/RRRR'), 'MM/DD/RRRR') DESC , TO_DATE(TO_CHAR(MONKEY_TIME, 'HH24:MI:SS'), 'HH24:MI:SS') DESC Często wybieram scaloną kolumnę daty/godziny (Oracle): SELECT TO_DATE(TO_CHAR(MONKEY_DATE, 'MM/DD/RRRR ') || TO_CHAR(MONKEY_TIME, 'HH24:MI:SS'), 'MM/DD/RRRR HH24:MI:SS') AS MONKEY_DATE_TIME FROM MONKEY Ponieważ prawie cały czas chcemy znać datę i godzinę małpy. Powyższy SQL można łatwo zmienić na: SELECT MONKEY_DATE_TIME FROM MONKEY ORDER BY MONKEY_DATE_TIME ... Gdybyśmy tylko scalili kolumny. **Tło** Odziedziczyłem stary system ASP, który przechowuje daty i godziny w osobnych kolumnach w bazie danych. Powiedziano mi, że to prawdopodobnie dlatego, że aplikacja została uruchomiona we wczesnej wersji programu Access, w której nie można było przechowywać daty i godziny w tej samej kolumnie. Dlaczego i jak nie są tak naprawdę częścią tego pytania, ale niektórzy ludzie lubią wiedzieć. **P.S.** Naprawdę prawie opublikowałem to w SO.SE, więc przepraszam, jeśli mam niewłaściwą stronę.


title: Ograniczony geograficznie / stopniowy proces uwalniania

text: Szukam więcej informacji na temat **procesu stopniowego wydawania** \- to znaczy, kiedy wydajesz nową wersję oprogramowania tylko dla określonej grupy użytkowników końcowych, w większości ograniczonych geograficznie (lub ograniczonych zasięgiem konkretnego serwera). Google wydaje się być ślepy na ten termin – oznacza to, że tak się nie nazywa. Jaka jest więc nazwa? EDYCJA: Przykładem tego, co mam na myśli, jest to, że Facebook wprowadził nowe galerie zdjęć, które najpierw były widoczne tylko dla niektórych użytkowników, potem dla całych Stanów Zjednoczonych, a następnie dla reszty świata.


title: (Wady typowania strukturalnego)

text: Właśnie obejrzałem wykład Daniela Śpiewaka, w którym opowiada o zaletach _typowania strukturalnego_ w porównaniu z _typowaniem nominalnym_ Scali i Javy. Przykładem tej różnicy może być następujący kod Java public interface Foo { public int length(); } interfejs publiczny Bar { public int length(); } Foo f = ...; Słupek b = f; które oczywiście nie skompilowałoby się, ponieważ zgodność typów między `Foo` i `Bar` zależy od nazwy. Z drugiej strony system typów strukturalnych może deklarować oba typy jako równe lub kompatybilne, a tym samym, między innymi, pozwalać na sprawdzanie kaczek. Teraz myślę, że rozumiem większość zalet systemu typów strukturalnych, ale zastanawiam się, czy nie unieważniłoby to bezpieczeństwa typów z przykładów takich jak: class Foo { class Bar { /* ... */ } def takeBar(b: Bar ) = { /* ... */ } def getBar: Bar = new Bar } val foo1 = new Foo val foo2 = new Foo foo1.takeBar(foo1.getBar) // powinno skompilować foo1.takeBar(foo2.getBar) / / nie powinno się kompilować Czy moje zrozumienie jest poprawne, że w systemie typów strukturalnych ostatnia linia również by się skompilowała, a jeśli tak, czy nie byłoby to wadą w odniesieniu do bezpieczeństwa typu?


title: Inicjalizacja dynamiczna, jak to działa?

text: Mam pytanie dotyczące dynamicznej inicjalizacji. Przykładowy kod void main() { int a = 100; //Statement1 //Statement2 ... float b = 6.32987; //StwierdzenieA ... powrót; } „StatementA” przydziela pamięć w trakcie wykonywania programu. Jak przebiega proces i gdzie jest przydzielana przestrzeń dla zmiennej `b` (stos lub sterta)?


title: Narzędzie do rysowania FSM z eksportem do XMI

text: Szukam dobrego narzędzia, które pozwoli mi narysować maszynę skończoną, a następnie wyeksportować ją do pliku XMI, aby móc ją łatwo odczytać w moim programie. Czy ktoś mógłby coś zaproponować?


title: Pytanie o licencję, co dzieje się z fragmentem kodu źródłowego po śmierci jego właściciela

text: W jednym z moich projektów używam kawałka darmowego kodu źródłowego. Kod źródłowy został napisany w latach 90. i jest dostępny na stronie internetowej, która mówi, że kod może być dowolnie modyfikowany i rozpowszechniany. Pliki źródłowe nie zawierają oznaczenia licencji, ale mają komentarz „Copyright All Rights Reserved”. Dziś rano zacząłem zdawać sobie sprawę, że mogę mieć problem z licencją, ponieważ mój projekt jest opublikowany na Powszechnej Licencji Publicznej GNU, więc próbowałem skontaktować się z właścicielem kodu źródłowego. Niestety właściciel zmarł i jego firma przestała działać. Co dzieje się z kodem źródłowym, czy jego prawa autorskie są ważne, czy ma właściciela???


title: przechowywanie i pobieranie milionów dokumentów za pomocą c#

text: Pracuję nad projektem integracyjnym, w którym moja „aplikacja/serwis web” będzie siedziała pośrodku obsługując dokumenty. W zasadzie wysyłana jest prośba z id dokumentu jako część ciągu zapytania, sprawdzam czy istnieje, a jeśli tak, to odpisuję dokument (pdf) do odpowiedzi. To bardzo proste i robiliśmy to wiele razy. Tutaj robi się bardzo trudno, co tydzień będzie dodawanych około 5200 nowych plików, czyli 3 GB tygodniowo (a więc około 150 GB danych rocznie). Oczekuje się, że będziemy przechowywać dane przez 10 lat. Jaki jest najlepszy sposób przechowywania tych dokumentów i wyszukiwania musi być bardzo szybki. Niektóre opcje to: Jeśli zdecyduję się zapisać wszystkie te pliki w udziale sieciowym, początkowo będzie to szybkie, ale z czasem będzie bardzo powolne. Jeśli wybiorę SQL do przechowywania tych plików, tak naprawdę nie mogę przechowywać wszystkich dokumentów w jednej tabeli ani korzystać z partycjonowania tabeli, partycjonowania DB itp. Jeśli przejdę na partycjonowanie DB, to nadal będzie to 150 GB pliku DB każdego roku do tworzenia kopii zapasowych i przywracania. Myślałem o wdrożeniu RBS dla MS SQL, ale nie byłem pewien, jak szybko to będzie. Jakieś sugestie lub inne opcje, które mogę mieć ....?


title: Czy obiekty JavaScript i PHP powinny być traktowane jako różne obiekty na diagramie interakcji?

text: Rysuję schemat komunikacji dla aplikacji, w której można kupić książki. Korzystam z projektowania opartego na domenie i mam obiekt „sklep”, obiekt „koszyk” i obiekt „książka”. Mój **pierwszy diagram komunikacji**, kiedy użytkownik po raz pierwszy wchodzi na stronę, jest **prosty**. Cały kod HTML (aby pokazać wszystkie książki i pusty koszyk) generuję za pomocą PHP. Używam wzorca MVC; więc najpierw wysyłam wiadomość do „kontrolera”, który tworzy „sklep” z „książką” i pustym „koszykiem”, zanim wyślę je do widoku. Mój **drugi schemat komunikacji** to miejsce, w którym natrafiam na **problem** : chodzi o dodanie książki ze sklepu do koszyka. Mam już wszystkie informacje potrzebne do dodania książki do „koszyka” po stronie klienta; ponieważ wszystkie informacje o książkach są już w sklepie. Więc pisząc diagram komunikacji, czy moja pierwsza wiadomość, czyli AddBookToCart(bookId:int), powinna być skierowana do obiektu JavaScript o nazwie 'shop', który pobiera informacje o książce i wysyła wiadomość 'AddBookToCart(bookinfo:object) do 'cart ' które z kolei aktualizują stronę? Nigdy wcześniej nie robiłem diagramów komunikacyjnych z myślą o JavaScript, więc naprawdę nie wiem, jak radzić sobie z frontendem. (Szukałem ponad pięć godzin, ale nie znalazłem niczego na ten temat. To tak, jakby ludzie nie mieli z tym problemu. dowiedzieć się, jak modelować (i kodować) tego rodzaju rzeczy byłyby bardzo mile widziane)


Jaka jest najlepsza wtyczka do współpracy Eclipse z GitHub? Co robi dobrze? Co to nie jest tak dobrze? A jak się z nimi obchodzisz?


title: Programowanie funkcjonalne w oprogramowaniu komercyjnym

text: Ostatnio rozmawiałem o programowaniu funkcjonalnym ze współpracownikiem. Podczas gdy oboje zgodziliśmy się, że FP ma pewne oczywiste zalety (prostszy kod, łatwiejszy do rozumowania matematycznego itp.), oboje zastanawialiśmy się, czy jest lub kiedykolwiek będzie używany w oprogramowaniu komercyjnym. Wiem, że istnieje wiele projektów open source i akademickich, które są napisane funkcjonalnie (np. Widziałem to pytanie na Stack Overflow), ale zastanawiam się, czy ktoś może wymienić jakieś inne komercyjne oprogramowanie, które jest napisane, przynajmniej w części, w języku funkcjonalnym (i jakim języku).


title: Które dziedziny problemowe są bardziej dopasowane do rozwiązań programowania funkcjonalnego?

text: Które dziedziny problemów są bardziej dopasowane do rozwiązań programowania funkcjonalnego i dlaczego? Czy ktoś może podać jakieś przykłady? **EDYTUJ** Dla wyjaśnienia, nie proszę o listę problemów. Chcę wiedzieć, jaki **rodzaj** problemów najlepiej pasuje do rozwiązań funkcjonalnych. Na przykład słyszałem, że problemy finansowe są dobrze rozwiązywane za pomocą programowania funkcjonalnego.


title: Przykład, w którym programowanie funkcjonalne jest lepsze niż programowanie imperatywne lub programowanie zorientowane obiektowo?

text: > **Możliwy duplikat:** > Które domeny problemów są bardziej dopasowane do rozwiązań programowania funkcyjnego Czytałem o programowaniu funkcjonalnym. Ostatnio używam głównie C#.net i chciałbym poznać dobry przykład z rzeczywistego świata, w którym język funkcjonalny, taki jak Lisp lub F#, byłby wyraźnie lepszym narzędziem do wykonywania pracy.


title: Jak mogę poprawić swoje umiejętności komunikacyjne?

text: Jeff Atwood sugeruje, że zostanie świetnym programistą wymaga poważnych umiejętności komunikacyjnych. Jakie są sugerowane sposoby, aby programista rozwijał swoje umiejętności komunikacyjne?


title: W moim CV mam tylko dwa języki - jak źle to jest?

text: Mam tutaj pytanie, na które najlepiej można odpowiedzieć, biorąc pod uwagę ogromne doświadczenie, które niektórzy z was mają! Zamierzam skończyć licencjat z CS i nie oszukujmy się, po prostu czuję się swobodnie w C++ i Pythonie. C++ - Nie mam doświadczenia, w którym mógłbym się pochwalić i nie mogę cytować standardu C++, jak robią to niektórzy z SO, ale mimo to jestem zadowolony z podstaw języka i rzeczy, które są najważniejsze. W Pythonie wykazałem się doświadczeniem w pracy w dobrej firmie, więc mogę to śmiało ująć. Nigdy nie dotknąłem C, chociaż miałem zamiar to zrobić teraz. Nie mogę więc napisać C w swoim CV, ponieważ nigdy tego nie robiłem. Jasne, że mogę skończyć K&R i zorientować się w języku w miesiąc, ale nie mam ochoty go pisać, bo byłoby to niewierne sobie. Więc najważniejsze pytanie brzmi, czy dwa języki w życiorysie są uważane za OK, czy zwykle jest to zły znak? Większość życiorysów, które widziałem, wymienia wiele języków i stąd moje pytanie. Pod sekcją językową mojego CV wspomniałem tylko: C++ i Python i wygląda to na puste! Jakie są twoje poglądy na ten temat i co myślisz o takiej sytuacji? PS: Naprawdę nie chcę pisać każdej biblioteki lub API, które znam. A może powinienem?


title: Czym jest „ontologia” w kontekście sieci semantycznej?

text: Dobra, uczyłem się SPARQL do zapytań dbpedia i nie mogę znaleźć jasnych i praktycznych samouczków związanych z SPARQL i siecią semantyczną. Jeśli powiem, że ontologia jest analogiczna do definicji tabeli SQL, a może specyfikacji elementów składowych obiektu, czy powinienem zostać uderzony?


title: Pomóż mi w doborze odpowiedniego wzoru

text: Od tygodnia szukałem najbardziej odpowiedniej architektury dla **nowej aplikacji webowej**. Szczerze mówiąc, zajmowałem się tworzeniem stron internetowych tylko przez 1 rok (w 2007 roku). A od czterech lat pracuję w C++. Teraz nagle przydzielono mi zadanie poszukiwania najlepszej architektury dla nowej aplikacji internetowej. Podczas moich poszukiwań natrafiłem na następujące 3 opcje: * Kontroler widoku modelu * Prezenter widoku modelu * Archiwizacja 3 poziomów (Warstwa prezentacji <\--> BLL <\--> DAL) # Co zamierzamy rozwijać Dążymy do rozwój społecznościowej aplikacji webowej typu facebook, twitter itp. Po uruchomieniu wersji webowej przechodzimy do **edycji mobilnej** tej samej aplikacji # Z czego będziemy korzystać Będziemy używać ASP.net i C# pod frameworkiem 4.0 # Dlaczego zamieszczam pytanie? Szczerze mówiąc, nie mam doświadczenia ani w tworzeniu stron internetowych, ani w tworzeniu aplikacji mobilnych, więc głównym celem opublikowania tego pytania jest uzyskanie pomocy od doświadczonych programistów/architektów. # Moje pytanie: Poszukuję takiej architektury, która najpierw pozwoli mi zacząć od wersji webowej, a następnie pozwoli na edycję mobilną przy mniejszym nakładzie pracy. Przy mniejszym wysiłku chcę powiedzieć, że chcę tylko dwa razy opracować dwie warstwy interfejsu użytkownika (jedną dla sieci i jedną dla urządzeń mobilnych). Chcę, aby warstwy logiki biznesowej i dostępu do danych pozostały takie same dla obu warstw interfejsu użytkownika. Proszę o pomoc w doborze odpowiedniego wzoru do powyższej aplikacji. # Co do tej pory zrobiłem sam? Przeczytałem szczegółowo wszystkie powyższe 3 wzory architektoniczne i mam podstawową wiedzę na temat wszystkich trzech, ale nadal nie mogę wybrać odpowiedniego dla mnie wzoru, po drugie nie znalazłem więcej wzorów, więc jeśli jest więcej, podaj tylko ich nazwy


title: Czym pośredniość różni się od aliasingu?

text: Zaczerpnięte z wikipedii, aliasing definiuje się jako dostęp do lokalizacji danych za pomocą różnych nazw. Również zaczerpnięte z wikipedii, pośredniość jest definiowana jako odwoływanie się do czegoś „za pomocą nazwy, odwołania lub kontenera zamiast samej wartości”. Czy czegoś mi tu brakuje - Czy te dwa są jednym i tym samym? Jeśli nie, to czym się różnią?


title: Czy powinienem nauczyć się frameworka internetowego (python)?

text: Uczę się Pythona i chciałem jeszcze bardziej rozwinąć swoje umiejętności, więc postanowiłem nauczyć się django, a następnie przeszedłem do Flask, zanim zdałem sobie sprawę, że mam trudności ze zrozumieniem samej koncepcji web-frameworków. Nie mam jeszcze żadnych pomysłów na stronę internetową, więc czy nadal radzisz mi kontynuować naukę frameworka internetowego?


title: Drzewo zdań vs Lista słów

text: Niedawno otrzymałem zadanie zbudowania Rozpoznawania jednostek nazw w ramach projektu. Celem było przeanalizowanie danego zdania i wymyślenie wszystkich możliwych kombinacji bytów. Jednym z sugerowanych podejść było utrzymywanie tabeli przeglądowej dla wszystkich znanych słów łączących, takich jak przedimki i spójniki, usuwając je z listy słów po podzieleniu zdania na podstawie spacji. Spowodowałoby to pominięcie jednostek nazw w zdaniu. Następnie dla tych zidentyfikowanych jednostek przeprowadza się wyszukiwanie w innej tabeli wyszukiwania, która kojarzy je z typem jednostki, na przykład jeśli zdanie brzmiało: „Pamiętaj, że Tytani to film wyreżyserowany przez Boaza Yakina”, możliwe wyniki to: > > { Remember the Titans, Movie} był {filmem,Film} wyreżyserowanym przez {Boaz > Yakin,reżyser} > {Remember the Titans, Movie} był filmem wyreżyserowanym przez Boaza Yakina > {Remember the Titans, Movie} był {filmem, Film} wyreżyserowany przez Boaza Yakina > {Remember the Titans,Movie} był filmem wyreżyserowanym przez {Boaz Yakin,reżyser} > Remember the Titans to {film,Film} wyreżyserowany przez Boaza Yakina >Remember the Titans był {filmem,filmem} } wyreżyserował {Boaz Yakin,reżyser} > Pamiętaj, że Tytani to film wyreżyserowany przez {Boaz Yakin,reżyser} > Pamiętaj, że {Tytani,Film,Drużyna sportowa} był {filmem,filmem} wyreżyserowanym przez > {Boaz Yakin, reżyser} > Pamiętaj, że {the Titans,Movie,Sports Team} był filmem wyreżyserowanym przez Boaza > Yakin > Remember the {the titans,Movie,Sp Orts Team} to {film,Film} wyreżyserowany przez > Boaza Yakina > Pamiętaj, że {the Titans,Movie,Sports Team} był filmem wyreżyserowanym przez {Boaza > Yakina,reżysera} > Tabela wyszukiwania encji zawierałaby następujące dane : > Pamiętaj o Tytanach =>Film > film =>Film > Boaz Yakin =>reżyser > Tytani =>Film > Tytani =>Drużyna sportowa > Inną alternatywną logiką, która została zaproponowana, było zbudowanie prymitywnego drzewa zdań, które zawierają słowa łącznika w tabeli przeglądowej jako węzły nadrzędne i przeprowadź wyszukiwanie w tabeli jednostek dla węzła liścia, który może zawierać jednostki. Drzewo, które zostało zbudowane dla powyższego zdania, wyglądałoby następująco: ![tutaj podaj opis obrazu](http://i.stack.imgur.com/TJw5M.png) Pytanie, z którym się spotykam, to korzyści z tych dwóch podejść, czy powinienem wybrać podejście drzewa do reprezentowania parsowania zdań, ponieważ zapewnia ono bardziej semantyczną strukturę? Czy istnieje lepsze podejście, które powinienem zastosować, aby go rozwiązać?


title: Jaka jest twoja ulubiona technika bitowa?

text: Kilka dni temu członek StackExchange, Anto, zapytał o prawidłowe zastosowania operatorów bitowych. Stwierdziłem, że przesuwanie jest szybsze niż mnożenie i dzielenie liczb całkowitych przez potęgi dwójki. Członek StackExchange Daemin odpowiedział, stwierdzając, że przesunięcie w prawo powoduje problemy z liczbami ujemnymi. W tamtym momencie nigdy tak naprawdę nie myślałem o używaniu operatorów zmiany ze znakiem liczb całkowitych. Używałem tej techniki głównie w tworzeniu oprogramowania niskiego poziomu; dlatego zawsze używałem liczb całkowitych bez znaku. C wykonuje logiczne przesunięcia na liczbach całkowitych bez znaku. Podczas logicznego przesunięcia w prawo nie zwraca się uwagi na bit znaku. Puste bity są wypełnione zerami. Jednak C wykonuje operację przesunięcia arytmetycznego podczas przesuwania liczby całkowitej ze znakiem w prawo. Puste bity są wypełnione bitem znaku. Ta różnica powoduje, że wartość ujemna jest zaokrąglana do nieskończoności, a nie obcinana do zera, co jest innym zachowaniem niż dzielenie liczb całkowitych ze znakiem. Kilka minut namysłu zaowocowało rozwiązaniem pierwszego rzędu. Rozwiązanie warunkowo konwertuje wartości ujemne na wartości dodatnie przed przesunięciem. Wartość jest warunkowo konwertowana z powrotem do postaci ujemnej po wykonaniu operacji przesunięcia. int a = -5; int n = 1; int ujemny = q < 0; a = ujemna ? -a:a; a >>= n; a = ujemna ? -a:a; Problem z tym rozwiązaniem polega na tym, że warunkowe instrukcje przypisania są zwykle tłumaczone na co najmniej jedną instrukcję skoku, a instrukcje skoku mogą być kosztowne w procesorach, które nie dekodują obu ścieżek instrukcji. Konieczność dwukrotnego ponownego uruchomienia potoku instrukcji dobrze wpływa na wzrost wydajności uzyskany przez przesunięcie przez dzielenie. Z powyższym obudziłem się w sobotę z odpowiedzią na problem warunkowego przydziału. Problem zaokrąglania, którego doświadczamy podczas wykonywania operacji przesunięcia arytmetycznego, występuje tylko podczas pracy z reprezentacją uzupełnienia do dwóch. Nie występuje z reprezentacją dopełniacza. Rozwiązanie problemu polega na przekonwertowaniu wartości uzupełnienia do dwóch na wartość uzupełnienia do jednego przed wykonaniem operacji przesunięcia. Następnie musimy przekonwertować wartość dopełnienia do jednej z powrotem na wartość dopełnienia do dwójki. Co zaskakujące, możemy wykonać ten zestaw operacji bez warunkowej konwersji wartości ujemnych przed wykonaniem operacji przesunięcia. int a = -5; int n = 1; zarejestruj int znak = (a >> INT_SIZE_MINUS_1) & 1 a = (a - znak) >> n + znak; Wartość ujemna dopełnienia do dwóch jest konwertowana na ujemną wartość dopełnienia do jednej przez odjęcie jedynki. Z drugiej strony, ujemna wartość dopełnienia do jednej jest konwertowana na ujemną wartość dopełnienia do dwóch przez dodanie jednego. Powyższy kod działa, ponieważ bit znaku jest używany do konwersji z uzupełnienia do dwóch na uzupełnienie do jednego i _na odwrót_. Tylko wartości ujemne będą miały ustawione bity znaku; dlatego zmienna **_sign_** będzie równa zero, gdy **_a_** jest dodatnia. Mając powyższe na uwadze, czy możesz pomyśleć o innych bitowych hackach, takich jak ten powyżej, które znalazły się w twojej torbie sztuczek? Jaki jest twój ulubiony bit mądry hack? Zawsze szukam nowych hacków zorientowanych na wydajność.


title: Jak mogę przedstawić dobrą prezentację ważnym, nietechnicznym interesariuszom?

text: Pod koniec miesiąca muszę przedstawić prezentację na temat projektu oprogramowania, nad którym sam pracowałem, który w zasadzie zadecyduje o tym, czy dostanę pracę na pełen etat w firmie Jestem zatrudniony na czas określony Na razie. Swoją prezentację przedstawię prezesowi naszego działu i dwóm wiceprezesom. Prezes ma mniejszą wiedzę programistyczną niż pozostali dwaj wiceprezesi i ostatecznie jest osobą, której muszę zaimponować. Jakie są najważniejsze rzeczy, które muszę przekazać w prezentacji? Mój kierownik już powiedział mi, żebym podkreślał następujące rzeczy: 1. Kieruję tym projektem we właściwym kierunku i mam pełną kontrolę nad wszystkim. 2. Kończę ten projekt zgodnie z harmonogramem. Na jakich innych rzeczach powinienem się skupić podczas mojej prezentacji, aby wyglądać jak najbardziej godną zatrudnienia? Zastanawiam się nad podkreśleniem wysiłków, które podejmuję na poziomie projektowania, aby zmniejszyć ryzyko i niepewność w oprogramowaniu (dwie rzeczy, które wyobrażam sobie, są bardzo ważne dla przełożonych). Szczególnie martwię się o znalezienie właściwej równowagi między technicznymi i nietechnicznymi szczegółami w prezentacji. Jeśli nie podam żadnych szczegółów technicznych, prezes naszego działu nie będzie wiedział o wszystkich funkcjach „pod maską”, które są w oprogramowaniu, ale jeśli będę zbyt techniczny, może się zgubić i nie zrozumieć ważne punkty w prezentacji. Wszelkie wskazówki będą mile widziane.


title: Nauka Pythona od poziomu początkującego do zaawansowanego

text: Mam pewne problemy w ręku i chciałbym je rozwiązać sam (zamiast zatrudniać fachowca, oczywiście ze względu na problem gotówkowy!): 1. zbudować naprawdę dobrą stronę internetową (planuję założyć własny start-up). 2. zbudować dobre oprogramowanie (najlepiej z plikami instalacyjnymi exe) na wielu technikach matematycznych i statystycznych. Czy aby wykonać te zadania, warto uczyć się Pythona na wcześniejszym poziomie? Mam zaawansowane doświadczenie w programowaniu z R i Matlab i VBA (i jakimś rodzajem C), ale nie mam nic w Pythonie. Bądź bardzo wdzięczny, jeśli eksperci umieszczą tutaj jakieś wskazówki. Dziękuję za Twój czas.


title: Jaki paradygmat bazy danych jest sugerowany dla witryny z funkcjami wyszukiwania?

text: Obecnie staram się wybrać najlepszy paradygmat DB do zaimplementowania witryny sieci Web z możliwościami _przeszukiwania pełnotekstowego_ i _wyszukiwania aspektowego_. Mam ważne wymaganie funkcjonalne: **Paradygmat bazy danych powinien wspierać silne modyfikacje schematów koncepcyjnych na każdym etapie życia oprogramowania.** Na przykład nasza firma może umieścić dodatkowy element danych w rejestrze, który powinien być uwzględniony w każdym Szukaj. Jeśli używamy paradygmatu relacyjnego, modyfikacja ta wymaga zmiany schematu bazy danych (poprzez dodanie lub usunięcie wierszy, modyfikację kluczy obcych itp.). Oczywiście może to prowadzić do niepożądanych problemów z utrzymaniem. 1. Czy powinniśmy używać bazy danych opartej na dokumentach? (tj. baza danych XML) 2. Ten problem można potraktować jako wyzwanie czysto relacyjne w projektowaniu schematów pojęciowych? (tzn. moglibyśmy zaprojektować relacyjną bazę danych mając na uwadze podane ograniczenie) 3. Czy uważasz, że ten problem powinien być traktowany przy użyciu określonego paradygmatu?


title: Pomoc dotycząca odświeżania analizy algorytmów

text: Od dłuższego czasu nie dotykałem spraw związanych ze złożonością algorytmów, więc staram się odświeżyć. Próbuję obliczyć liczbę kroków w poniższej pętli for. for(i = 0; i < n; i++){ //kod for(j = i + 1; j < n; j++){ //kod } } Zostanie wykonana wewnętrzna pętla ![tu wpisz opis obrazka]( http://i.stack.imgur.com/fsIDr.jpg) razy mam na myśli t razy dla każdej wartości j. Prawidłowy? W najgorszym przypadku tj będzie równe n-i. Ponieważ będzie działać n-(i+1)-1 razy. Czy moje podejście do tej analizy jest prawidłowe?


title: Możliwe z PHP MVC Framework? Lepsze rozwiązanie „pomijania” podstawowych funkcji przez klienta?

text: **Tło / Problem** Muszę stworzyć (dużą) aplikację z pewnym zestawem funkcji _core_ i pewną funkcjonalnością dla wielu _klientów_ w niej. Każdy klient ma _inne_ wymagania i chociaż mogą mieć pewne wspólne funkcje, muszę oddzielić kod dla każdego klienta, aby zmiana jednego nie wpłynęła na inne. Każda sekcja klienta aplikacji powinna również dziedziczyć niektóre funkcje z aplikacji podstawowej. Idealnie chciałbym też oddzielić bazy danych dla każdego klienta. Jeśli chodzi o system użytkownika, użytkownicy _core_ powinni mieć dostęp do funkcji każdego klienta, ale użytkownicy _client_ powinni mieć możliwość interakcji tylko z określoną sekcją klienta witryny. **Aktualne rozwiązanie** Każdy klient ma własną subdomenę, a MVC może nadpisać pliki MVC rdzenia, jeśli istnieją. W skrócie, mój niestandardowy autoloader MVC sprawdza katalog klienta pod kątem pasującego pliku M, V lub C, gdy poddomena jest obecna w adresie URL i ładuje plik tego konkretnego klienta ZAMIAST pliku podstawowego. W pewnym sensie jest to umiejętność nadrzędna. **Pytania** 1. Czy rozwiązuję ten problem w sposób, który byłby uznawany za dobrą praktykę w zakresie projektowania oprogramowania? 2. Gdybym miał użyć istniejącego frameworka PHP (chciałbym), jak mógłbym go skonfigurować, aby rozwiązać ten problem? W szczególności przyglądałem się Yii i CodeIgniterowi. Z góry dziękuję! **Aktualizacja:** Odkryłem wzorzec projektowy o nazwie HMVC (Hierarchiczny MVC) i wydaje się, że jest to zasadniczo to, co opisałem. Widzę, że Kohana 3 jest zbudowana przy jego użyciu i że Codeigniter ma rozszerzenie, które na to pozwala.


title: Luka w formularzu logowania w Pythonie?

text:
 <TITLE>Strona logowania</TITLE>   <FORM method="POST" action="http://yourserver/cgi-bin/login.py"> <paragraph> Wprowadź swoją nazwę logowania: <input type="text" name="login"> <paragraph> Wprowadź swoje hasło: <input type=password name="password"> <paragraph> <input type="submit" wartość ="Connect"> </FORM>
 </form>   login.py: #!/usr/local/bin/python import cgi def header(title): print "Content-type: text/html\n" print "\n\n<TITLE>%s</TITLE>\n\n\n" % (tytuł ) def footer(): print "" form = cgi.FieldStorage() password = "python" jeśli nie form: header("Odpowiedź na logowanie") elif form.has_key("login") i form["login"].value != "" and form.has_key("password") oraz form["password"].value == password: header("Połączony..." ) print "

Witamy ome back," , form["login"].value, ".

" print r""""<form><input type="hidden" name="session" value= "%s"></form>""" % (form["login"].value) print "
Kliknij tutaj, aby rozpocząć przeglądanie
" else: header("Brak sukcesu!") print "
Proszę wrócić i wprowadzić poprawny login.
" footer() Chciałbym, aby ten formularz logowania był podatny na RCE (zdalne wykonanie kodu), jest jest to możliwe dzięki funkcji `eval()` lub `exec()`. Poszukuję funkcji, które wprowadzają lukę w formularzu logowania. Czy istnieją całe klasy/moduły, które zawierają niebezpieczne funkcjonalnie? Czy byłoby również możliwe, aby ten formularz logowania był podatny na zdalne wykonanie kodu?


title: W jakiej warstwie wprowadzić czytelne dla człowieka komunikaty o błędach?

text: Jedną z rzeczy, z których nigdy nie byłem zadowolony w żadnym projekcie, nad którym pracowałem przez lata i naprawdę nie byłem w stanie samodzielnie rozwiązać, jest dokładnie na jakim poziomie aplikacji powinny być pobierane informacje o błędach czytelne dla człowieka w celu wyświetlenia użytkownikowi . Typowym podejściem, które dobrze się sprawdziło, jest zwracanie silnie typizowanych/konkretnych „obiektów wyników” z metod na publicznej powierzchni warstwy biznesowej/API. Metodą interfejsu może być: public ClearUserAccountsResult ClearUserAccounts(ClearUserAccountsParam param); I implementacja klasy wynikowej: public class ClearUserAccountsResult : IResult { public readonly Lista<Konto> ClearedAccounts{get; set;} public readonly bool Sukces {get; set;} // Implementuje IResult public readonly string Message{get; set;} // Implementuje IResult, czytelny dla człowieka // Konstruktor zaimplementowany tutaj, aby ustawić właściwości tylko do odczytu... } Działa to doskonale, gdy interfejs API musi być ujawniony przez WCF, ponieważ obiekt wynikowy może być serializowany. Ponownie odbywa się to tylko na publicznej powierzchni warstwy interfejsu API/biznesowej. Komunikat o błędzie można również wyszukać w bazie danych, co oznacza, że można go zmienić i zlokalizować. Jednak zawsze był dla mnie podejrzany pomysł zwracania czytelnych dla człowieka informacji z warstwy biznesowej w ten sposób, częściowo dlatego, że to, co stanowi publiczną powierzchnię interfejsu API, może się z czasem zmienić... i może być tak, że interfejs API będą musiały zostać ponownie wykorzystane przez inne komponenty API w przyszłości, które nie będą potrzebować komunikatów tekstowych czytelnych dla człowieka (a wyszukiwanie ich z bazy danych byłoby kosztownym marnotrawstwem). Myślę, że lepszym podejściem jest trzymanie obiektów biznesowych wolnych od takich obiektów wynikowych i utrzymywanie ich w prostocie, a następnie pobieranie czytelnych dla człowieka ciągów błędów gdzieś bliżej warstwy interfejsu użytkownika lub tylko w samym interfejsie użytkownika, ale mam tutaj dwa problemy: 1) Interfejs użytkownika może być klientem zdalnym (Winforms/WPF/Silverlight) lub aplikacją sieci Web ASP.NET hostowaną na innym serwerze. W takich przypadkach interfejs użytkownika będzie musiał pobrać ciągi błędów z serwera. 2) Często istnieje wiele uzasadnionych sposobów niepowodzenia. Jeśli warstwa biznesowa staje się tak niejasna i ogólna w sposobie, w jaki zwraca błędy, może nie być wystarczającej ilości informacji ujawnionych publicznie, aby stwierdzić, na czym właściwie polegał błąd: np. jeśli metoda ma 3 tryby uzasadnionego niepowodzenia, ale zwraca wartość logiczną wskazującą niepowodzenie, nie możesz określić, jaki powinien być odpowiedni komunikat, który powinien być wyświetlany użytkownikowi. Myślałem o użyciu wyliczeń błędów jako substytutu, mogą one wskazywać konkretny błąd, który można przetestować i zakodować. Czasami jest to przydatne w samej warstwie biznesowej, ponieważ sposób przekazywania za pośrednictwem metody zwraca specyfikę awarii, a nie tylko wartość logiczną, ale nie jest tak dobry w przypadku scenariuszy serializacji. Czy jest na to dobrze zużyty wzór? Co myślą ludzie? Dziękuję.


title: Wytyczne dotyczące kodowania: metody nie powinny zawierać więcej niż 7 zdań?

text: Przeglądałem wytyczne dotyczące kodowania AvSol dla C# i zgadzam się z prawie wszystkim, ale jestem naprawdę ciekawy, co inni myślą o jednej konkretnej regule. > AV1500 > > Metody nie powinny przekraczać 7 stwierdzeń Metoda, która wymaga więcej niż 7 > stwierdzeń, powoduje zbyt wiele działań lub powoduje zbyt wiele obowiązków. Wymaga również > od ludzkiego umysłu przeanalizowania dokładnych stwierdzeń, aby zrozumieć, co > robi kod. Podziel to na wiele małych i skoncentrowanych metod z > samowyjaśniającymi nazwami. Czy większość z Was przestrzega tej zasady? Nawet jeśli niewiele można zaoszczędzić na tworzeniu nowej metody (Twój kod jest nadal SUCHY) oprócz znacznego zwiększenia czytelności? Czy twoja liczba nadal wynosi 7? Skłaniałbym się bardziej do 10. Nie mówię, że łamię tę zasadę wszędzie – wręcz przeciwnie, moje metody są w 95% małe i skoncentrowane, ale twierdzenie, że nigdy nie powinieneś naruszać tej zasady, naprawdę mnie zwaliło. Naprawdę chcę tylko wiedzieć, co wszyscy myślą o NIGDY nie naruszając tej zasady (jest to „1” w standardzie kodowania – czyli NIGDY tego nie rób). Ale myślę, że miałbyś problem ze znalezieniem kodu, który tego nie robi.


title: Niewłaściwe użycie animacji CSS3 czy nie?

text: Cóż, kilka dni temu zacząłem używać animacji CSS3. Po hardcodowaniu zacząłem próbować różnych narzędzi, takich jak wersja Adobe Edge Preview. Zrobiłem krótką animację, aby zapoznać się z funkcjonalnością narzędzia http://things.eyemade.ch/css3edge/ Następnie ktoś z Twittera rzucił okiem na to i powiedział, że używanie divów do malowania takich rzeczy jest złe. Ale nie jestem tego pewien. Rzeczy się zmieniły w ciągu ostatnich lat i jeśli pamiętamy, że te rzeczy będą używane w wielu grach internetowych/mobilnych, czy naprawdę źle jest obecnie używać divów w ten sposób?


title: Jak "przetłumaczyć" współzależne stany obiektów w kodzie?

text: Mam następujący problem. Interfejs Mój interfejs użytkownika zawiera kilka przycisków, etykiet i innych informacji wizualnych. Jestem w stanie opisać każdy możliwy scenariusz przepływu pracy, który powinien być dozwolony w tym interfejsie użytkownika. To znaczy, że mogę to opisać tak - po naciśnięciu przycisku A powinno nastąpić następujące -> W przypadku tego przycisku A są trzy niezależne czynniki, które wpływają na możliwy wynik po naciśnięciu przycisku A. Stan sesji (pusta, pojedyncza, multi, multi specjalna), rzeczywista praca wykonywana przez system w momencie naciśnięcia przycisku A (nic się nie działo, praca była wykonywana, praca została wstrzymana) oraz oddzielny element interfejsu użytkownika, który ma dwa stany (włączony, wyłączony). Daje mi to trójwymiarową kostkę z 24 możliwymi wynikami. Mógłbym napisać kod do tego, używając cykli, cykli przełączników itp. ... ale problem polega na tym, że mam jeszcze 7 przycisków na tym interfejsie użytkownika, mogę wejść do tego interfejsu użytkownika z różnych stanów ... niektóre przyciski zmieniają stan, niektóre zmieniają parametry ... Podsumowując, kombinacje są zadziwiające i nie jestem w stanie wymyślić metodyki skalowalnej i systematycznie niezawodnej. KAŻDY workflow jestem w stanie opisać słowami, jestem pewien, że mój opis jest kompletny i bez błędów logicznych. Ale nie jestem w stanie przełożyć tego na kod. Próbowałem narysować schematy blokowe, ale wkrótce stało się to zbyt skomplikowane wizualnie z powodu zbyt wielu „emaforów”. Czy możesz doradzić, jak postępować?


title: Co poszło nie tak podczas wprowadzania SCRUM?

text: Jaki był pojedynczy punkt awarii, który napotkałeś, gdy Twoja firma zdecydowała się zastąpić obecne procesy SCRUMem? Czy możesz podać kilka przykładów rzeczy, które poszły naprawdę nie tak, gdy firma próbowała wprowadzić SCRUM? Chciałbym usłyszeć twoje anegdoty, coś, czego sam doświadczyłeś, wielką porażkę, której nadchodzi, ale której nie możesz zapobiec. Słyszę wiele obaw związanych z **brakującą dokumentacją dotyczącą decyzji** o szczegółach implementacji oraz o **rozmiary historii** i **poziom szczegółowości** historii.


title: Terminologia — pamięć podręczna (Javascript)

text: Obejrzałem kilka filmów o JS, w których prezenter wspomniał o „buforowaniu” zmiennej, ale nie widziałem, żeby robili coś w kodzie, co mogłoby ją „buforować” poza normalnymi przypisaniami. Kiedy myślę o pamięci podręcznej, myślę o czymś przechowywanym w pamięci lokalnej, w którym to przypadku nie wszystkie zmienne js są z definicji buforowane. Kiedy buforujesz zmienną w javascript, co lub "robisz" z nią? EDYCJA: Słyszałem ten termin w kilku, ale jedynym, który przychodzi mi do głowy, jest pisanie modułowego JavaScript - samouczek. Który właśnie oglądałem zeszłej nocy. Nie opublikowałem tego, ponieważ musisz zapłacić, aby zobaczyć, a ja nie lubię, gdy podłączam płatną usługę na stackexchange.


title: Każda instrukcja SQL musi zostać przejrzana przez administratora danych — powszechne?

text: Mam na myśli wszystko, nie tylko zmiany schematu. Nawet prosty SELECT na kluczu podstawowym nie może przejść do produkcji, mimo że został sprawdzony przez innych programistów (w kontekście), bez przeglądu DBA każdej instrukcji, wyodrębnionej z kodu i przesłanej wraz z danymi wyjściowymi EXPLAIN, szczegóły jak często będzie się to nazywać itp. Jeśli byłeś w takim środowisku, czy uważasz, że jest to zysk netto, czy hamulec w rozwoju? Jako ktoś, kto od lat pracuje z relacyjnymi bazami danych, uważam, że postawa „nie można ufać programistom w korzystaniu z baz danych” jest nieuzasadniona i jestem ciekaw, jak powszechna jest ta sytuacja. Co jest warte, jest to tylko do tworzenia stron internetowych, a nie coś krytycznego.


title: Jak określić liczbę programistów potrzebnych do projektu?

text: Skąd wiesz, ilu programistów potrzebuje dany projekt, aby odnieść sukces? Firma w której pracuję realizuje zlecenia dla firm klientów. Napisaliśmy wewnętrzny system zarządzania magazynem, który obsługuje zarządzanie zapasami w oparciu o lokalizację, przetwarzanie zamówień, generowanie listów przewozowych, fakturowanie, audyty frachtu i raportowanie (prawdopodobnie 50 raportów). Posiada również funkcje skanowania kodów kreskowych i portal klienta wraz z dziesiątkami innych mniejszych funkcji. Zawiera również pełny zegar czasu pracownika. Integruje się z Quickbooks, UPS i FedEx. Obsługuje pracę dla co najmniej 50 klientów, różniących się nieco funkcjonalnością. Na przykład, importujemy zamówienia z plików wysyłanych przez klientów, ale każdy klient wysyła inny format pliku (csv, excel, płaski plik i usługi internetowe), więc mamy kilkanaście konfiguracji metod konwersji zamówień. Eksport to ta sama historia. Projekt jest złożony i każdego dnia rośnie złożoność z ponad ćwierć miliona linii kodu. To około 250 000 linijek kodu VB.NET, 6200 linijek kodu Rubiego i może 5000 linijek PHP. Posiada również bazę danych MySQL z około 200 tabelami. Ze względu na ciągle zmieniające się wymagania i różne potrzeby dziesiątek klientów sam kod bardzo się różni pod względem jakości od bardzo słabego do stosunkowo dobrego. Obecnie ten projekt ma tylko jednego programistę - mnie. Obecnie zajmuję się również wsparciem produktowym dla naszej firmy liczącej około 75 osób. Obejmuje to rozwiązywanie problemów i konfigurowanie nowych klientów oraz wszelkich nowych potrzebnych funkcji. Dodatkowo staramy się przepisać całość, aby była w 100% oparta na Ruby on Rails. I chcielibyśmy w ciągu najbliższego roku wprowadzić cały system na rynek, aby mógł być używany przez inne firmy. Obecnie jako programista mamy tylko siebie, ale nie uważam, że to wystarczy. Czy ktoś ma jakieś rekomendacje, ilu programistów powinien mieć projekt tej wielkości lub jak powinniśmy się zająć ustaleniem odpowiedzi na to pytanie? Szczególnie biorąc pod uwagę fakt, że kierownictwo chciałoby, aby do przyszłego roku produkt był jakości handlowej?


title: Jak działa symulator opóźnienia witryny?

text: Witryny takie jak webpagetest pozwalają użytkownikom wprowadzić adres URL witryny i lokalizację testową, aby uruchomić test prędkości w witrynie z wielu lokalizacji przy użyciu prawdziwych przeglądarek. Czy ktoś może dać mi podstawowe pojęcie o tym, jak działają takie witryny? Masz również wtyczki, takie jak symulator opóźnień Aptimize lub aplikacja proxy do debugowania sieci WWW Charles, które symulują opóźnienie podczas uzyskiwania dostępu do witryny z różnych lokalizacji. Zakładam, ponieważ są to wtyczki te działają w inny sposób. Jak działają te wtyczki?


title: Śledzenie czasu — najlepsza metoda?

text: Chcę śledzić czas, jaki zajmuje użytkownikom przechodzenie przez kilka formularzy, które mam na stronie internetowej. Moim starym pomysłem było użycie czegoś takiego jak jQuery do odpytywania serwera, aktualizującego czas spędzony na stronie, ale wygląda na to, że byłoby to niesamowicie zasobożerne. Ostatnio czytałem o sockets.io i node.js. Wygląda na to, że metody łączenia i rozłączania mogą być idealnym sposobem na śledzenie czasu. Zanim zagłębię się w naukę wszystkiego o gniazdach itp., czy jest na to lepszy sposób? Wiem, że mógłbym zrobić tę stronę serwera, ale upadnie, jeśli ktoś porzuci witrynę całkowicie w trakcie procesu, a dzięki gniazdom mógłbym nawet wyśledzić czas spędzony na każdym polu formularza, gdybym chciał.


title: Możliwe projekty dla edytora bloków kodu

text: Rozpocząłem projekt, w którym muszę zaprojektować aplikację, która będzie działać jako edytor bloków kodu, podobnie jak lego mindstorms i ten projekt google. http://code.google.com/p/blockly/ Jakie są możliwe podejścia do projektowania takiej aplikacji w Javie? Mówiąc dokładniej, zakładając, że mam jeden blok A, jak mogę zdefiniować, które inne bloki mogą być z nim połączone? Myślę o używaniu podklas i sprawdzaniu hierarchii, lub innym możliwym rozwiązaniem może być jakaś tabela 2D, która zweryfikuje poprawność połączenia (chociaż myślę, że może być za duża?). p.s: muszę wymusić poprawną strukturę kodu, a nie sprawdzać na końcu parserem. Dlatego należy łączyć tylko bloki, które do siebie pasują.


title: Terminologia: flaga Really Delete vs set IsDeleted ("miękkie usuwanie")

text: Mam witrynę, w której zwykły użytkownik może usuwać rekordy, a co się dzieje, to ustawiana jest flaga `IsDeleted`. Na stronach administracyjnych uprzywilejowany użytkownik może usuwać rekordy, w przypadku których rzeczywiste polecenie SQL „DELETE” trwale usuwa takie rekordy. Różnica jest ważna z oczywistych powodów i chcę użyć spójnego terminu, aby odnieść się do jednej formy usunięcia w porównaniu z drugą. Bawiłem się słowami „Usuń”, „Usuń”, „Odrzuć” i prawdopodobnie „Odzyskaj” i „Archiwizuj”. Moje pytanie brzmi: czy istnieją standardowe terminy skierowane do użytkowników, które odróżniają te dwa zachowania?


title: Usługa internetowa Erlang/Haskell do plików serwera

text: Mam przez wątek wspominający, że Erlang nie byłby odpowiedni dla aplikacji internetowych obsługujących pliki. Byłem ciekaw czy ktoś miał jakieś doświadczenie w budowaniu takiego serwisu z erlangiem? Czy Haskell lepiej by się do tego nadawał, jeśli tak, to jak?


title: Problemy motywacyjne, programista gimnazjum

text: W tej chwili jestem w gimnazjum i programuję od około półtora roku. Pracuję głównie z Pythonem i Ruby, a obecnie uczę się Railsów. Wiem, nigdy nie nauczysz się wystarczająco dużo, opanowanie przedmiotu zajmuje dużo czasu, ale czuję, że nie zostało mi wiele do nauczenia :(. Nauczyłem się wielu pojęć w Pythonie, nauczyłem się w zasadzie całej biblioteki standardowej i napisałem mnóstwo programów, tak samo w Ruby.W Rubim zrobiłem też dużo metaprogramowania.Po nauczeniu się wszystkich pojęć i napisaniu wielu programów, nie mam już nic do roboty! Co mogę zrobić teraz, kiedy nauczyłem się wszystkich koncepcji i napisałem kilka programów?


title: Przekazywanie pojedynczego obiektu ustawień w porównaniu z wieloma metodami ustawiającymi?

text: Praca z C++. Załóżmy, że mam klasę BoxFilter. Klasa służy do filtrowania pudełek, które mają takie właściwości jak wysokość, szerokość, głębokość, waga itp. Filtr może mieć coś w rodzaju MaxWidth, aby pudełka o szerokości większej niż MaxWidth nie przeszły przez filtr. Sposób użycia byłby podobny (pseudokod w stylu C#): IBoxFilter filter = new BoxFilter(); foreach(Box box w polach) { if(filter.PassesFilter(box)) { // zrób coś } } (przepraszam za przykład C#, ale myślę, że jest łatwiejszy do zrozumienia) Podczas konfigurowania obiektu filtru muszę skonfigurować ustawienia filtra. Filtr ma obecnie 7 właściwości, chociaż z czasem może być ich więcej. Zastanawiam się, czy klasa filtra powinna mieć wiele seterów, takich jak SetWidthMax(), SetWidthMinimum(), SetHeightMax(), SetHeightMinimum() itp., czy też powinienem utworzyć obiekt/strukturę BoxFilterSettings, a następnie mieć pojedynczą metodę na filtrze pudełkowym klasa o nazwie SetSettings (ustawienia BoxFilterSettings)?


title: Czego powinienem używać do przechowywania danych w starszym projekcie tworzenia stron internetowych?

text: Obecnie pracuję nad projektem, który używa serwera sieci Web działającego w systemie Windows CE 6.0. Ponieważ ten serwer obsługuje tylko klasyczne ASP (tzn. bez PHP, ASP.NET itp.)/ Planuję użyć XML jako bazy danych. Czy to najlepsze podejście, czy jest na to prostszy sposób, biorąc pod uwagę, że jestem przyzwyczajony do pracy w języku C, a nie w językach wysokiego poziomu?


title: Jak ważna jest poprawność składniowa podczas rozmowy kwalifikacyjnej?

text: Czy prosząc kandydata na rozmowę kwalifikacyjną o napisanie programu na tablicy, oczekujesz, że kandydat napisze kod, który jest poprawny składniowo? Miałem dwóch kandydatów, z których jeden napisał program poprawny składniowo, ale logika nie pasowała do celu, a drugi miał logikę lepiej napisaną, ale składnia była gówniana. Faworyzuję pierwszego kandydata.


title: Gdzie znaleźć kod źródłowy funkcji wiersza poleceń systemu Linux?

text: Chciałbym przestudiować kod źródłowy standardowych funkcji wiersza poleceń w Linuksie, takich jak ls, echo, cat itp. Ale nie mogłem znaleźć kodu źródłowego (wyszukiwanie w Google było bezużyteczne). Czy ktoś wie, gdzie jest dostępny? Wiem, że to naiwne pytanie, ale naprawdę nie mogę znaleźć tego kodu źródłowego.


title: Jak włączyć bogatą platformę korporacyjną opartą na portalu internetowym w różnych domenach i hostach przy użyciu JS bez dostosowywania/konfiguracji serwera?

text: Nasza firma Coscend zbudowała platformę do komunikacji i współpracy w chmurze opartą na portalu internetowym, wykorzystując JavaScript (JS), osadzoną w HTML5 i sformatowaną za pomocą CSS3. Inne technologie użyte w kodzie rdzenia to Flash, Flex, PostgreSQL i MySQL. Nasz zespół chciałby hostować tę platformę w pięciu różnych środowiskach Windows i Linux, które obsługują różne typy serwerów internetowych, takich jak IIS i Apache. Wyzwanie techniczne: Każdy z tych serwerów Windows i Linux ma inną nazwę hosta i nazwę domeny (i adres IP), ale chcielibyśmy, aby nasza platforma korporacyjna była niezależna od konfiguracji serwera hosta. Możliwe podejście do rozwiązania: Uważamy, że API (moduł interfejsu z GUI) jest potrzebny do osiągnięcia tego poziomu modułowości i elastyczności podczas wdrażania u naszych klientów korporacyjnych. Poszukiwanie informacji: W tym kontekście nasz zespół byłby wdzięczny za wskazówki dotyczące: 1. Czy istnieje algorytmiczna metoda implementacji tej platformy opartej na portalu internetowym w tych środowiskach Windows i Linux przy jednoczesnym oddzieleniu jej od konfiguracji serwera, tj. dostosowaniu nazwy hosta , nazwę domeny i adres IP dla każdej indywidualnej instancji? 2. Na przykład, czy byłoby odpowiednie utworzenie zmiennych / obiektów JS dla nazwy hosta i nazwy domeny i wywoływanie ich w różnych implementacjach? Jeśli w setkach modułów portalu występuje odwołanie do nazw hosta/domeny, zastąpią je te zmienne lub obiekty JS. 3. Jeśli tak, jaki jest najlepszy sposób, aby te moduły obiektowe napisane w JS były przenośne i wielokrotnego użytku w różnych środowiskach i instancjach dla klientów korporacyjnych? Oto przykład zaimplementowanego kodu dla wspomnianej platformy. Następująca witryna sieci Web (www.CoscendCommunications.com) została zbudowana przy użyciu tej platformy współpracy w przedsiębiorstwie i zawiera przykłady kodu podstawowego platformy. Ta witryna sieci Web jest specyficzna dla domeny. Chcemy, aby podstawowa platforma była niezależna od domeny i hosta. Umożliwi to wdrożenie podstawowej platformy w wielu instancjach naszych klientów korporacyjnych.


title: Programista biznesowy lub programista systemowy

text: Jaka jest podstawowa różnica między pracą jako programista biznesowy a programista systemowy. Przykładem programisty biznesowego może być dla mnie ktoś, kto pracuje w finansach lub ubezpieczeniach. Jakimi rodzajami pracy byłby programista systemowy?


title: Czyszczenie zbioru danych utworów — jaki to problem?

text: Mam zestaw danych o piosenkach. Każdy wpis to wiersz tekstu, który zawiera nazwę wykonawcy, tytuł utworu i dodatkowy tekst. Niektóre wpisy są tylko „dodatkowym tekstem”. Moim celem jest rozwiązanie jak największej liczby wpisów w utworach na Spotify przy użyciu ich internetowego interfejsu API. Moja dotychczasowa strategia polegała na wyszukiwaniu wpisu przez API - jeśli nie ma wyników, zastosuj przekształcenie, takie jak „usuń cały tekst między ( )” i wyszukaj ponownie. Mam listę heurystyk i odniosłem z tym rozsądny sukces, ale w miarę jak kod staje się coraz bardziej zawiły, wciąż myślę, że musi istnieć bardziej ogólny i spójny sposób. Nie wiem gdzie szukać - jakieś sugestie czego spróbować, tematy do przestudiowania, buzzwordy do google?


title: Algorytm zarządzania uprawnieniami

text: Mam 3 poziomy uprawnień do oglądania produktu: * `Marka` -> Zezwól/Odmów * `Kategoria` -> Zezwól/Odmów * `Produkt` -> Zezwól/Odmów Na przykład produkt A ma: * Kategoria: Zezwalaj * Produkt: Odmów => nie można zobaczyć produktu A, ponieważ produkt A nie jest dozwolony na poziomie `Produktu`. if(allowForCategory == true) { if(allowForProduct == false) return false; if(allowForProduct == true) zwraca prawdę; } else { ... } To nie jest dobry wybór, ponieważ stanie się bardziej złożony, jeśli dodamy poziom marki. if() { if() { if() {} } } Czy istnieje więc jakiś ogólny algorytm do rozwiązywania problemu uprawnień, tak jak rozwiązanie `777` w Linuksie?


title: Z jakiego powodu wyjątki są często używane w językach zarządzanych (C# i Java), ale nie w C++?

text: AFAIK, wiele projektów C++ nie zezwala na wyjątki i odmawia ich w wytycznych dotyczących kodowania. Mam wiele powodów, na przykład wyjątek jest trudny w obsłudze, jeśli plik binarny musi być skompilowany przez oddzielne i różne kompilatory. Ale nie do końca mnie to przekonuje, jest wiele projektów, które używają tylko jednego kompilatora. W porównaniu do C++, wyjątki są często używane w C# i Javie, a powodem może być tylko to, że wyjątek nie przynosi wystarczających korzyści. Jednym z punktów jest _debugowalność_ w praktyce. Wyjątek nie może uzyskać stosu wywołań w kodzie C++, ale w C# i Javie można uzyskać stos wywołań z wyjątku, jest to znaczące i ułatwia debugowanie. No-callstack nie jest winą wyjątku, jest to różnica językowa, ale ma wpływ na użycie wyjątku. Więc jaki jest powód, dla którego wyjątki są niemile widziane w programach C++?


title: jaki system sieciowy jest najlepszy do obsługi bardzo dużego jednoczesnego ruchu w sieci?

text: Czy PHP/mySQL może jednocześnie obsługiwać 1 000 000 unikalnych użytkowników online? A może powinniśmy użyć mocniejszego systemu, takiego jak Zend? A może zależy to bardziej od systemów hostingowych, takich jak równoważenie obciążenia itp.?


title: Jakie są dobre testy umiejętności modelowania OO?

text: Poszukuję prostych modeli ze zwięzłymi, konkretnymi opisami problemów i większymi niż 50% prawdopodobieństwem, że dana odpowiedź daje konkretny wgląd w jedną z wielu umiejętności, które mogą zostać przekazane potencjalnym kandydatom na stanowisko inżyniera oprogramowania. Na przykład problem z ekspresem do kawy nie nadaje się do szybkiego scenariusza testowania w biurze. Warianty kształtów, urządzeń, pojazdów, monet lub systemów zarządzania Lego™ byłyby prawdopodobnie dobre. Pożądane umiejętności to przede wszystkim zrozumienie: 1. Kiedy używać dziedziczenia a składu 2. Kiedy używać składowych dla stanu a parametry lub lokalne 3. Jak ważne jest używanie terminologii domeny biznesowej 4. Kiedy wyabstrahować wzorce a zmniejszać złożoność 5. Jak modelować odpowiedzialność a wygoda 6. Kiedy stosować inwersję sterowania 7. Kiedy używać klasy asocjacyjnej Skupiam się na strukturze statycznej.


title: Czy młode umysły muszą uczyć się koncepcji wskaźnika?

text: Dlaczego mistrz C Dennis Ritchie wprowadził wskaźniki w C? I dlaczego inne języki programowania, takie jak VB.NET, Java lub C#, je wyeliminowały? Znalazłem kilka punktów w Google i chcę również wysłuchać twoich komentarzy. Dlaczego eliminują pojęcia wskaźnika we współczesnych językach? Ludzie mówią, że C jest podstawowym językiem, a wskaźniki to koncepcja, która sprawia, że C jest potężny i wyjątkowy, a także sprawia, że C nadal może konkurować z bardziej nowoczesnymi językami. Dlaczego więc wyeliminowali wskaźniki w bardziej nowoczesnych językach? Czy uważasz, że znajomość wskaźników jest nadal ważna dla nowych programistów? W dzisiejszych czasach ludzie używają VB.NET lub Javy, która obsługuje bardziej zaawansowane funkcje niż C (i nie używa żadnych koncepcji wskaźników) i wielu ludzi, jak teraz widzę (moi przyjaciele), wybiera te języki ignorując C, ponieważ obsługują one zaawansowane funkcje. Mówię im, żeby zaczynali od C. Mówią, że marnotrawstwem jest uczenie się pojęć wskaźników, gdy robisz zaawansowane rzeczy w VB.NET lub Javie, które nie są możliwe w C. Co o tym myślisz? **Zaktualizowano** : Komentarze, które czytałem w Google to: 1. Wcześniejsze komputery były zbyt wolne i nie były zoptymalizowane. 2. Korzystanie ze wskaźników umożliwia bezpośredni dostęp do adresu, a to oszczędza czas zamiast tworzenia jego kopii w wywołaniach funkcji. 3. Bezpieczeństwo jest znacznie gorsze przy użyciu wskaźników, dlatego Java i C# ich nie zawierały. Te i kilka innych, które znalazłem. Potrzebuję jeszcze kilku cennych odpowiedzi. To byłoby bardzo mile widziane.


title: Czy istnieje określenie na anty-wzorzec obsługi błędów polegający na odrzucaniu wszystkich dostępnych informacji i zwracaniu po prostu niepowodzenia?

text: Od czasu do czasu (niestety zbyt często) muszę naprawić taki kod: // kod C++ bool anyOldFunction(Param p) { try { ... if(some_condition_here) { handleErrorX(); zwróć fałsz; } else if(other_condition) { return false; // (*komentarz do pytania o wymianę stosu*) Najwyraźniej nie podjęto tutaj żadnych dodatkowych działań związanych z błędem } ... return true; } catch(...) { // (*stary komentarz*) Wyłap wszystkie możliwe błędy (mogą wystąpić FroobleFub i BrabbleBub) return false; } } Tak więc pierwotny realizator faktycznie miał _jakieś_ pojęcie o tym, jakie wyjątki mogą zostać zgłoszone (chociaż lista może nie być wyczerpująca), ale nie miał pojęcia, jak zrobić trochę przyzwoitej obsługi i po prostu odrzucił wszelkie informacje, które mógł uzyskać z obiektów wyjątków, pozostawienie kodu wywołującego / kontekstu wywołującego inaczej. Czy istnieje nazwa tego antywzoru? (Jeśli anty-wzorzec, to rzeczywiście.)


title: Jak wyjaśnić źródło zidentyfikowanego problemu, nie czyniąc go „wymówką”?

text: Ćwicząc (przynajmniej na tyle, na ile mogę) "programowanie bez ego", skupiam się na rozwiązywaniu problemów, ktokolwiek napisał kod związany (jeśli ta osoba nie tworzy niebezpiecznego kodu) i lubię w pełni zrozumieć problem, aby mieć pewność aby rozwiązać źródło tego problemu. Jednak, gdy ktoś wskazuje mój kod, aby pokazać błąd, często staram się przypomnieć sobie, jakie było moje nastawienie podczas pisania kodu defektu i staram się to wyjaśnić facetowi wskazującemu błąd, aby wyjaśnić, co było źródłem błędu (na przykład kiedy niektóre imiona są źle dobrane, możesz użyć ich w sposób, w jaki nie były przeznaczone i z widocznym sukcesem...). Teraz robię to odruchowo i większość moich współpracowników rozumie ten odruch. Ale pracowałem też w firmach, w których współpracownicy mieli mentalność obwiniania ludzi, którzy spowodowali zidentyfikowane problemy, z humorem lub bez (dla mnie ma to ten sam nierozsądny efekt). W takim środowisku wyjaśnianie, dlaczego musisz napisać zły kod, sprawia, że inni myślą, że próbujesz znaleźć wymówkę. Zauważyłem, że większość nietechnicznych osób (lub nie będących ekspertami w dziedzinie, nie jestem pewien, to tylko osobiste doświadczenie) również reaguje dokładnie tak, gdy próbujesz wyjaśnić, dlaczego zrobiłeś coś źle. Tak więc, mając do czynienia z tego rodzaju ludźmi/środowiskiem, jak udaje ci się wyjaśnić prawdziwe źródło błędu, nie wyglądając na „usprawiedliwienie”? (a czy w ogóle warto próbować wyjaśnić?)


title: Konfigurowanie zasad zwrotów dla komercyjnego motywu WordPress

text: Opracowuję motyw WordPress i sam planuję go sprzedać. Myślałem o wprowadzeniu 14- lub 30-dniowej polityki zwrotu pieniędzy dla klientów, ale obawiam się, że ludzie mogą zasadniczo uzyskać motyw za darmo, jeśli: 1) kupią, 2) pobiorą pliki, a następnie 3) zażądają zwrot. Wtedy mieliby z powrotem zarówno motyw przewodni, jak i pieniądze. Przyglądałem się zasadom zwrotu pieniędzy za oprogramowanie i zauważyłem, że istnieje kilka różnych szkół myślenia o zwrotach kosztów klientom: **Szkoła myśli nr 1** \- Zapewnij zwrot pieniędzy. Jeśli twoje oprogramowanie jest dobrej jakości, niewiele osób poprosi o zwrot pieniędzy. Moja odpowiedź: Ale w moim przypadku, nawet jeśli użytkownicy uważają, że motyw jest wysokiej jakości, nadal mogą poprosić o zwrot pieniędzy, a także zachować motyw. Włożyłem też dużo pracy w rozwój i testowanie motywu, więc jest to praca wysokiej jakości. **School of Thought #2** \- Zapewnij zwrot pieniędzy, ale niektórzy klienci będą nadużywać procesu zwrotu pieniędzy, więc miej kod aktywacyjny i zapewniaj zwrot pieniędzy tylko osobom, które nie aktywowały oprogramowania. Moja odpowiedź: Brzmi to jak dobry pomysł, ale nie ma mechanizmu aktywacji motywów w WordPressie, więc nie wiem, jak mógłbym go zaimplementować. **Szkoła Myśli #3** \- Brak zwrotów. Moja odpowiedź: To wydaje się naprawdę nieelastyczne. Nie jestem przeciwny zwrotowi płatności od klientów nie bez powodu, ale nie chcę też oddawać swojej pracy. Czy słyszałeś o innych dobrych opcjach tworzenia polityki zwrotów?


title: Jak znacząca jest złożoność czasowa algorytmu Big-O?

text: Programiści często mówią o złożoności czasowej algorytmu, m.in. O(log n) lub O(n^2). Klasyfikacje złożoności czasowej są dokonywane, gdy rozmiar wejściowy zbliża się do nieskończoności, ale jak na ironię nieskończony rozmiar wejściowy w obliczeniach nie jest używany. Innymi słowy, klasyfikacja algorytmu opiera się na sytuacji, w której algorytm nigdy nie będzie: gdzie n = nieskończoność. Weź również pod uwagę, że algorytm czasu wielomianowego, w którym wykładnik jest duży, jest tak samo bezużyteczny, jak algorytm czasu wykładniczego o małej podstawie (np. 1.000000001^n). Biorąc to pod uwagę, jak bardzo mogę polegać na złożoności czasowej Big-O, aby doradzić wybór algorytmu?


title: Jak zachować zgodność z licencją Java ASM?

text: Projektuję bibliotekę Java typu open source, którą prawdopodobnie wydam z licencją MIT, a jej jedyną zależnością jest biblioteka dynamicznego wstrzykiwania kodu bajtowego ASM. Zgodnie z ich licencją: > Redystrybucje w formie binarnej muszą zawierać powyższą informację o prawach autorskich, > tę listę warunków i następujące zastrzeżenie w dokumentacji > i/lub inne materiały dostarczone z dystrybucją. Co to dokładnie oznacza_? Czy to oznacza, że w całym moim **Przewodniku programisty** (który będzie plikiem PDF, który będzie rozpowszechniany w tym samym pliku ZIP co mój JAR)? Czy to oznacza coś innego? Chyba proszę o przykład _poprawnego_ sposobu honorowania tego warunku w licencji. Z góry dziękuję!


title: Przechwytywanie przychodzących żądań HTTP po stronie serwera za pomocą Node.js

text: Chcę zaimplementować aplikację po stronie serwera przechwytującą przychodzące żądania http z określonym nagłówkiem. Po przechwyceniu żądania wyodrębnia informacje o typie żądania HTTP (GET,HEAD,PUT,POST itp.), żądany adres URL i wysyła go na inny serwer, zbieranie danych (serwis internetowy lub serwer posiadający narzędzie innej firmy, takie jak statsd). Aplikacja musi być jak najlżejsza. Na marginesie, odpowiedni serwer, na który przychodzą żądania, będzie mocno obciążony, w wyniku czego aplikacja musi działać dobrze przy takim obciążeniu. Wiem, że tę aplikację można zaimplementować w dowolnym języku, jednak chcę spróbować czegoś nowego. Czy node.js nadaje się do tworzenia takiej aplikacji pod względem złożoności i wydajności?


title: Jak zbudować wykres Gantta z zestawu biletów Redmine bez wypełniania dat we wszystkich?

text: Redmine 1.1.1 Stworzyłem zestaw biletów do nowego projektu. W każdym numerze wypełniałem pola Temat, Opis i Szacowany czas. Wypełniłem też bloki/zablokowane zależnościami w Pokrewnych zagadnieniach. Ale wykres Gantta dla tego projektu jest pusty (to znaczy zawiera wszystkie zadania, ale nie zawiera dla nich „pasków”). Muszę uzyskać wykres Gantta (lub inną reprezentację wizualną), aby pokazać go innym członkom projektu. Nie chciałbym ponownie wpisywać wszystkich tych informacji do OpenProj. Czy istnieje sposób na uzyskanie użytecznego wykresu Gantta z Redmine? _Aktualizacja:_ W poniższych odpowiedziach przeczytałem, że aby uzyskać działający wykres Gantta, muszę ręcznie wprowadzić datę rozpoczęcia i termin wykonania dla każdego problemu. Uważam, że informacje te powinny być wywnioskowane automatycznie od daty rozpoczęcia pierwszego zgłoszenia (pierwszego — pod względem zależności), szacowanego czasu każdego zgłoszenia, grafu zależności, przydziału zasobów i kalendarza godzin pracy. Tak jak w przypadku każdego minimalnie rozsądnego narzędzia do zarządzania projektami wykresu Gantta. Wprowadzanie tych informacji ręcznie i ręczne aktualizowanie ich w miarę rozwoju projektu to szalona strata czasu. Czy istnieje sposób na wygenerowanie wykresu Gantta z zestawu biletów Redmine bez ręcznego wypełniania wszystkich tych informacji? (Rozwiązania obejmujące eksport i import danych w rozsądnym narzędziu lub obejmujące istniejące wtyczki są całkowicie akceptowalne.)


title: Jeden dobry powód do przepisania

text: Mam własny projekt internetowy, który zjadłem ucząc się programowania. Napisałem to w PHP i nauczyłem się jak poszedłem. W końcu przerobiłem go na MVC i usunąłem mieszanie php/html. W tej chwili nie ma użytkowników, ratuj się i nie zarabia pieniędzy. Mam silne pragnienie przepisania całej aplikacji. Co tak naprawdę nie jest tak dużą aplikacją. Mam wiele powodów, dla których nie powinienem tego przepisywać. Wiem, że powinienem iść do przodu. Jest to działająca aplikacja, która zmusi mnie tylko do napisania jej na nowo. Ale nie mogę pozbyć się wrażenia, że na dłuższą metę lepiej byłoby używać innego języka programowania. Że bardziej by mi się to podobało. Że czułbym się z tym komfortowo. Czuję, że moim jedynym dobrym powodem do przepisania aplikacji jest to, że mam przeczucie, że powinienem. PHP wydaje się być hackiem złożonym razem. Chcę używać języka, który wydaje mi się bardziej elegancki. Wszelkie opinie będą mile widziane.


title: Algorytm do dzielenia zakresu na zakresy, a następnie znajdowania zakresu, do którego należy dana liczba

text: Mając * minimum * maksimum * liczbę zakresów * wartość między minimum a maksimum, staram się wymyślić metodę lub dwie, które obliczyłyby, do którego zakresu należy podana wartość. Dla min=1, max = 10, liczba zakresów=5 zakresy wyniosą [1,2],[3,4],[5,6],[7,8],[9-10] Inna metoda zachowywałby się tak, jak pokazano poniżej: * method(1)->[1-2] * method(2)->[1-2] * method(3)->[3-4] * method(4)->[ 3-4] * metoda(5)->[5-6] * metoda(6)->[5-6] * metoda(7)->[7-8] * metoda(8)->[7- 8] * method(9)->[9-10] * method(10)->[9-10] Służy do generowania legendy dla mapy, gdzie rozmiar znacznika zależy od zakresu, do którego należy wartość do. Zastanawiam się, czy istnieje na to fajne rozwiązanie algorytmiczne. Liczby, z którymi pracuję, są liczbami całkowitymi. Edycja: Inny przykład: dla min=1, max = 3, liczba zakresów=2 zakresy to a) [1-2],[3-3] lub b) [1-1],[2-3] Druga metoda zachowywałaby się tak, jak pokazano poniżej: a) * method(1)->[1-2] * method(2)->[1-2] * method(3)->[3-3] lub b) * method(1)->[1-1] * method(2)->[2-3] * method(3)->[2-3] Nie mam preferencji dla a) ani b).


title: Jak prawidłowo uwzględnić walidację polową w dokumentacji oprogramowania?

text: Tworzę dokumentację oprogramowania w projekcie, a wiele z nich to tylko funkcje oparte na CRUD lub CRUD. Jak możesz sobie wyobrazić, wiele reguł to ograniczenia dotyczące walidacji pól, takie jak długość, zakres, typ danych i maski pola. Pisanie wszystkich tych reguł byłoby kłopotliwe do pisania i czytania, więc zastanawiam się, jaka jest dostępna opcja włączenia takich reguł do dokumentacji oprogramowania, aby nie było nużące pisanie/czytanie tego wszystkiego? **Edycja - Wyjaśnienie** Reguły i są zaczerpnięte ze starej, starszej aplikacji desktopowej, a my zamierzamy udokumentować bieżące walidacje, funkcje i formularze; dzięki czemu aplikacja zostanie wdrożona na bardziej aktualnej (webowej) platformie, biorąc pod uwagę użyteczność i spójność w nowym systemie. Dokumentacja jest pisana odręcznie za pomocą narzędzia Sybase PowerDesigner, ale dokument można napisać w formacie doc wewnątrz narzędzia. Niektóre z nich to na przykład reguły walidacji międzypolowej; * Dla osoby typu X, zamieszkałej w kraju Y, wartość pola A musi być walidowana przy użyciu reguły B. * W przypadku osoby typu X, zamieszkałej w kraju Z, wartość pola A musi być walidowana za pomocą reguły C, a pola D, za pomocą reguły E. Typ X, kraj Y, pole A, pole D itd. to wszystkie wartości wyodrębnione z pól w formularzach.


title: Jak pojedyncza baza danych może działać na stronie internetowej, w aplikacjach mobilnych?

text: Opracowaliśmy portal z ofertami pracy, na którym użytkownicy mogą przeglądać oferty pracy, a także zamieszczać oferty pracy. Użyliśmy PHP i MySQL. Hostowaliśmy to na stronie internetowej. Teraz chcemy rozwijać aplikację mobilną portalu pracy na Androida, iOS i Windowsa. Ponieważ baza danych powinna być synchroniczna i dynamicznie dopasowywana do aplikacji i bazy danych witryny. Skoro kod zaplecza musi zostać zmieniony na Javę w Androidzie i c# w Windows, jak zarządzać pojedynczą synchroniczną bazą danych?


title: Czy możemy ułatwić dodawanie przepływów danych między odległymi częściami dużej bazy kodu?

text: Wprowadzając zmiany w dużych systemach, często napotykam problem polegający na tym, że jakaś funkcja musi pobrać dane z innego elementu, ale znajdują się one w różnych częściach głębokiego i rozgałęzionego drzewa wywołań, prawdopodobnie przepływających przez detektory zdarzeń, wywołania odroczone, itd. W ten sposób prosta zmiana może szybko się rozwinąć. Powiązany cytat z wpisu na blogu Yossiego Kreinina pod adresem http://www.yosefk.com/blog/i-want-a-struct-linker.html: > Masz pewną strukturę danych, którą często przekazujesz. Wkrótce najcenniejszą rzeczą w tej strukturze nie będą dane, które przechowuje, ale fakt, że jest ona dostępna przez całą drogę przez jakiś włochaty przepływ kontroli. Zmienne globalne to klasyczny sposób, aby kod „wykrzykiwał” do odległego kodu, ale wiadomo, że są one problematyczne. Zmienne o zakresie dynamicznym są bardziej ograniczonym sposobem, ale są również problematyczne. Czy są jakieś badania nad językiem programowania mające na celu rozwiązanie tego problemu? Czy możemy ułatwić dodawanie nieoczekiwanych przepływów danych do dużej bazy kodu, jednocześnie mając statyczne sprawdzanie, łatwe testowanie jednostkowe i inne korzyści?


title: Jaka jest prawidłowa implementacja elementu <meta> w HTML5?

text: Oglądam filmik do nauki HTML. Znam się na HTML, ale chciałem tylko odświeżyć swoją wiedzę. Autor zadeklarował, że używa HTML5, ponieważ doctype był: <!doctype html> ale zauważyłem, że autor użył elementu _meta_ w innym stylu, do którego się przyzwyczaiłem, użył go bez ukośnika do zamknięcia elementu w następujący sposób: <meta charset="utf-8"> i wiem o tym, że powinno wyglądać następująco: <meta charset="utf-8" /> Który z powyższych elementów jest uważany za HTML5? Próbowałem szukać w Internecie, ale wygląda na to, że każdy projektant stron internetowych ma inne zdanie, co mnie zdezorientowało. Lubię standardy.


title: Myślisz o moim nowym generatorze języka szablonów/HTML?

text: Myślę, że powinienem był poprzedzić to zdaniem: **Tak, wiem, że nie ma _potrzeby_ nowego języka szablonów, ale i tak chcę stworzyć nowy, bo jestem głupcem.** czy mogę poprawić swój język: Zacznijmy od przykładu: używając "html5" używając "dodatków" html { head { title "Informacja o zamawianiu" jsinclude "jquery.js" } body { h1 "Informacja o zamawianiu" p "Szanowni Państwo," p „Dziękujemy za złożenie zamówienia w @company. Wysyłka jest zaplanowana na {@ship_date|dateformat}”. p "Oto elementy, które zamówiłeś:" table { tr { th "nazwa" th "cena" } for(@item in @item_list) { tr { td @item.name td @item.price } } } if (@ordered_warranty) p "Informacje dotyczące gwarancji będą zawarte w opakowaniu." p(class="footer") { "Z poważaniem", br @company } } } Słowo kluczowe "using" wskazuje, których znaczników użyć. „html5” może zawierać wszystkie standardowe tagi HTML5, ale Twoje nazwy tagów nie musiałyby w ogóle opierać się na ich odpowiednikach HTML, jeśli nie chcesz. Na przykład biblioteka „extratags” może dodać dodatkowy tag o nazwie „jsinclude”, który zostanie zastąpiony czymś w rodzaju `<script type="text/javascript" src="@content"></script>` Tagi mogą być opcjonalnie po którym następuje nawias otwierający. Zostaną one automatycznie zamknięte w nawiasie zamykającym. Jeśli nie zostanie użyty żaden nawias, zostaną zamknięte po zabraniu jednego elementu. Zmienne są poprzedzone symbolem `@`. Mogą być używane wewnątrz podwójnych cudzysłowów. Myślę, że użyję pojedynczych cudzysłowów, aby wskazać „brak zastępowania zmiennych”, tak jak robi to PHP. Funkcje filtrujące można stosować do zmiennych, takich jak `@zmienna|filtr`. Argumenty można przekazywać do filtra `@zmienna|filter:@arg1,arg2="y"` Atrybuty można przekazywać do znaczników, umieszczając je w `()`, na przykład `p(class="nazwaklasy")`. Będziesz także mógł dołączyć szablony częściowe, takie jak: for(@item w @item_list) include("item_partial", item=@item) Coś takiego, o którym myślę. Pierwszym argumentem będzie nazwa pliku szablonu, a kolejne będą nazwanymi argumentami, gdzie @item pobiera nazwę zmiennej "item" wewnątrz tego szablonu. Chcę też mieć wersję kolekcji, taką jak RoR, więc nie musisz nawet pisać pętli. Przydałyby się przemyślenia na ten temat i dokładna składnia :) Kilka pytań: * Jakiego symbolu powinienem użyć do przedrostka zmiennych? @ (jak Razor), $ (jak PHP) czy coś innego? * Czy symbol @ powinien być konieczny w instrukcjach „for” i „if”? To trochę sugerowane, że to są zmienne. * Tagi i kontrolki (np. if,for) mają obecnie dokładnie tę samą składnię. Czy powinienem zrobić coś, aby je odróżnić? Jeśli tak to co? * Uczyniłoby to jaśniej, że „tag” nie zachowuje się jak zwykły tag, który zostanie zastąpiony treścią, ale kontroluje przepływ. Ponadto umożliwiłoby to ponowne użycie nazw. * Podobnie jak `tag` byłby normalnym znacznikiem, ale `@tag` byłoby dyrektywą taką jak `@for`, `@if`, `@include`, `@using` * Czy podoba Ci się składnia atrybutu? (nawiasy okrągłe) * Jak należy dziedziczyć/układy szablonów? * W Django pierwsza linia pliku musi zawierać plik układu, a następnie oddzielasz bloki kodu, które są wpychane do tego układu. * W CakePHP jest to trochę na odwrót, określasz układ w funkcji controller.view, układ otrzymuje specjalną zmienną `$content_for_layout`, a następnie cały szablon jest w nią wpychany i nie musisz ograniczać żadnych bloki kodu. * Wydaje mi się, że Django jest trochę potężniejsze, ponieważ możesz mieć wiele bloków kodu, ale sprawia, że szablony są bardziej szczegółowe... próbując zdecydować, jakie podejście przyjąć * Filtrowane zmienne wewnątrz cudzysłowów: * `"xxx {@var|filter} yyy"` * `"xxx @{zmienna|filter} yyy"` * `"xxx @zmienna|filtr yyy"` * tj. @ wewnątrz, @ na zewnątrz lub w ogóle bez nawiasów klamrowych. Myślę, że brak nawiasów klamrowych może powodować problemy, zwłaszcza gdy próbujesz dodać argumenty, takie jak `@var|filter:arg="x"`, wtedy cudzysłowy mogą się pomylić. Ale może wersja bez nawiasów może działać, gdy nie ma cudzysłowów...? Nadal, która opcja dla aparatów ortodontycznych, pierwsza czy druga? Myślę, że pierwszy może być lepszy, ponieważ wtedy jesteśmy konsekwentni... @ zawsze jest przesuwany w stosunku do zmiennej. Za kilka minut dodam więcej pytań, gdy otrzymam informację zwrotną. * * * **Średniki:** Użyję średników do zamykania tagów bez zawartości. Na przykład div; wyjdzie i nie zje następnego tokena tak, jak normalnie. **Przestrzenie nazw:** Ponieważ będę definiował tagi w prostym C#, a C# obsługuje przestrzenie nazw, myślę, że po prostu użyję tej przestrzeni nazw i będzie działać bezproblemowo. `namespace.tagname`, ale nie będzie konieczne dołączanie przestrzeni nazw, chyba że chcesz ujednoznacznić. Pierwszeństwo będzie miała ostatnio dołączona (poprzez dyrektywę @using). * * * @Tom Anderson: div { p "To jest akapit" p "To jest kolejny akapit" } span(class="error") "To będzie jaskrawoczerwone" img(src="smiley.png" , alt=":)") p { "Ten " a(href="about-paragraphs.html") "akapit" " zawiera link." }


title: Jak skutecznie ustalać terminy jako freelancer lub programista domowy?

text: Niedawno zająłem się programowaniem w domu i jednym z problemów, który mam, jest to, że terminy, które mówię moim klientom, nie są często dotrzymywane. W grę wchodzą niektóre czynniki: 1. Mam problem z kodowaniem, który wymaga czasu na zbadanie, co wydłuża o kilka minut mój wyznaczony termin. 2. Zdarza się, że mój internet nie działa przez pół dnia, a nawet cały dzień. 3. Istnieje kilka zapytań pozostawionych bez odpowiedzi (poprzez e-mail) i wiele innych czynników. Zastanawiałam się, jak określić terminy, które uwzględnią wszelkie nieoczekiwane czynniki, które mogą to opóźnić lub coś takiego, co oczywiście nie skrzywi się na twarzy moich klientów, hehe. Nawiasem mówiąc, klient poprosił mnie o stworzenie strony od podstaw przy użyciu Django, w której nie mam dużego doświadczenia. Wiedział o tym i zgodził się, abym przeprowadził badania podczas prac rozwojowych. Powiedziałem, że skończę projekt za około 3 tygodnie, ale nie spodziewałem się, że Django będzie tak masywnym, denerwującym frameworkiem, mój internet nie działał przez kilka dni, a w święty tydzień pracowałem tylko mniej niż 10 godzin. Z góry dziękuję!


title: Czy przy dostępnych bibliotekach programiści powinni uczyć się również starego sposobu pisania tych samych rzeczy?

text: Czy programiści powinni uczyć się pisania ich od zera, jeśli dostępne są gotowe programy, które wymagają jedynie edycji?


title: Jak skracać nazwy zmiennych

text: Zawsze mam problem ze skracaniem nazw zmiennych. Czy istnieje jakiś standard skracania nazw zmiennych?


title: Czy istnieje jeden standardowy framework do tworzenia aplikacji Python GUI.?

text: Jest tak wiele frameworków do pisania aplikacji GUI przy użyciu Pythona. Ale czy istnieje jeden kluczowy standard? Na przykład mamy pakiet .NET/C# w Visual Studio. Myślę też z innych perspektyw. W przyszłości, jeśli udzielę rozmowy kwalifikacyjnej na stanowisko programisty w Pythonie, jaki framework GUI będzie brany pod uwagę? Zastanawiam się też, nie ma IDE, które integruje GUI i język Python. Wybór smaków jest dobry, ale nadmierny wybór staje się rozrywką.


title: Ciągłe wdrażanie i zmiany formatu bazy danych

text: Mój obecny zautomatyzowany przepływ pracy wygląda tak: * Zatwierdzam zmiany * Wypycham zmiany * Uruchamiana jest kompilacja (właściwie tylko wiele testów z wykorzystaniem mock bazy danych) * Jeśli wszystkie testy zakończą się pomyślnie, nowy kod zostanie wdrożony na serwerze Teraz zakładając, że istnieje zmiana formatu bazy danych - pierwsze 3 kroki są zaliczone, ale kod nie będzie działał na serwerze, ponieważ istniejące dane nie są kompatybilne z nowym źródłem. Rozwiązaniem, które nazwałbym miłym, jest również dostarczenie/przetestowanie kodu migracji. Co wygląda na duże obciążenie jak na coś, co jest wykonywane tylko raz. Rozwiązaniem, które nazwałbym rozsądnym, jest zatrzymanie automatycznego wdrażania takich zmian, wykonanie migracji, a następnie ponowne uruchomienie łańcucha wdrożeń. Dzisiaj miałem szczęście, że mój serwer nie jest jeszcze zbyt szeroko używany (mógłbym po prostu wszystko porzucić i z tym żyć) i żadne zmiany nie były wymagane. Jednak w przyszłości nie będę miał tyle szczęścia. Jak właściwie mam postępować ze zmianami w bazie danych?


title: Osiągnięcie zerowego czasu przestojów

text: Staram się osiągnąć zero przestojów, dzięki czemu mogę wdrażać mniej poza godzinami pracy, a więcej w „wolniejszych” godzinach — lub teoretycznie w dowolnym czasie. Moja obecna konfiguracja, nieco uproszczona: * Serwer sieciowy A (aplikacja .NET) * Serwer sieciowy B (aplikacja .NET) * Serwer bazy danych (SQL Server) Mój obecny proces wdrażania: 1. „Zatrzymaj” witryny zarówno na serwerze sieci Web A, jak i B 2. Zaktualizuj schemat bazy danych dla wersji wdrażanej aplikacji 3. Zaktualizuj serwer sieciowy A 4. Zaktualizuj serwer sieciowy B 5. Przywróć wszystko do trybu online ### Aktualny problem Prowadzi to do niewielkiej ilości przestojów każdego miesiąca - około 30 minut. Robię to poza godzinami pracy, więc nie jest to duży problem – ale chciałbym od tego uciec. Poza tym - nie ma sposobu, aby tak naprawdę wrócić. Generalnie nie tworzę wycofanych skryptów DB - tylko uaktualniam skrypty. ### Wykorzystanie Load Balancera Chciałbym móc uaktualnić jeden serwer WWW na raz. Wyjmij serwer sieciowy A z modułu równoważenia obciążenia, zaktualizuj go, włącz z powrotem, a następnie powtórz dla serwera sieci Web B. Problemem jest baza danych. Każda wersja mojego oprogramowania będzie musiała działać na innej wersji bazy danych - więc utknąłem. ### Możliwe rozwiązanie Bieżącym rozwiązaniem, które rozważam, jest przyjęcie następujących zasad: * Nigdy nie usuwaj tabeli bazy danych. * Nigdy nie usuwaj kolumny bazy danych. * Nigdy nie zmieniaj nazwy kolumny bazy danych. * Nigdy nie zmieniaj kolejności kolumn. * Każda procedura składowana musi być wersjonowana. * Znaczenie — po edycji 'spFindAllThings' zmieni się na 'spFindAllThings_2'. * Następnie zmieni się na „spFindAllThings_3” po ponownej edycji. * Ta sama zasada dotyczy widoków. Choć wydaje się to nieco ekstremalne - myślę, że to rozwiązuje problem. Każda wersja aplikacji będzie uderzać w bazę danych w niezniszczalny sposób. Kod oczekuje pewnych wyników z widoków/procedur składowanych — i to utrzymuje ważność tej „kontraktu”. Problem polega na tym, że po prostu sączy się niechlujnie. Wiem, że mogę wyczyścić stare zapisane procedury po wdrożeniu aplikacji na jakiś czas, ale jest to po prostu brudne. Także – zależy to od wszystkich deweloperów stosujących się do tej zasady, co w większości się wydarzy, ale wyobrażam sobie, że ktoś popełni błąd. ### Na koniec – moje pytanie * Czy to niechlujne czy zwariowane? * Czy ktoś inny robi to w ten sposób? * Jak inni ludzie rozwiązują ten problem?


title: Czy istnieje jasna lista zadań analityka wymagań?

text: Czytam o analizie wymagań jako etapie inżynierii wymagań. Mam trudności ze znalezieniem jasnej listy zadań, za które odpowiada analiza wymagań. Gdzie zaczyna się rola analityka wymagań, a gdzie kończy się w całym procesie inżynierii wymagań?


title: Co oznacza „przedsiębiorstwo” w odniesieniu do architektury oprogramowania?

text: Widzę, że termin „przedsiębiorstwo” jest często rzucany wśród programistów i programistów i wydaje się, że jest używany luźno. > **en·ter·prise/ˈentərˌprīz/** > > Rzeczownik: Projekt lub przedsięwzięcie, zazwyczaj trudne lub wymagające > wysiłku. Inicjatywa i zaradność. Czy ktoś może wyjaśnić, co właściwie obejmuje ten termin? „Na poziomie przedsiębiorstwa”, „w skali przedsiębiorstwa”? Istnieją nawet „edycje korporacyjne” rzeczy. Co to dokładnie znaczy? Oczywiście nie ma sensu sądzić po powyższej definicji, więc konkretniej w odniesieniu do oprogramowania, co należy rozumieć, używając słowa przedsiębiorstwo? **EDYTUJ:** Aby dodać spin na tym - jak ten termin pasuje do wyrażeń takich jak Enterprise Framework Model? Co dostęp do danych i kontekst danych mają wspólnego z opisami całej firmy?


title: Czy powinienem celowo przerwać kompilację, gdy błąd zostanie znaleziony w produkcji?

text: Wydaje mi się rozsądne, że w przypadku wykrycia poważnego błędu w środowisku produkcyjnym przez użytkowników końcowych, należy dodać nieudany test jednostkowy, aby pokryć ten błąd, w ten sposób celowo przerywając kompilację, dopóki błąd nie zostanie naprawiony. Moim uzasadnieniem jest to, że kompilacja _powinna od początku zawodzić_ , ale nie była spowodowana niewystarczającym pokryciem automatycznych testów. Kilku moich kolegów nie zgodziło się, twierdząc, że nie sprawdzający się test jednostkowy nie powinien być sprawdzany. Zgadzam się z tym punktem widzenia w zakresie normalnych praktyk TDD, ale uważam, że błędy produkcyjne powinny być traktowane inaczej - w końcu dlaczego miałbyś chcieć dopuścić kompilacja, która odniesie sukces ze znanymi wadami? Czy ktoś jeszcze ma sprawdzone strategie radzenia sobie z tym scenariuszem? Rozumiem, że celowe zerwanie kompilacji może przeszkadzać innym członkom zespołu, ale to całkowicie zależy od tego, jak używasz gałęzi.


title: Wykrywanie kraju witryny

text: Mam robota internetowego i szukam wskazówek, które pomogą mi automatycznie wykryć kraj pochodzenia witryny. A przez kraj pochodzenia ogólnie mam na myśli kraj, na który jest kierowana witryna. Na przykład: * http://www.spiegel.de/ -> Niemcy * http://www.lemonde.fr/ -> Francja * http://publico.pt/ -> Portugalia * http://www. elpais.es/ -> Hiszpania Wiem, że nie ma niezawodnego sposobu na zrobienie tego, więc prawdopodobnie będę polegał na systemie punktacji. * Nazwa domeny; * Język treści; * Adres IP serwera; * Informacje `Whois`; Jakie dodatkowe parametry byś użył? W przypadku poprzednich przykładów wystarczy kombinacja domeny i języka treści, ale wiele witryn ma domenę `.com` i język używany w więcej niż jednym kraju...


title: Dlaczego metoda PHP porównywania różnych typów jest zła?

text: Pracuję nad zaprojektowaniem nowego języka programowania i próbuję zdecydować, jak zrobię porównania zmiennych. Wraz z wieloma różnymi typami języków, używam PHP od lat i osobiście nie miałem żadnych błędów związanych z jego operacjami porównywania innych niż sytuacje, w których 0 = fałsz. Mimo to słyszałem wiele negatywnych opinii na temat jego metody porównywania typów. Na przykład w PHP: 2 < 100 # True "2" < "100" # True "2" < 100 # True W Pythonie porównanie ciągów wygląda następująco: 2 < 100 # True "2" < "100" # Fałsz "2" < 100 # Fałsz Nie widzę żadnej wartości w implementacji Pythona (jak często naprawdę musisz widzieć, który z dwóch ciągów jest leksykograficznie większy?) i nie widzę prawie żadnego ryzyka w metodzie PHP i dużą wartość . Wiem, że ludzie twierdzą, że może to powodować błędy, ale nie wiem jak. Czy naprawdę nastąpi sytuacja, w której testujesz if (100 = "100") i nie chcesz, aby łańcuch był traktowany jako liczba? A jeśli naprawdę to zrobiłeś, możesz użyć === (na co również słyszałem, jak ludzie narzekają, ale bez żadnego istotnego powodu). Więc moje pytanie brzmi: nie licząc niektórych dziwnych reguł konwersji i porównywania PHP dotyczących zer, wartości null i ciągów znaków zmieszanych ze znakami i liczbami, czy są jakieś istotne powody, dla których porównywanie int i ciągów w ten sposób jest złe i czy są jakieś prawdziwe powody posiadanie operatora === jest złe?


title: System sprawdzania trafności komentarzy do kodu

text: Kiedy piszę komentarze do automatycznie generowanej dokumentacji, po kilku zmianach metody może to stać się nieistotne. Czy mamy jakiś system, który automatycznie sprawdza, zapobiega takiej sytuacji i ostrzega programistę o aktualizacji komentarza? Może jakieś haki VCS?


title: Cotygodniowe spotkanie technologiczne?

text: Zastanawiam się nad wprowadzeniem cotygodniowego spotkania technologicznego, na którym programiści pracujący nad tym samym projektem mogą omówić takie kwestie jak: * aktualny stan projektu od strony technicznej * backlog technologiczny. Rzeczy, które mogliśmy pominąć z powodu terminów, ale teraz wracają, by nas ugryźć. * ograniczenia technologiczne, które ograniczają produktywność programistów * nowe i pojawiające się technologie, które mogą mieć zastosowanie w projekcie Patrząc na projekt z perspektywy programisty, a nie od strony biznesowej. - Jakie byłyby dobre wytyczne na takie spotkanie? * Jak długo powinno trwać spotkanie? * Czy co tydzień jest zbyt często? * Czy powinniśmy ograniczyć czasowo każdy temat? * Jakie tematy są dobre na takie spotkanie, a które są złe? * Czy 10 osób to za dużo? ...


title: Programowanie Pythona w systemie Windows i wdrażanie w systemie Linux

text: Mam klienta, który wolałby hostować swoją aplikację na Linuksie. Jednak moi współpracownicy i ja mamy bardzo małe doświadczenie z Linuksem. Jest to krótki projekt o niskim budżecie, więc dokonywanie wyborów oszczędzających czas i pieniądze jest nie tylko pożądane, ale wręcz konieczne. Intensywnie zajmujemy się również ciągłą integracją i automatyzacją, z których większość już odkryliśmy w systemie Windows i możemy ponownie wykorzystać z poprzednich projektów. To powiedziawszy, nauczenie się przez zespół programistów Linuksa i przebudowanie naszej automatyzacji, abyśmy mogli programować w tym samym środowisku, w którym zamierzamy wdrożyć, najprawdopodobniej nie jest opłacalną opcją. (Być może dla większego projektu, ale nie tego). Zespół _jest_ na tyle zaznajomiony z Pythonem, że napisanie aplikacji w Pythonie jest realną opcją (nawet jeśli większość naszego rozwoju jest wykonywana w .NET), chociaż musielibyśmy wymyślić dobry mechanizm pakowania, który można uruchomić w systemie Windows i umieścić na komputerze z systemem Linux. Nie spodziewam się, że będą potrzebne żadne biblioteki niedostępne w systemie Windows. Najprawdopodobniej będziemy potrzebować tylko `psycopg` i `sqlalchemy` jeśli chodzi o biblioteki z komponentami natywnymi. Wszystko to sprawia, że pomysł, aby programiści stworzyli aplikację w systemie Windows, wdrożyli ją w środowisku testowym Linux, a następnie po dokładnym przetestowaniu wrzucili na produkcję, wydaje się dość atrakcyjną opcją, ale podchodzę do tego sceptycznie. Linux i Windows to bardzo różne systemy operacyjne i martwię się o pułapki, które mogą się podkraść i bardzo utrudnić życie. Czy istnieją jakieś realne obawy związane z robieniem tego (poza typowymi różnicami w ścieżkach plików i innymi typowymi problemami, które można łatwo rozwiązać dzięki dobrym praktykom kodowania)? Myślę, że wielu dostawców hostingu współdzielonego korzysta z Linuksa i nie wyobrażam sobie, aby każdy z nich korzystał z Linuksa przez ostatnie dziesiątki lat. Czy robi się to częściej, niż mi się wydaje?


title: czy OpenID jest naprawdę taki zły?

text: Widziałem to pytanie na Quorze, gdzie wiele osób wydaje się zgadzać, że OpenID jest zły, posuwając się nawet do stwierdzenia, że: > OpenID jest najgorszym możliwym „rozwiązaniem”, jakie kiedykolwiek widziałem w całym moim życiu > ludzie tak naprawdę nie mają. Widziałem artykuły i tweety odnoszące się do tego pytania, mówiące, że OpenID przegrał, a Facebook wygrał. Przykro jest czytać, bo lubię OpenID (a przynajmniej pomysł, który się za nim kryje). Dosłownie nienawidzę zdobywania kolejnego loginu/hasła do strony (i tak o tym zapomnę) - to dla mnie dość poważny problem i znam wiele osób z tym samym problemem. Pomyślałem więc, że OpenId to świetne rozwiązanie, ale nie jestem już pewien. Więc pytanie brzmi, czy nadal powinienem zawracać sobie głowę implementacją OpenID, czy nie warto? Jaki jest najbardziej niezawodny i wygodny (z perspektywy użytkownika) sposób identyfikacji i uwierzytelniania użytkownika?


title: Odbieranie i wysyłanie wewnętrznych wiadomości SMS (przy użyciu karty SIM)?

text: Moje potrzeby są bardzo proste, ale nie znam terminów, w których powinienem wyszukiwać w Google: muszę od czasu do czasu wysłać SMS-a do komputera, a ten komputer odpowie kolejnym SMS-em na numer, który wysłał pierwszego SMS-a. Nie mam nic do powiedzenia na temat tego, jak działa ta maszyna: jest zamknięta i jedyne, co robi, to odbieranie SMS-ów i wysyłanie SMS-ów w odpowiedzi na otrzymane SMS-y (i jednoznacznie na numer, który wysłał pierwszego SMS-a) i nie ma innego sposobu na interfejs z tym. Po otrzymaniu "odpowiedzi SMS", muszę zaktualizować serwer / bazę danych (zwykły serwer aplikacji Java + SQL DB) o informacje zawarte w SMS-ie. Nie będzie dużego wolumenu (tylko kilka SMS-ów dziennie), a solidność nie jest tak ważna (kilka SMS-ów może zostać pominiętych). Jaka byłaby możliwa architektura dla czegoś takiego? Myślałem o użyciu dwóch lub trzech tanich smartfonów i daniu im kart SIM, a następnie zaprogramowaniu ich do regularnego (raz na wysokość około godziny) wysyłania SMS-ów. Następnie te smartfony otrzymałyby SMS z powrotem z urządzenia, z którym się skontaktowały, a ja przechwyciłbym ten SMS i odpowiednio zaktualizowałby mój serwer / bazę danych. _(Będę miał fizyczną kontrolę nad tymi smartfonami, więc udzielenie wymaganych uprawnień do dowolnej aplikacji nie będzie problemem)_. Czy jest to coś łatwego do wykonania? Technicznie, jeśli takie rozwiązanie mogłoby działać, jak mogę uzyskać dostęp do funkcji SMS telefonu? A jak mogę zmusić telefon do aktualizacji mojego serwera/DB? (telefon można podłączyć do Internetu, więc rozumiem, że mogę po prostu wykonać POST HTTP do mojego serwera). A może są już jakieś (najlepiej darmowe lub open-source) oferujące podobną funkcjonalność? (może coś niezupełnie niepodobnego do tego, co robi "zapier" z "ifttt", gdzie mógłbym stworzyć regułę mówiącą: _"Jeśli otrzymam SMS-a zawierającego słowo xxx, wyślij SMS-a używając HTTP POST na adres URL yyy"_ ). Zwróć uwagę, że sam skonfigurowałem serwer(y) hostujące aplikację internetową i sam opracowałem całą aplikację internetową: więc część "programowania" nie stanowi większego problemu. Mój problem polega na tym, że nie wiem, jak „utworzyć pomost” między SMS-em przychodzącym w odpowiedzi na inny SMS a moim serwerem internetowym. Mam nadzieję, że wyjaśniłem tę kwestię wystarczająco prosto: w zasadzie potrzebuję wskazówek dotyczących architektury, z której będę korzystać (co pasuje do programrs.stackexchange, o ile mogę to stwierdzić po przeczytaniu jego FAQ).