Anonymní profil oxidián – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil oxidián – Programujte.comAnonymní profil oxidián – Programujte.com

 

Příspěvky odeslané z IP adresy 78.45.87.–

JavaScript, AJAX, jQuery › Jquery a odstranění chyby
1. 9. 2016   #212533

Potřeboval bych pomoct s odstraněním chyby:

$.fn.extend({
  compressElementsWidth: function() {
    var range = { min: 9999, max: 0 };
    $(this).find("*").contents().filter(
      function() { 
       if (this.nodeType == 3 && !this.nodeValue )
         return $(this);
       else
         return this.nodeName.match(/IMG|A|GROUP|FIELDSET|INPUT|SELECT|TEXTAREA|BUTTON|SUBMIT/) 
&& this.innerText.replace(/\s+/gm) ? $(this) : null;
      }).each(function(e) {
        var left = $(this).position();
        if (p.left < range.min ) 
          range.min = p.left;
        var right = p.left + $(this).width;
        if ( right > range.max ) 
          range.max = right;
    });
    var max_width = range.max - range.min 
    $(this).find("*").contents().filter(
      function() 
      { 
       if (this.nodeType == 3 && !this.nodeValue )
         return $(this);
       else
         return this.nodeName.match(/IMG|A|GROUP|FIELDSET|INPUT|SELECT|TEXTAREA|BUTTON|SUBMIT/) && 
this.innerText.replace(/\s+/gm) ? $(this) : null;
      }).each(function(e) {

        $(this).css("max-width:", max_width );
    });
  }
});

$("div").compressElementsWidth();

 $("div").compressElementsWidth();

Má to zjistit šířku elementů (udělat součet). Je to detekce toho faktického obsahu uvnitř wrapperu, A potom upravit max-width u jednotlivých wrapujících potomků. Ale nefunguje

JavaScript, AJAX, jQuery › Jak prohodit elementy pomocí…
29. 8. 2016   #212494
JavaScript, AJAX, jQuery › Jak prohodit elementy pomocí…
29. 8. 2016   #212490

Tento kód by měl prohodit dva sloupce na stránce:
Jak psát web
(Kód injectuju na stránku pomocí addonu pro prohlížeč Firefox)

 var selectors = "div#navigace;div#text"
    selectors.split(";");
        var searches = [];
        var targets = [];
        for ( var k in selectors )
          {
          if ( (k % 2) != 0 )
            searches.push(selectors[k]);
          else
            targets.push(selectors[k]);      
          }
        
        for ( var k in searches )
          {
          var cloned = $(searches[k]).clone(true);
          $(searches[k]).replaceWith($(targets[k]));
          $(targets[k]).replaceWith(cloned);
          }

No nepovedlo se. Levý sloupec zmizel a pravý je na místě. Co je špatně? Selektory fungují, rozparsované je to dobře, ale selhává kód uvnitř poslední smyčky.

JavaScript, AJAX, jQuery › Rozšíření pro Google Chrome
10. 8. 2016   #212297

Moc se v tom nevyznám, ale uděláš lépe, když tu funkci pojmenuješ. Zvykej si dávat věci do namespacu kvůli přehlednosti. Ve svém kódu pouze zavádíš listeners ale nikde ho neodstraňuješ.

Dám příklad:

document.addEventListener('DOMContentLoaded', mynamespace.myclickeventHandler )

mynamespace.myclickeventHandler = function(e){

if (!mynamespace.activated)

{

document.addEventListener('click', mynamespace.myclickevent );

 mynamespace.activated = true;

}

else

{

 mynamespace.activated = false;

 document.removeEventListener('click', mynamespace.myclickevent );

}

}

Pokud na nic nepříjdeš, pak zkus mozillu https://discourse.mozilla-community.org

budou to sice dělat trochu jinak ale mohou poradit, mají totiž chrome API. Nebo zkus stackoverslow s tagem Google-chrome tam máš větší šanci najít pomoc.

JavaScript, AJAX, jQuery › Proč se nezobrazuje obrázek?
9. 8. 2016   #212283

Část kódu zkopírovaná ze seznam.cz:

<a tabindex="-1" aria-hidden="true" href="https://www.stream.cz/slavnedny/10011567-den-kdy-byla-zavrazdena-sharon-tateova-9-srpen-1969" class="default-look__image-wrap">
<img style="opacity: 1;" srcset="" src="//d32-a.sdn.szn.cz/d_32/c_C_C/rmvVSf.jpeg" data-origin-src-set="" data-origin-src="//d32-a.sdn.szn.cz/d_32/c_C_C/rmvVSf.jpeg" alt="Vraždy Charlese Mansona" class="default-look__image smart-image"><span class="">
<span class="default-look__image-overlay"></span>
<span class="default-look__image-time">8:53</span></span></a>
<div class="default-look__text-box"><a href="https://www.stream.cz/slavnedny/10011567-den-kdy-byla-zavrazdena-sharon-tateova-9-srpen-1969" class="default-look__title link">Vraždy Charlese Mansona</a>
<p class="default-look__perex">Gang šíleného vizionáře a jeho zločiny, které dodnes šokují svět.</p></div>


Místo obrázku se zobrazí alternativní popisek. Proč? Když vezmu src a dám do adresního řádku tak se obrázek normálně načte.

JavaScript, AJAX, jQuery › Správný výpočet pozice divu
4. 8. 2016   #212216

Přišel jsem na to jak zjistit pozici levého horního rohu aktuální obrazovky, takže když kliknu tak div se zobrazí poblíž kurzoru myši, ale ještě mám problém s tím, že když kliknu poblíž dolního scollbaru tak mi zmizí div#panel dole pod scrollbarem

var ClientW = jQuery(window).width();
var ClientH = jQuery(window).height();

var w = $('div#panel').width();
var h = $('div#panel').height();
var offsetY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
var offsetX = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
var y, x;
if ( e.clientY > ClientH - h )
  y = offsetY + ClientH - (e.clientY-ClientH);
else
if ( e.clientY < 0 + h )
  y = offsetY + e.clientY + (h-e.clientY);
else
  y = e.clientY < ClientH/2 ? offsetY + e.clientY - h/2 : offsetY + ( e.clientY+h/2 > ClientH-h ? ClientH-h : e.clientY+h/2 ) ;    
x = (e.clientX > ClientW - w/2 )?offsetX + ClientW-w : offsetX + e.clientX;
 
$('#panel').css({ left: x, top: y })

Jde o poslední část této podmínky:


y = e.clientY < ClientH/2 ? offsetY + e.clientY - h/2 : offsetY + ( e.clientY+h/2 > ClientH-h ? ClientH-h : e.clientY+h/2 ) ;
Kde zjišťuji jestli je  aktuální pozice myši větší než polovina výšky panelu (h). Pokud je vyšší odečtu výšku panelu (h). Pokud není vyšší přičtu polovinu panelu. A právě v tady té poslední podmínce "pokud je vyšší" je asi chyba jako by se nepočítalo s výško toho posuvníku. Nějakých cca 20px a kvůli tomu se k pozici prvku výška přičte místo odečte.

Máte nějaký nápad jak to opravit?

JavaScript, AJAX, jQuery › Správný výpočet pozice divu
3. 8. 2016   #212206

Tuším že problém je v tom že nastavuji left: a right: absolutní pozici od začátku dokumentu. Ale $(element).height() nastavuji číslo které se vztahuje pouze k aktuální obrazovce. Jak bych mohl zjistit jaká je vzdálenost od začátku dokumentu až po začátek aktuální obrazovky (levý horní okraj obrazovky)?

JavaScript, AJAX, jQuery › Správný výpočet pozice divu
2. 8. 2016   #212189

Pracuji na addonu pro Firefox (napsané v JS). Program dělá následující, klikneš na element na stránce a zorazí se ti výpis s informacemi o elementu. K tomu používám div#panel a jquery. V panelu je tedy ten výpis. Problém nastává, když je výpis moc dlouhý. Například na seznam.cz kliknu na element

INPUT  id='fulltext-field'

a když se zobrazí všechny informace od rodičů až po tento input včetně atributů tak už mi div přesahuje do záporných hodnot na ose y. Ještě horší to je když jdu níže, scrollu níž a kliknu a nic se mi nezobrazí nebo to prostě zmizelo asi někam moc nahoru na začátek stránky nebo do záporných hodnot.

Výpočet:

var ClientW = jQuery(window).width();
var ClientH = jQuery(window).height();  

// následuje smyčka která vkládá informace do div#panel ul

// dále výpočet pozice

var w = $('div#make_it_easy_panel').width();
var h = $('div#make_it_easy_panel').height();
var y = (e.clientY > ClientH - h )?ClientH-h*2:e.clientY-h;
var x = (e.clientX > ClientW - w )?ClientW-w:e.clientX;   
// Pak už jen pozicování divu

$('#panel').css({ left: x, top: y })

Mým záměrem bylo udělat to tak, aby div byl nad pozicí myší pokud je tam dost místa.

Anebo aby byl pod pozicí myší pokud je tam dost místa.

Prostě jde o to, aby byl vidět celý element div a nezasahovalo to do oblasti kam jsem klikl.

Obrázky:

http://oi68.tinypic.com/122oqdj.jpg

http://oi66.tinypic.com/hwwnl2.jpg

JavaScript, AJAX, jQuery › zrušení výběru options
19. 7. 2016   #212032

Původní dotaz byl o zrušení výběru options, nikoliv o poli. Ukládání dat má být do asociativního pole, ale protože JS nic takového nemá, používám objekt. Filter je zajímavý nápad, ale aplikoval bych to až budu s projektem dále a budu se zabývat většími detaily.

JavaScript, AJAX, jQuery › zrušení výběru options
18. 7. 2016   #212027

Pojem slovník slyším poprvé. Pole to není. Je to objekt. Funguje jako seznam. Já tedy mezi slovníkem a seznamem rozdíl nevidím. Zní to stejně :-)

JavaScript, AJAX, jQuery › zrušení výběru options
18. 7. 2016   #212024

#5 Kit
Co znamená, že nechá prázdné místo? Klíč zůstane jako null nebo tak něco to jsem už viděl, ale co to znamená pro datovou část objektu? Ta se dealokuje, ne? Jestli z { key: data } se změní na { null: null} tak už skoro není co řešit. I když pokud by uživatel vytvořil několik set profilů, tak by to asi zdržovalo při vyhledávání. Zatím budu doufat že ne. Nechci se v tom moc do detailu šťourat v první verzi.

JavaScript, AJAX, jQuery › parsování textu
18. 7. 2016   #212018

Ne, tam se jedná o to zjistit jestli je tam sudý počet (páry tag : css styl). Jistě by stačilo porovnat první bit čísla - to teď zrovna nevím jak v JS udělat.

Pokud tam uživatel začne dávat neobvyklé věci tak to určitě skončí errorem, ale to uvidí že mu addon nejede.

JavaScript, AJAX, jQuery › parsování textu
18. 7. 2016   #212010

Dík za kód, ale řekl bych že už to mám hotové.

Zkušební text:

body, h1, h2, h3, h4, h5, div, p, ul, li

{
background-color: black; 
color: #f7fab0;
font-family: "Arial Black";
font-size: 20px;
line-height: 35px;
font-weight: bold; 
font-size: 28px;
padding-left: 0px;
padding-right:0px;
}

h1, h2, h3, h4, h5, div, p, ul, li, span, a
{
background-image: none;
}


Obrázky na pozadí a jiné složitosti netřeba přidávat.

var task = {
  search: [],
  task: [],
  css: []
};

function parse(src = null){
  if ( src === null ||
       ( typeof src === 'object' && src.type == 'click' ) // click event for debugging purposes
     ) 
    src = document.getElementById("css").value;

  var arr; 
  var lines = src.replace(/(?:^#|\/\/).*/mg,"").replace(/[\r|\n]/g,"").replace(/\/\*.*\*\/\s?/g,"").split("}");
  if (lines.length)
  for ( var n = 0; n<lines.length-1; n++ )
    {    
    var arr20 = [];
    var arr21 = [];
    var arr22 = [];
    task.task[n] = [];
    
    arr = lines[n].split("{");
    console.log(arr);

    if ( arr.length % 2 === 0 )
      {
      task.search.push(arr[0]);  // sem mohu vložit trim
      arr20.push(arr[1]); // push css block 
      }
    else
      { 
      break;
      }

    for ( var i = 0; i<arr20.length; i++ ){
      arr21 = arr20[i].split(";"); // push css style
      if ( !arr21.length )
        return false;
    }
    for ( i = 0; i<arr21.length; i++ )
      { 
      arr21[i] = arr21[i].trim(); 
      if ( arr21[i] === "") continue;
      arr22 = arr21[i].split(":");
      if ( arr22.length % 2 === 0 )
        {
        task.task[n].push( // push name, value 
            { name:arr22[0], value:arr22[1].trim() }
          );
        }
      else
        { 
        break;
        }
      }
    task.css[n] = {}
    for ( i = 0; i<task.task[n].length; i++ )
      {
      task.css[n][task.task[n][i].name] = 
        task.task[n][i].value;      
      }
    console.log(task);
    }
}


Funguje mi to bez problému.

JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
17. 7. 2016   #211999
JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
16. 7. 2016   #211997

No a vysvětlíš mi jak přiřadit funkci která je uvnitř namespacu? Aktuálně mám tyto tři příkazy mimo namespace:

chrome.storage.local.get(['initiated'], checkIfExists)
document.addEventListener('DOMContentLoaded', restore);
document.getElementById("save").addEventListener("submit", save);

Takže celkem tři funkce přiřazuji, ale jak to udělat, abych řekl kterého namespacu se to týká?

JavaScript, AJAX, jQuery › parsování textu
16. 7. 2016   #211991

Potřebuju naparsovat css stylopis. Mám tento kód, ve kterém nejdříve odstraním komentáře a pak parsuju, ale problém je že část kde chci vložit do pole arr1 a do pole arr2 stringy nefunguje to a nejede vůbec:

function parse(){
  var src = document.getElementById("css").value;
  var arr; 
  var arr1; 
  var arr2
  var lines = src.replace(/(?:^#|\/\/).*/mg,"").replace(/[\r|\n]/g,"").replace(/\/\*.*\*\/\s?/g,"").split("}");
  for ( var i = 0; i<lines.length; i++ )
    {    
    arr = lines[i].split("{")
    
    arr1.push(arr[0].trim())
    arr2.push(arr[1].trim())
    
    }   
  console.log(arr);
}

Jinak místo arr1 a arr2 by mělo být search a task:

var task {
  search: [],
  task: []
}


tato definice mi ale nefunguje a script nechce běžet kvůli chybě (žádnou chybu ale nevidím v Debuggeru takže nevím o jakou chybu se jedná). Chyby se mi ve Firefoxu vůbec nezobrazují.

Zkušební text:

/*
css rules
*/
 
body { color:black;}
div, p { color:blue; background-color:white; }
form, form p { width:500px; }

# non-greedy
// anything

JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
15. 7. 2016   #211985

Programátoři Mozilly to používali v SDK, ale je to už minulost, protože dneska se prosazuje Webextension API, který má aktivní podporu multiprocesoringu. Tedy od verze Firefoxu 48.

JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
15. 7. 2016   #211970

Já se ptál na příklad, ale dobré už jsem si to našel.

var yourNamespace = {

    foo: function() {
    },

    bar: function() {
    }
};

...

yourNamespace.foo();


Paradox je, že yourNamespace je globální proměnná. A pojmenovávání namespaců?

Jak se říká tomuto (myslím první řádek)?

var { Hotkey } = require("sdk/hotkeys");
var showHotKey = Hotkey({
  combo: "accel-shift-o",
  onPress: function() {
    showMyPanel();
  }
});
var hideHotKey = Hotkey({
  combo: "accel-alt-shift-o",
  onPress: function() {
    hideMyPanel();
  }
});
JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
14. 7. 2016   #211968

A co používání namespaců?

Mám čtyři moduly (scripty) do addonu. Jedná se o moduly s volbami. Používají stejné názvy proměnných, ale bylo by lépe to dát do namespaců. Jaká je praxe?

JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
14. 7. 2016   #211962

Tak mi vysvětli co tam dělá to this?

JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
14. 7. 2016   #211960

Třídy v JS se používaj od kdy? Nikdy jsem to ještě neviděl.

Jinak ten script nejspíš nahraju na net až bude hotový, je to ale addon takže pokud tě to zajímá je třeba k tomu Firefox 48 beta (mělo by jít stáhnout jestli není momentálně spadlý server). Výhoda toho co dělám, napíšu si script a mohu na něm upravit jakoukoliv webovou stránku (prostě ten svůj script k té stránce připojím). Případně si napsat script na stahování obrázků. Ale teprve se to učím. Takže v tom Firefoxu se dá na stránce about:debugging připojit ten addon a otestovat si ho.

JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
14. 7. 2016   #211958

nepsal jsem cesta ale adresa (paměti). Jdu ověřit selectedIndex a title jaké maj hodnoty a třeba něco najdu.

Edit: Asi jsem na to přišel

Mám tam select box, kde vybírám profil. Když vyberu profil tak spouštím funkci restore

function restore(e = null)

funkce určená jak pro nahrání defaultních hodnot do formuláře. Předpokládal jsem, že když vyberu profil tak mám nastavit defaultní profil (to je ten co byl uložen naposled že ho používám). A to je chyba. Vždyť když vyberu profil, musím tam dosadit aktuální profil a ne defaultní.

JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
14. 7. 2016   #211948

Kdyby ses zabýval programováním doplňků tak bych ti ten kód poslal, takhle to asi nemá moc smysl. Myslel jsem že už se to vyřešilo, ale ne. Je to moc podivné a už nevím jak to odladit. Problém je že v JS ani nemohu zobrazit adresu na kterou ta proměnná odkazuje, abych si ověřil jestli je tam někde něco špatně. Podle analýzy co jsem dělal naposled se zdá že data se ukládají správně, ale nesprávně se načítají. Při otevření stránky vidím správné uložené hodnoty. Jakmile ale přepnu na jiný profil a pak zase zpět tak tam jsou hodnoty jiné aniž bych cokoliv znova ukládal.

JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
14. 7. 2016   #211937

Chybu jsem našel, bylo to špatnou podmínkou a taky jsem přehlédl ještě jedno místo kde se ten objekt měl advanced_obj kopírovat a tam jsem jen udělal = advanced_obj;

JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
14. 7. 2016   #211935

Zdá se ale že problém bude někde jinde.

Zkoušel jsem toto:

  data.advanced[title] = {
  site_rule : "",
  description : "",
  tag_1 : "",
  action_1 : "",
  parent_1 : "",
  tag_2 : "",
  action_2 : "",
  parent_2 : "",
  tag_3 : "",
  action_3 : "",
  parent_3 : ""  
  }

  for (var k in advanced_obj)
    data.advanced[title][k] = document.getElementById(k).value;


A víš co? Všechny položky kromě první se vynulujou na "". K tomu ta co jsem měnil obsahuje text title. Takže když změním jednu a pak změním druhou tak ta předchozí se přepíše na "" a druhá se uloží na title. To by u normálního objektu být nemělo. Je to jak kdyby se tím title odkazovalo na tři různé objekty.

JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
13. 7. 2016   #211906

Dík,

data.advanced[title] = Object.assign({},advanced_obj);


Můj problém to ale nevyřešilo. Stále se mi to ukládá do více profilů najednou. Tu logiku nechápu

Zkouším taky toto:

  data.advanced[title] = {};
  data.advanced[title] = Object.assign(data.advanced[title],advanced_obj);


Takže vytvořím si několik zkušebních profilů v tomto pořadí

- default,

- write

- something

- interesting

pod každým mám data pro jeden formulář.

Vyberu profil, a do site_rule si napíšu nějaký údaj třeba test, dám uložit.

A test se objeví u více položek ale ne u všech. A tak je to s každým profilem, ale dělá to různě, ne že to uloží do všech profilů. title je jedinečný název profilu, takže mi to nedává vůbec smysl.

JavaScript, AJAX, jQuery › Jak zkopírovat objekt?
13. 7. 2016   #211903

Je v JS něco jako clone? var objcopy = clone obj; nebo var objcopy = new obj?

To druhé jsem už zkoušel a nejelo mi to.

Můj kód:

/* Objekt který chci duplikovat:*/

var advanced_obj = {
  site_rule : "",
  description : "",
  tag_1 : "",
  action_1 : "",
  parent_1 : "",
  tag_2 : "",
  action_2 : "",
  parent_2 : "",
  tag_3 : "",
  action_3 : "",
  parent_3 : ""  
}

/* Následuje část kódu z funkce */

  for (var k in advanced_obj) {
    advanced_obj[k] = document.getElementById(k).value;
    }  
  data.advanced[title] = advanced_obj;


Je to součást funkce save() která ukládá nastavení profilu. To jak to je současně zdá se, že když následně uložím data do souboru

  chrome.storage.local.set({ advanced : data.advanced, profiles: data.profiles, default_profiles: data.default_profiles  }, 
    () => {
    chrome.storage.local.get(null, (res) => { 
      console.log("I saved data:")
      console.log(res)} )
    } 
  )

tak ve všech profilech se mi objevil stejný záznam ( nastavil jsem záznam site_rule na http adresu a ta se objevila ve všech profilech) a tak se domnívám, že výše uvedeným přiřazením data.advanced[title] = advanced_obj; jsem jen uložil odkaz na objekt což v důsledku způsobilo že prohlížeč uložil stejné data z jednoho profilu i do dalších profilů (ale ukládal jsem data z jednoho aktuálně editovaného profilu). Takže bych chtěl dokončit co jsem původně chtěl udělat, ale nevěděl jsem jak to udělat - nejdříve naklonovat ten objekt a pak do něj zkopírovat hodnoty pro daný profil ... profil[title].
 

JavaScript, AJAX, jQuery › zrušení výběru options
13. 7. 2016   #211902

To by nejspíš nefungovalo na objekt. A proč myslíš že je to jednodušší? Mě příjde delete jednodušší.

JavaScript, AJAX, jQuery › zrušení výběru options
13. 7. 2016   #211898

#1 oxidián
Chyba byla někde jinde, ale jinak jsem zjistil že se to dělá takto select.option[0].selected = false

JavaScript, AJAX, jQuery › zrušení výběru options
13. 7. 2016   #211897


Toto je část kódu na smazání options ze seznamu. V tomto případě je delete=true a smazat chci všechny options. Smažou se všechny kromě toho posledního nebo ten poslední zůstává vybraný. Jak to udělat aby se smazali všechny a nezůstal žádný vybraný?
   




  var select = document.getElementById("list");
  var title = select.options[select.selectedIndex].value;  
  if (!delete_all && select.selectedIndex<1)
    return false;
  for (var k in data.advanced )
    {
    if (k == title || delete_all )
      {
      delete data.profiles.advanced[k];
      delete data.advanced[k];
      if ( !delete_all )
        select.selectedIndex--;
      else
        select.selectedIndex = null;  
      data.default_profiles.advanced = select.options[select.selectedIndex].value;
      
      if (!delete_all) 
        break;
      }
    } // end for

Jinak by se to snad dalo zjednodušit takto:

  var select = document.getElementById("list");
  var title = select.options[select.selectedIndex].value;  
  for (var k in data.advanced )
    {
      delete data.profiles.advanced[k];
      delete data.advanced[k];
      select.selectedIndex = null;  
    } // end for
JavaScript, AJAX, jQuery › Programování doplňků pro Fir…
5. 7. 2016   #211806

Je tu někdo kdo se zabývá programováním addonů zejména pro Firefox? Jestli jo mám fůru otázek, tak moje první otázka je proč a jestli Firefox používá stejnou strukturu či stejné API jako chrome? Jedná se mi zejména o webextention v FF se pořád objevuje chrome.něco.něco.... proč tam dávají chrome, aby to bylo kompatibilní? Jako nápad mi to přijde dobrý aby programátoři ty své doplňky nemuseli psát dvakrát, jednou pro FF a podruhé pro Chrome to by bylo blbé. Třeba tady se dozvídám, že chrome to má stejně, taky používá manifest.json https://developer.chrome.com/extensions/declare_permissions stejným způsobem.

A za druhé se chci zeptat jestli vám jede tento doplněk: https://github.com/mdn/webextensions-examples/tree/master/commands protože mě ne; když se ho pokusím připojit do debugeru doplňků, tak se mi tam v tom seznamu neobjeví. A to je škoda, protože bych to chtěl vidět jak to funguje.

PHP › Srovnání Mysql vs Firebird
28. 6. 2016   #211723

Já bych spíš šel do toho posgreSQL, zkusil bych něco nového. Kolik zabírá postgre v paměti jako server?

C / C++ › Vstupní bod procedury se nep…
27. 6. 2016   #211696

Konec diskuse, už mě s tím linuxem nebavíte.

C / C++ › Vstupní bod procedury se nep…
27. 6. 2016   #211693

#11 Kit
Nevěřím ti. Mluvím o běžných uživatelích ne o programátorech a firmách, které na linuxu provozujjí síť nebo  server. Vezmi v potaz například komunitu hráčů. Jestli máš nějaké faktické informace tak sem s nimi, jinak tuto diskusi ukončuji.

C / C++ › Vstupní bod procedury se nep…
27. 6. 2016   #211690
C / C++ › Vstupní bod procedury se nep…
27. 6. 2016   #211688

Linux není moc oblíbený. V tom je ta potíž.

C / C++ › Jak přesně funguje inline?
27. 6. 2016   #211681

A učil ses to jak dlouho na té škole?

C / C++ › Jak přesně funguje inline?
26. 6. 2016   #211679

#33 Kit
To ses učil ve škole? Na výšce nebo kde?

C / C++ › Vstupní bod procedury se nep…
26. 6. 2016   #211678
C / C++ › Jak přesně funguje inline?
26. 6. 2016   #211676

#28 Kit
Obávám se že na to je můj život moc krátký. Už jsem jednou začal s C/C++ tak to dokončím. Člověk nemůže umět všechno. A co ten Fortran ty ho jako ovládáš? OpenCV není napsané ve Fortranu takže bych ho nevyužil, OpenCV podporuje Perl, C a myslím že i C#.

C / C++ › Vstupní bod procedury se nep…
26. 6. 2016   #211675

Něco jsem našel na netu, přímo k OpenCV takže myslím že bychto mohl vyřešit. Vsadil bych na to, že ty ovladače nebyly zkompilovány na XP a to je ten problém. Takže jsem si tu knihovnu zkompiloval a zkusím překompilovat OpenCV s novýma ovladačema (TBB).

C / C++ › Jak přesně funguje inline?
26. 6. 2016   #211668

Já se nezabývám programováním dlouho a i kdyby jo, tak to je věc každého jednotlivce jak dlouho se učí a jak mu jde učení. To že se učím dlouho se ti jen zdá. Protože to že jsem ze začátku k tomu na vhcíli sedl a zkusil napsat program v C neznamená, že jsem se to naučil. Jen jsem se s tím seznamoval a to bylo opravdu jen chvíli. Asi dva měsíce jsem se seznamoval jak vůbec funguje Visual Studio a jak zkompilovat program. Další rok zase asi dva měsíce jsem zkoušel jiné IDE a Cčko takže zase jiný program. A za tři roky nebo jak to bylo dlouho jsem zapoměl co jsem se naučil protože jsem před tím naprogramoval velké prd. Jestli si tedy myslíš že se to učím tři roky v kuse tak to si naomylu. A právě, že se to lehce zapomene. Naštěstí mám poznámky co znamenaj jednotlivé chyby ve VS takže nejsem tak úplně ztracený jak to tady vypadá. Vždycky používám poznámky až na to, že některé situace v těch mých poznámkách ještě nebyly. Další věc je že někomu svědčí vzít si nejdříve knihu a vše si pročíst, jenže tohle u mě neplatí protože si to nedokážu zapamatovat. Co přečtu to zapomenu. U mě platí jedině sednout k PC a zkoušet to naživo. A to že dělám chyby mi vůbec nevadí protože moje životní motto je že chybami se člověk učí. Používám VS 2010.

C / C++ › Jak přesně funguje inline?
26. 6. 2016   #211666

#23 BDS
No však jako já jsem taky začátečník, snad si nemyslíš že si o sobě myslím že jsem pokročilý? Automatickou správu paměti má OpenCV taky takže o paměť se starat zatím nemusím. Rychlost si bere nastarost knihovna, kterou jsem zkompiloval. Jistě, ve starém kompilátoru, ale to mohu časem napravit. Zatím se jen učím základy, ale OpenCV se dá používat i s tím málo co umím.

C / C++ › Vstupní bod procedury se nep…
26. 6. 2016   #211665

Poté co jsem zkompiloval knihovnu OpenCV se mi nedaří spustit program. Zkompiluje se vpořádku, tzn, že ovladače, includované soubory apod. Byly nalezeno, ale když spustím jakýkoliv testovací program který je u OpenCV tak to hlásí tuto chybu. Cestu k ovladačům jsem několikrát kontroloval, i jsem přikopíroval exe soubor přímo do adresáře se ovladačema a stále to píše stejnou chybu. Čím to může být? Všechny dllka se mi povedlo zkompilovat, pro Debug i Release. Jediné co jsem musel upravit byla cesta k adresáři kde se nachází include soubory a dll/lib knihovny od TBB. Když jsem to ale zkompiloval to by na to snad nemělo mít vliv, navíc jsem to TBB ještě nezačal používat takže si myslím že to tím není. Verze OpenCV je pořád stejná, už jsem ji kompiloval dvakrát bez větších problémů.

C / C++ › Jak přesně funguje inline?
26. 6. 2016   #211662

Vaše zmatení je na místě a je cílené. Nechci prozrazovat svoje záměry. C++ je pomalé? Jako na zpracování obrázků? Jako že by sis vzal na pomoc nějaké API které pracuje s grafikou? Jestli si to tak myslel, tak to zase záleží na grafice. Já třeba nechci dávat 7-10 tisíc za silnou grafiku, bylo by to na nic, protože chci dělat aplikaci, kterou budou moci používat i další lidi ne jen já. Zdá se mi že CPU jsou levnější a dostupnější a ne každý má doma namakanou GPU. Ale KIT si asi myslel spíš programovací jazyk a já si teda neumím představit co by mohlo být rychlejšího než C++.

C / C++ › Jak přesně funguje inline?
26. 6. 2016   #211661

"Spíš bych viděl budoucnost ve výměně C++ za nějaký jiný jazyk, který mu bude lépe vyhovovat."

Hahaha to mi už říkalo hodně lidí a pokaždé to bylo u jiného jazyka. Jenže mě to baví jinak bych se v tom nehrabal. Navíc když se do něčeho zakousnu tak nepustím.

C / C++ › Jak přesně funguje inline?
25. 6. 2016   #211640

#6 vitamin
Na to je ještě čas.

C / C++ › sprintf
25. 6. 2016   #211635

Měl jsem byl přesnější.

std::printf("blured->gray took %f",t); // OK
imshow(std::printf("blured->gray took %f",t), gray); // ERROR

Tak už to jede:

char str[100];
std::sprintf(str, "blured->gray took %f ms",t);
cv::imshow(str, gray);


Ještě raz dík

C / C++ › Jak přesně funguje inline?
25. 6. 2016   #211634

#3 vitamin
VS2016 mi na Windows XP nepojede :-D

C / C++ › Jak přesně funguje inline?
25. 6. 2016   #211629

 Situace A)

inline void funkce(){

int max = 10;

for (int i=0; i<max; i++)


std::cout << i << ","


}

 Situace B)

inline void funkce(){

int max = 100;

int A = 1;
int B = 2;
step=2;

for (int i=0; i<max; )
{
if (A==1)
   i++;
if (B==2)
   i=step;
std::cout << i << ",";
... // do something
}
}

Zajímalo by mě jestli se ve scénáří A po přeložení kompilátorem pracuje s navyšováním proměnné nebo to ten kompilátor dosadí jako konstantu. Mohl by přece usoudit, že když se i nikde dále podmíněně nemění (není závislost mezi i a zbytkem inline funkce) tak může kód přeložit takto:
 

std::cout << "0,1,2,3,4,5,6,7,8,9,";


neboli místo proměnné dosadit si hodnotu.

U situace B by mě tedy zajímalo, jestli to zvládne i v případě, že se i může navyšovat dvěma způsoby. Dejmetomu, že ty vzniklé situace jsou jen tři, dokázal by to interpretovat třeba takto?

std::cout << "0,1,2,3,4,6,8";


V závislosti na zbytku kódu? Nebo jakmile jsou tam závislosti, tak to kompilátor nedokáže rozebrat a dosadit konstanty za proměnné? Nebo je to až do určité úrovně složitosti apod.?

Ještě přidám jeden dotaz - je známo že do smyček není dobré dávat další smyčky. Bude kód rychlejší, když místo vnořené smyčky dám inline funkci, v případě, že znám přesnou šířku obrazu? Např. při procházení obrazu procházím nejdříve řádky a pak sloupce. A vím že obraz má 256x256 px. Tedy bych mohl udělat inline funkci s for, a ten kompilátor to vyhodnotí tak, že to provede jako 256 samostatných příkazů, jo?

A dále - co podmínky uvnitř cyklu. Nedávat? Podmínky by ten kód mohly prodloužit. A mě napadlo, že některé podmínky se dají dát mimo cyklus, jestliže znám přesnou šířku obrazu. Cyklus bez podmínek by pro kompilátor a inline funkci snad nebyl problém.

Příklad takové funkce:

for (int r = 0; r < gaps.rows; r++)
	dst.row(r*gap).copyTo(gaps.row(r));
if ( remains >= 0 )
	dst.row(dst.rows-1).copyTo(gaps.row(gaps.rows-1));

akorád, že toto je zrovna ten případ, kdy kompilátor by nemohl vědět, kolik je rows, ale kdybych tam dal konstantu 256, tak už by to mělo jít efektivně přeložit jako serie příkazů.

No a teď si vemte, že bych měl ještě to samé provést na sloupce.

Takže musím procházet řádky a pak sloupce vnořeným cyklem... Tomu bych mohl předejít tím, že přehodím sloupce s řádkami, ale nevím jestli by se to pak vyplatilo. Vzhledem k tomu, že chci obraz pak pixel po pixelu analyzovat (v několika směrech) tak asi jo. Protože bych se vyhnul vnořeným cyklům. Teď narážím na analýzu že kolem pixelu x,y detekuju barvu pixel nad, pod, vlevo a vpravo, nebo pouze vlevo a pouze vpravo; nebo pouze dole a pouze nahoře... takže uvažuju o možnosti jestli se vyplatí vyhnout se vnořeným smyčkám. Vím že smyčka je struktura, ale nefunguje to podobně jako funkce? Sice nepoužívá stack, ale proč by se jinak programátoři snažily vyhnout hloubkovým cyklům při procházení obrazu? Snad kvůli času zápisu do paměti když provádím i++; (první smyčka) r++; (vnořená smyčka)

C / C++ › sprintf
25. 6. 2016   #211627

Spletl jsem si sprintf s printf.

std::printf("blured->gray took %f",t)


Hlásí

error C2248: 'cv::String::String' : cannot access private member declared in class 'cv::String'

čím to je?

C / C++ › sprintf
24. 6. 2016   #211626

#18 Kit
To nebyla dlouhá funkce. To nebylo že jsem přehlédl, ale že jsem zapomněl.

C / C++ › sprintf
24. 6. 2016   #211624

#15 Kit
Já zapomněl že tam ta proměnná je. Ale problém by to dělat nemělo anebo by to mělo hodit že proměnná už byla deklarovaná.

C / C++ › sprintf
24. 6. 2016   #211621

#12 vitamin
Aha, tak dík. Já myslel že to ta funkce vrátí.

A teď asi odbočím, ale právě jsem se pokoušel rozjet tenhle kousek kódu:

gap = 6;
for (int r = 0; r < 4; r++)
		 sspom.row(r).copyTo(dst.row(r));

Mat gaps = Mat(dst.size(), dst.type(), Scalar(0,0,0));
	   
int r = - gap;


Žádná chyba, ale na posledním řádku výsledek r je 4. Já očekával -6. No mozek mi to nebral. Až jak jsem přejmenoval proměnnou r na t ve smyčce tak se to rozjelo. Ale hledal jsem chybu asi 15-20 minut.

C / C++ › sprintf
24. 6. 2016   #211617

Na co tam mám dávat pointer na řetězec? Mám to tam dát dvakrát jako pointer na řetězec (arg1) a jako konstanutu (arg2)? divné

C / C++ › sprintf
24. 6. 2016   #211607

   

imshow(sprintf("blured->gray took %d",t), gray);

error C2664: 'sprintf' : cannot convert parameter 2 from 'double' to 'const char *'

Jak to opravit abych mohl v title okna zobrazit text s číslem. t je double (ms)

C / C++ › zaokrouhlední na dvě desetin…
23. 6. 2016   #211606

No ono to je vlastně jen na souřadnice kruhu, proto není třeba float. Navíc bych to rád zakompiloval přímo do programu pokud by to šlo, aby vyjelo pole souřadnic když zadám pole[angle]. Nevím ale jestli to jde něco takového:

static const int radius4[] =
{ {0,1},{0,2},{0,3} ... };

Nebo zadám circle[radius] a vyjedou mi souřadnice kruhu. Bez počítání abych ty hodnoty měl rovnou k dispozici. Má to fungovat tak, že místo abych počítal s goniometrickýma funkcema nebo mocninama tak si tímhle ušetřím výpočetní čas. Nejdříve chci vygenerovat ty souřadnice, pak to uložit do souboru a pak to vložit do zdrojáku. Tedy jestli by to takto šlo. No a kdyby to nešlo takto, tak to tam vložím hexadecimálně

static const float SinTable[] =
    0x00020010, 0x00010020, .....
};

a z té vrácené hodnoty bych vytáhl dvě čísla.

Třetí možnost je vložit to do obrázku.

C / C++ › zaokrouhlední na dvě desetin…
23. 6. 2016   #211603

Tohle není na databázi. Chci vygenerovat pole, která budou nést informace o bodech ležících na kružnici. Výsledek budu ukládat ve tvaru txt.

C / C++ › zaokrouhlední na dvě desetin…
23. 6. 2016   #211597

#16 Kit
Abych neztratil desetinné čárky. I když po tvoji otázce mě napadlo, že kdybych to vynásobil stovkou a na konci vydělil tak snad neztratím nic.

Ovšem pak nevím jak bych prováděl to zaokrouhlování na desítky nebo stovky

C / C++ › zaokrouhlední na dvě desetin…
23. 6. 2016   #211595

Stejně to muselo být špatně. Tak znovu.

float d =  cStep + (float) (255 % I.rows) /100 ;
d =  static_cast<float>( ((int)(d * 10 + .5) / 10.0) );
float m =  static_cast<float>( ((int)(d * 1 + .5) / 1.0) );
m = m - d; // mod
int n = static_cast<int>(m);

doplním hodnoty:

- I.rows je 101;

- d je 2.5

- m je 3

- m-d je 0.5

- 1/m je 2

- n je int=2

nakonec potřebuju m = 1/m

Mám to do cyklu. Potřebuju zjistit kdy mám provést opravu barvy, navýšení hodnoty +1. 1/m mi dá hodnotu kolikátý cyklus tu opravu potřebuju udělat.

C / C++ › zaokrouhlední na dvě desetin…
23. 6. 2016   #211588

#6 liborb
Myslím že takto je to správně:

int f = (int)(3.0*10 / 2.5);
if ( f % 10 == 0 )
	c++;
C / C++ › zaokrouhlední na dvě desetin…
23. 6. 2016   #211586

#6 liborb
To nefunguje

int f = (float)(int)(3.0 / 2.5);

// f == 1 je true a to je špatně

možná vynásobit 10 a pak přetypovat na int.

C / C++ › zaokrouhlední na dvě desetin…
23. 6. 2016   #211584

A ještě jeden dotaz. Když proměnné jsou float jak mám zjistit jestli výsledek po dělení je celé číslo?

res = d*(r+1);
if ( res %d == 0)


 ...error C2297: '%' : illegal, right operand has type 'float'

C / C++ › zaokrouhlední na dvě desetin…
23. 6. 2016   #211583

Mám

d =  static_cast<float>( ((int)(d * 10 + .5) / 10.0) );
C / C++ › zaokrouhlední na dvě desetin…
23. 6. 2016   #211580

Ve studiu 2010 jak zaokrouhlit na dvě desetinná místa? Typ float.

Oprava: Na jedno desetinné místo. 1.53 na 1.5

C / C++ › procházení argumentů argv
23. 6. 2016   #211578

#68 KIIV
Bylo to tady v tomto vlákně, kde si mi říkal, že není rozdíl mezi přetypováním pomocí

(type) expression

a

static_cast<type>(expression)

?

Teď jsem zjistil že v tom je velký rozdíl a to ten, že když použiju static_cast tak mi ladící program přestane vypisovat upozornění na ztrátu dat

int cStep = static_cast<int> ( std::ceil( (double) 255 / (double) size ) );

int cStep = static_cast<int> ( std::ceil( (double) (255 / size ) ) );

A to jsem fakt potřeboval protože ještě mám v živé paměti program co jsem psal snad minulý rok, kde podobných otravujících hlášek bylo snad tisíc.

K tvou posledním příspěvkům - pokud tam nejsou příklady, tak nevnímám.

C / C++ › Chyba ... funkce nemá 6 argu…
23. 6. 2016   #211577

Já to pak opravil, ale aspoň jsem se použil že to s defaultním parametrem nemusí mít přímou souvislost.

C / C++ › Chyba ... funkce nemá 6 argu…
23. 6. 2016   #211574

Mimochodem, když do toho souboru drawing.hpp dám pouze toto:

void MyTest( int a = 0 );
void MyTest( int a ){}

error C2572: 'MyTest' : redefinition of default parameter : parameter 1
drawing.hpp(4) : see declaration of 'MyTest'
drawing.hpp(5): error C2084: function 'void MyTest(int)' already has a body
drawing.hpp(4) : see previous definition of 'MyTest'

a když funkci přejmenuju tak to samé

Edit:

Vyřešeno:

#ifndef DRAWING_N_H
#define DRAWING_N_H

void MyTest1189437( int a = 0 );
void MyTest1189437( int a ){}

#endif

Funguje!

C / C++ › Chyba ... funkce nemá 6 argu…
23. 6. 2016   #211571

Přeci jen nějaký pokrok:

 drawing.hpp:

#include <opencv2/highgui.hpp>

void Drawing_scalarToRawData(const cv::Scalar& s, void* _buf, int type, int unroll_to);

namespace drawing
{
	static void Circle( cv::Mat& img, cv::Point center, int radius, const void* color, int fill );

	void MyTest( int a = 0 );


	void circle( cv::InputOutputArray _img, cv::Point center, int radius,
		const cv::Scalar& color, int thickness, int line_type = cv::LINE_8, int shift = 0  );
	
}

void Drawing_Circle( CvArr* _img, CvPoint center, int radius,
			CvScalar color, int thickness, int line_type, int shift );

deklarace

void MyTest( int a = 0 );
mi hlásí tu samou chybu:

1>u:\c++\mapcorners\mapcorners\drawing.hpp(11): error C2572: 'drawing::MyTest' : redefinition of default parameter : parameter 1

(ty ostatní chyby C2572 se opakují u další funkce)


Čím to může být? using namespace cv; jsem zrušil v celém projektu + jsem otestoval že v namespacu drawing nedochází ke konfliktu s namepasem cv.

C / C++ › Chyba ... funkce nemá 6 argu…
23. 6. 2016   #211570

No prostě to nejede

drawing.hpp(7): error C2086: 'int line_type' : redefinition
drawing.hpp(7) : see declaration of 'line_type'
drawing.hpp(7): error C2086: 'int line_type' : redefinition
drawing.hpp(7) : see declaration of 'line_type'
drawing.hpp(7): error C2572: 'drawing::circle' : redefinition of default parameter : parameter 7
drawing.hpp(6) : see declaration of 'drawing::circle'

nechápu kde byl předtím deklarován, když poprvé má být deklarován na řádku 6-7

Ty asi OpenCV nainstalovaný nemáš, že bys mi to zkusil?

Může na to mít vliv že v namespace cv v souboru imgproc.hpp je deklarováno toto?

CV_EXPORTS_W void circle(InputOutputArray img, Point center, int radius,
                       const Scalar& color, int thickness = 1,
                       int lineType = LINE_8, int shift = 0);

Je to jiný namespace.

C / C++ › Chyba ... funkce nemá 6 argu…
22. 6. 2016   #211569

OK, zítra se na to ještě podívám. Dík.

C / C++ › Chyba ... funkce nemá 6 argu…
22. 6. 2016   #211567

#2 Kit
To je funkce která je součástí knihovny, já jsem jen převzal jejich kód, který je open source. Jsou tam takové věci jako tloušťka čáry apod.  Sedmý parametr se má doplňovat sám (je předdefinovaný).

C / C++ › Chyba ... funkce nemá 6 argu…
22. 6. 2016   #211566

#3 lukas.balaz
To jsem už myslím zkoušel. To však píše u funkce v headeru chybu C2572 předeklarování :  redefinition of default parameter : parameter 7

C / C++ › Chyba ... funkce nemá 6 argu…
22. 6. 2016   #211562

Nemohu přijít na to proč dostávám tuto hlášku.

drawing:hpp

namespace drawing
{
	static void Circle( cv::Mat& img, cv::Point center, int radius, const void* color, int fill );
	void circle( cv::InputOutputArray _img, cv::Point center, int radius,
	const cv::Scalar& color, int thickness, int line_type, int shift );
}

void Drawing_Circle( CvArr* _img, CvPoint center, int radius,
			CvScalar color, int thickness, int line_type, int shift );

drawing.cpp:

#include "precomp.hpp"
#include "drawing.hpp"

namespace drawing
{
// zde vynechám nějaké funkce...

void circle( cv::InputOutputArray _img, cv::Point center, int radius,
             const cv::Scalar& color, int thickness, int line_type = cv::LINE_8, int shift = 0 )
{
    cv::Mat img = _img.getMat();

    if( line_type == CV_AA && img.depth() != CV_8U )
        line_type = 8;

    CV_Assert( radius >= 0 && thickness <= MAX_THICKNESS &&
        0 <= shift && shift <= XY_SHIFT );

    double buf[4];
	// TADY BY TO MOHLO KRACHNOUT KDYŽ JSEM TO VYNECHAL:
    // cv::scalarToRawData(color, buf, img.type(), 0);

    if( thickness > 1 || line_type >= CV_AA || shift > 0 )
    {
        center.x <<= XY_SHIFT - shift;
        center.y <<= XY_SHIFT - shift;
        radius <<= XY_SHIFT - shift;
        EllipseEx( img, center, cv::Size(radius, radius),
                   0, 0, 360, buf, thickness, line_type );
    }
    else
        Circle( img, center, radius, buf, thickness < 0 );
}
} // konec namespace drawing


main.hpp:

#include "drawing.hpp"

main.cpp

#include "main.hpp"
#include "drawing.hpp"


// ve funkci main volám:
drawing::circle( I,
        center,
        radius,
        cv::Scalar( 255, 255, 255 ), 0,  8);

a na konci to hodí chybu že funkce drawing::circle nemá 6 argumentů. Dobře má jich 7, ale 7 argument je nastaven jako nepovinný viz

int shift = 0

jak to opravit?

C / C++ › procházení argumentů argv
17. 6. 2016   #211512

Jo tak to mě nenapadlo, že jsem to tím zkonvertováním na integer vynuloval. stoi, strof, stod - to jsou komfortní funkce, žádné trable s přetypováním :-)

C / C++ › procházení argumentů argv
17. 6. 2016   #211509

Ještě jsem našel jednu chybu v kódu:

value.double_ = (double) std::stoi(s);


když s je "0.01" tak výsledná hodnota se mi uloží že je 0.0000000000 ... nevíš jak to správně převést na double aby z toho nebyla 0? A stejnou věc mám i s float jen jsem ji netestoval jestli to dělá to samé, tuším že ano

C / C++ › volání funkce z funkce
17. 6. 2016   #211507

Díky moc, konečně to jede.

jaký je rozdíl mezi

reinterpret_cast<Wrapper*>(ptr)


a (Wrapper * ) ptr?

nebo

reinterpret_cast<void*>(&wrapper)

a

(void * ) &wrapper

?

C / C++ › volání funkce z funkce
17. 6. 2016   #211501

Jak přetypovat? Nic než toto to nevezme:

createTrackbar( "Max  corners:", source_window, &wrapper.arguments.maxCorners, wrapper.arguments.maxTrackbar, 0, &wrapper );

chyba:

error C2664: 'cv::createTrackbar' : cannot convert parameter 5 from 'void (__cdecl *)(int,void *,Wrapper)' to 'cv::TrackbarCallback'

Cílový typ je void*

Navíc když dám do on_trackbar třetí argument Wrapper wrapper,

tak

createTrackbar( "Max  corners:", source_window, &wrapper.arguments.maxCorners, wrapper.arguments.maxTrackbar, on_trackbar );

přestane fungovat

 None of the functions with this name in scope match the target type

 a s tím to taky nejde:

createTrackbar( "Max  corners:", source_window, &wrapper.arguments.maxCorners, wrapper.arguments.maxTrackbar, on_trackbar, wrapper );

C / C++ › Pomoc s konstruktorem
17. 6. 2016   #211498

Díky, už se mi povedlo zkompilovat to :)

C / C++ › Pomoc s konstruktorem
17. 6. 2016   #211494

Nainstaloval jsem si nějaké neoficiální knihovny do OpenCV a narazil jsem na menší zádrhel. Problém už někdo shrnul, takže dám link.

V souboru nonfree.hpp je toto:

#ifndef __OPENCV_XFEATURES2D_FEATURES_2D_HPP__
#define __OPENCV_XFEATURES2D_FEATURES_2D_HPP__

#include "opencv2/features2d.hpp"

namespace cv
{
namespace xfeatures2d
{

//! @addtogroup xfeatures2d_nonfree
//! @{

/** @brief Class for extracting keypoints and computing descriptors using the Scale Invariant Feature Transform
(SIFT) algorithm by D. Lowe @cite Lowe04 .
 */
class CV_EXPORTS_W SIFT : public Feature2D
{
public:
    /**
    @param nfeatures The number of best features to retain. The features are ranked by their scores
    (measured in SIFT algorithm as the local contrast)

    @param nOctaveLayers The number of layers in each octave. 3 is the value used in D. Lowe paper. The
    number of octaves is computed automatically from the image resolution.

    @param contrastThreshold The contrast threshold used to filter out weak features in semi-uniform
    (low-contrast) regions. The larger the threshold, the less features are produced by the detector.

    @param edgeThreshold The threshold used to filter out edge-like features. Note that the its meaning
    is different from the contrastThreshold, i.e. the larger the edgeThreshold, the less features are
    filtered out (more features are retained).

    @param sigma The sigma of the Gaussian applied to the input image at the octave \#0. If your image
    is captured with a weak camera with soft lenses, you might want to reduce the number.
     */
    CV_WRAP static Ptr<SIFT> create( int nfeatures = 0, int nOctaveLayers = 3,
                                    double contrastThreshold = 0.04, double edgeThreshold = 10,
                                    double sigma = 1.6);
};

typedef SIFT SiftFeatureDetector;
typedef SIFT SiftDescriptorExtractor;}} // konec namespace

Rada na answers.opencv.org
 

yes, they are all 'abstract' (lack a public constructor).

the only way to make one is the 'create' function, like:

using namespace cv::xfeatures2d; Ptr<SIFT> sift = SIFT::create(...);

Nyní můj kód - implementace:

#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/xfeatures2d/nonfree.hpp"
#include "opencv2/nonfree/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace cv;
using namespace cv::xfeatures2d;
Ptr<SIFT> sift = SIFT::create(int v);

// ... main ...
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
// zkráceno

to je soubor feature_detection.cpp

Na posledním řádku byla chyba, takže asi potřebuju definovat vlastní konstruktor.

Zkusil jsem do feature_detection.cpp přidat:

Ptr<SIFT> sift = SIFT::create(int v);


a dostal jsem hlášku:

error C2144: syntax error : 'int' should be preceded by ')'

Jak to vyřešit? Mám zkusit přidat do nonfree.hpp něco jako

CV_WRAP static Ptr<SURF> create(double hessianThreshold=100);


Taková funkce ale v knihovně asi není definována. Měl bych ji tedy pak definovat sám? Nevím co s tím a jak to rozjet.

C / C++ › procházení argumentů argv
17. 6. 2016   #211489

Třeba mi selhává paměť. Nevím je to tu už dlouhé. Mám m_ na stavit na this a pak to tak používat?

C / C++ › procházení argumentů argv
17. 6. 2016   #211486

Byl si to ty kdo říkal že mám vyndat to i že ho nepotřebuju. To tam je jen pro informaci:

std::cout << "args[" << i << "] = " << *it << std::endl;
C / C++ › procházení argumentů argv
17. 6. 2016   #211484

Dá se vrátit pořadové číslo (index) toho iterátoru?

C / C++ › procházení argumentů argv
17. 6. 2016   #211482

Jak si to myslel s tím vypuštěním proměnné i?

Takhle to nefunguje:

int r = (int) it.std::string::compare(0,11,"randomPosition");

this->args[i] nahradit přímo it je k ničemu

C / C++ › volání funkce z funkce
16. 6. 2016   #211472

Dám sem kód

void on_trackbar( int, void* );

 Toto vytvoří posunovací lištu v okně. Jak budeš posouvat lištou, tak program se bude opakovaně spouštět a okno s grafikou se bude aktualizovat:

createTrackbar( "Max  corners:", source_window, &wrapper.arguments.maxCorners, wrapper.arguments.maxTrackbar, on_trackbar );

 Zobraz grafiku - proč tam je ten on_trackbar (0,0) nevím

imshow( source_window, src );
on_trackbar( 0, 0 );

ale je z toho patrné že tam nemohu dát další argumenty, aspoň tak to chápu.

Definice funkce:

void on_trackbar( int, void* )
{
  if( maxCorners < 1 ) { maxCorners = 1; }

  /// Parameters for Shi-Tomasi algorithm
  vector<Point2f> corners;
  double qualityLevel = 0.01;
  double minDistance = 10;
  int blockSize = 3;
  bool useHarrisDetector = false;
  double k = 0.04;

  /// Copy the source image
  Mat copy;
  copy = src.clone();

  /// Apply corner detection
  goodFeaturesToTrack( src_gray,
               corners,
               maxCorners,
               qualityLevel,
               minDistance,
               Mat(),
               blockSize,
               useHarrisDetector,
               k );


  /// Draw corners detected
  cout<<"** Number of corners detected: "<<corners.size()<<endl;
  int r = 4;
  for( int i = 0; i < corners.size(); i++ )
     { circle( copy, corners[i], r, Scalar(rng.uniform(0,255), rng.uniform(0,255),
              rng.uniform(0,255)), -1, 8, 0 ); }

  /// Show what you got
  namedWindow( source_window, WINDOW_AUTOSIZE );
  imshow( source_window, copy );
}


maxCorners je právě globální proměnná.


double qualityLevel = 0.01;

double minDistance = 10;

to by taky mělo být definované přes argumenty programu. Problém je ale v tom že já mám globální wrapper ve kterém mám argumenty. Wrapper bych chtěl předat jako třetí argument, ale nevím jestli toto nějak jde udělat.
 

C / C++ › volání funkce z funkce
16. 6. 2016   #211462

V opencv se občas objevují funkce, které se mají zavolat s argumentem funkce. Myslím že nemá smysl sem uvádět konkrétní kód, jde ale o princip. Je to případ kdy se tato funkce má rekurzivně volat. Argumenty tam nejsou, je tam pouze jméno funkce. Například dotyčný callback se má volat s několika argumenty jako je scale, delta apod. V příkladech které jsem viděl se to dělá tak, že si dané proměnné nastavíte globálně a pak je použijete a z mainu nebo odkud se zavolá funkce s callbackem. Uvnitř této funkce se pak porovnává ta globální proměnná a podle toho se vyhodnotí co dál...

Nechápu jakým způsobem se toto řeší pokud chcete psát složitější program kde není jedna funkce ale třeba 50 funkcí které slouží jako gragický filtr. Nebo v případě že toto chcete použít jako dll knihovnu. Tolik globálních proměnných by v programu vyvolalo dost velký chaos a v případě dll ještě větší.

C / C++ › funkce pow
16. 6. 2016   #211458

Vyzkoušeno a funguje. Díky

Předpokládám že ten jejich pow doplňuje to co není v std či stl a šlo tam o jednoznačné rozlišení typů.

C / C++ › funkce pow
16. 6. 2016   #211456

Hele to není můj kód, jen se snažím to zkompilovat. Mám to tu postnout celé i s licencí?

#include <opencv2/optflow.hpp>
#include <opencv2/video.hpp>
#include <opencv2/imgproc.hpp>
#include "opencv2/core/ocl.hpp"

#include <algorithm>
#include <cmath>

#include "opencv2/imgproc.hpp"

using namespace std;
#define EPS 0.001F

namespace cv
{
namespace optflow
{

bla bla bla ...

void DISOpticalFlowImpl::calc(InputArray I0, InputArray I1, InputOutputArray flow)
{
bla bla bla ...
resize(U, flowMat, flowMat.size());
flowMat *= pow(2, finest_scale);
}

soubor se jmenuje dis_flow.cpp a je to součást projektu opencv_optflow

C / C++ › funkce pow
16. 6. 2016   #211451

Snažím se zkompilovat jeden program či knihovnu v opencv a narazil jsem tam na chybu

error C2668: 'cv::pow' : ambiguous call to overloaded function

C:\Program Files\Microsoft Visual Studio 10.0\VC\include\math.h(583): could be 'long double pow(long double,int)'

C:\Program Files\Microsoft Visual Studio 10.0\VC\include\math.h(535): or       'float pow(float,int)'

Kód obsahuje toto:

flowMat *= pow(2, finest_scale);


Podle mého názoru existuje funkce cv::pow, ale autor chtěl použít jinou funkci pow nejspíš tuto:

http://www.cplusplus.com/reference/cmath/pow/


ovšem jak mám přepsat tento příkaz aby se to vyjasnilo?

PHP › Srovnání Mysql vs Firebird
15. 6. 2016   #211441

To ne ale chápeš že je rozdíl tahat data z disku po 200 kB a tahat je po deseti megabytech?

PHP › Srovnání Mysql vs Firebird
15. 6. 2016   #211439

Tak to není nic pro mě. Já bych chtěl vybrat najednou třeba 50 souborů a ty otevřít najednou a ne seriově otvírat každý soubor zvlášť (načítání po malých segmentech/blocích).

PHP › Srovnání Mysql vs Firebird
15. 6. 2016   #211437

#22 Kit
Size_t by byl zbytečný pokud bych dal proměnlivou délku dat na konec a typy jako integer bych dal na začátek.

Právě že u toho typu struct je to úplně jedno. Je rychlejší a jednodušší např. otevřít jeden soubor, vyhledat jednu položku o délce např. 206104 byte a toto do té struktury načíst. Jediné co se musí v Céčku nejdříve udělat je klíčovým typům přidělit paměť. Struktura pak má například 32kB, jsou tam pointery na obrázky... Jinak bych musel otvírat například 8 souborů.

Řešení rozdělit to na tři soubory v tomto případě by nebylo špatné, ušetřilo by se tím místo. Ale co když tam chci mít 16 sloupců? Dát 16 souborů. 64 tabulek s 16 sloupci to máš už 64*16 souborů.

PHP › Srovnání Mysql vs Firebird
15. 6. 2016   #211433

Pochopil jsem to tak, že data se tam posílají po jednom páru vždycky. A načítání snad taky. Takže nemohu poslat jeden obrázek, ale vše co chci zapsat. Veškeré popisující data, které k obrázku náleží. V programu bych měl strukturu

např:

- size_t img size

- img data (binární data)

- size_t header size

- header (binární data)

- size_t vectors size

- vectors ((binární data)

a toto bych odeslal jako pole char a int, a načítání to samé rovnou do struktury.

PHP › Srovnání Mysql vs Firebird
15. 6. 2016   #211427

Jaká verze je aktuální stabilní? Našel jsem poslední verzi z Prosince 2004.

Chvíli to bude trvat než si pročtu manuál. Takže to je přímo pro C/C++?

Edit - jestli to správně chápu tak ta databáze nepoužívá žádné tabulky? Prostě tam vkládáš jen páry key=value? Může být key číselný index jako id řádku?

Mě se jedná spíš o to ukládat více druhů obrázků, takže bych to potřeboval rozdělit například na 32-64 tabulek. Jelikož v různých tabulkách mohou být různé druhy masek nemohu házet všechno do jednoho souboru. Snad bych mohl mít 64 různých databázových souborů místo toho to by nejspíš taky šlo. No fakt nevím jak to udělat. Nejde jen o obrázky. Jde o to asociovat k nim ještě další informace třeba co na obrázku je za objekt apod..

PHP › Srovnání Mysql vs Firebird
15. 6. 2016   #211424

O DB4 slyším poprvé dej mi odkaz na oficiální stránku. Každopádně práce s MySQL by byla pro mě nejjednodušší (ve smyslu že jsem s ní už pracoval a že je oblíbenější tudíž se dají snáze na netu najít informace), ale nevím jestli se dá zkompilovat knihovna nebo jestli nabízí knihovny abych si mohl zkompilovat vlastní program, který bude využívat jejich systém. Ještě musím zopakovat že potřebuju systém který nebude fotky ukládat do jednotlivých souborů. Klidně ať má databázový soubor 4GB-400GB nebo víc ale ať nemusím přenášet 100.000 soborů z disku na disk. Pro web pak použiju sqlite a fotky na ty bych spíš odkazoval na jiná hostingový server, takže bych ukládal jen odkazy. Ale pro Céčkový program je to něco jiného.

PHP › Srovnání Mysql vs Firebird
14. 6. 2016   #211420

Tak jsem narazil na nápovědu tak už vím jak se přihlásit takže bych mohl někdy v příštích dnech zkusit nějaké testy se vkládáním obrázků ať zjistím jak rychle to jede.

Cokoliv čtu o Firebirdu ukazuje na poměrnou neoblibu toto databázového systému.

Srovnání výkonu s PostgreSQL, Firebird vede.

PHP › Srovnání Mysql vs Firebird
14. 6. 2016   #211418

A na to potřebuješ mít více uživatelů? Já myslím - přihlašuje se jeden uživatel, dejme tomu SYSDBA.

PHP › Srovnání Mysql vs Firebird
14. 6. 2016   #211415

Te´d čtu toto: http://stackoverflow.com/questions/1635273/postgres-vs-firebird problém je právě v tom, že pokud bych vybral Firebird na moji aplikaci v C/C++ tak já nepotřebuji aby se tam přihlašovali jiní puživatelé a tudíž zkušenosti s webovou aplikací tady asi nebudou srovnatelné. Za druhé, když si někdo stěžuje že mu něco nejede nebo nefunguje nemusí to být nutně proto že by byla špatně napsaná aplikace, ale že ji uživatel nesprávně používá - to neumím posoudit protože nejsem ani začátečník natož odborník přes tento systém. Celkově lze říct že pokud si větší množství lidí stěžuje tak to asi nebude náhoda, ale zároveň je otázka jestli existují také nějací lidé co to umí používat správně a jsou spokojeni.... Jinak by snad ta služba nebyla používaná a byl by ukončen její vývoj.

Firebird na rozdíl od Mysql API pro C/C++ (ale teď nevím co to vlastně znamená protože jsem se dočetl že programátorský jazyk C/C++ a PHP podporují oba).

PHP › Srovnání Mysql vs Firebird
14. 6. 2016   #211414

Proč zrovna Firefox? Já nevím jakou technologii používají. A nevím že používají databázi. Na co taky? Fakt nevím jak funguje Firefox.

Jde o to, k jakému využití je ta aplikace. A myslím že zrovna pro web a pro soukromé využití bude něco jiného. Zatím jsem ale neslyšel žádné časy k porovnání. Snad zkusím něco pohledat na netu jestli najdu info

PHP › Srovnání Mysql vs Firebird
14. 6. 2016   #211412

#5 Kit
Ale zkušenosti máš asi jen s Mysql nebo Postgre? Mě by zajímalo jestli je v tomto Firebird rychlejší. Tak neuvažuji jen o využití pro webové stránky, ale taky pro aplikaci C/C++ která bude upravovat obrázky, takže čas natažení z db může být zanedbatelný (protože se mohou načíst v době kdy se upravují jiné obrázky) a na to si myslím že by právě Mysql vhodné nebylo, ale Firebird ano alespoň jsem to četl na wiki, že ho programátoři používají aby mohli vytvořit aplikace využívající db.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý