title: Pytanie o dostęp do API

text: **PIERWSZA, SCENARIUSZ** Mamy wewnętrzny system, który jest efektywnie podzielony na 2 bardzo oddzielne części w 2 subdomenach, nasz system administracyjny zaplecza tylko dla dostępu wewnętrznego nazwiemy go admin.example.com i naszą publiczną - interfejs skierowany do klientów za pośrednictwem naszej strony internetowej - nazwijmy to www.example.com/customers Zbudowaliśmy szereg interfejsów API z PHP w systemie zaplecza, aby uzyskać dostęp do interfejsu publicznego, interfejsy API są podzielone na wiele plików w oparciu o rodzaj aktywności, która jest wykonywana i jest również używana w interfejsie administratora, są one przechowywane w admin.example.com/apis/activity_api.php nie mamy tu żadnych problemów. Mamy również klucze API, które są w użyciu, 1 dla front-endu i jeden dla back-endu, dzięki czemu możemy określić poziomy dostępu bez zastanowienia. **DRUGA, PROBLEM** Teraz wiesz, że problemem jest struktura aplikacji, używamy jQuery AJAX do wywoływania interfejsów API, ale nie lubię umieszczać tutaj kluczy API, ponieważ są one widoczne publicznie i każdy, kto ma niewielka wiedza programistyczna będzie w stanie pobrać ogromny zakres danych, jednocześnie musimy z nich korzystać. Zauważ, że problem dotyczy tylko interfejsu publicznego. To, o czym myślę, to wywołanie skryptu łączącego w PHP z AJAX, który jest przechowywany lokalnie na naszym publicznym serwerze, to zrobi kilka rzeczy 1. Sprawdź referrer, jeśli pochodzi z example.com/customers/ lub www. example.com/customers/ kontynuuje, jeśli nie, żądanie jest zabijane z nieautoryzowanym błędem 2. Pobiera zmienne wysłane przez żądania AJAX 3. Restrukturyzuje zmienne dla API (np. otrzymuje `$_GET['request']` następnie rekonstruuje jako `$_GET['req']`) 4. Dodaje klucz API, który jest przechowywany jako zmienna w PHP do łańcucha 5. Używa `file_get_contents()` do wykonania rzeczywistego żądania do API, co byłoby w turn zapełnij łączący skrypt PHP wymaganymi zwróconymi danymi API do serwisu Moje pytania to 1. Czy coś przegapiłem w tej koncepcji? 2. Czy są jakieś wady, o których nie pomyślano? 3. Czy istnieją przekonujące powody, dla których nie należy stosować tego typu konstrukcji? Doceniam wkład! **CO ZROBIŁEM** Naprawdę chcę wam podziękować za pomoc i komentarze w tym temacie, wskazaliście, co przegapiłem i to był cel zadania pytania w pierwszej kolejności. Pomogłeś mi też dostrzec oczywiste słabości. Właśnie napisałem algorytm uwzględniający zasady HMAC. Jak wszystko w tej przestrzeni jest miejsce na nieautoryzowany dostęp, ale wierzę, że mój algorytm to minimalizuje. Podstawowy proces, z którym mamy do czynienia, wygląda następująco 1. Utworzono 2 klucze, klucz prywatny i publiczny 2. Najpierw zahaszowano klucz publiczny 3. Obliczenie bazowe jest przeprowadzane na części aktualnego znacznika czasu 4. 2 generowane są losowe klucze dla żądania get, które będą używane do transportu kluczy dostępu, aby określić klucze żądania, obliczenia matematyczne przeprowadzane są na podstawie obliczeń bazowych w kroku 3, wynik jest następnie dzielony na 2 części, 2 części są zweryfikowane jako unikalne i przeliczone na wartości końcowe, 1 część należy do publicznego klucza dostępu, a druga do prywatnego klucza dostępu 5. Pobiera się 9 unikalnych wartości publicznych oraz wydany prywatny klucz dostępu, których kolejność następuje na podstawie na ostatecznych obliczeniach na podstawie wartości bazowej w kroku 3 tworzenie „podpisu” niejako 6. Podpis jest następnie hashowany i przypisywany do prywatnego klucza pobierania wygenerowanego w kroku 4 W przypadku szybkich obliczeń i podstawowych testów każde żądanie będzie ważne przez około 27 sekund (giv e lub zająć kilka milisekund) - wystarczająco dużo czasu, aby przetworzyć wszystko, co jest potrzebne, ale nie wystarczy na dużo więcej. Ponieważ obliczenia są dość podstawowe, obciążenie serwera nie wzrosło ani o cal – testowałem tylko z 10 połączeniami na sekundę przez 5 minut, jednak zamierzam przeprowadzić na nim serię testów obciążenia w ciągu następnych 24 godzin, które będzie wahać się od 20 żądań na sekundę do 400 żądań na sekundę i porównać z wynikami testu obciążenia z zeszłego tygodnia. Więc to, co robi mój nowy algorytm w skrócie, to ukrywanie kluczy publicznych i prywatnych przez mieszanie obu - jednak po pewnym czasie publiczny klucz dostępu będzie oczywisty, chyba że przypiszę algorytm do jego randomizacji, przypisuje oba klucze dostępu losowo krótki czas ważności na podstawie zapytania. Nie musi przechowywać żadnych danych w plikach cookie ani sesjach. Ponadto, z wyjątkiem API logowania, wszystkie żądania przechodzą przez łącznik PHP, który wymaga zalogowania użytkownika. Więcej czasu poświęciłem na wyjaśnianie, co robię, niż na tworzenie tego! Jeszcze raz dziękuję za pomoc chłopaki, pomogło mi to trochę bardziej otworzyć oczy i przypomniało mi o tym, o czym zapomniałem.


title: DCVS i baza błędów

text: Rozważam zaimplementowanie poniższej polityki i chciałbym uruchomić ją przez społeczność przed jej wdrożeniem: Wszystkie zatwierdzenia mercurial muszą mieć identyfikator błędu odpowiadający naszej bazie danych zgłaszania błędów. Wszystkie zatwierdzenia bezpośrednio poprzedzające push dla nowej funkcji muszą mieć identyfikator błędu (jest to nowa funkcja, ale id nadal jest „identyfikatorem błędu” w bazie danych). Spowoduje to kilka rzeczy. Po pierwsze, upewni się, że wpis jest zawsze umieszczany w bazie danych błędów dla wszystkich zmian w kodzie. Po drugie, zapewni porównanie każdej zmiany dokonanej dla każdej poprawki błędu. Uprościłoby to również komentowanie w zatwierdzeniach mercurial i umieściłoby większość szczegółów o zatwierdzeniu w zgłoszeniu błędu. Czy znasz jakieś powody, dla których byłby to zły pomysł? Czy uważasz, że powinienem wprowadzić jakieś dodatki do tej polityki?


title: Dlaczego firmy nie wysyłają wielu modułów w ramach aplikacji mobilnej? Czy istnieją obawy dotyczące ścisłego sprzężenia?

text: **Przedmowa:** Moje pytanie _nie_ dotyczy wyłącznie Google i nie dotyczy wyłącznie iOS. Używam tylko Google i iOS jako przykładów, ponieważ są one znane wielu. Równie łatwo mogłem użyć „Firma X”, aplikacji „A”, „B”, „C”, „D”, „E” i „Android”, ale chciałem, aby moje pytanie było zakorzenione w rzeczywistości świat z namacalnym przykładem. * * * W sklepie z aplikacjami na iOS Google ma wiele aplikacji. Na pierwszy rzut oka widzę „Wyszukiwarkę Google”, „Google+”, „Mapy Google”, „Google Earth” i „Gmail”. Ale zastanawiam się – **Dlaczego Google po prostu nie stworzył aplikacji „Google”, która zapewnia wszystkie funkcje tych pięciu aplikacji?** Czarny pasek menu u góry każdej strony internetowej Google umożliwia to w internecie ; więc dlaczego nie umożliwiają tego za pomocą przycisku menu na dole jednej „globalnej” aplikacji Google? * Czy Google jest zaniepokojony ścisłym sprzężeniem między aplikacjami? * Czy Google jest zaniepokojony ścisłą współpracą między _zespołami_, które opracowują aplikacje? * Czy Google martwi się rozmiarem aplikacji? * Czy firma Google jest zaniepokojona zużyciem pamięci lub obciążeniem procesora, jakie może ponieść taka monolityczna aplikacja po załadowaniu? * * * [Nie tyrady. Po prostu granie w adwokata diabła.] Pomimo wielu zalet, niektórzy krytycy iOS twierdzą, że wiele stron aplikacji sprawia, że iPhone i iPad są „zaśmiecone”. Jest to szczególnie istotne w przypadku mojego pytania, ponieważ wydaje się, że użytkownik będzie wiedział o tak wielu ofertach mobilnych Google i zarządzał nimi. Z punktu widzenia produktu i prawdopodobnie z punktu widzenia użyteczności, wydaje się, że rozsądnie byłoby wysłać pojedynczą aplikację. * * * ![Czarny pasek menu Google](http://i.stack.imgur.com/q2h8Z.jpg) * * * Jeśli jesteś ciekawy, mam iPhone'a i Nexusa 7; więc nie jestem przywiązany do żadnej z dwóch głównych platform mobilnych. I mam tutaj prawdziwy problem do rozwiązania - czy połączyć wiele aplikacji w jednej dużej aplikacji, czy też rozdzielić oddzielne części funkcjonalności w wielu aplikacjach. * * * **EDYTUJ:** W odpowiedzi na komentarz @MichaelT * Chociaż rzeczywiście istnieje limit rozmiaru 2 GB dla aplikacji, rozmiar piaskownicy jest ograniczony tylko przez pozostałą pojemność urządzenia.


title: Jak mogę ulepszyć ten projekt, aby nie musiałem dynamicznie skanować klas w czasie wykonywania?

text: Jestem w trakcie przebudowy części mojego obecnego projektu, która dotyczy uprawnień i autoryzacji użytkowników. Mam interfejs o nazwie `IUserPermissions`, który zawiera te informacje. Jedną z części uprawnień użytkownika są **Role**, których jest członkiem. Próbuję _nie_ naruszać zasady Open/Closed, dodając każdą możliwą rolę do `IUserPermissions` jako właściwość taką jak ta: interface IUserPermissions { bool IsAdmin { get; ustawić; } bool IsDeveloper { get; ustawić; } // Dużo więcej...Fuj. } Czuję, że posiadanie takiego interfejsu byłoby lepsze dla OCP: interface IUserPermissions { ICollection<IRole> Roles { get; } bool IsInRole<T>() gdzie T:IRole; /* (Dla wygody; prawdopodobnie zostanie zaimplementowana jako metoda rozszerzająca) */ } interface IRole { string Name { get; } } public class AdminRole : IRole { public string Name { get { return "Admin"; } } } Gdzie upadam, to jak _zaimplementować_ coś takiego. Używam API ról ASP.NET jako magazynu zapasowego, co oznacza, że otrzymam `string[]` nazw ról dla użytkownika. Moja implementacja `IUserPermissions` musiałaby zacząć od tej kolekcji łańcuchów i jakoś działać _wstecz_ , a następnie utworzyć instancję odpowiednich `IRole` do wypełnienia właściwości `Roles`. Można to zrobić skanując zestaw w poszukiwaniu `IRoles` za pomocą konstruktora bez parametrów, tworząc ich instancję i odczytując ich właściwość `Name`, ale...ugh. Jak mogę naprawić ten projekt, aby nie _musie_ tego robić?


title: Dzielenie się wiedzą w pracy opartej na działaniu

text: Moje miejsce pracy wkrótce przejdzie do koncepcji „pracy opartej na aktywności”, która przechodzi z idei zespołów IT, zespołów BA, zespołów PM itp. do pracy opartej na projektach, w której ludzie ze wszystkich aspektów IT i biznesu są zaangażowani w projekt siedzieć i pracować razem. W rezultacie nie siedziałbyś z normalnymi kolegami z zespołu na co dzień, a dzielenie się wiedzą w ten rodzaj organicznego sposobu z resztą zespołu deweloperów tak naprawdę nie miałoby miejsca. Jakie sposoby poleciłbyś, aby pomóc zachować tę współpracę zespołową i dzielenie się wiedzą, gdy ludzie nie będą już fizycznie współistnieć ze swoimi kolegami z zespołu? Nie wspominając już o zachowaniu tego „ducha geeka” (być może złego określenia), w którym deweloperzy zachęcają się i trenują nawzajem, aby znaleźć lepsze projekty i rozwiązania. Myślałem już o narzędziach do współpracy online, takich jak Trello lub Mingle, plus wiki lub oprogramowanie, takie jak Confluence, aby pomóc we współpracy i dyskusji. Ale chciałbym usłyszeć opinie ludzi na temat tego, co jeszcze można zrobić, lub ich własne doświadczenia z takim podejściem do codziennej pracy.


title: Czy czytanie kodu i czytanie o kodzie pomaga w samorozwoju?

text: Jak powie Ci mój profil, jestem na drugim roku 4-letniego programu Inżynierii Oprogramowania. (Długi post, przejdź do końca, aby zobaczyć wersję skróconą) * * * Najpierw trochę tła. Zacząłem kodować w C++ około 5 lat temu. Od tego czasu byłem pewien, że chcę żyć w kodzie :) W ciągu ostatnich 2 semestrów napisałem sporo kodu, który zawierał około 30-40 zadań algorytmicznych wraz z podstawowym kodem AI w każdym semestrze, wszystko inne niż moje zajęcia, które również były nieco intensywne w kodzie. Jednak przez ostatnie 2-3 miesiące nie napisałem żadnego kodu. Czytałem kod innych osób, czytałem o kodzie, znajdowałem błędy w kodzie, eksplorowałem biblioteki, przeglądałem dokumentację, eksplorowałem różne języki i spędzałem dużo czasu na SO, ale _nie napisałem żadnego kodu_. Albo z powodu braku motywacji, albo z powodu sapania, _zainteresowania_, nie jestem pewien. Teraz czuję się jeszcze gorzej, bo nic z tego nie mogę napisać w CV (sezon stażowy w mojej uczelni zbliża się wielkimi krokami, co ma kluczowe znaczenie dla zdobycia pracy w przyszłym roku). Poza tym myślę, że w ciągu ostatnich kilku lat nie rozwinąłem swoich umiejętności tak bardzo, jak powinienem. * * * * Czy zatem czytanie o kodzie zamiast kodowania faktycznie pomaga mi się rozwijać? * Czy może mi to w jakiś sposób pomóc w moich obecnych krótkoterminowych perspektywach zawodowych?


title: Zalecany odczyt kodu źródłowego Java

text: Tak jak każdy autor musi przeczytać dużo literatury klasycznej, aby rozwinąć swój własny styl i jak każdy szachista czytał i analizował wcześniej partie byłych mistrzów, tak myślę, że każdy programista musi przeczytać dużo wysokiej jakości kodu. Jeśli chodzi o kod źródłowy Java, jakie są twoje zalecenia jako "czytanie". Które projekty open source, biblioteki w przeszłości okazały się łatwiejsze do zrozumienia i łatwe do odczytania, ale także bardzo dobre przykłady tego, jak wygląda kod „wysokiej jakości”?


title: Jak zaprojektować osobistego menedżera harmonogramu, który działa 24/7?

text: Opracowałem dla siebie system zarządzania ADHD, który próbuje zmienić wiele nawyków naraz. Wiem, że jest to sprzeczne z konwencjonalną mądrością, ale próbowałem konwencjonalnej przez lata i teraz próbuję tego na swój sposób. (Chciałem tylko to powiedzieć, aby nie odwracać uwagi ludzi od właściwego pytania) W każdym razie chciałbym napisać coś do uruchomienia na zdalnym serwerze, który mnie monitoruje, pomaga mi budować/unikać pewnych nawyków itp. Co to jest sumy to system, który: * działa 24/7 * może mieć wiele niezależnych zadań uruchamianych jednocześnie * może mieć zadania, które wymagają uruchomienia innych zadań w pierwszej kolejności * pozwala na zaplanowanie zadań w określonym czasie, powtarzalności (np. "uruchamiaj co 5 min") lub interwał (tj. "uruchom od 14 do 15") Moją pierwszą naiwną próbą było uruchomienie jednego skryptu PHP zaplanowanego do uruchomienia co minutę przez crona (język został wybrany, aby korzystać z określonej biblioteki, ale nie dłużej konieczne). Logika stojąca za tym, kiedy uruchomić tę lub inną część kodu, dość szybko stała się owłosiona. Więc moje pytanie brzmi, jak mam do tego podejść? Nie jestem przywiązany do żadnego języka, chociaż mam słabość do python/javascript. Myśli: * Można by to zrobić jako zestaw skryptów, które zawierają mechanizm planowania z jednym skryptem na bit logiki... ale ten pomysł po prostu wydaje mi się niewłaściwy. * Budowanie go jako demona może być pomocne, ale nadal nie masz pewności, co zrobić z dziesiątkami instrukcji if-else do wykrywania bieżącego czasu


title: Jak poinformować programistów o czymś przydatnym?

text: Dość często przechodzę przez ból, aby odkryć, jak zrobić coś pożytecznego, w tym przypadku, jak uruchomić PHP w Google App Engine bez problemu 'resin.jar za duży', ale nie mam gdzie powiadomić ludzi. W tym konkretnym przypadku odpowiedzi internetowe były niekompletne, nieaktualne lub po prostu błędne. Mógłbym stworzyć bloga, ale to przesada. Chcę tylko dać programistom szybkie rozwiązanie/podejście. Nie jestem pewien, czy zadać pytanie, a potem na nie odpowiedzieć, jest skończone. Krótko mówiąc, fajnie byłoby móc po prostu zrzucić rodzaj połączonego pytania/odpowiedzi/fragmentu, a następnie pozwolić innym komentować jak zwykle, zestrzelić to, jak to, cokolwiek. Jak podchodzi do tego reszta z was? Pozdrawiam, Shane


title: Testowanie interfejsu API JMetera

text: Zazwyczaj testujemy web API za pomocą jmeter, pisząc skrypty testowe. Czy istnieje sposób na stworzenie oprogramowania, które będzie automatycznie generowało skrypty testowe do testów? Jmeter będzie używany jako backend do testów. A oprogramowanie, które stworzymy będzie we frontendzie, jako interfejs.


title: Tworzenie aplikacji zorientowanych na system

text: Systemy kompilacji dla aplikacji internetowych są świetne: zapewniają zarządzanie zależnościami, minimalizację kodu i możliwość korzystania z technologii, takich jak SASS lub CoffeeScript, które wymagają wstępnego przetwarzania. Jednak uważam, że używanie systemów kompilacji jest brzydkie i denerwujące ... musisz upewnić się, że programiści mają zainstalowane narzędzia do budowania, że zainstalowane wersje są kompatybilne z twoją konfiguracją i że wszelkie zależności narzędzi do budowania (SASS kompilator, jsmin itp.) są spełnione. Wprowadzenie nowego programisty wymaga teraz zainstalowania zestawu narzędzi w jego systemie lokalnym. Możemy z tym walczyć za pomocą wirtualizacji: system taki jak Vagrant może pozwolić na skodyfikowanie konfiguracji systemów deweloperskich. Istnieje wyraźna seria kroków, aby utworzyć środowisko programistyczne ze wszystkimi zależnościami lub obraz maszyny, który jest już skonfigurowany i można go po prostu zainstalować i uruchomić. **Moim celem jest, aby system kompilacji był nieinwazyjny. Chciałbym, aby programiści niekoniecznie musieli być świadomi systemu kompilacji, aby włamać się do projektu. To może być nierealne.** Dzięki Vagrant możesz to osiągnąć, mając usługę „obserwacji” systemu kompilacji, która automatycznie uruchamia i ponownie kompiluje pliki za każdym razem, gdy ulegną zmianie. To dobrze, ale co z deweloperem systemu lokalnego, który nie chce uruchamiać Vagranta? Muszą pamiętać o uruchomieniu osobnego procesu za każdym razem, gdy siadają do rozwoju. Jedno podejście, którego nie widziałem, to uświadomienie systemu budowania aplikacji. Wydaje się, że narusza to rozdzielenie obaw, jednak przy nowoczesnym tworzeniu stron internetowych wydaje się, że jesteśmy już ściśle związani z naszymi systemami kompilacji: bez uruchamiania skryptu kompilacji będziesz w stanie uruchomić swoją aplikację internetową i zobaczyć coś znaczącego? Czy Twoje zasoby statyczne będą na miejscu? Czy istnieje ważny powód **nie**, aby aplikacja sprawdzała stan kompilacji i w razie potrzeby sama się odbudowywała, gdy jest w trybie programistycznym? Podczas uruchamiania serwera deweloperskiego aplikacja może być świadoma systemu kompilacji i w razie potrzeby budować swoje zasoby. Nie uchyla się to od wymagań dotyczących zależności w systemie deweloperskim. Nie mam jeszcze konkretnego pomysłu na to, czego szukam, ale wydaje mi się, że systemy budowania aplikacji internetowych nie są jeszcze „dopracowane”. Mam nadzieję, że uda mi się tu przeprowadzić dobrą burzę mózgów.


title: Różne algorytmy punktacji dla różnych elementów konkurencji

text: Tworzę system punktacji dla zawodów, który jest nieco niejasny, ale przypomina Olimpiadę pod względem struktury na wysokim poziomie. Dlatego zadam pytanie w kategoriach wyabstrahowanej, fikcyjnej wersji Igrzysk Olimpijskich, ponieważ każdy może się do tego w pewnym stopniu odnieść. Przyjmij następującą hierarchię klas i zestawienia wyników: * Klasa Event zawiera jeden lub więcej sportów (np. Igrzyska Olimpijskie 2012 mają Decathlon, IndividualMedley itp.) i jeden lub więcej EventScores (jeden EventScore na drużynę na wydarzenie obliczany przez zsumowanie drużyn SportScores dla konkretnego wydarzenia) * Klasa sportowa zawiera jeden lub więcej elementów (np. Decathlon ma rzut pchnięciem, rzut oszczepem itp.) i co najmniej jeden wynik sportowy (jeden wynik sportowy na drużynę na sport obliczany przez zsumowanie wyników elementowych zespołu dla konkretnego sportu) * Klasa elementu ma jedną lub więcej Rund (np. Pchnięcie Strzałem ma Rzut1, Rzut2 itd.) i jeden lub więcej Wyników Elementów (jeden Wynik Elementu na Drużynę na Element obliczany przez zsumowanie Wyników Rundowych zespołu dla danego Elementu) Metoda CalculateRoundScore()) danego RoundScore zależy od elementu, do którego należy Round. Przykłady: * Element Shotput: CalculateRoundScore(double ThrowDuration, double ThrowDistance, double GruntVolume) { algorytm; } * Element Javelin: CalculateRoundScore(double ThrowDuration, double ThrowDistance, double GruntVolume) { algorytm (różny od algorytmu Shotput, chociaż parametry są takie same, co wydaje się eliminować przeciążenie jako realną opcję); } * Element 100MeterDash: CalculateRoundScore(double Time, bool FalseStart) { algorytm; } Chociaż szukam ogólnych wskazówek dotyczących architektury, oto niektóre z moich konkretnych pytań: * Jak powiązać różne metody CalculateRoundScore z różnymi elementami? * Czy powinienem używać interfejsów, dziedziczenia, przeciążania czy innego podejścia? * W jakich klasach powinny znajdować się różne metody CalculateRoundScore? Koncepcyjnie mogę sobie wyobrazić, że każdy element jest interfejsem ICalculateRoundScore. Jednak ma to sens tylko wtedy, gdy stworzę inną klasę dla każdego innego elementu, co wydaje się niepoprawne. Wydaje mi się, że potrzebuję jakiegoś rodzaju wyszukiwania, w którym klasa Round wybiera swoją konkretną metodę CalculateRoundScore w zależności od elementu, do którego należy, ale nie jestem pewien, jaki byłby poprawny sposób zorientowany obiektowo, aby to zrobić.


title: W Javie po co używać hacków bitowych, skoro technika niebitowa jest bardziej czytelna?

text: Czy istnieje uzasadnione zastosowanie hacków do manipulacji bitami w językach wyższego poziomu, takich jak Java? Widzę, że są przydatne w wrażliwych na prędkość programach niskiego poziomu i intensywnych obliczeniowo, np. przetwarzanie grafiki lub funkcje kryptograficzne. Myślę, że dlatego wszystkie ich kolekcje są w C. Jednak myśląc o nich w kategoriach projektowania wyższego poziomu, nie mogę wymyślić żadnego punktu, w którym mógłbym na przykład napisać w programie Java: r = y ^ ((x ^ y) & -(x < y)); zamiast: r = (x < y) ? x : y; Pierwsza linia wygląda bardziej jak zaciemnienie niż poprawa. Większość aplikacji ma różne rodzaje wąskich gardeł - najczęściej sieci lub dostęp do dysków, do tego stopnia, że każda potencjalna poprawa uzyskana przy użyciu hackowania bitowego byłaby tak mała, że można ją całkowicie zignorować. Ten tok myślenia został sprowokowany niedawnym pytaniem SO, w którym podczas wywiadu ktoś został zapytany o bitwise hack w Javie. Zgadzam się jak każdy, że zawsze lepiej jest pisać szybszy kod, ale biorąc pod uwagę, że staje się on znacznie mniej czytelny, zwłaszcza dla kogoś, kto nie zna bit hacków, czy jest jakaś aplikacja, w której jest to uzasadnione? To pytanie nie dotyczy ogólnie _operatorów_ bitowych, ale dokładniej o _hackach_ bitowych_ , a jeszcze dokładniej o hackach bitowych _w Javie_. Przez _hackowanie bitowe_ rozumiem manipulację, która ma trywialną i/lub oczywistą implementację, ale którą można wykonać nieco szybciej/lepiej dzięki sprytnej manipulacji bitowej -- co w większości przypadków sprawia, że jest ona _prawie nieczytelna_ dla kogoś, kto nie jest przyzwyczajony do hackowania bitowego. * * * Są podobnie wyglądające pytania: Znaczenie myślenia bitowego i Do czego służą operatory bitowe? Odpowiedzi w tych pytaniach mówią ogólnie o manipulacjach bitami, które tak, mają wiele jasnych i użytecznych zastosowań; zwłaszcza w _innych_ językach, takich jak C. Chociaż może się to wydawać podobne, moje pytanie dotyczyło ich _w przeciwieństwie do_ używania techniki niebitowej w Javie. W pozostałych pytaniach w ogóle nie ma na to wpływu.


title: Definiowanie formuły poprzez interfejs użytkownika w formularzu użytkownika

text: Jestem studentem i opracowuję proste zadanie - okienka z aplikacji w Visual Studio 2010. Aplikacja ma za zadanie konstruować formuły zgodnie z wymaganiami użytkownika. Proces: Musi pobrać dane z kolumn bazy danych Microsoft Access, a użytkownik powinien mieć możliwość wybrania danych według nazwy kolumny, tak jak robimy to w rozwijanym menu. i utwórz w nim formuły wielokrotnego użytku ( skonfiguruj go raz i możesz zmienić ponownie). Poniżej znajdują się tytuły kolumn z bazy danych, które można na przykład wybrać. np. Col -1 : Oceny z matematyki Col -2 : Oceny z matematyki ogółem Col -3 : Oceny z przedmiotów ścisłych Kol -4 : Oceny z przedmiotów ścisłych W końcu powinniśmy być w stanie skonstruować dowolną formułę w interfejsie użytkownika, taką jak (Col 1 + Col 3 ) / ( col 2 + col 4) = Formuła 1 po ustawieniu tej formuły zostanie zapisana i zostanie nadana jej nazwa przez użytkownika. umie skorzystać z wzoru, a wyniki pojawią się w oknie poniżej. tj. Mógłby obliczyć żądane liczby (wzór), manipulując tylko podstawowymi danymi w warstwie interfejsu użytkownika .... wybierz dane dla okresu i zastosuj formułę i uzyskaj odpowiedź Problem: Wygląda na to, że muszę utworzyć aplikacja, w której zasady są ustalane za pomocą interfejsu użytkownika ....... oznacza to, że w SQL nie są wymagane żadne procedury składowane .... proszę zasugerować właściwe podejście.


title: Wspólna przestrzeń deweloperska

text: Obecnie firma, w której pracuję, daje każdemu programiście własną wirtualną maszynę deweloperską. Na tym komputerze (Windows 7) instalowany jest cały stos produktu (minus baza danych) Ten stos jest zwykle rozłożony na wiele komputerów z różnymi systemami operacyjnymi (chociaż zmierza w kierunku Windows 2008 i 2008r2) Więc gdy programista ma nowy projekt prawdopodobnie aktualizować tylko niewielką część swojego stosu i jako taka reszta może stać się nieaktualna z najnowszym kodem produkcyjnym. Izolacja od innych oznacza, że niektóre problemy nie zostaną znalezione, dopóki kod nie trafi do współdzielonych środowisk testowych/produkcyjnych. Proponuję przejście od testowania funkcjonalnego na tych odizolowanych maszynach do podłączania maszyn do współdzielonego środowiska. Celem jest dążenie do wdrożenia bliższego produkcji pod względem mechanizmu i typu serwera. Deweloperzy nadal wprowadzaliby zmiany w kodzie na swoich maszynach wirtualnych Win7 i uruchamialiby lokalne testy jednostkowe/komponentowe, ale do testowania funkcjonalnego wykorzystywaliby wspólne środowisko. Czy ktoś jeszcze używa takiego współdzielonego środowiska programistycznego? Czy istnieje wiele powodów przeciwko takiemu środowisku piaskownicy? Największą wadą jest odejście od zaewidencjonowania kodu tylko po wykonaniu lokalnych testów funkcjonalnych do zaewidencjonowania po testach statycznych. Mam nadzieję, że inteligentna strategia rozgałęziania git poradzi sobie z tym za nas.


title: Jaki jest sens wzorca projektowego Prototype?

text: Więc uczę się wzorców projektowych w szkole. Wiele z nich to głupie pomysły, ale mimo to rozwiązują niektóre powtarzające się problemy (singleton, adaptery, odpytywanie asynchroniczne itp.). Ale dzisiaj powiedziano mi o tak zwanym wzorcu projektowym „Prototyp”. Chyba czegoś mi brakuje, bo nie widzę z tego żadnych korzyści. Widziałem ludzi w Internecie, którzy mówią, że jest to szybsze niż używanie "nowego"', ale to nie ma sensu, ponieważ w pewnym momencie, niezależnie od tego, jak tworzony jest nowy obiekt, trzeba na niego przydzielić pamięć itp. Co więcej, czy ten wzór nie biegnie w tych samych kręgach, co problem „kurczaka lub jajka”? Mam na myśli to, że ponieważ wzorzec prototypu zasadniczo jest po prostu klonowaniem obiektów, w pewnym momencie oryginalny obiekt musi zostać stworzony sam (tj. nie sklonowany). Czyli oznaczałoby to, że musiałbym mieć kopię każdego obiektu, który kiedykolwiek chciałbym sklonować, już gotową do sklonowania? Wydaje mi się głupie. Czy ktoś może wyjaśnić, na czym polega zastosowanie tego wzoru? Oryginalny post: http://stackoverflow.com/questions/13887704/whats-the-point-of-the-prototype-design-pattern


title: Czy zajęcia „Util” są powodem do niepokoju?

text: Czasami tworzę klasy 'Util', które służą przede wszystkim do przechowywania metod i wartości, które tak naprawdę nie wydają się należeć gdzie indziej. Ale za każdym razem, gdy tworzę jedną z tych klas, myślę „och, później tego pożałuję…”, bo gdzieś wyczytałem, że jest źle. Ale z drugiej strony, wydaje się, że istnieją dla nich dwa przekonujące (przynajmniej dla mnie) przypadki: 1. sekrety implementacji, które są używane w wielu klasach w pakiecie 2. dostarczanie użytecznych funkcji do rozszerzania klasy bez zaśmiecania jej interfejsu Jestem jestem w drodze na zagładę? Co mówisz !! Czy powinienem dokonać refaktoryzacji?


title: Znalezienie współopiekunów projektów open source

text: Mam wiele projektów open-source, które zyskały znaczące zastosowanie i chciałbym znaleźć współopiekunów, abym nie był wąskim gardłem, jeśli chodzi o żądania konserwacji i wsparcia oraz aby uzyskać inne perspektywy na temat tego, jak projekt powinien ewoluować. Gdzie powinienem szukać współopiekunów, czego powinienem szukać u współopiekunów i jak mam przyspieszyć ich kod i obowiązki opiekunów?


title: Dlaczego wielowątkowość jest często preferowana w celu poprawy wydajności?

text: Mam pytanie, chodzi o to, dlaczego programiści wydają się kochać współbieżność i ogólnie programy wielowątkowe. Rozważam tutaj 2 główne podejścia: * podejście asynchroniczne oparte zasadniczo na sygnałach lub po prostu podejście asynchroniczne, jak nazywa się w wielu dokumentach i językach, takich jak na przykład nowy C# 5.0, oraz „wątek towarzyszący”, który zarządza polityką twojego potok * podejście współbieżne lub podejście wielowątkowe Powiem tylko, że myślę tutaj o sprzęcie i najgorszym scenariuszu, i sam przetestowałem te 2 paradygmaty, paradygmat asynchroniczny jest zwycięzcą w punkcie, w którym nie Nie rozumiem, dlaczego ludzie 90% czasu mówią o wielowątkowości, gdy chcą przyspieszyć działanie lub dobrze wykorzystać swoje zasoby. Testowałem programy wielowątkowe i program asynchroniczny na starym komputerze z czterordzeniowym procesorem Intel, który nie oferuje kontrolera pamięci wewnątrz procesora, pamięć jest zarządzana w całości przez płytę główną, cóż w tym przypadku wydajność jest straszna z aplikacja wielowątkowa, nawet stosunkowo niewielka liczba wątków jak 3-4-5 może być problemem, aplikacja nie odpowiada i jest po prostu powolna i nieprzyjemna. Z drugiej strony dobre podejście asynchroniczne prawdopodobnie nie jest szybsze, ale też nie jest najgorsze, moja aplikacja po prostu czeka na wynik i nie zawiesza się, jest responsywna i działa znacznie lepsze skalowanie. Odkryłem również, że zmiana kontekstu w świecie wątków nie jest tak tania w scenariuszu w świecie rzeczywistym, w rzeczywistości jest dość droga, zwłaszcza gdy masz więcej niż 2 wątki, które muszą się przełączać i zamieniać między sobą w celu obliczenia. W nowoczesnych procesorach sytuacja nie jest aż tak różna, kontroler pamięci jest zintegrowany, ale chodzi mi o to, że procesory x86 to w zasadzie maszyna szeregowa, a kontroler pamięci działa tak samo, jak w starym komputerze z zewnętrznym kontrolerem pamięci na płycie głównej . Przełącznik kontekstu jest nadal istotnym kosztem w mojej aplikacji, a fakt, że kontroler pamięci jest zintegrowany lub że nowszy procesor ma więcej niż 2 rdzenie, nie jest dla mnie okazją. Z tego, czego doświadczyłem, podejście współbieżne jest dobre w teorii, ale nie tak dobre w praktyce, z modelem pamięci narzuconym przez sprzęt, trudno jest dobrze wykorzystać ten paradygmat, a także wprowadza wiele problemów, począwszy od użytkowania moich struktur danych do przyłączenia wielu wątków. Również oba paradygmaty nie dają żadnego zabezpieczenia, ale kiedy zadanie lub praca zostanie wykonana w określonym czasie, co czyni je bardzo podobnymi z funkcjonalnego punktu widzenia. Zgodnie z modelem pamięci X86, dlaczego większość ludzi sugeruje używanie współbieżności z C++, a nie tylko podejście asynchroniczne? Dlaczego nie wziąć pod uwagę najgorszego scenariusza komputera, w którym zmiana kontekstu jest prawdopodobnie droższa niż samo obliczenia?


title: Pętle w rzeczywistych problemach

text: Uczę się C jako mojego pierwszego języka programowania. Jestem zdezorientowany, jak działają pętle w prawdziwym życiu. W programowaniu każda funkcja ma swój powód. przykład - instrukcje if/else są używane, jeśli mamy warunki. Zagnieżdżanie instrukcji if/else jest używane, jeśli mamy warunki wewnątrz warunku (więcej warunku). Postaram się jak najlepiej odpowiedzieć na to pytanie, używając problemu z życia codziennego. Mam tendencję do lepszego rozumienia na przykładzie Facebooka. Załóżmy, że użytkownik rejestruje się na Facebooku. Nie chcemy, aby rejestrujący się użytkownicy mieli mniej niż 13 lat. Jeśli użytkownik ma mniej niż 13 lat, należy zamknąć stronę rejestracji i podać powód, mówiąc „Przepraszam, jesteś za młody”. Czy używamy instrukcji if/else za sytuacją? Proszę popraw mnie jeżeli się mylę. Teraz pętle służą do skracania programu/aplikacji. Jaka kryje się za tym prawdziwa analogia? Posługując się Facebookiem jako przykładem. Czy „News Feed” może być dobrym przykładem wykorzystania pętli?


title: Pisanie wrappera PHP dla JavaScriptu, aby bezpiecznie uzyskać dostęp do REST API

text: Szukam pomocy w oznakowaniu, aby zabezpieczyć moje klucze API podczas uzyskiwania dostępu do bazy danych przez REST API z JavaScript na stronie internetowej. Przeczytałem, że aby zabezpieczyć klucz API, muszę utworzyć opakowanie w PHP, które w zasadzie wstawi klucz API do żądania, aby umożliwić dostęp do bazy danych przez JS na stronie internetowej. Pytanie: 1. Czy dobrze rozumiem koncepcję - ponownie klucze API i PHP? 2. Gdzie mogę uzyskać więcej informacji na temat opakowania, może tut czy coś takiego? Dziękuję za pomoc. Pozdrawiam, Nix


title: Stworzenie wewnętrznego zespołu ds. rozwoju oprogramowania z jednego źródła

text: Nasza firma chce stworzyć jeden dział dla wszystkich działań związanych z rozwojem oprogramowania (zamiast zarządzania rozwojem oprogramowania przez każdą jednostkę biznesową). Jednostki biznesowe następnie „zleciłyby” swoje potrzeby w zakresie oprogramowania do tego działu. Co byś skonfigurował jako obawy/oczekiwania, które należy wyjaśnić, zanim to zrobisz? Na przykład: * Potrzebujesz uzgodnienia między jednostkami, ile czasu rzeczywistego (FTE) jest przydzielone każdej jednostce * Potrzebujesz porozumienia w sprawie harmonogramu personelu * Potrzebujesz uzgodnienia procedury na żądanie, jeśli jedna strona wymaga dodatkowego czasu * itp. Czy byłeś w takiej sytuacji jako kierownik jednej jednostki, która ma to wykorzystać? Jeśli tak, jakich problemów doświadczyłeś? Co byś miał lub wdrożył? Tak samo, gdybyś był menedżerem wspólnego zespołu. Załóżmy, do dyskusji, że zainteresowane osoby wiedzą, że nie można podmieniać deweloperów z powodu kaprysu. Nie chcę znać wad tego podejścia; Znam ich. Chcę przewidywać problemy i wiedzieć, jak złagodzić ich skutki.


title: W jaki sposób raporty o błędach wpływają na przebieg sprintu?

text: Ostatnio czytałem Scrum. Z mojego punktu widzenia spotkanie odbywa się przed rozpoczęciem sprintu, aby zdecydować, co zostanie przeniesione z rejestru produktu do nadchodzącego rejestru sprintu. Gdy funkcja zostanie ukończona w bieżącym sprincie, trafi do zasobnika „Gotowa do kontroli jakości” i właśnie w tym momencie zaczynam się mylić. Czy raporty o błędach wracają do rejestru produktu? Zakładam, że nie mogą wrócić do backlogu sprintu, ponieważ już zdecydowaliśmy, jaka praca zostanie wykonana w tym cyklu? Co się stanie, gdy kontrola jakości znajdzie błąd? Dokąd to zmierza?


title: Jaki jest szybszy i preferowany sposób przypisywania zmiennych w ruby?

text: Jestem programistą RoR i chcę wyjaśnić pewne wątpliwości dotyczące przypisania zmiennych ruby. W ruby mamy dwa sposoby przypisywania zmiennych. str, arr, num = "Hi", [1, 2], 3 i str = "Hi" arr = [1, 2] num = 3 Wiem, że pierwsza droga pójdzie wolniej niż druga droga, ale chcę wiesz, że zgodnie z językiem ruby, który sposób jest preferowany, a wydajność niezawodna?


title: Czy "cc", "vv", "^^" ma specjalne znaczenie w kodzie?

text: Czasami w kodzie na GitHubie widzę tagi „cc”, „vv” i „^^”. Czy mają one jakieś specjalne znaczenie? Przykład: // cc MaxTemperatureMapper Mapper dla przykładu maksymalnej temperatury // vv MaxTemperatureMapper import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class MaxTemperatureMapper extends Mapper<LongWritable, Text, Text, IntWritable> { {snip} } // ^^ MaxTemperatureMapper Z https://github.com/tomwhite/hadoopbook/blob/master/ch02/src/main/java /MaxTemperatureMapper.java


title: Sprawdzanie warunków wstępnych lub nie

text: Zależało mi na znalezieniu solidnej odpowiedzi na pytanie, czy należy przeprowadzać kontrole w czasie wykonywania w celu weryfikacji danych wejściowych w celu upewnienia się, że klient trzymał się końca umowy w projektowaniu po kontrakcie. Rozważmy na przykład prosty konstruktor klasy: class Foo { public: Foo( BarHandle bar ) { FooHandle handle = GetFooHandle( bar ); if( handle == NULL ) { throw std::exception( "nieprawidłowy FooHandle" ); } } }; W tym przypadku argumentowałbym, że użytkownik nie powinien próbować konstruować `Foo` bez poprawnego `BarHandle`. Nie wydaje się właściwe sprawdzanie, czy `bar` jest prawidłowy w konstruktorze `Foo`. Jeśli po prostu udokumentuję, że konstruktor `Foo` wymaga _prawidłowego_ `BarHandle`, czy to nie wystarczy? Czy jest to właściwy sposób na wyegzekwowanie mojego warunku wstępnego w projekcie na podstawie umowy? Jak dotąd wszystko, co przeczytałem, ma mieszane opinie na ten temat. Wygląda na to, że 50% ludzi powiedziałoby, aby zweryfikować, czy `bar` jest prawidłowy, a pozostałe 50% powiedziałoby, że nie powinienem tego robić, na przykład rozważ przypadek, w którym użytkownik sprawdza, czy jego `BarHandle` jest poprawny, ale drugie (i niepotrzebne) sprawdzenie jest również wykonywane wewnątrz konstruktora `Foo`.


title: Które komentarze natychmiast budzą dzwonki alarmowe, gdy wypowiada je programista?

text: Podobnie jak w moim pytaniu o łatwo dostrzegalne znaki ostrzegawcze w kodzie, myślę, że czasami komentarze programistów mogą powiedzieć ci całkiem dużo (niedobrych rzeczy) na ich temat w krótkim czasie. Najbardziej przerażające, jakie ostatnio słyszałem (od seniora): > Mógłbym użyć kontroli źródeł, ale to by mnie spowolniło. ich o tym: > Och, tak naprawdę tego nie używałem, ale byłem w tym samym pokoju, co ludzie > używający tego. Och! Dlaczego więc jest on widoczny w twoim CV??? Wreszcie dość często przeprowadzam wywiady z ludźmi, którzy na papierze wyglądają na doskonały zestaw umiejętności. Czasem są to świetni programiści, ale niektórzy z nich zapytani o jakiś temat przebijają się przez słownikową definicję jak karabin maszynowy (i prawdopodobnie lepszą definicję, niż byłbym w stanie powiedzieć, gdybym był w ten sposób postawiony). Następnie poproszony o wyjaśnienie nawet naprawdę, naprawdę prostych rzeczy do zrobienia z tym tematem, całkowicie nie potrafię (zwykle wymyślenie czegoś całkowicie złego, a następnie powtórzenie definicji słownikowej). Podejrzewam, że są to programiści, którzy byli w zespołach, w których nie byli dobrze traktowani, a więc nie mieli możliwości działania samodzielnie – przez co ich nauka jest bardzo powierzchowna. Jakie inne rzeczy, które słyszałeś, mówią ci, że programista jest, hm, spróbujmy wymyślić fajny sposób na powiedzenie tego… wciąż robi pierwsze kroki w kierunku bycia świetnym?


title: Trywialnie sortowalne kodowanie dla arbitralnej precyzji dziesiętnej

text: Szukam racjonalnie(*) wydajnego miejsca do kodowania ułamków dziesiętnych o dowolnej precyzji (np. BigDecimal), tak aby podczas sortowania wzorca bitowego kodowań leksykograficznych liczby były sortowane numerycznie. Jest to związane z tym pytaniem Stackoverflow. Jednym prostym/naiwnym podejściem do tego byłoby przekonwertowanie liczby na reprezentację podobną do IEEE z jakimś 8-bajtowym wykładnikiem (co robi RR w NTL?), ale oczywiście jest to dość nieefektywna(*) reprezentacja. Czy jest może jakieś inne podejście do tego? Czy są możliwe optymalizacje dla liczb całkowitych o dowolnej precyzji? Kodowanie nie musi obsługiwać żadnych innych operacji niż sortowanie (i, jeśli to możliwe, ponowne dekodowanie numeru). (*) Przez rozsądną oszczędność miejsca nie mam na myśli upychania bitów w bajty, jak to robi IEEE-754. Po prostu nie chcę mieć niepotrzebnie dużych pól, które pozostaną w większości puste w dużej liczbie sytuacji (jak miałoby to miejsce w przypadku wykładnika 8-bajtowego). Powodem tego jest to, że (zakodowana) liczba będzie później przetwarzana przez ten schemat, co zajmuje kilka milisekund na bajt. Z drugiej strony wydajność kodowania/dekodowania w czasie wykonywania nie stanowi większego problemu (wszystko mniej niż 10 ms dla 128 bajtów danych nadal będzie przyćmione przez środowisko wykonawcze schematu OPE, jak powyżej). (Zauważ również, że powinna to być reprezentacja dziesiętna, więc istnieją problemy z precyzją z powodu "rzeczy binarnych".)


title: W jaki sposób edytor kodu może skutecznie podpowiadać na poziomie zagnieżdżania kodu - bez używania wcięć?

text: Napisałem edytor tekstu XML, który udostępnia 2 opcje widoku dla tego samego tekstu XML, jeden z wcięciem (praktycznie), drugi z wyrównaniem do lewej. Motywacją dla widoku z wyrównaniem do lewej jest pomoc użytkownikom „zobaczenie” białych znaków, których używają do wcięcia zwykłego tekstu lub kodu XPath bez ingerencji w wcięcia, które są zautomatyzowanym efektem ubocznym kontekstu XML. Chcę podać wizualne wskazówki (w nieedytowalnej części edytora) dla trybu z wyrównaniem do lewej, który pomoże użytkownikowi, ale bez zbytniego rozbudowania. Próbowałem po prostu użyć linii łączących, ale wydawało się to zbyt zajęte. Najlepsze, jakie do tej pory wymyśliłem, jest pokazane na wyśmiewanym zrzucie ekranu edytora poniżej, ale szukam lepszych / prostszych alternatyw (które nie wymagają zbyt wiele kodu). ![wskazanie poziomu zagnieżdżenia edytora kodu](http://i.stack.imgur.com/Bqdo5.png) **[Edytuj]** Biorąc pomysł na mapę cieplną (od: @jimp) otrzymuję to i 3 alternatywy - oznaczone a, b i c: ![Wstępne pomysły](http://i.stack.imgur.com/EHDZ2.png) ### Poniższa sekcja opisuje przyjętą odpowiedź jako propozycję, łącząc pomysły z wielu innych odpowiedzi i komentarze. Ponieważ to pytanie jest teraz wiki społeczności, możesz je zaktualizować. * * * ## NestView Nazwa tego pomysłu, która zapewnia wizualną metodę poprawy czytelności zagnieżdżonego kodu bez użycia wcięć. ### Linie konturu Nazwa różnie zacieniowanych linii w NestView ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/w9K2Q.png) Powyższy obrazek pokazuje NestView używany do wizualizacji Fragment kodu XML. Chociaż na tej ilustracji używany jest kod XML, na tej ilustracji można użyć dowolnej innej składni kodu wykorzystującej zagnieżdżanie. ## Przegląd: 1. Linie konturowe są zacienione (jak na mapie cieplnej), aby przekazać poziom zagnieżdżenia 2. Linie konturowe są ustawione pod kątem, aby pokazać, kiedy poziom zagnieżdżenia jest otwierany lub zamykany. 3. Linia warstwic łączy początek poziomu zagnieżdżenia z odpowiednim końcem. 4. Połączona szerokość linii konturowych, oprócz mapy cieplnej, daje wizualne wrażenie poziomu zagnieżdżenia. 5. Szerokość NestView może być ręcznie zmieniana, ale nie powinna się zmieniać wraz ze zmianą kodu. Aby to osiągnąć, linie konturu można skompresować lub przyciąć. 6. Puste wiersze są czasami używane w kodzie do dzielenia tekstu na bardziej strawne fragmenty. Takie linie mogą wywołać specjalne zachowanie w NestView. Na przykład mapa termiczna może zostać zresetowana lub użyta linia konturowa w kolorze tła, lub jedno i drugie. 7. Można podświetlić jedną lub więcej warstwic powiązanych z aktualnie wybranym kodem. Linia warstwicowa powiązana z wybranym poziomem kodu byłaby najbardziej podkreślana, ale inne linie warstwic mogą również się „zapalić” dodatkowo, aby pomóc podświetlić zagnieżdżoną grupę zawierającą 8. Różne zachowania (takie jak składanie kodu lub wybór kodu) mogą być powiązane z kliknięciem/dwukrotnym kliknięciem na linii konturu. 9. Różne części linii konturowej (krawędź natarcia, środkowa lub spływu) mogą wiązać się z różnymi zachowaniami dynamicznymi. 10. Etykiety narzędzi mogą być wyświetlane w zdarzeniu najechania myszą na linię konturową 11. NestView jest stale aktualizowany wraz z edycją kodu. Tam, gdzie zagnieżdżanie nie jest dobrze wyważone, można przyjąć założenia, w których poziom zagnieżdżenia powinien się kończyć, ale powiązane tymczasowe linie warstwic muszą być podświetlone jako ostrzeżenie. 12. Obsługiwane może być przeciąganie i upuszczanie linii konturowych. Zachowanie może się różnić w zależności od przeciąganej części linii konturu. 13. Funkcje często spotykane na lewym marginesie, takie jak numeracja linii i podświetlanie kolorów w przypadku błędów i zmiany stanu, mogą nakładać się na NestView. ## Dodatkowa funkcjonalność Propozycja dotyczy szeregu dodatkowych kwestii – wiele z nich wykracza poza zakres pierwotnego pytania, ale jest to użyteczny efekt uboczny. ### Wizualne łączenie początku i końca zagnieżdżonego regionu Linie warstwic łączą początek i koniec każdego zagnieżdżonego poziomu ### Podświetlanie kontekstu aktualnie wybranej linii Po wybraniu kodu powiązany poziom zagnieżdżenia w NestView może być podświetlony ### Rozróżnianie regionów kodu na tym samym poziomie zagnieżdżenia W przypadku XML różne odcienie mogą być używane dla różnych przestrzeni nazw. Języki programowania (takie jak c#) obsługują nazwane regiony, których można używać w podobny sposób. ### Dzielenie obszarów w obszarze zagnieżdżenia na różne bloki wizualne Dodatkowe wiersze są często wstawiane do kodu, aby ułatwić czytelność. Takie puste linie mogą być użyte do zresetowania poziomu nasycenia linii konturowych NestView. ### Wielokolumnowy widok kodu Kod bez wcięć sprawia, że korzystanie z widoku wielokolumnowego jest bardziej efektywne, ponieważ zawijanie wyrazów lub przewijanie w poziomie jest mniej prawdopodobne. W tym widoku, gdy kod dotrze do dołu jednej kolumny, przechodzi do następnej: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/OnuKX.png) ### Wykorzystanie poza jedynie zapewniając pomoc wizualną Jak zaproponowano w przeglądzie, NestView _może_ zapewniać szereg funkcji edycji i wyboru, które byłyby zasadniczo zgodne z tym, czego oczekuje się od kontrolki TreeView. Kluczową różnicą jest to, że typowy węzeł TreeView składa się z 2 części: ekspandera i ikony węzła. Linia konturowa NestView może mieć aż 3 części: _otwieracz_ (nachylony), _łącznik_ (pionowy) i _zamknięty_ (nachylony). * * * ### Na wcięciach NestView jest prezentowany obok niewciętych uzupełnień kodu, ale raczej nie zastąpi konwencjonalnego widoku kodu z wcięciem. Jest prawdopodobne, że wszelkie rozwiązania przyjmujące NestView zapewnią metodę płynnego przełączania między widokami kodu z wcięciem i bez wcięcia bez wpływu na sam tekst kodu - w tym znaki odstępu. Jedną z technik dla widoku z wcięciem byłoby "Wirtualne formatowanie" - gdzie dynamiczny lewy margines jest używany zamiast znaków tabulacji lub spacji. Te same dane na poziomie zagnieżdżenia, które są używane do dynamicznego renderowania NestView, mogą być również używane do bardziej konwencjonalnego widoku z wcięciem. **Drukowanie** Wcięcie będzie miało znaczenie dla czytelności drukowanego kodu. W tym przypadku brak znaków tabulacji/spacji i dynamicznego lewego marginesu oznacza, że tekst może zawijać się na prawym marginesie i nadal zachować integralność wciętego widoku. Numery linii mogą być używane jako wizualne znaczniki, które wskazują, gdzie kod jest zawinięty w słowo, a także dokładną pozycję wcięcia: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/2s2mb.png) ## # Nieruchomość ekranu: Płaski kontra wcięty Odpowiadając na pytanie, czy NestView zużywa cenną nieruchomość ekranową: Linie konturowe działają dobrze z szerokością taką samą jak szerokość znaków edytora kodu. Szerokość NestView o szerokości 12 znaków może zatem pomieścić 12 poziomów zagnieżdżenia przed obcięciem/skompresowaniem warstwic. Jeśli widok z wcięciem używa 3 szerokości znaków dla każdego poziomu zagnieżdżenia, miejsce jest oszczędzane, dopóki zagnieżdżenie nie osiągnie 4 poziomów zagnieżdżenia, po tym poziomie zagnieżdżenia płaski widok ma zaletę oszczędzania miejsca, która zwiększa się z każdym poziomem zagnieżdżenia. _Uwaga: W kodzie często zaleca się minimalne wcięcie o szerokości 4 znaków, jednak XML często radzi sobie z mniejszą. Ponadto formatowanie wirtualne pozwala na użycie mniejszej liczby wcięć, ponieważ nie ma ryzyka problemów z wyrównaniem_ Poniżej przedstawiono porównanie 2 widoków: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/N23MY.png ) Na podstawie powyższego prawdopodobnie można stwierdzić, że wybór stylu wyświetlania będzie oparty na czynnikach innych niż powierzchnia ekranu. Jedynym wyjątkiem jest miejsce, w którym miejsce na ekranie jest na wagę złota, na przykład na netbooku/tablecie lub gdy otwartych jest wiele okien kodu. W takich przypadkach NestView z możliwością zmiany rozmiaru wydaje się być wyraźnym zwycięzcą. ### Przypadki użycia Przykłady rzeczywistych przykładów, w których NestView może być użyteczną opcją: 1. Gdzie ekran nieruchomości jest na wagę złota. Na urządzeniach takich jak tablety, notatniki i smartfony b. Podczas wyświetlania kodu na stronach internetowych Gdy wiele okien kodu musi być jednocześnie widocznych na pulpicie 2. Gdy spójne białe wcięcia tekstu w kodzie są priorytetem 3. Do przeglądania głęboko zagnieżdżonego kodu. Na przykład, gdy podjęzyki (np. Linq w C# lub XPath w XSLT) mogą powodować wysokie poziomy zagnieżdżenia. ### Dostępność Opcje zmiany rozmiaru i kolorów muszą być zapewnione, aby pomóc osobom z wadami wzroku, a także dostosować do warunków środowiskowych i osobistych preferencji: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/PQJiK. png) ### Kompatybilność edytowanego kodu z innymi systemami Rozwiązanie z opcją NestView powinno w idealnym przypadku usuwać z importowanego kodu wiodące znaki tabulacji i spacji (identyfikowane jako mające tylko rolę formatującą). Następnie, po rozebraniu, kod mógł być zgrabnie renderowany zarówno w widokach z wyrównaniem do lewej, jak i wcięciem bez zmian. Dla wielu użytkowników polegających na systemach, takich jak narzędzia do łączenia i porównywania, które nie są świadome białych znaków, będzie to poważny problem (jeśli nie kompletny show-stopper). * * * ## Inne prace: ### Wizualizacja nakładających się znaczników Opublikowane badania Wendella Pieza datowane na 2004 r. dotyczą kwestii wizualizacji nakładających się znaczników, a konkretnie LMNL. Obejmuje to grafikę SVG o znaczących podobieństwach do propozycji NestView, jako taka została tutaj potwierdzona. Różnice wizualne są wyraźnie widoczne na obrazach (poniżej), kluczowym rozróżnieniem funkcjonalnym jest to, że NestView jest przeznaczony tylko dla dobrze zagnieżdżonego kodu XML lub kodu, podczas gdy grafika Wendella Pieza jest zaprojektowana do reprezentowania nakładającego się zagnieżdżania. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/6YpG7.png) _Powyższe grafiki zostały zreprodukowane - za uprzejmą zgodą - z_ http://www.piez.org Źródła: 1. W stronę Hermenutic Markup 2. Pół kroku w kierunku LMNL


title: Czy jest jakiś powód, aby używać rozmiarów VARCHAR zaokrąglonych do przesunięcia 128/256/4096 bajtów?

text: W schemacie bazy danych często zauważam, że rozmiary VARCHAR są zaokrąglane do przesunięć bajtowych 128/256 lub 4096. Zrobiłem to również wcześniej, a pomysł za tym był prawdopodobnie czymś z wydajnością. Czy jednak w dzisiejszych czasach nadal jest ku temu ważny powód? W dzisiejszych czasach często używam „50”, „100” lub „200” jako rozmiarów VARCHAR, ponieważ są one bardziej naturalne i zazwyczaj są również pokazywane użytkownikowi podczas sprawdzania poprawności.


title: Jak mogę przepisać tę manipulację połączoną listą jako rekurencyjną?

text: To pytanie, które kiedyś zadano mi podczas rozmowy kwalifikacyjnej, a teraz zadaję wielu moim rozmówcom. Nie spotkałem jeszcze nikogo, kto wymyślił rozwiązanie rekurencyjne podczas rozmowy kwalifikacyjnej. Mając polubioną listę, chciałbym zamienić każdą parę węzłów w następujący sposób: **input** : `a-b-c-d-e-f-g` **output** : `b-a-d-c-f-e-g` Jeśli jest nieparzysta liczba węzłów, doklejany jest ostatni węzeł jak jest. Należy to zrobić na miejscu. Zaimplementuj metodę: `Node* SwapTo(Node* start)` Używam tej definicji węzła: class Node { public: char data; Węzeł* następny; }; Oto niezoptymalizowane rozwiązanie rekurencyjne: Node* SwapTwo(Node* start) { if (!start) { return start; } Węzeł* drugi = początek->następny; if (! sekunda) { powrót start; } Węzeł* trzeci = drugi->następny; drugi -> następny = początek; początek->następny = SwapTwo(trzeci); powrót drugi; } Co to jest rozwiązanie tail-recursive?


title: Jak prowadzić spotkania zespołu deweloperskiego?

text: Nasz zespół 10 programistów spotyka się co tydzień. Spotkania są raczej nudne i mało przydatne. Jakiego formatu/programu używasz, aby mieć dobre spotkania? Spotykamy się co tydzień w sali konferencyjnej z zapewnioną pizzą. Format jest taki, że chodzimy po pokoju i wymieniamy status różnych zadań, nad którymi pracujemy, i omawiamy zadania na następny tydzień. Menedżerowie przedstawią przegląd nadchodzących projektów i priorytetów na nadchodzące miesiące i rok. **Aktualizacja** Celem tych spotkań jest mniej więcej ogólne budowanie zespołu, dzielenie się wiedzą o tym, nad czym wszyscy pracują, oraz informowanie wszystkich o zmieniających się inicjatywach firmy. Nie jest to formalne „rozdawanie” zadań roboczych (które odbywa się w inny sposób).


title: stworzyć stronę z Codeigniter bez obsługi bazy danych

text: Jakie podejście możesz zasugerować, jeśli nie mam mysql lub innej obsługi baz danych na webhost, ale muszę gdzieś przechowywać dane (informacje tekstowe) dla witryny. Jest to witryna informacyjna dla szkół - około 20 do 50 odwiedzających dziennie, 6 do 7 kategorii z 3 do 5 podkategoriami. Czy pliki xml byłyby normalne?


title: Czy klauzula try-catch-finally jest odpowiednia dla kodu produkcyjnego?

text: Przeglądając SO, natknąłem się na odpowiedź, która sugerowała użycie klauzuli „try-catch-finally”, aby naprawić problem, który miał. (Rzadki błąd, który czasami zdarzał się jego użytkownikom). Ktoś skomentował, że to poprawne rozwiązanie, ale powiedział, że nie jest zalecane w kodzie produkcyjnym. > Czy to prawda? Dlaczego nie jest to zalecane dla kodu produkcyjnego? Wydaje mi się całkowicie słuszne, jeśli jest używany do łapania wyjątków. W tym kontekście dotyczyło to aplikacji, a użytkownicy są bardzo zniechęceni do kontynuowania, jeśli aplikacja pozornie się zawiesza. > Wspomniał też, że w każdej chwili może się nie udać. Czy to również prawda?


title: Tworzenie biblioteki wymagającej innych bibliotek (PHP)

text: Powiedzmy, że tworzę bibliotekę PHP, która używa PHP 5.3 i przestrzeni nazw, a moja biblioteka wymaga innej biblioteki do działania (w tym przypadku jest to biblioteka sfYaml). Staram się wymyślić najlepszy sposób włączenia tej biblioteki. Czy uważa się za dobrą/dopuszczalną praktykę uwzględnienie bibliotek stron trzecich bezpośrednio w moim kodzie (zakładając, że licencja pozwala na to, co robi sfYaml), czy też lepiej nie uwzględniać bibliotek stron trzecich i po prostu poprosić użytkownika o upewnienie się, że biblioteki znajdują się gdzieś na jego system i czy mają skonfigurować ścieżkę? Chodzi mi o to, że jedynym problemem, jaki miałem w przeszłości z dołączaniem tych zewnętrznych bibliotek do moich bibliotek, jest to, że jeśli użytkownik ma również tę samą bibliotekę dla swojego projektu, byłyby problemy z dwukrotnym dołączeniem jej, ale teraz z PHP 5.3 i przestrzenią nazw, to nie jest problem. Staram się tylko pomyśleć, czy są jakieś inne problemy z dołączaniem bibliotek stron trzecich bezpośrednio do mojego kodu (z ich przestrzenią nazw w mojej głównej przestrzeni nazw).


title: Jakie istnieją metody obsługi DB Change Management?

text: Niedawno zacząłem pracować z kontrolą wersji w moim web-deweloperze, używając subversion. Działa to świetnie w zarządzaniu plikami, które opracowuję, ale nie robi nic w przypadku zmian, które czasami muszę wprowadzić w bazach danych. Według mojej wiedzy serwer, na którym pracuję, nie ma żadnych systemów zarządzania bazą danych i prawdopodobnie nie byłbym w stanie ich zmusić do zainstalowania czegokolwiek. Jakie są opcje zarządzania bazami danych w takim środowisku?


title: Podnoszenie pensji podczas przeglądu wyników

text: Obecnie mam dylemat związany z nadchodzącym przeglądem wydajności. Kiedy zaczynałem pracę w mojej firmie około rok temu, starałem się być tak szczery, jak to możliwe, w moim postrzeganiu moich umiejętności programistycznych i wiedzy. Oparłem moje postrzegane umiejętności na umiejętnościach kodowania w stosunku do tych, których uważam za dobrych programistów i programistów. Tak więc wynagrodzenie, z którego otrzymałem, byłem wtedy zadowolony. Nie mam z tym problemu, ponieważ wierzę, że uczciwość jest ważna w podejściu do pracy i podczas jej trwania. Wierzę też, że kiedy już będę w pracy, jeśli będę lepszy niż to, w co dałem wierzyć pracodawcy, moje wyniki będą to odzwierciedlać. W tym samym czasie zatrudniono innego dewelopera. Oboje zostaliśmy zatrudnieni do pracy nad tym samym projektem, wykonując ten sam zestaw zadań. Kilka miesięcy temu dowiedziałem się, że ta osoba zarabiała znacznie więcej niż ja. Teraz podczas projektu zdałem sobie sprawę, że ta osoba jest znacznie poniżej mnie w umiejętnościach programistycznych, a nawet wiedzy biznesowej. Wielokrotnie musiałem mu pomagać w zadaniach programistycznych, przeglądać jego kod i oferować lepsze rozwiązania oraz wyjaśniać koncepcje dotyczące projektu, nad którym pracujemy. Mimo że oboje zaczęliśmy w tym samym czasie. Jak mogę zwiększyć moją pensję (podczas przeglądu), aby była przynajmniej porównywalna z tą osobą, bez bezpośredniego wymieniania jej nazwiska lub tego, że wiem, na czym ona polega. Jeśli uzasadnię to na podstawie wykonanej przeze mnie pracy, co jeśli nie zaoferują mi pakietu porównawczego. Czy to sprawiedliwe, że chcę więcej, czy jestem chciwy?


title: Czy mogę zaufać równaniu harmonogramu podstawowego?

text: Czytałem książkę Steve'a McConnella wyjaśniającą czarną sztukę szacowania wartości, a on podaje równanie szacowania nominalnego harmonogramu w oparciu o osobo-miesięcy wysiłku: ScheduleInMonths = 3,0 x EffortInMonths ^ (1/3) Jak na tę książkę, jest to bardzo dokładne (w granicach 25%), chociaż powyższy współczynnik 3.0 różni się w zależności od organizacji (zazwyczaj od 2 do 4). Podobno łatwo jest wykorzystać projekty historyczne w Twojej organizacji, aby uzyskać odpowiedni współczynnik do użytku. Próbuję pogodzić równanie z metodami Agile, używając cykli 2-6 tygodniowych, które często są mini-projektami, które mają na końcu działający produkt. Jeśli mam zespół 5 programistów w ciągu 4 tygodni (1 miesiąc), to EffortInMonths = 5 osób-miesięcy. Algorytm wyprowadza następnie harmonogram 3,0 x 5^(1/3) = 5 miesięcy. 5 miesięcy to znacznie więcej niż 25% różnicy niż 1 miesiąc. Jeśli obniżę współczynnik 3,0 do 0,6, algorytm działa (wyprowadza harmonogram ok. 1 miesiąca). Najniższy możliwy współczynnik wymieniony w książce to 2.0. Co tu się dzieje? Chcę zaufać temu równaniu przy szacowaniu „tradycyjnego” projektu niezwinnego, ale nie mogę mu ufać, jeśli nie zgadza się z moim (zwinnym) doświadczeniem. Czy ktoś może mi pomóc zrozumieć?


title: Narzędzie do projektowania interfejsu użytkownika

text: Czy są jakieś aplikacje, które mogą pomóc mi zaprojektować interfejs użytkownika w sposób koncepcyjny?


title: Jak umieścić kod YAML w GitHub MarkDown?

text: Po fragmencie YAML, który próbuję umieścić w moim sformatowanym pliku readme z przecenami: ``` biblioteki: - nazwa: numpy wersja: "1.6.1" ``` linia. Oba okazują się na jednej linii. Oczywiście chcę je w 3 oddzielnych liniach w moim README.md. Jak? edit: uwaga próbowała dodać 'yaml' jako opcjonalny parametr lang, ale też bez kości.


title: Wysyłaj zmapowane dane z kodu po stronie serwera do kodu po stronie klienta

text: Tworzę aplikację opartą na dwóch technologiach: ASP.net (SharePoint) oraz JavaScript. Używam kodu po stronie serwera do pobierania danych z bazy danych i manipulowania nimi, podczas gdy używam kodu po stronie klienta do budowania front-endu (używam formatu JSON). Mam duży problem z tą "architekturą", ponieważ ASP.net jest typu strong type, podczas gdy JavaScript jest typem mniejszym. Moje dane „skaczą” z front-endu do back-endu i odwrotnie. Jak mogę mieć moją klasę modelu również w kodzie po stronie klienta?


title: Architektura oparta na jednostkach

text: To prawdopodobnie cholernie głupie pytanie, za które przepraszam, ale nie mogę znaleźć właściwej składni Google, aby znaleźć odpowiedź. Wyobraź sobie Własność, taką jak: private int _type public int Type { get { return _type; } ustaw { _typ = wartość; //podnieś wydarzenie w wybranym języku lub technologii CallAFunction(); } } Teraz wyobraź sobie, że CallAFunction wykonuje dość poważne zadania w Twojej aplikacji, komunikując się z bazą danych za pośrednictwem repozytorium. Nie wydaje się nierozsądne, aby przeprowadzić test jednostkowy w tym celu, aby upewnić się, że Type zostanie ustawiony na to, co wprowadzisz, i sprawdzić, czy wykonanie tego spowoduje oczekiwane zdarzenie. Jednak ustawienie właściwości za pomocą testu wywoła CallAFunction(), co oznacza, że tak naprawdę nie testujesz już „jednostki” kodu jako takiej i być może, co ważniejsze, bardzo prosty test tej bardzo prostej właściwości może wymagać więcej wymyślne przygotowanie, w tym szydzenie z repozytorium, co wydaje się ogromną przesadą. W niektórych przypadkach możesz je rozdzielić, podnosząc CallAFunction za pośrednictwem zdarzenia. Ale nie zawsze tak jest (używam WPF, a zdarzenia są bąbelkami do nietestowalnego XAML). Jak najlepiej rozdzielić te dwie współzależne rzeczy?


title: Czy istnieje sprytny sposób na obliczenie trybu serialu online bez przechowywania serii?

text: Celem mojego programu jest określenie prawidłowego przesunięcia strefy czasowej (GMT+k) w miarę podawania szeregu liczb. np.: -4 +11 1 -4 -4 Więc tutaj -4 (tryb serii) jest poprawną wartością. Ale to wymaga przechowywania serii, a następnie jej analizy i nie mam na to wystarczającej ilości pamięci (RAM i FLASH). Średnią bieżącą można łatwo obliczyć, przechowując rozmiar listy i sumę. Czy jest podobny przypadek znalezienia trybu?


title: Sparametryzowane typy Java (ogólne)

text: Rozważmy ten „starszy” kod: interfejs publiczny IPersistentCollection { IPersistentCollection cons(Object o); } Uogólniony w Javie mógłby wyglądać mniej więcej tak: interfejs publiczny IPersistentCollection<T> { IPersistentCollection<T> cons(T o); } Oczywiście dodanie nowego elementu do modyfikowalnej kolekcji Java nie powinno zmieniać typu istniejącej kolekcji. Ale w przeciwieństwie do kolekcji Javy, cons() zwraca zupełnie nową, niezmienną kolekcję, pozostawiając starą kolekcję niezmienioną, co otwiera możliwość, że może sensownie przybrać inny typ niż oryginalna kolekcja. 1. Oczywiście powinieneś być w stanie sprowadzić obiekt typu Ford do kolekcji samochodów i odzyskać kolekcję samochodów (kowariancja). Myślę, że jest to objęte powyższym ogólnym przykładem. 2. Jeśli zarówno Car, jak i Train, rozszerzyły klasę Vehicle, przydałaby się możliwość skonwertowania Traina do kolekcji Cars i odzyskania kolekcji Vehicles (kontrawariancja). Jak bym to w ogóle napisała? Pomyślałem, deklarując nowe zmienne typu ograniczonego, S i E dla "Pojazdu" i "Pociągu" w tym przykładzie: // Nielegalne z powodu <S super T> <S super T, E extends S> IPersistentCollection<S> cons(E o); // Prostsze, ale nadal nielegalne, ponieważ java nie zezwala na <S super T> <S super T> IPersistentCollection<S> cons(S o); 3. Jeśli chcemy założyć, że programista wie, co robi, powinieneś mieć możliwość wyłudzenia czegoś zupełnie niezwiązanego z kolekcją i odzyskania kolekcji obiektów. Myślę, że to skrajny przypadek kontrawariancji, ale nie jestem pewien, czy istnieje na to nawet nazwa (może „Język dynamiczny”?). Myślę, że gdyby nr 2 był legalny, obejmowałoby to przypadki nr 1 i nr 3. Moje pytania to: A. W jakim stopniu można zrobić #2 w Javie? B. Czy #2 jest możliwe/łatwiejsze w innych językach? Scala? Haskella? ML? C. Teoretycznie system typów, który preferował najbardziej szczegółową wersję S w przykładzie 2, mógłby obsłużyć taką definicję. Jaką książkę o systemach pisma mogę przeczytać bez doktoratu z matematyki? Czy "Typy i języki programowania" Pierce'a to najlepsze miejsce na rozpoczęcie? Przykładowy kod byłby mile widziany. Jeśli niepoprawnie używam terminów takich jak kowariancja i kontrawariancja, byłbym wdzięczny za uprzejme poprawienie.


title: Czy muszę dołączyć licencję biblioteki innej firmy zaimportowanej jako DLL?

text: Mam kod korzystający z biblioteki innej firmy, QrCode.Net, w postaci pliku `dll`. Biblioteka jest licencjonowana na podstawie licencji MIT. Czy muszę dołączyć licencję do mojego projektu, jeśli nie używałem lub nie modyfikowałem kodu źródłowego? * * * Pełny tekst licencji: > ## Licencja MIT (MIT) > > Copyright (c) 2011 George Mamaladze > > Niniejszym udziela się nieodpłatnego pozwolenia każdej osobie, która otrzyma kopię > tego oprogramowania i powiązanych plików dokumentacji („Oprogramowanie”) w celu > korzystania z Oprogramowania bez ograniczeń, w tym bez ograniczeń > praw do używania, kopiowania, modyfikowania, łączenia, publikowania, rozpowszechniania, udzielania sublicencji i/lub > sprzedawania kopii Oprogramowania oraz do zezwalania osoby, którym Oprogramowanie jest > dostarczane w tym celu, pod następującymi warunkami: > > Powyższa informacja o prawach autorskich i niniejsza informacja o zezwoleniu będą > dołączone do wszystkich kopii lub istotnych części Oprogramowania. > > OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKICHKOLWIEK GWARANCJI, WYRAŹNYCH LUB > DOROZUMIANYCH, W TYM MIĘDZY INNYMI GWARANCJI WARTOŚCI HANDLOWEJ, > PRZYDATNOŚCI DO OKREŚLONEGO CELU I NIENARUSZANIA PRAW. W ŻADNYM WYPADKU AUTORZY LUB WŁAŚCICIELE PRAW AUTORSKICH NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIA, SZKODY LUB INNĄ ODPOWIEDZIALNOŚĆ, CZY NA TEMAT UMOWY, CZYNNEGO LUB INNEGO, WYNIKAJĄCEJ > Z OPROGRAMOWANIA LUB Z UŻYTKOWANIEM LUB INNEGO TRANSAKCJE > W OPROGRAMOWANIU.


title: Dlaczego C++ nie pozwala na wzięcie adresu konstruktora?

text: Czy istnieje jakiś konkretny powód, dla którego mogłoby to zepsuć język pojęciowo, czy też konkretny powód, dla którego w niektórych przypadkach jest to technicznie niewykonalne? ~~Użycie byłoby z nowym operatorem.~~ **Edycja:** Porzucę nadzieję, że mój "nowy operator" i "operator nowy" będzie prosty i bezpośredni. Pytanie brzmi: dlaczego konstruktory są _specjalne_? Pamiętaj oczywiście, że specyfikacje językowe mówią nam, co jest legalne, ale niekoniecznie moralne. O tym, co jest legalne, decyduje zazwyczaj to, co jest logicznie spójne z resztą języka, co jest proste i zwięzłe oraz co jest możliwe do zaimplementowania przez kompilatory. Możliwe powody, dla których komitet normalizacyjny ważył te czynniki, są celowe i interesujące – stąd pytanie.


title: Po co używać bazy danych w pamięci do testowania integracji?

text: Jestem naprawdę zdezorientowany, gdy widzę wiele implementacji baz danych w pamięci wykorzystywanych do testowania, ponieważ wiele słyszałem również z najlepszych praktyk testowania integracji, że środowisko, w którym przeprowadzany jest test, powinno jak najbardziej przypominać środowisko produkcyjne, w tym system operacyjny , biblioteka, silnik bazy danych itp. Czego mi tu brakuje?


title: Projektowanie języka: czy języki takie jak Python i CoffeeScript są naprawdę bardziej zrozumiałe?

text: Argument „**Werbalnie czytelny !==Szybsze zrozumienie**” na http://ryanflorence.com/2011/case-against-coffeescript/ jest naprawdę mocny i interesujący. Ja i jestem pewien, że inni byliby bardzo zainteresowani dowodami przemawiającymi przeciwko temu. Są na to wyraźne dowody i wierzę w to. Ludzie _naturalnie_ myślą obrazami, a nie słowami, więc powinniśmy projektować języki, które nie są podobne do ludzkiego języka, jak angielski, francuski, cokolwiek. Bycie „czytelnym” jest szybsze **rozumienie**. Większość artykułów na Wikipedii jest nieczytelna, ponieważ są długie, nudne, suche, powolne i bardzo przegadane. Ponieważ Wikipedia dokumentuje mnóstwo informacji, nie jest szczególnie pomocna w porównaniu z witrynami zawierającymi bardziej praktyczne, przydatne i istotne informacje. Języki takie jak Python i CoffeScript są „czytelne werbalnie”, ponieważ są bliższe składni angielskiej. Ponieważ programowałem najpierw i głównie w Pythonie, nie jestem pewien, czy to naprawdę dobra rzecz. Drugim interesującym argumentem jest to, że CoffeeScript jest pośrednikiem, krokiem między dwoma końcami, co może zwiększyć prawdopodobieństwo błędów. Chociaż CoffeeScript ma inne praktyczne zalety, to pytanie dotyczy konkretnie dowodów potwierdzających przeciwny przypadek „czytelności” języka


title: Dynamicznie dodawaj/usuwaj komponenty do/z panelu

text: Jestem w fazie planowania mojego projektu java/swing. Oto obrazek: ![Panel](http://i.stack.imgur.com/EzVm3.png) Jest to panel główny zawierający kilka podpaneli w zależności od wybranej daty w górnej środkowej części. Chcę przeglądać te podpanele za pomocą niebieskich strzałek (następnego dnia i poprzedniego dnia). Jak możesz sobie wyobrazić, jeden podpanel może znajdować się w więcej niż jednej – powiedziałbym – „stronie”. Moja struktura MVC wygląda tak: Każdy podpanel jest reprezentowany przez jedną klasę - nazwijmy ją subClassModel - więc każdy model otrzymuje jeden subClassView (jeden z pięciu paneli na zdjęciu) jako obserwator. Jeden subClassController obsłuży interakcję pomiędzy tymi dwiema klasami oraz dodatkowo interakcję z mainControllerem (np. utworzenie nowego subClassModel). Mam nadzieję, że moje pytania nie są zbyt obszerne, ale spróbuję: * Po pierwsze: Czy istnieje jakiś wzór na tego rodzaju problem. Nie znalazłem żadnego, ponieważ nie mogę znaleźć właściwej nazwy. * Jak mam obsługiwać wszystkie SubClassView i SubClassModel. Myślałem o przechowywaniu ich w SubClassController w `HashMap<SubClassModel, SubClassView>`. Więc mam każdy model i widok dostępny, nawet jeśli są odfiltrowane według daty. * Czy powinienem użyć `panel.add(SubClassView)` / `panel.remove(SubClassView)` czy też removeAll i dodać wszystkie potrzebne widoki w pętli? * Czy mimo to należy przechowywać wszystkie SubClassViews w kontrolerze? A może lepiej jest tworzyć SubClassViews przy każdej zmianie daty? * ... wiem, że nie dodałem kodu do tego pytania, ponieważ tak naprawdę nie ma odpowiedniego kodu. Chcę rozwiązać te pytania, zanim uformuję je w kod.


title: Czy uzyskasz lepszą wydajność, kodując aplikację w C, a następnie skompilując ją do JavaScript?

text: Piszę interpreter dla funkcjonalnego języka programowania, który będzie działał w przeglądarce. Nie trzeba dodawać, że wydajność jest jedynym problemem w tej aplikacji. Emscripten to kompilator LLVM→JavaScript, który twierdzi, że tworzy programy, które działają tylko 2-3 razy wolniej niż natywne. To naprawdę zaskakujące, biorąc pod uwagę, że rzeczywiste aplikacje JavaScript działają od 7 do 10 razy wolniej niż natywne, według Computer Benchmarks Game. I to są dokładnie te rodzaje aplikacji, o które się martwię. Powiedziawszy to, czy opłacałoby się zakodować moją aplikację w C, a następnie skompilować ją do JavaScript za pomocą asm.js, czy może czegoś mi brakuje?


title: Potrzebujesz przeglądu pojęć i narzędzi do tłumaczenia DSL na wyrażenia regularne

text: Szukam trochę wskazówek. Aż do dzisiejszego ranka było mi to po głowie. Po spędzeniu dzisiejszego dnia na badaniu Wikipedii, StackOverflow itp., powiedziałbym, że mam nos nad wodą. Mam za zadanie zbadać projekt, który, jak rozumiem, obejmowałby inżynierię wsteczną języka specyficznego dla domeny, który jest w zasadzie rodzajem składni wyrażeń regularnych, i przetłumaczenie go na konwencjonalne (w znaczeniu, podobne do Perla) wyrażenia regularne. Mam nadzieję, że ktoś wypełni luki w moim zrozumieniu, więc wyjaśnię, co mam i moje dotychczasowe zrozumienie. Jeśli chodzi o DSL, to w zasadzie składa się z dwóch elementów. Jednym z nich są mniej więcej wyrażenia regularne w stylu grep. Drugi składnik składa się z tego, co można nazwać makrami. Te makra są używane, gdy chcesz znaleźć numery ubezpieczenia społecznego, numery kart kredytowych itp. w analizowanym tekście. DSL to prostszy sposób, w jaki użytkownik końcowy może określić pasujący tekst i wyjątki. (Szczerze mówiąc, jest to nadal dość skomplikowane w użyciu - ale łatwiejsze niż wyrażenia regularne.) DSL jest używany do pisania "reguł", reguły będącej jednowierszową instrukcją opisującą tekst docelowy. To, co chcę zrobić, to biorąc regułę jako dane wejściowe, przetłumaczyć tę regułę na konwencjonalne wyrażenie regularne tam, gdzie to możliwe. Jeśli makro nie podzieli się na pojedyncze wyrażenie regularne, przetłumaczę je na jeden lub więcej RE lub dowolny potrzebny kod do przetwarzania tekstu. Moim największym punktem ignorancji jest „tłumaczenie”. Oto moje pierwsze pytanie: czy będzie to obejmować coś, co nazywa się „parsowaniem”? (Jak można się domyślić, jestem programistą samoukiem.) Czy używałbym narzędzia takiego jak ANTLR lub PyParsing, czy czegoś takiego? (Właśnie dowiedziałem się o tych narzędziach dzisiaj, podczas moich badań.) Zgaduję, że tak, ale byłbym wdzięczny za potwierdzenie. Ile muszę się nauczyć? Nie będę potrzebował „Księgi Smoka”, prawda? Nie piszę DSL, ale jeśli robię inżynierię wsteczną, to zgaduję, że w pierwszej kolejności będę musiał nauczyć się tworzyć DSL (ponieważ jak inaczej miałbym wiedzieć, jak to zrobić rozbiór gramatyczny zdania). TAk? Co muszę mieć za pasem? Właśnie to próbuję rozgryźć. Przeanalizowałem pliki konfiguracyjne; Napisałem prosty generator kodu YAML do Java Bean; Napisałem prosty stripper HTML; Wiem trochę o wyrażeniach regularnych i przetwarzaniu tekstu; ale to szczególne przedsięwzięcie jest bardziej wyrafinowane niż wszystko, co robiłem wcześniej. Wydaje się to wykonalne, ale w ramach sprawdzenia zdrowia psychicznego proszę powiedz mi, czy w mojej ignorancji źle obliczyłem i to, co opisuję, wymaga 4 lat bycia specjalistą informatyki. Czy ktoś może wskazać mi właściwy kierunek lub dać mi kilka wskazówek? Dziękuję.


title: Czy rozsądne jest naleganie na odtworzenie każdego defektu przed jego zdiagnozowaniem i naprawieniem?

text: Pracuję dla firmy produkującej oprogramowanie. Mamy dużych klientów korporacyjnych, którzy wdrażają nasz produkt i zapewniamy im wsparcie. Na przykład, jeśli jest jakaś usterka, dostarczamy łatki itp. Innymi słowy, jest to dość typowa konfiguracja. Ostatnio wystawiono i przypisano mi zgłoszenie dotyczące wyjątku znalezionego przez klienta w pliku dziennika, który dotyczy równoczesnego dostępu do bazy danych w klastrowej implementacji naszego produktu. Tak więc specyficzna konfiguracja tego klienta może mieć kluczowe znaczenie dla wystąpienia tego błędu. Wszystko, co otrzymaliśmy od klienta, to jego plik dziennika. Podejście, które zaproponowałem mojemu zespołowi, polegało na próbie odtworzenia błędu w konfiguracji podobnej do konfiguracji klienta i uzyskanie porównywalnego dziennika. Jednak nie zgadzają się z moim podejściem, mówiąc, że nie muszę powielać błędu, ponieważ jest to zbyt czasochłonne i wymaga symulacji klastra serwerów na maszynach wirtualnych. Mój zespół sugeruje, abym po prostu „podążał za kodem”, aby zobaczyć, gdzie znajduje się kod niebezpieczny dla wątków i/lub transakcji, i wprowadzić zmianę działającą w prostym lokalnym rozwoju, który nie jest implementacją klastra, jak środowisko, z którego wystąpiło pochodzi błąd. Wydaje mi się, że wypracowanie abstrakcyjnego planu (kodu programu) zamiast namacalnego, widocznego przejawu (odtwarzanie w czasie wykonywania) wydaje się trudne, więc chciałem zadać ogólne pytanie: czy rozsądne jest naleganie na odtworzenie każdego defektu i debugowanie go przed diagnozą i naprawiam to? Lub: Jeśli jestem starszym programistą, czy powinienem być w stanie czytać kod wielowątkowy i tworzyć mentalny obraz tego, co robi we wszystkich scenariuszach przypadków użycia, zamiast wymagać uruchamiania aplikacji, testowania różnych scenariuszy przypadków użycia w praktyce i krok przez kod linia po linii? A może jestem kiepskim programistą, bo wymagam takiego środowiska pracy? Czy debugowanie jest dla maminsynków? Moim zdaniem każda poprawka przesłana w odpowiedzi na zgłoszenie incydentu powinna być testowana w symulowanym środowisku tak, aby było jak najbardziej zbliżone do oryginalnego środowiska. Skąd inaczej możesz wiedzieć, że to naprawdę rozwiąże problem? To tak, jakby wypuścić nowy model pojazdu bez testów zderzeniowych z manekinem, aby zademonstrować, że poduszki powietrzne rzeczywiście działają. Na koniec, jeśli się ze mną zgadzasz: jak mam rozmawiać z moim zespołem, aby przekonać ich, że moje podejście jest rozsądne, konserwatywne i bardziej kuloodporne?


title: W jaki sposób silnik szachowy decyduje o tym, jaki ruch wykonać?

text: Piszę prosty silnik szachowy w LISP-ie. Właściwie wiem, jak silnik decyduje o ruchu, ocenia i czyta kilka książek otwierających. Ale nie o to mi chodzi. To mój projekt. 57 58 59 60 61 62 63 64 49 50 51 52 53 54 55 56 41 42 43 44 45 46 47 48 33 34 35 36 37 38 39 40 25 26 27 28 29 30 31 32 17 18 19 20 21 22 23 24 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 Patrzyłem na bardziej skomplikowane rozwiązania, ale wyszedłem z tego, co uważam za najprostsze. Powiedzmy, że goniec jest na polu 23, może wykonać 4 możliwe ruchy (do 16 lub 14 lub 32 lub 30), więc wykonuje ruch -7 lub +7 lub +9 lub -9. Tworzę tablicę (make-array '(8 8) :initial-contents '((R B N Q K B N R) (P P P P P P P P) (NIL NIL NIL NIL NIL NIL NIL NIL) (NIL NIL NIL NIL NIL NIL NIL NIL) (NIL NIL NIL NIL) NIL NIL NIL NIL) (NIL NIL NIL NIL NIL NIL NIL NIL) (P P P P P P P P)) (R B N Q K B N R))) I przenieś elementy z indeksu do indeksu. Moje pytanie brzmi, nie mogę po prostu powiedzieć gońcowi, aby przesunął się o +7 lub cokolwiek, jeśli jest to otwarta przekątna. Muszę mu powiedzieć, żeby przesunął się o +9*1 lub +9*2 itd., a ty goniec musisz zdecydować, do którego się udać. Nie mogę napisać warunku i pętli dla każdego możliwego kwadratu


title: PHP SplFixedArray Jak radzić sobie z miliardami indeksów?

text: Zbudowałem płaski system db, który będzie działał jak system mini-noSQL i podzielił db na mniejsze pliki, i zrobiłem dla niego wrapper SplFixedArray z metodą wyszukiwania użycia zbudowaną na preg_grep. Do tej pory wszystko działa bardzo dobrze, ale skoro tablica stała się ponad miliardami indeksów, jak sobie z tym poradzić? Podczas wyszukiwania będzie iterować po małych plikach, a następnie pobierze dopasowania i umieści je w tymczasowej stałej tablicy, więc co jeśli znajdzie bardzo duże dopasowania? Jak dbms noSQL to robią? UWAGA: Jeśli zastanawiasz się, dlaczego robię to bez prawdziwego rozwiązania noSQL, powiem, ponieważ chcę wiedzieć więcej.


title: Wskaż i kliknij zastępowanie synonimów w obszarze tekstowym za pomocą Javascript

text: Staram się stworzyć stronę, która pozwoli Ci wpisać zdanie lub fragment tekstu, a następnie kliknąć na słowa, aby wywołać listę synonimów (z internetowego API) i ewentualnie autoryzowane skróty z podanej przeze mnie listy. Po kliknięciu zastąpi to słowo słowem, które zostało kliknięte. Działałby podobnie jak po terminie lub sprawdzanie pisowni oparte na Javascript. Czy są jakieś biblioteki skonfigurowane tak, aby coś takiego było łatwe, lub jakiego rodzaju JavaScript muszę się przyjrzeć? Czy są jakieś tutoriale lub przykłady tego typu rzeczy? Zdaję sobie sprawę, że kod źródłowy After the Deadline jest dostępny, ale potrzebuję tylko niewielkiej części ich technologii, a nie całej technologii sprawdzania gramatyki i pisowni.


title: Jaka jest najlepsza licencja dla mojej witryny?

text: Opracowałem unikalną stronę internetową, ale nie mam zbyt wielu funduszy na ochronę jej znakiem towarowym lub patentami. Szukam sugestii, aby gdy mój przełożony dostanie moje kody, niektóre przepisy zabronią każdemu ich kopiowania i żądania ich pracy. Jestem w trakcie rozmyślania o tym, czy aplikacja będzie komercyjna, czy w ogóle nie da się jej skopiować. Jakie kroki muszę podjąć, aby wykonać pełne pomiary, aby moje aplikacje były w pełni chronione? Natknąłem się na kilka, jednym z nich jest licencja MIT. Niektórzy twierdzą, że możemy mieć mieszankę zarówno komercyjnej, jak i MIT. Chciałbym również mieć możliwość rozpowszechniania niektórych funkcji, aby inni mogli je modyfikować, ale nadal zachowałbym prawo własności. Last but not least, to mylące, gdy myślę o ochronie całej strony internetowej i ochronie kodów za pomocą kodów w podziale. Jak powinniśmy się do tego zabrać? Dziękuję. Uwaga: muszę to przekazać przełożonemu, ponieważ jest to projekt uniwersytecki. Muszę to zrobić w ciągu 2 tygodni. Tak więc czas na ochronę mojej aplikacji jest tutaj istotnym czynnikiem.


title: Jak mogę skonsolidować dane z grupy zdalnych instancji SQL Server?

text: Pracuję dla firmy, której obsługa punktów sprzedaży wykorzystuje serwery IIS powiązane ze statycznymi adresami IP w każdym z naszych sklepów. Mój szef chce lepszego narzędzia do śledzenia statystyk w czasie rzeczywistym niż to, co zapewnia usługa w punkcie sprzedaży. Chciałbym połączyć się z tymi serwerami z centralnej lokalizacji i pobrać dane. Jeśli to możliwe, chciałbym móc to zrobić z Pythona, PHP lub Ruby. Jakie są zalecane podejścia do tego.


title: Jak długo firma Microsoft pracowała nad platformą .NET, zanim ją wypuściła?

text: Z całym CLI, CTS, CLS itp. nie tylko wydali potężną platformę/infrastrukturę, ale wydali wszystkie specyfikacje, które ją opisują itp. Obsługuje potencjalnie nieskończoną liczbę języków, platform itp. To wydaje się szalone ilość pracy, nawet jak na takiego giganta jak Microsoft – zwłaszcza, że okazuje się, że wykonali cholernie dobrą robotę. Jak długo pracowali nad tym przed wydaniem (.NET 1.0)?


title: System wynagrodzeń deweloperów

text: Joel napisał doskonałe artykuły na temat systemu wynagrodzeń deweloperów stosowanego w Fogcreek. Jako lider zespołu i właściciel firmy chciałbym zaprojektować system, który będzie najlepiej działał dla mojego zespołu _i_ mojej firmy, system postrzegany jako sprawiedliwy, uczciwy i przejrzysty, system łatwy do zrozumienia i wdrożenia **_ale_ ** trudne do gry. I tu jest haczyk: nie mam wcześniej doświadczenia w zarządzaniu zespołem i nie wiem, co działa, a co nie. Jak zmotywować zespół programistów do wydobycia pełnego potencjału? A konkretnie, co myślisz o „drabince”, o której Joel mówi we wspomnianych artykułach?


title: Kod HTML w klasie Java

text: Pytanie koncepcyjne, próbowałem wygooglować, ale nie mogłem znaleźć żadnych ostatecznych odpowiedzi, więc oto brzmi: Czy dobrą praktyką jest pisanie metod Java, które zwracają ciągi HTML, które zostaną zwrócone do warstwy wyświetlania/prezentacji? Przykład: ciąg publiczny getTextField(){ return "<input type=\"text\"/>"; }


title: Unieważnij pamięć podręczną w wielu aplikacjach

text: Mamy pakiet aplikacji obejmujący stronę internetową, aplikację kliencką i wiele usług Windows. Wszystkie te aplikacje działają na tym samym zestawie danych i korzystają z pamięci podręcznej w pamięci. Oczywiście ta konfiguracja kończy się niepowodzeniem, gdy jedna z aplikacji robi coś, co unieważnia pamięć podręczną. Szukam rozwiązania, które pozwoli mi unieważnić pamięć podręczną w aplikacjach. Mamy kilka pomysłów, ale jestem pewien, że zbiorowe umysły internetu mogą dać nam lepsze rozwiązanie. Kilka szczegółów: * jest to przestarzała aplikacja, co oznacza, że chcielibyśmy, aby zmiany były jak najmniej inwazyjne * Wahamy się, aby wprowadzić do rozwiązania kolejny ruchomy element. Tak więc korzystanie z zewnętrznej pamięci podręcznej jest niedostępne.


title: Czy to nadmierna abstrakcja? (A czy jest na to nazwa?)

text: Pracuję nad dużą aplikacją Django, która używa CouchDB jako bazy danych i couchdbkit do mapowania dokumentów CouchDB na obiekty w Pythonie, podobnie jak domyślny ORM Django. Ma dziesiątki klas modeli i sto lub dwa widoki CouchDB. Aplikacja umożliwia użytkownikom zarejestrowanie „domeny”, co daje im unikalny adres URL zawierający nazwę domeny, która daje im dostęp do projektu, którego dane nie pokrywają się z danymi innych domen. Każdy dokument, który jest częścią domeny, ma swoją właściwość `domain` ustawioną na nazwę tej domeny. Jeśli chodzi o relacje między dokumentami, wszystkie domeny są faktycznie wzajemnie wykluczającymi się podzbiorami danych, z wyjątkiem kilku przypadków brzegowych (niektórzy użytkownicy mogą być członkami więcej niż jednej domeny, istnieją też raporty administracyjne obejmujące wszystkie domeny itp. .). Kod jest pełen wyraźnych odniesień do nazwy domeny i zastanawiam się, czy warto byłoby dodać złożoność, aby to wyabstrahować. Chciałbym również wiedzieć, czy istnieje nazwa dla rodzaju podejścia związanego z własnością, które tutaj obieram. Zasadniczo mam coś takiego na myśli: ## Wcześniej w models.py class User(Document): domain = StringProperty() class Group(Document): domain = StringProperty() name = StringProperty() user_ids = StringListProperty() # metoda zwracająca powiązany zestaw dokumentów def users(self): return [User.get(id) for id in self.user_ids] # metoda, która odpytuje widok kanapy zoptymalizowany pod kątem określonego wyszukiwania @classmethod def by_name(cls, domain, name) : # metoda widoku jest dostarczana przez couchdbkit i obsługuje # zawijania wyników json CouchDB jako obiekty Pythona i # może przyjmować różne parametry modyfikujące zachowanie return cls.view('groups/by_name', key=[domain, name]) # metoda, która tworzy powiązany dokument def get_new_user(self): user = User(domain=self.domain) user.save() self.use r_ids.append(user._id) zwraca użytkownika w views.py: z modeli importuj User, Group # jest mnóstwo widoków takich jak ten, (żądanie, domena, ...) def create_new_user_in_group(request, domain, group_name): group = Group.by_name(domain, group_name)[0] user = User(domain=domain) user.save() group.user_ids.append(user._id) group.save() in group/by_name/map.js: function (doc) { if (doc.doc_type == "Grupa") { emit([doc.domain, doc.name], null); } } ## Po klasie models.py DomainDocument(Document): domain = StringProperty() @classmethod def domain_view(cls, *args, **kwargs): kwargs['key'] = [cls.domain.default] + kwargs ['klucz'] return super(DomainDocument, cls).view(*args, **kwargs) @classmethod def get(cls, *args, **kwargs, validate_domain=True): ret = super(DomainDocument, cls). get(*args, **kwargs) if validate_domain i ret.domain != cls.domain.default: raise Exception() return ret def models(self): # mapowanie wszystkich modeli w aplikacji. dostęp do jednego zwraca odpowiednik class BoundUser(User): domain = StringProperty(default=self.domain) class User(DomainDocument): pass class Group(DomainDocument): name = StringProperty() user_ids = StringListProperty() def users(self) : return [self.models.User.get(id) dla id w self.user_ids] @classmethod def by_name(cls, name): return cls.domain_view('groups/by_name', key=[name]) def get_new_user( self): user = self.models.User() user.save() views.py @domain_view # dekorator, który ustawia request.models na ten sam rodzaj obiektu, który jest zwracany przez DomainDocument.models i usuwa argument domeny z adresu URL router def create_new_user_in_group(request, group_name): group = request.models.Group.by_name(group_name) user = request.models.User() user.save() group.user_ids.append(user._id) group.save() (Może lepiej zostawić tutaj nieszczelną abstrakcję, aby uniknąć konieczności radzenia sobie z czymś w stylu couchapp //! włącz opakowanie dla emisji, które poprzedza doc.domain przed kluczem lub innym podobnym rozwiązaniem.) function (doc) { if (doc.doc_type == "Grupa") { emit([doc.name], null); } } ## Plusy i minusy Więc jakie są plusy i minusy tego? Plusy: * DRYer * uniemożliwia tworzenie powiązanych dokumentów, ale zapominając o ustawieniu domeny. * zapobiega przypadkowemu napisaniu widoku django -> ścieżka wykonania widoku couch, która prowadzi do naruszenia bezpieczeństwa * nie uniemożliwia dostępu do podstawowej self.domain i normalnej metody Document.view() * potencjalnie eliminuje potrzebę wiele sprawdzeń rozsądku weryfikujących, czy dwa dokumenty, których domenom oczekujemy, że będą sobie równe są. Wady: * dodaje trochę złożoności * ukrywa to, co się naprawdę dzieje * nie wymaga, aby moduły modeli miały klasy o tej samej nazwie, lub trzeba by dodać atrybuty podrzędne do self.models dla modułów. Jednak wymaganie unikalnych nazw klas dla całego projektu powinno być w porządku, ponieważ odpowiadają one właściwości doc_type, której couchdbkit używa do decydowania, która klasa ma je utworzyć, która powinna być unikalna. * usuwa jawną dokumentację zależności (z importu group.models Group)


title: Ciekawostki dotyczące lokowania licencji

text: Klejnoty Ruby mają plik `LICENSE` z tekstem licencji w każdym klejnotu. Platformy open source Cocoa[Touch] (np. ShareKit, StackKit itp.) mają licencję na samym początku każdego pliku (.h i .m). Nie jestem pewien co do .NET lub innych interpretowanych języków (z wyjątkiem ruby), ale jestem prawie pewien, że są pod ręką własne możliwości. Zastanawiam się, jakie są powody umieszczania licencji w takich pakietach oprogramowania open source. Dlaczego nie plik `LICENSE` wszędzie lub na początku każdego pliku źródłowego?


title: Wymagane wyjaśnienie Unicode

text: Czy ktoś może wyjaśnić, co to oznacza? > Unicode definiuje przestrzeń kodową 1 114 112 punktów kodowych w zakresie od 0hex do > 10FFFFhex. http://en.wikipedia.org/wiki/Unicode


title: Przechowywanie i analiza trudności wspinaczki skałkowej

text: Pracuję nad wtyczką WordPress do zarządzania danymi dotyczącymi wspinaczki skałkowej i muszę wymyślić sposób na przechowywanie ocen wspinaczki ze wszystkich różnych systemów w ujednolicony sposób. Istnieje wiele różnych systemów, z których każdy ma jakiś system liczbowy. Porównanie wszystkich systemów: http://en.wikipedia.org/wiki/Grade_(climbing)#Comparison_tables Czy istnieje jakiś ujednolicony sposób, w jaki mogę je przechowywać i analizować, czy po prostu muszę im wszystkim przypisać numery i zakończyć pracę? Moim obecnym planem jest zapisanie typu punktacji, a następnie przypisanie każdej punktacji wartości liczbowej, której mogę użyć do ich porównania i wykresu.


title: Czy lepiej mieć publicznie widoczny kod FOSS, nawet jeśli nie jest to twoja najlepsza praca w porównaniu z brakiem pracy?

text: Mam wiele narzędzi, które napisałem i wydałem, ale pod aliasami. Myślę, że martwię się, że kod nie jest moim absolutnie najlepszym i nie jest najsolidniejszym kodem. Dlatego zawsze uważałem, że najlepiej jest ukryć to i trzymać z dala od mojego imienia. Chociaż teraz zastanawiam się, czy posiadanie jakiegokolwiek kodu stawia cię przed tymi, którzy go nie mają na tym konkurencyjnym rynku pracy? Mój kod nie jest zły, działa i działa dobrze. Ale powiedzmy, że każda okoliczność może nie być traktowana w solidny sposób. Niektóre części są dobrze napisane, podczas gdy inne są zhakowane. Czy więc lepiej mieć coś, co może nie być najlepszym, niż nic?


title: Dlaczego BASIC jest zły?

text: > **Możliwy duplikat:** > Czy uważasz, że kontakt z BASIC może okaleczyć twój umysł? BASIC i pokrewne dialekty od dawna są określane jako „złe”. Widziałem to wypowiedziane przez jednych z najlepszych programistów, jakich znam, profesorów ze Stanforda, a nawet jednego z najbardziej błyskotliwych informatyków: > Praktycznie niemożliwe jest nauczenie dobrego programowania studentów, którzy > mieli wcześniej kontakt z językiem BASIC: jako potencjalni programiści są > okaleczeni psychicznie ponad nadzieję na regenerację - Edsger W. Dijkstra Myślę, że ten cytat mógł być nieco wyrwany z kontekstu i miał być czymś w rodzaju przesady, ale jednocześnie każdemu, kto mówi coś w tym stylu, wyraźnie nie podoba się BASIC. Kiedy jakiś czas temu zacząłem programować, zacząłem od BASIC'a i nie uważam się za złego programistę, znam wielu dobrych programistów, którzy również zaczynali od BASIC'a. Oczywistym powodem niechęci jest to, że uczy złych nawyków, umiejętności i metodologii. Zastanawiam się tylko, dlaczego ludzie tak mówią i czy to w ogóle jest słuszne. Moim zdaniem każdy programista, który jest ograniczony swoim językiem, jest złym programistą i nawet jeśli BASIC był jakimś boogeymanem, za jakiego wszyscy go uważali, to i tak nie powinno to znacząco utrudniać czyjegoś "życia programistycznego". tl;dr - Dlaczego ludzie uważają BASIC za zły język programowania (zwłaszcza dla początkujących) i dlaczego ludzie mówią, że uczy złych umiejętności? Czym jest „psychiczne okaleczenie”, o którym mówi Dijkstra?


title: Jak dokładnie przechodzimy z zestawów binarnych/szesnastkowych do zestawów instrukcji montażu?

text: Tak więc ostatnio próbowałem nauczyć się trochę programowania Embedded/Assembly, a także posunąłem się daleko do nauki najniższego poziomu (bramek i tym podobnych). Jedna rzecz mnie jednak zastanawia.... to jak "dostajemy" zestawy instrukcji. Rozumiem trochę jak działają gates/TTL i takie, ale nie widzę, jak z tego dojdziemy do mov,add,clr itd...? To chyba głupie pytanie… ale mam na myśli, że wracam myślami do pierwszych mikroprocesorów/kontrolerów i myślę… jak dokładnie zaprojektowali zestaw instrukcji i sprawili, że działa? edit: Myślę, że dla Clarity udaję, że mówię o pierwszym mikroprocesorze, jak przeszli od Binary do faktycznego stworzenia zestawu instrukcji?


title: Twórczość autorska i prawa autorskie. w projektowaniu interfejsu użytkownika

text: Typowa sytuacja w projektowaniu interfejsu użytkownika: projektujesz jakiś interfejs użytkownika i, powiedzmy, wpadasz na nowy, świetny pomysł, taki jak „wstążka” lub „kinetyczne przewijanie do końca”. Jaka byłaby strategia w tej sprawie? Zarejestruj patent, nie podoba mi się, ale i tak chciałby zapytać: ile czasu zajmie zrobienie tego wszystkiego i ile średnio to będzie kosztować? Jeśli zapomnieć o patentach, to czy pomysł będzie miał status „prior art” lub coś takiego, jeśli ktoś będzie próbował to opatentować w przyszłości? Wszystko to o projekcie / produkcie wydanym przez solo developera.


title: Czy Java jest wolna/open source, czy nie?

text: 13 listopada 2006 firma Sun wydała większość Javy jako wolne i otwarte oprogramowanie (FOSS), na warunkach GNU General Public License (GPL). **8 maja 2007 firma Sun zakończyła ten proces**, udostępniając cały rdzeń kodu Java na warunkach dystrybucji wolnego oprogramowania/open-source, z wyjątkiem niewielkiej części kodu, do którego firma Sun nie posiadała praw autorskich. **OpenJDK** (Open Java Development Kit) to darmowa i otwarta implementacja języka programowania Java. Jest to wynik wysiłków firmy Sun Microsystems rozpoczętych w 2006 roku. Implementacja jest na licencji GNU General Public License (GNU GPL) z wyjątkiem łączenia. Dlaczego wciąż są ludzie, którzy twierdzą, że Java nie jest open source ani wolna, jak w przypadku wolności słowa? Czy czegoś mi brakuje? Czy Java jest nadal prywatna?


title: Dostosowywanie CV do zmiany kariery w programowaniu

text: Obecnie interesują mnie perspektywy pracy poza moim obszarem programowania. W szczególności jestem programistą stron internetowych, ale chcę przejść do programowania aplikacji komputerowych. Jak powinienem dostosować swoje CV, aby pokazać, że jestem zdolny do tworzenia tego typu oprogramowania, jeśli nie miałem z nim wcześniej doświadczenia? To pytanie można również uogólnić na każdego innego programistę wykonującego skok do innego obszaru (na przykład programistę głównie doświadczonego w oprogramowaniu finansowym, który chce przejść do programowania systemów wbudowanych). Krótko mówiąc, w pracy używałem HTML, CSS, PHP, MySQL i Javascript. Przez krótki czas korzystałem też z ColdFusion. Jestem bardzo zaznajomiony z koncepcjami i frameworkami OOP. W międzyczasie przez ponad 3 lata pracowałem nad moimi osobistymi projektami hobbystycznymi w C# i C++. Wiem, że zbytnie skupianie się na narzędziach niż na ich zastosowaniu jako mierniku do pomiaru twoich umiejętności jest złe, ale czy aby dokonać zmiany w mojej karierze, czy podkreślanie wiedzy w tych narzędziach byłoby dobrym pomysłem, aby umieścić je w swoim CV? Problem polega na tym, że wiele zadań stawia języki programowania jako surowe wymagania (patrz tutaj). Moje CV pokazuje obecnie 5 lat doświadczenia w tworzeniu stron internetowych. Znam dość dobrze ogólne koncepcje programowania i w tym momencie moje doświadczenie liczy się znacznie więcej niż mój dyplom. _Chcę wiedzieć, jak sprawić, by potencjalny pracodawca firmy programistycznej spojrzał na moje CV z ostrożnym optymizmem i nie odrzucił go od razu, gdy okaże się, że mam 5-letnie doświadczenie w sieci Web z PHP i zero doświadczenia w zakresie oprogramowania komputerowego._


title: Czy napisanie własnego dostępu do danych / warstwy mapowania danych to „dobry” pomysł?

text: Obecnie znajdujemy się w sytuacji, w której mamy wybór między użyciem gotowego mapera obiektowo-relacyjnego lub własnego. Mamy starszą aplikację (ASP.NET + SQL Server), w której warstwa danych i biznes -warstwy są niestety ze sobą zmiksowane. System nie jest szczególnie skomplikowany pod względem dostępu do danych. Odczytuje dane z dużej grupy (35-40) powiązanych ze sobą tabel, manipuluje nimi w pamięci i zapisuje je z powrotem w kilku innych tabelach w formacie podsumowania. Mamy teraz okazję do refaktoryzacji i przyglądamy się potencjalnym technologiom, które można wykorzystać do oddzielenia i odpowiedniej struktury naszego dostępu do danych. Niezależnie od technologii, na którą się zdecydujemy, chcielibyśmy: * mieć w naszym modelu domeny obiekty POCO, które są ignorowane na temat trwałości * mieć warstwę abstrakcji, która pozwoli nam na test jednostkowy naszych obiektów modelu domeny na podstawie wymyślonego bazowego źródła danych Jest tam oczywiście wiele rzeczy na tym już w zakresie Patterns & Frameworks itp. Osobiście naciskam na używanie EF w połączeniu z ADO.NET Unit Testable Repository Generator / POCO Entity Generator. Spełnia wszystkie nasze wymagania, może być łatwo spakowany wewnątrz wzorca Repo/UnitOfWork, a nasza struktura bazy danych jest w miarę dojrzała (po przejściu już refaktoryzacji), tak że nie będziemy wprowadzać codziennych zmian w modelu. Jednak inni w grupie proponują architekturę / rozwijanie naszego własnego D.A.L. całkowicie od zera. (Niestandardowe DataMappery, DataContext, repozytorium, interfejsy wszędzie, przesadne wstrzykiwanie zależności w celu tworzenia konkretnych obiektów, niestandardowe tłumaczenie zapytań LINQ-do-podstawowe, niestandardowe implementacje buforowania, niestandardowe implementacje FetchPlan...) lista jest długa i szczerze mówiąc to ostrzeżenia ja jako szaleństwo. Niektóre z rzucanych argumentów to „Cóż, przynajmniej będziemy kontrolować nasz własny kod” lub „Och, używałem L2S/EF w poprzednim projekcie i to było tylko bóle głowy”. (Chociaż wcześniej używałem obu w produkcji i stwierdziłem, że wszelkie problemy są nieliczne i bardzo łatwe do opanowania). z dala od tego, co wydaje mi się, że będzie to kompletna katastrofa. Nic na to nie poradzę, ale myślę, że wszelkie _korzyści_ uzyskane przez unikanie problemów z EF, zostaną utracone równie szybko, gdy spróbuję ponownie wynaleźć koło.