Come posso sapere se ho decompilato o no? - pagina 12

 
Andrey F. Zelinsky:

perché sul forum 4? -- Ora è qui -- sia sul mercato che come freelance.

Ecco un esempio del suo codice nel codebase https://www.mql5.com/ru/code/9835

Kim ha scritto in tutte le sue funzioni:

Ma se guardate il codice "doer", il copyright di Kim è sfregato là fuori.

Dove sono gli oratori dei diritti umani qui?

È qui che il copyright viene veramente violato.

Le funzioni in quel template sono state prese direttamente da Igor. L'unica cosa che ha fatto è stato cambiare il nome e rimuovere il copyright di Igor nell'intestazione. Allo stesso tempo, al posto del copyright di Igor ho palesemente inserito il mio:

string Autor=" Автор функции для шаблона : www.expforex.at.ua";

Una chiara appropriazione indebita dei meriti di qualcun altro e una violazione della paternità di Igor, sostituendola con la sua.

 
Artyom Trishkin:

Le funzioni in quel template sono state prese in modo pulito da Igor. Ho solo cambiato il nome e rimosso il copyright di Igor nell'intestazione. Il copyright di Igor è sostituito dal suo:

Inequivocabile appropriazione indebita del credito altrui e violazione della paternità di Igor sostituendo la paternità a se stessi.

Mi chiedo perché IC non rimuova il suo codice dal codebase?

Perché la violazione del copyright è evidente e facile da controllare. Il codice di Kim è di dominio pubblico.

Perché non si solleva la questione della violazione del copyright?

Ecco le condizioni d'uso https://www.mql5.com/ru/about/terms:

3.9. Lei accetta di non riprodurre, copiare, vendere, scambiare o rivendere il contenuto di www.mql5.com. L'unica eccezione è se un accordo separato con MQL5 Ltd permette altrimenti. Se si fanno copie di qualsiasi Contenuto, tutti i copyright e gli altri avvisi di proprietà contenuti nei materiali originali devono essere mantenuti su tali copie. L'utente non può modificare il Contenuto o mostrarlo pubblicamente, riprodurlo o distribuirlo. Il sito mql5.com è di proprietà di MQL5 Ltd. I siti web di MQL5 Ltd sono protetti dalle leggi internazionali sul copyright. Qualsiasi uso non autorizzato dei siti web MQL5 Ltd può violare il diritto d'autore, il marchio e altre leggi.

Una violazione chiara, inequivocabile, deliberata, grossolana e cinica - e impunemente.
 

La funzione SetOrder() di Igor

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.03.2008                                                     |
//|  Описание : Установка ордера.                                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, datetime ex=0) {
  color    clOpen;
  datetime ot;
  double   pa, pb, mp;
  int      err, it, ticket, msl;
  string   lsComm=WindowExpertName()+" "+GetNameTF(Period());

  if (sy=="" || sy=="0") sy=Symbol();
  msl=MarketInfo(sy, MODE_STOPLEVEL);
  if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;
  if (ex>0 && ex<TimeCurrent()) ex=0;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("SetOrder(): Остановка работы функции");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ot=TimeCurrent();
    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, ex, clOpen);
    if (ticket>0) {
      if (UseSound) PlaySound(NameFileSound); break;
    } else {
      err=GetLastError();
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66);
        if (ExistOrders(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
        Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
        continue;
      }
      mp=MarketInfo(sy, MODE_POINT);
      pa=MarketInfo(sy, MODE_ASK);
      pb=MarketInfo(sy, MODE_BID);
      // Неправильные стопы
      if (err==130) {
        switch (op) {
          case OP_BUYLIMIT:
            if (pp>pa-msl*mp) pp=pa-msl*mp;
            if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
            if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
            break;
          case OP_BUYSTOP:
            if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
            if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
            if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
            break;
          case OP_SELLLIMIT:
            if (pp<pb+msl*mp) pp=pb+msl*mp;
            if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
            if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
            break;
          case OP_SELLSTOP:
            if (pp>pb-msl*mp) pp=pb-msl*mp;
            if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
            if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
            break;
        }
        Print("SetOrder(): Скорректированы ценовые уровни");
      }
      Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa,"  Bid=",pb,"  sy=",sy,"  ll=",ll,"  op=",GetNameOP(op),
            "  pp=",pp,"  sl=",sl,"  tp=",tp,"  mn=",mn);
      if (pa==0 && pb==0) Message("SetOrder(): Проверьте в обзоре рынка наличие символа "+sy);
      // Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      // Слишком частые запросы (8) или слишком много запросов (141)
      if (err==8 || err==141) Sleep(1000*100);
      if (err==139 || err==140 || err==148) break;
      // Ожидание освобождения подсистемы торговли
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      // Обнуление даты истечения
      if (err==147) {
        ex=0; continue;
      }
      if (err!=135 && err!=138) Sleep(1000*7.7);
    }
  }
}
//+----------------------------------------------------------------------------+

La funzione di un signore che si appropria delle cose di qualcun altro:

//+------------------------------------------------------------------+
//|              Установка отложенного ордера                        |
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
int SetOrder(string sy,int op,double ll,double pp,
             double sl=0,double tp=0,int mn=0,datetime ex=0,string lsComm="")
  {
   color    clOpen;
   datetime ot;
   double   pa,pb,mp;
   int      err,it,ticket,msl;
   string Autor=" Автор функции для шаблона : www.expforex.at.ua";

   if(sy=="" || sy=="0") sy=Symbol();
   msl=MarketInfo(sy,MODE_STOPLEVEL);
   if(ex>0 && ex<TimeCurrent()) ex=0;
   for(it=1; it<=5; it++)
     {
      if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))
        {
         Print("SetOrder(): Остановка работы функции");
         break;
        }
      while(!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      ot=TimeCurrent();
      if(!MarketWatch)ticket=OrderSend(sy,op,ll,NormalizeDouble(pp,MarketInfo(sy,MODE_DIGITS)),Slippage,NormalizeDouble(sl,MarketInfo(sy,MODE_DIGITS)),NormalizeDouble(tp,MarketInfo(sy,MODE_DIGITS)),lsComm,mn,ex,clOpen);
      if(MarketWatch)

        {
         ticket=OrderSend(sy,op,ll,NormalizeDouble(pp,MarketInfo(sy,MODE_DIGITS)),Slippage,0,0,lsComm,mn,ex,clOpen);
         if(SBT(ticket)) ModifyOrder(-1,sl,tp);
        }

      if(ticket>0)
        {

         return(ticket);
         break;
           } else {
         err=GetLastError();
         if(err==128 || err==142 || err==143)
           {
            Sleep(1000*66);

            continue;
           }
         mp=MarketInfo(sy, MODE_POINT);
         pa=MarketInfo(sy, MODE_ASK);
         pb=MarketInfo(sy, MODE_BID);
         if(pa==0 && pb==0) Comment("SetOrder(): Проверьте в обзоре рынка наличие символа "+sy);
         // Неправильные стопы
         if(err==130)
           {
            switch(op)
              {
               case OP_BUYLIMIT:
                  if(pp>pa-msl*mp) pp=pa-msl*mp;
                  if(sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
                  if(tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
                  break;
               case OP_BUYSTOP:
                  if(pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
                  if(sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
                  if(tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
                  break;
               case OP_SELLLIMIT:
                  if(pp<pb+msl*mp) pp=pb+msl*mp;
                  if(sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
                  if(tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
                  break;
               case OP_SELLSTOP:
                  if(pp>pb-msl*mp) pp=pb-msl*mp;
                  if(sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
                  if(tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
                  break;
              }
            Print("SetOrder(): Скорректированы ценовые уровни"+sy+"--op-"+op+"--ll-"+ll+"--pp-"+pp+"---"+Slippage+"--sl-"+sl+"--tp-"+tp+"---"+lsComm+"---"+mn+"---"+ex+"---"+clOpen);
           }
         // Блокировка работы советника
         if(err==2 || err==64 || err==65 || err==133)
           {
            break;
           }
         // Длительная пауза
         if(err==4 || err==131 || err==132)
           {
            Sleep(1000*300); break;
           }
         // Слишком частые запросы (8) или слишком много запросов (141)
         if(err==8 || err==141) Sleep(1000*100);
         if(err==139 || err==140 || err==148) break;
         // Ожидание освобождения подсистемы торговли
         if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
         // Обнуление даты истечения
         if(err==147)
           {
            ex=0; continue;
           }
         if(err!=135 && err!=138) Sleep(1000*7.7);
        }
     }
  }
//+------------------------------------------------------------------+

E ditemi che non l'ha assegnato perché ha cambiato un paio di righe...

Posso fornire tutti gli esempi di appropriazione indebita del lavoro di Igor che voglio.

 
Artyom Trishkin:

La funzione SetOrder() di Igor

La funzione dell'appropriazione indebita:

E ditemi che non l'ha assegnato perché ha cambiato un paio di righe...

Beh, ti sbagli -- in quello di Kim dice "set order" -- e nel suodice "set pending order" -- senti la differenza?

 
Andrey F. Zelinsky:
No, beh, ti sbagli -- quello di Kim dice "set order" -- e il suodice "set pending order" -- senti la differenza? Non noti il prezioso contributo al codice di Kim?
Oh, cavolo... Che sfortuna...
 

A proposito, il codice di Kim non ha solo il copyright rimosso, ha un'aggiunta della sua paternità:

string Autor=" Автор функции для шаблона : www.expforex.at.ua";

Se guardate il suo codice nel codebase, l'override della paternità di Kim alla propria paternità è presente in ogni funzione di Kim.

Per esempio https://www.mql5.com/ru/code/9835 .

 

Domanda per un quiz: cos'è il copyright?

1

//|                  Copyright 2015, Urain |

2

#property copyright "Copyright 2015, Urain"

La prima o la seconda, o entrambe?

 
Andrey F. Zelinsky:

A proposito, il codice di Kim non ha solo il copyright rimosso, ha un'aggiunta della sua paternità:

Se guardate il suo codice nel codebase, l'override della paternità di Kim alla propria paternità è presente in ogni funzione di Kim.

Per esempio https://www.mql5.com/ru/code/9835 .

Beh, è quello che ho detto. Igor ha persino la sua paternità in ogni funzione in tutte le sue biblioteche. Anche in quelle biblioteche, che non sono di dominio pubblico, ma per uso commerciale.
 
Questo è uno dei punti fondamentali: non conosci la cucina, ma cerchi di diventare subito uno chef

Cosa le fa pensare che non lo sappia? Non partecipo a servizi freelance ma a volte scrivo codice su ordinazione. Questo è un esempio di accusa sconsiderata)))

Non l'ho fatto, ma non posso saperlo con certezza. Ho visto codici di miei buoni amici spacciati per loro, cambiando l'intestazione nel codice sorgente e lasciando il resto del codice "così com'è". È stato anche discusso nel nostro forum. Sul quarto forum, una persona ha travisato il codice di Igor Kim come proprio. Insolentemente e senza tante cerimonie. Codice sorgente. Questo è spregevole, vile e basso.

Questo è uno dei punti fondamentali: non conosci la cucina, ma stai cercando di diventare uno chef.

Non pensate che io sia a favore dei decompilati - no, sono decisamente contro. Ma bisogna guardare le circostanze. O pensate che chiunque vi offra un codice sia un ladro, o pensate prima di accusare.

No, non posso. Ma non si può nemmeno provare che un cliente guadagna soldi violando il codice di qualcun altro. O la presunzione di innocenza è stata abolita? Quindi è meglio che provi prima la colpevolezza.

Altrimenti vi mostrerò un codice che sembra decompilato - diventerete un ladro perché avete visto questo codice.

Sono contrario a qualsiasi tipo di decompilazione in qualsiasi forma, ancora una volta sono sorpreso dal numero di programmatori che non evitano di sporcarsi il culo per un centesimo.

Cosa c'è da dimostrare? Il fatto è sulla faccia di decompilazione in studio, e non conoscendo le regole non esonera dalla responsabilità.

 
Nikolay Demko:

Domanda per un quiz: cos'è il copyright?

1

2

La prima o la seconda, o entrambe?

Cosa ne pensate?

Per esempio, la paternità?

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.03.2008                                                     |
//|  Описание : Возвращает флаг существования ордеров.                         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время установки)          |
//+----------------------------------------------------------------------------+
bool ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal(), ty;
 
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ty=OrderType();
      if (ty>1 && ty<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (ot<=OrderOpenTime()) return(True);
          }
        }
      }
    }
  }
  return(False);
}
Motivazione: