konto usunięte

Temat: Własność intelektualna a jakość kodu.

Od kilku miesięcy w wolnych chwilach próbuję mozliwości języka ABAP (i własnych) a ostatnie 2 tygodnie urlopu ślęczałem całymi dniami przy komputerze tworząc biblioteki wielokrotnego użytku (przyspieszanie kodowania i zmniejszanie ilości linii kodu). Jednak po wyjściu z tego transu zadałem sobie pytanie - po co mi to skoro w SAP i tak każdy może skopiować i wkleić sobie to jako gotowca i bilans bedzie taki, że ja tracę urlop a inny (jeżeli zechce) może bez straty dowolnie wykorzystać moja "krwawicę" bez żadnych poświęceń?
Jest program ZSAM_HIDE [1] niestety nie zadziała na wersjach bodajże od 5 wzwyż ale można by go przebudować jednak zaszyfrowany kod uniemożliwia transport więc trzeba by być obecnym przy wykonywaniu transportu do systemu testowego i potem produkcyjnego żeby go na chwilę odszyfrować.
Inny sposób to dodanie wiersza z ciagiem *@#@@[SAP] na górze źródła. Ale SAP jakoś sam go usuwa a istniejący programik, który ten problem załatwia [2] obsługuje jedynie programy (np. klas już nie załatwi).
Zresztą i to nie jest zabezpieczeniem a jedynie chyba znacznym utrudnieniem w odczytaniu kodu.
Rozróżniam dwie kategorie programistów: tych co sami coś tworzą (może czasem jak ja częściowo korzystają z cudzych rozwiązań ale tych udowstepnionych) i są tacy co podpatrują cudze. Nie to żebym był taki świątobliwy. Po prostu zauważyłem, że mając nawet wgląd w cudzy kod, po prostu nie opłaca mi się go analizować bo w tym czasie stworzę własny. Wim, że istnieją tacy, którzy wybiorą tą drugą opcję i rozpychając się łokciami wygrają ze mną w oczach pracodawcy co sprawi, że ja się narobię (gdy oni się bawią), oni spiją śmietanę a mnie obejmie redukcja etatów.

No i teraz mam tytułowy dylemat: jeśli nie moge ukryć ważnych swoich rozwiązań to nie ma sensu poświęcac na nie czasu - lepiej produkować masowy kod (zresztą widziałem trochę takich kodów wartych miliony a sprawiały wrazenie gniotów). A o precyzji, elegancji kodu oraz o unikaniu jego powielanania (tworzenie bibliotek) lepiej zapomnieć. Czyli właściwie nie ma szans na satysfakcję z programowania w ABAP jaką mam z kodowania w innych językach gdzie bez problemu mogę zaciemnić kody bez oglądania się na kogokolwiek i nie obawiając się, że cenne dni i wieczory spędzone nad kodem zostaną wykorzystane przez leniwą konkurencję.

1) http://www.erpgreat.com/abap/program-to-hide-abap-sour...
2) http://adamus.home.pl/sap/index.php/2012/07/29/hide-so...
Jacek Żebrowski

Jacek Żebrowski Programista ABAP

Temat: Własność intelektualna a jakość kodu.

Proponuje najpierw wykonać jakiś projekt w realiach projektowych.

Jak narazie napisał Pan sobie bibliotekę standardową w oderwaniu od jakichkolwiek wymagań. ABAP jest językiem 4 gen i w nim samym słowa kluczowe wykonują już dość skomplikowane operacje - stąd ciśnienie na biblioteki narzędziowe jest mniejsze.
Sprawa druga - w ramach każdego modułu konwencje interfejst typy danych są inne - to powoduje że wypracowanie jednolitego sposobu rozwiazywania problemów jest zadaniem iluzorycznym - mozliwym jedynie w teorii.
Trzecia sprawa - czy ma Pan pewność że może Pan ukryć ten kod ? w ramach umowy konsultingowej pracuje Pan przecież na systemie klienta i rozwija rozwiązanie dla niego - w 90% znanych mi umów produkt projektu pozostaja własnościa klienta.

Z tym że prosciej jest napisać własne rozwiazanie od zera ameryki Pan nie odkrył - rzadko kiedy jednak jest na to czas i czasem trzeba wprowadzić 1 linijkową zmianę kodu która zajmuje cały dzień.... to sie nazywa... nie wiem... ach tak - PROGRAMOWANIE :P

Nalezy rowniez zauwazyc ze obskuryfikacja kodu nie jest narzedziem ochrony intelektualnej, ochronie tych wlasnosci sluzy LICENCJA.
W dluzszej perspektywie tworzen ie reuzywalnych rozwiazan sie oplaca poniewaz powoduje ze sami mamy mniej pracy utrzymaniowej - kasujemy mniej dniowek wiec jestesmy bardziej konkurencyjni.

Dodatkowo ABAP nie jest jedyna technologia gdzie ten mechanizm dziala - ludzie od dekad uzywaja PHP naprzyklad - i zyja. Sila dobrego programisty nie jest to jak potrafi ukryc kod a paradoksalnie jak czytelny jest on dla innych :)

Proponuje wiec skonczyc czysto teoretyczne rozwazania i napisać coś przydatnego ;)Ten post został edytowany przez Autora dnia 05.05.14 o godzinie 14:22

konto usunięte

Temat: Własność intelektualna a jakość kodu.

Dziękuję za odpowiedź. Pozwoli Pan, że odniose się do wydzielonych punktów wypowiedzi.

>> "Jak narazie napisał Pan sobie bibliotekę standardową w oderwaniu od jakichkolwiek wymagań."

Chodzi o często powtarzalne standardowe działania. Np. często tworzy się strukturę dla {wa} (kilka linii zal od ilości pól) i zaraz {data: T type table of wa} po czym powiedzmy (w najprostszym przypadku) loop (znów może być tyle linii co ma wa). Jeśli struktura {wa} ma 10 linii to mamy minimum 21 linii (chyba że mniej dłuższych :). Natomiast jeżeli uniwersalną logikę umiescimy w metodach klasy, można daną rzecz zrobić nawet w 1 linii. Jeśli będa inne wymagania, wystarczy rozbić moduł na A i X po czym dorobić B. Wówcza A i B będą wykorzystywały X.

>> "ABAP jest językiem 4 gen i w nim samym słowa kluczowe wykonują już dość skomplikowane operacje - stąd ciśnienie na biblioteki narzędziowe jest mniejsze."

Zaiste, jest ta składnia swoista. I rzeczywiście trudno jest czasem z nią się "ułożyć" szczegolnie wewnatrz klasy. Ale można tylko trzeba poszukać. Nawet wbrew komunikatom sprawdzania poprawności, mówiącym że w OO tego czy tamtego nie można, jak się poszuka, okazuje się że można! :)
Sęk w tym, że ja lubię szukać. Powiem inaczej - nie lubię ustępować czy poddawac się. W tym mój problem, który skłonił mnie do napisania tego wątku. Jak już się tak naszukam i znajdę (a zwykle w swoim prywatnym czasie (bo kto chciałby płacić za moją zaciekłość?) to nie bardzo mi się chce dawać broń na mnie samego tym, co chcą mieć podane na tacy i potem przypisać sobie zasługi.

>> Sprawa druga - w ramach każdego modułu konwencje interfejst typy danych są inne - to powoduje że wypracowanie jednolitego sposobu rozwiazywania problemów jest zadaniem iluzorycznym - mozliwym jedynie w teorii.

W swoich bibliotekach (inne języki) używam tzw typów generycznych. Tu - w ABAP - istnieje pojęcie "generyczny" ale na mój stan wiedzy o tym języku (nazwę go pieluchowym) wydaje się mieć inne znaczenie. To z czym mialem do czynienia w swoich (prywatnych) ćwiczeniach ptzypomina mi raczej rzutowanie na typ Object znany z Javy czy C#. Mimo to odnioslem kilka wstepnych sukcesów jednak przyznam, że nie udało mi się (jak to można w ww. językach) by metoda zwróciła użyteczną referencję do realnej tabeli danych. Tzn moja metoda zwraca ale nijak nie mogę w prosty sposób tej tablicy uzyć :).

>> Trzecia sprawa - czy ma Pan pewność że może Pan ukryć ten kod ? w ramach umowy konsultingowej pracuje Pan przecież na systemie klienta i rozwija rozwiązanie dla niego - w 90% znanych mi umów produkt projektu pozostaja własnościa klienta.

I w tym cały ból.

Z tym że prosciej jest napisać własne rozwiazanie od zera ameryki Pan nie odkrył - rzadko kiedy jednak jest na to czas i czasem trzeba wprowadzić 1 linijkową zmianę kodu która zajmuje cały dzień.... to sie nazywa... nie wiem... ach tak - PROGRAMOWANIE :P

Otóż to! Szukanie igły w stogu siana. Sam akt wydobycia może trwać sekundę.

>> Nalezy rowniez zauwazyc ze obskuryfikacja kodu nie jest narzedziem ochrony intelektualnej, ochronie tych wlasnosci sluzy LICENCJA.

Teoretycznie tak. Podejrzewam, że w praktyce wystarczy przeanalizować taki kod i spreparpować własny. Nie sądzę by można było udowodnić komuś plagiat. W ogóle nie sądzę bym się dowiedział, że ktoś tego używa nawet gdyby to żywcem przekopiował. To może działać na poziomie wielkich firm. Tacy maluczcy jak ja są miotani falami morza i moga się tylko dostosowywać albo utonąć.

>> W dluzszej perspektywie tworzen ie reuzywalnych rozwiazan sie oplaca poniewaz powoduje ze sami mamy mniej pracy utrzymaniowej - kasujemy mniej dniowek wiec jestesmy bardziej konkurencyjni.

Oczywiście. Dlatego to robię. Ale kij (oczywiście) ma drugi koniec. Czytałem ostatnio o polskich karabinach przebijających pancerze ówczesnych czołgow. Z ww. powodu utrzymywane były w tajemnicy nawet gdy jechały na front (nawet oficerowie jednostek je transportujących nie wiedzieli co jest w skrzyniach). Gdy tylko ich uzyto, w krótkim czasie podrobiły go wszystkie znaczące armie a czołgi dodatkowo opancerzono.

>> Dodatkowo ABAP nie jest jedyna technologia gdzie ten mechanizm dziala - ludzie od dekad uzywaja PHP naprzyklad - i zyja. Sila dobrego programisty nie jest to jak potrafi ukryc kod a paradoksalnie jak czytelny jest on dla innych :)

Oczywiście. Przy założeniu, że albo osoby przyznające wynagrodzenia potrafią ocenić pracę programisty i są sprawiedliwe albo nie wiemy ile zarabiają koledzy i wierzymy, że wszystko jest Ok.

>> Proponuje wiec skonczyc czysto teoretyczne rozwazania i napisać coś przydatnego ;)

:)

Pozdrawiam,
Zorek.Ten post został edytowany przez Autora dnia 05.05.14 o godzinie 22:21
Jacek Żebrowski

Jacek Żebrowski Programista ABAP

Temat: Własność intelektualna a jakość kodu.

I jeszcze jedno zastrzeżenie.
Cała dyskusja zaczyna się od tego że przekłada Pan doświadczenia z innych języków programowania na ABAP. Moja praktyka (jako Javowca PHPowca i teraz ABAPera) jest niestety taka że prowadzi to jedynie do rozczarowań.
Wsparcie SAP dla ABAPa i technologii powiązanych jest niestety w tyle o jakieś 10 lat za każdym innym cywilizowanym językiem. Obiektowość jest doklejna na siłe jeszcze gorzej niż w PHP :) Tym niemniej jednak SAPowi oddać trzeba że sama infrastruktura ABAPowa (edytor narzędzia debugger integracja) jest genialna- i to w polaczeniu z Standardową funkcjonalnoscia systemu jest sila platformy - to ze czasem trzeba w imie mniejszego zla splodzic paszkwila bo ktos juz zaczal - coz - za to nam placa :)

Co do referencji do tabel - tak da sie je generycznie zwrocic - typ generyczny ANY TABLE. nastepnie mozna to przypisać do dowolnej zmiennej - np typu ANY. co do użycia zwroconej referencji - wydaje mi sie ze zostaje tylko rzutowanie - choc jest pozno i moge nie pojmowac istoty sprawy :)
Polecam tez poguglac w temacie ABAP RTTS - refleksja zawsze sie przydaje.

konto usunięte

Temat: Własność intelektualna a jakość kodu.

Jacek Ż.:
I jeszcze jedno zastrzeżenie.
Cała dyskusja zaczyna się od tego że przekłada Pan doświadczenia z innych języków programowania na ABAP. Moja praktyka (jako Javowca PHPowca i teraz ABAPera) jest niestety taka że prowadzi to jedynie do rozczarowań.

Tak, już na pierwszym kursie wytykałem trenerowi swoje uwagi choć dzis wiem, że niektóre wynikały z braku zrozumienia nieco innej rzeczywistości jaką jest ABAP w porównaniu np. do C#/TSQL (z entity framework jakoś sie nie zaprzyjaźniłem), z czym najchętniej obcowałem. Chwilę później doznałem głębszego uświadomienia istnienia warstwy danych niezależnej od motoru BD,
Wsparcie SAP dla ABAPa i technologii powiązanych jest niestety w tyle o jakieś 10 lat za każdym innym cywilizowanym językiem.

Tam mówiono 2-3 lata na co ja złosliwie (wskutek wspomnianego przez Pana rozczarowania) oszacowałem na 20 :). Dziś nie mam tak jednoznacznej opinii bo niektóre elementy (spośród przeze mnie poznanych) są bardziej, inne mniej opóźnione a istnieją też takie, z jakimi się raczej nie spotkałem.
Obiektowość jest doklejna na siłe jeszcze gorzej niż w PHP :)

Zgadzam się, jest sztuczna (ja porównywałem do C++ czyli mniej więcej C z klasami).
Tym niemniej jednak SAPowi oddać trzeba że sama infrastruktura ABAPowa (edytor narzędzia debugger integracja) jest genialna- i to w polaczeniu z Standardową funkcjonalnoscia systemu jest sila platformy -

Ja jeszcze jestem oszołomiony samym językiem ale powoli zaczynam widzieć światełko w tunelu - co do tej funkcjonalności i powiązań między modułami. Trochę się boję czy zdołam pojąć. Obawa wynika stąd, że jednak system nie należy (w moim odczuciu) do zbyt klarownych oraz - jak sie wydaje - z musu ogarnięcia FI, z którym raczej nie miałem do czynienia (moja domena to Kardy i Płace - tu będzie HR).
to ze czasem trzeba w imie mniejszego zla splodzic paszkwila bo ktos juz zaczal - coz - za to nam placa :)

No właśnie. Tego się boję. Z drugiej strony robienie od nowa (a tak żyłem albo rozwijałem własne) to śmietana a życie nie serwuje jej bez końca.

Co do referencji do tabel - tak da sie je generycznie zwrocic - typ generyczny ANY TABLE. nastepnie mozna to przypisać do dowolnej zmiennej - np typu ANY. co do użycia zwroconej referencji - wydaje mi sie ze zostaje tylko rzutowanie - choc jest pozno i moge nie pojmowac istoty sprawy :)

Nie zagłębiłem się jeszcze np. w ALV-y ale w C# mam wiele klas/metod do przeróżnch działań na tabelach co np. oznacza ŁadujNaGrid(ciąg_połączenia, tabela [, ew. tabele słownikowe], grid) gdzie Grid to coś jak ALV. Od razu mam załadowane dane z comboboxami gdzie słowniki, jest jeszcze cos jak binding_navigator służący do zapisywania zmian wprost do bazy, cofania (jak CTRL-Z), nawigacji itp. Boję się, że tego nie uzyskam w ABAP, że zawsze będę musiał wszystko oprogramowywać od nowa a "u siebie" oprócz wyciągnięcia Grida i BindingNavigatora na formę musze napisać tylko 1 linijkę kodu (nie licząc przypisań zmiennych użytych jako argumenty).
Polecam tez poguglac w temacie ABAP RTTS - refleksja zawsze sie przydaje.

Siedziałem nad czymś co się w kursie BC502 nazywa RTTC (nie wiem ale może to to samo?) i właśnie na tym przerwałem bo przyszła mi do głowy owa zabójcza myśl, że jeśli już stworzę coś takiego co nabazgrałem powyżej w ABAP, będę musiał odddać to światu. Problem w tym, że nie jestem szybki w programowaniu a nadrabiam właśnie swoimi bibliotekami, które sprawiają że jednak w ich użyciu okazuję się szybki a przy tym dość precyzyjny. Nie to żebym komuś czegoś żałował. Gdybym zrezygnował z tego zawodu, opublikowałbym wszystko - może ktoś by na to chciał zerknąć i skorzystać a może nie. Może przesadzam, może moje twory (o ile w ABAP zdołam je odtworzyć) są specyficzne dla mnie i nikt nie zechciałby ich nawet użyć. Może. Jednak gdyby zechciał, będę przegrany :)



Wyślij zaproszenie do