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

Anonymní profil pan Hole – Programujte.comAnonymní profil pan Hole – Programujte.com

 

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

pan Hole
Delphi › Práce s COM - leakuje RAM
21. 6. 2016   #211536

#2 KIIV
Hluboká, hluboká, HLUBOKÁ poklona! Vaše lama se plazí v prachu, čumák má až u země! To je přesně ten jeden řádek, který to spravil. Děkuji!

pan Hole
Delphi › Práce s COM - leakuje RAM
20. 6. 2016   #211526

Dobrý den,

mám program Open Hardware Monitor, který ukládá informace o hardwaru do WMI (Windows Management Instrumentation). Napsal jsem program, který je z WMI tahá ven a přes USB posílá na LCD displej. Problém je, že tu část kódu, která se stará a přístup do WMI, jsem našel na netu a strašlivě mi leakuje RAM, což je u programu, který má běžet pořád, celkem záasadní věc... Po cca třech hodinách ten program zabírá 1 GB RAM. Nevidíte někde na první pohled něco, co by chtělo uvolnit nebo dealokovat?

Funkce:

function GetWMIstring(wmiHost, root, wmiClass, wmiProperty, co: string): string;
var
  objWMIService : OLEVariant;
  colItems      : OLEVariant;
  colItem       : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;

  function GetWMIObject(const objectName: String): IDispatch;
  var
    chEaten: Integer;
    BindCtx: IBindCtx;//for access to a bind context
    Moniker: IMoniker;//Enables you to use a moniker object
  begin
    OleCheck(CreateBindCtx(0, bindCtx));
    OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));//Converts a string into a moniker that identifies the object named by the string
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));//Binds to the specified object

  end;


begin
  objWMIService := GetWMIObject(Format('winmgmts:\\%s\%s',[wmiHost,root]));
  colItems      := objWMIService.ExecQuery(Format(co,[wmiClass]),'WQL',0);
  oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
  while oEnum.Next(1, colItem, iValue) = 0 do
  begin
     Result:=colItem.Properties_.Item(wmiProperty, 0); //you can improve this code  ;) , storing the results in an TString.
  end;

end;


Volání:

 try                        // Prikon CPU
    CoInitialize(nil);
    try

      str := (GetWMIstring('.', 'root\OpenHardwareMonitor', 'Sensor','Value', 'SELECT * FROM Sensor WHERE INSTANCEID = "3860"'));
      pos := ansipos(',', str);
      if pos>0 then final := copy(str, 1, pos-1)   else final:=str;
      Label1.Caption :=final;
      ven:=final;

 finally
    CoUninitialize;
    end;
 except
    on E:Exception do
    Begin
        Writeln(E.Classname, ': ', E.Message);
        Readln;
    End;
  end;

P.S.: druhá část kódu, která to udesílá přes USB je v pohodě, když jsem jednotlivé části zakomentoval, tak jsem zjistil, že to dělá ta, která tahá informace z WMI.

Díky za tipy!

pan Hole
JavaScript, AJAX, jQuery › Načtení externího JSON do st…
15. 2. 2015   #199253

Asi je to trapný dotaz, ale s JSON jsem nikdy nepracoval. Mám parser, ale jak sakra dostanu data do stringu, který ten parser bude chroupat?

Konkrétně potřebuji tohle: http://202.127.24.18/bin/astro.php?lon=16.3&lat=49.9&ac=0&unit=metric&output=json&tzshift=0 jakýmkoliv způsobem dostat v JS do stringu.

Když to dělám přes jQuery, tak mi to radí přesunout zdroj na stejnou doménu (což tak úplně nejde) nebo povolit CORS, o kterém jsem v životě neslyšel. Když to dělám v čiístém JS (vizte níže), tak to nechodí vůbec.

function getJSONP(url, success) {

    var ud = '_' + +new Date,
        script = document.createElement('script'),
        head = document.getElementsByTagName('head')[0] 
               || document.documentElement;

    window[ud] = function(data) {
        head.removeChild(script);
        success && success(data);
    };

    script.src = url.replace('callback=?', 'callback=' + ud);
    head.appendChild(script);

}

getJSONP('http://202.127.24.18/bin/astro.php?lon=16.3&lat=49.9&ac=0&unit=metric&output=json&tzshift=0', function(data){
    console.log(data);
});

Určitě je na to nějaká známá finta, kterou jsem ale ani po velmi důsledném googlení nenašel. Díky...

pan Hole
Delphi › Detekce nového souboru ve sl…
4. 8. 2013   #179898

Tak nakonec jsem použil tohle:

function GetLastModifiedFileName(AFolder: String; APattern: String = '*.*'): String;
var
  sr: TSearchRec;
  aTime: Integer;
begin
  Result := '';
  aTime := 0;
  if FindFirst(IncludeTrailingPathDelimiter(AFolder) + APattern, faAnyFile, sr) = 0 then
  begin
    repeat
      if sr.Time > aTime then
      begin
        aTime := sr.Time;
        Result := sr.Name;
      end;
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;
end;

a volám

 soubor:=GetLastModifiedFileName('C:\Meade Images','*.jpg');
pan Hole
Delphi › Detekce nového souboru ve sl…
3. 8. 2013   #179864

Každou minutu mi vypadne z celooblohové kamery obrázek, ale soft ke kameře neumí text overlay. Takže bych potřeboval do každého obrázku doplnit datum a čas. To bych dovedl celkem jednoduše, ale nějak nevím, jak detekovat nový soubor ve složce...

Dáky za Vaše nápady...

pan Hole
PHP › Uložení do textového souboru…
30. 6. 2013   #178577

Hraju si tady s drobným skriptem, který umožní download souboru až po zadání platné e-mailové adresy (abych pak mohl spamovat uživetele, jak se jim soubor líbí    ). PHP vypadá to v zásadě takto:

<?php
$saving = $_REQUEST['saving'];
if ($saving == 1){
$data = $_POST['data'];

$kontrola = isValidEmail($data);

if ($kontrola == TRUE){

$file = "data.txt";

$fp = fopen($file, "a") or die("Couldn't open $file for writing!");
fwrite($fp, $data . "\n") or die("Něco je špatně");

fclose($fp);
echo "Soubor ke stažení zde...";

}
else {
    echo "Zadejte prosím platnou e-mailovou adresu! <br><a href=\"down.php\">Zkusit znovu</a>";
}
}


function isValidEmail($email){
     $pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";

     if (eregi($pattern, $email)){
        return true;
     }
     else {
        return false;
     }   
}

?>

Konkrétně mi jde o to, co použít jako znak konce řádku v ukládaném textu. Zkoušel jsem i PHP_EOL, ale taky nic moc...

pan Hole
PHP › Uložení do textového souboru…
30. 6. 2013   #178576

Hraju si tady s drobným skriptem, který umožní download souboru až po zadání platné e-mailové adresy (abych pak mohl spamovat uživetele, jak se jim soubor líbí  ). PHP vypadá to v zásadě takto:

<?php
$saving = $_REQUEST['saving'];
if ($saving == 1){
$data = $_POST['data'];

$kontrola = isValidEmail($data);

if ($kontrola == TRUE){

$file = "data.txt";

$fp = fopen($file, "a") or die("Couldn't open $file for writing!");
fwrite($fp, $data . "\n") or die("Něco je špatně");

fclose($fp);
echo "Soubor ke stažení zde...";

}
else {
    echo "Zadejte prosím platnou e-mailovou adresu! <br><a href=\"down.php\">Zkusit znovu</a>";
}
}




function isValidEmail($email){ 
     $pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"; 

     if (eregi($pattern, $email)){ 
        return true; 
     } 
     else { 
        return false; 
     }    
} 

?>

Konkrétně mi jde o to, co použít jako znak konce řádku v ukládaném textu. Zkoušel jsem i PHP_EOL, ale taky nic moc...

pan Hole
HTML / XHTML › HTML 5 a rotace obrázku
27. 12. 2012   #169437

Tak problém částečně vyřešen, byl to nesoulad velikostí. Ale ještě bych potřeboval vyřešit jednu věc - aby se nejdřív vykreslila ta ručka ze souboru a pak až ty tři další. Prostým přesunem kódu se mi to nedaří...

<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8" />
<title>Analog clock by Javascript feat. HTML5</title>
</head>
<body>

<canvas id="clock" width="500" height="500"></canvas>
<script type="text/javascript">
<!--

var canvas = document.getElementById('clock');

// vložení obrázku
       ruka = new Image();
       ruka.src = "hod.png";
main();


function main()
{
    if(canvas.getContext)
    {
        clock();
        setInterval('clock()', 1000);
    }
}

function clock()
{
    var context = canvas.getContext('2d');
  context.save();

    context.clearRect(0, 0, 500, 500);
    context.translate(250, 250);
    context.scale(2.5, 2.5);
    context.rotate( - Math.PI / 2 );
    context.save();

    // dial plate
    context.strokeStyle = "gray";
    context.fillStyle = "white";
    context.lineWidth = 4;
    context.lineCap = "round";

    context.beginPath();
    context.stroke();
    context.restore();  
    context.save();

    var now = new Date();
    var hour = now.getHours();
    var minute = now.getMinutes();
    var second = now.getSeconds();
 
    // hour hand
    context.strokeStyle = "black";
    context.fillStyle = "yellow";
    // calculating formula for the angle of the hour hand
    // ( 2 * Math.PI / 6 ) * hour + ( ( 2 * Math.PI / 24 ) / 60 ) * minute + ( ( ( 2 * Math.PI / 24 ) /  60 ) / 60  ) * second
    context.rotate( ( Math.PI / 6) * hour + ( Math.PI / 360 ) * minute + ( Math.PI / 21600 ) * second );
    context.lineWidth = 8;
    context.lineCap = "round";
    context.beginPath();
    context.moveTo(-10, 0);
    context.lineTo(45, 0);
    context.stroke();
    context.restore();
    context.save();

    // minute hand
    context.strokeStyle = "black";
    context.fillStyle = "black";
    // calculating formula for the angle of the minute hand
    // ( 2 * Math.PI / 60 ) * minute + ( ( 2 * Math.PI /  60 ) / 60 ) * second
    context.rotate( ( Math.PI / 30 ) * minute + ( Math.PI / 1800 ) * second );
    context.lineWidth = 6;
    context.lineCap = "round";
    context.beginPath();
    context.moveTo(-14, 0);
    context.lineTo(62, 0);
    context.stroke();
    context.restore();
    context.save();

    // second hand
    context.strokeStyle = "red";
    context.fillStyle = "red";
    // calculating formula for the angle of the second hand
    // ( 2 * Math.PI / 60 ) * second
    context.rotate( Math.PI / 30 * second );
    context.lineWidth = 4;
    context.lineCap = "round";
    context.beginPath();
    context.moveTo(-15, 0);
    context.lineTo(70, 0);
    context.stroke();
    context.restore();

    // frame

    context.beginPath();
    context.lineWidth = 12;
    context.strokeStyle = "green";
    context.arc(0, 0, 90, 0, Math.PI * 2, true);
    context.stroke();
    context.restore();
    context.save();

// obrázek hod.png je 500x500px
    context.save();
    // Translate to the center point of our image
    context.translate(ruka.width * 0.5, ruka.height * 0.5);
    // Perform the rotation
    context.rotate(0.45);
    // Translate back to the top left of our image
    context.translate(-ruka.width * 0.5, -ruka.height * 0.5);
    // Finally we draw the image
    context.drawImage(ruka, 0, 0);
    // And restore the context ready for the next loop
    context.restore(); 

context.restore();


}

//-->
</script>

</body>
</html>
pan Hole
HTML / XHTML › HTML 5 a rotace obrázku
27. 12. 2012   #169414

Zde živá ukázka: http://black-hole.cz/public/hodiny.html

Ta ručka se ani neukáže, při náhodném upravování konstant funkce context.drawImage (viz konec kódu výše) ji dostanu na canvas, ale stejně rotuje úplně nesmyslně...

pan Hole
HTML / XHTML › HTML 5 a rotace obrázku
27. 12. 2012   #169396

Dobrý den,

hraji si s těmito hodinami v HTML5  a rád bych přidal ještě ručičku na druhý (světový) čas jako např. zde. Tu bych chtěl udělat jako PNG obrázek, který je před vykreslením potřebqa narotovat podle vypočteného úhlu. Vyšel jsem z tohohle tutoriálu, ale stejně to moc nefrčí.

<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8" />
<title>Analog clock by Javascript feat. HTML5</title>
</head>
<body>

<canvas id="clock" width="300" height="300"></canvas>
<script type="text/javascript">
<!--

var canvas = document.getElementById('clock');

// vložení obrázku
       ruka = new Image();
       ruka.src = "hod.png";
main();


function main()
{
    if(canvas.getContext)
    {
        clock();
        setInterval('clock()', 1000);
    }
}

function clock()
{
    var context = canvas.getContext('2d');
 
    context.save();

    context.clearRect(0, 0, 300, 300);
    context.translate(150, 150);
    context.scale(1.5, 1.5);
    context.rotate( - Math.PI / 2 );
    context.save();

    // dial plate
    context.strokeStyle = "gray";
    context.fillStyle = "white";
    context.lineWidth = 4;
    context.lineCap = "round";

    context.beginPath();
    context.stroke();
    context.restore();  
    context.save();

    var now = new Date();
    var hour = now.getHours();
    var minute = now.getMinutes();
    var second = now.getSeconds();
   

    // hour hand
    context.strokeStyle = "black";
    context.fillStyle = "black";
    // calculating formula for the angle of the hour hand
    // ( 2 * Math.PI / 6 ) * hour + ( ( 2 * Math.PI / 24 ) / 60 ) * minute + ( ( ( 2 * Math.PI / 24 ) /  60 ) / 60  ) * second
    context.rotate( ( Math.PI / 6) * hour + ( Math.PI / 360 ) * minute + ( Math.PI / 21600 ) * second );
    context.lineWidth = 8;
    context.lineCap = "round";
    context.beginPath();
    context.moveTo(-10, 0);
    context.lineTo(45, 0);
    context.stroke();
    context.restore();
    context.save();

    // minute hand
    context.strokeStyle = "black";
    context.fillStyle = "black";
    // calculating formula for the angle of the minute hand
    // ( 2 * Math.PI / 60 ) * minute + ( ( 2 * Math.PI /  60 ) / 60 ) * second
    context.rotate( ( Math.PI / 30 ) * minute + ( Math.PI / 1800 ) * second );
    context.lineWidth = 6;
    context.lineCap = "round";
    context.beginPath();
    context.moveTo(-14, 0);
    context.lineTo(62, 0);
    context.stroke();
    context.restore();
    context.save();

    // second hand
    context.strokeStyle = "red";
    context.fillStyle = "red";
    // calculating formula for the angle of the second hand
    // ( 2 * Math.PI / 60 ) * second
    context.rotate( Math.PI / 30 * second );
    context.lineWidth = 4;
    context.lineCap = "round";
    context.beginPath();
    context.moveTo(-15, 0);
    context.lineTo(70, 0);
    context.stroke();
    context.restore();

    // frame

    context.beginPath();
    context.lineWidth = 12;
    context.strokeStyle = "green";
    context.arc(0, 0, 90, 0, Math.PI * 2, true);
    context.stroke();
    context.restore();

// Nový kód podle http://creativejs.com/…into-canvas/
// obrázek hod.png je 500x500px
context.save(); 
context.translate(150, 150); 
context.translate(250, 250); 
context.rotate(0.15); 
context.drawImage(ruka, -150, -150); 
context.restore();
}

//-->
</script>

</body>
</html>

Případně ještě onen zpropadený obrázek.

Děkuji za případné návrhy...

pan Hole
Delphi › TImage - transformace bitmapy
26. 6. 2011   #143477

Tak jinak :)

Snažím se udělat takovýhle obrázek:



Tj. obrázek, který se zobrazí správně ve válcovém zrcadle. A tou transformací se obrázek rozplizne, takže pixel se nezobrazí jako pixel, ale jako lichoběžník (v ideálním případě kruhová úseč, ale když se udělajkí dostatečně malé lichoběžníky, tak se to ztratí...).

Díky za trpělivost...

pan Hole
Delphi › TImage - transformace bitmapy
25. 6. 2011   #143461

Zde obrázek:



Opravdu jediné řešení, které mě napadá, je rozdělit obrázek na čtverce a transformovat každý zvlášť...

NightRunner
Delphi › Soubor s daty-&gt;Canvas
4. 12. 2010   #136558

Tak tohle je naprosto super, děkuji!

NightRunner
Delphi › Soubor s daty-&gt;Canvas
4. 12. 2010   #136548

Ano, to je přesně ono!

NightRunner
Delphi › Soubor s daty-&gt;Canvas
3. 12. 2010   #136536

Jen pro upřesnění: Tady to zkouším pomocí PutPixel, ale není to samozřejmě ono...

NightRunner
Delphi › Soubor s daty-&gt;Canvas
3. 12. 2010   #136527

Problém je právě ta poslední věta - jak určit ten region. Jinak je mi všechno jasné a ten obdélník už mi to maluje, i převod do polárních souřadnic jsem zvládl, ale teď jak určit ten region.

NightRunner
Delphi › Soubor s daty-&gt;Canvas
3. 12. 2010   #136514

Dejme tomu, že mám v souboru 360 řádků po 90 prvcích



0.1545;0.1542;0.1539;...
0.1235;0.1234;0.1253...
.
.
.


Potřeboval bych vykreslit na základě číselné hodnoty barevnou mapu, ale ne jako obdélník, ale jako kruh - těch 360 řádků odpovídá 360 stupňům azimutu a těch 90 prvků 90 stupňům elevace (kdyby se někdo divil, co to je za dementní soubor, tak to jsou podklady pro mapu oblohy z radioteleskopu).

Jen tak z legrace jsem si udělal osnovu, což je celkem snadné:



Image1.Canvas.Brush.Style:=bsclear;

for i:=1 to 90 do begin
Image1.Canvas.Ellipse((Image1.Width-i*5) div 2,(Image1.Height-i*5) div 2,(Image1.Width+i*5) div 2,(Image1.Height+i*5) div 2);
end;

for i:=0 to 360 do begin
Image1.Canvas.MoveTo(Image1.Width div 2,Image1.Height div 2);
Image1.Canvas.LineTo(trunc(Image1.Width div 2+konst*cos(i/180*pi)),Image1.Height div 2-trunc(konst*sin(i/180*pi)));
end;


Ale jak teď zařídit, aby se ty jednoltivé dílky osnovy vybarvily, anebo ještě lépe, aby ta osnova nebyla vůbec potřeba a mapa byla celistvá.

Díky za Vaše rady!

pan Hole
Delphi › Autorun v Delphi
29. 9. 2010   #134089

Mám takovýhle autorun s API funkcí:



procedure TForm1.FormClick(Sender: TObject);
begin
ShellExecute(Handle, 'open', 'index.html',nil,nil,SW_SHOWNORMAL) ;
Application.Terminate
end;


Když se spustí autorun, kliknu na okno, okno se zavře, ale neotevře se index.html v prohlížeči. Když autorun najdu na CD a spustím, tak vše funguje (okno se zavře a index.html se otevře). Budu vděčný za rady...

pan Hole
Delphi › Graf ze souboru
14. 5. 2010   #128943

Jinak proč se mi do toho shora uvedeného algoritmu nechce: Znamenalo by to jít v nějakém cyklu, počet sekund převést na hodiny:minuty, porovnat se souborem (nebo naopak, jít souborem a porovnávat stringy) a sčítat hodnotu za středníkem + si někde hlídat, kolik hodnot přísluší které minutě a pak to vydělit, no prostě hrozného sr*ní...

pan Hole
Delphi › Graf ze souboru
14. 5. 2010   #128941

Mějme soubor .CSV:



16:54:12; 20
16:54:37; 20
16:55:02; 20
16:55:27; 30
16:55:52; 60
16:56:17; 20
16:56:42; 10


Potřeboval bych vykreslit graf z těchto dat a to za celý den (přičemž soubor nemusí začínat v 0:00 nebo mohou některé části chybět). Naivní přístup: udělám si Image o šířce 864px (den má 86400 sekund), půjdu po souboru, za jednotlivé minuty data zprůměruji, našlapu do nějakého vektoru [0..863] a pak vykreslím. Ale asi by to šlo i nějak nejdnodušeji...

Díky za tipy...

Elmo von Sezam
Java › Smazání objektu
29. 7. 2009   #113819

Vyřešeno! Děkuju:)

Elmo von Sezam
Java › Smazání objektu
28. 7. 2009   #113802

Máme objekt Kniha, která má jako jeden z parametrů číslo, a chceme smazat jednu konkrétní knihu, jejíž číslo známe:



public void smazat(int cislo) {
for (Kniha k : knihy) {
if (k.getCislo() == cislo) {
knihy.remove(k);
}

}
}


Vyhazuje



Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)


Proč tam nejde použít tento iterátor? Jaký jiný způsob by tenhle úkol vyřešil? Díky za rady...

Qwerty
Java › Řazení ArrayListu
25. 7. 2009   #113692

Nakonec ten komparátor nevypadá tak hrozně :) Už to funguje, díky všem!

Qwerty
Java › Řazení ArrayListu
22. 7. 2009   #113510

Ve třídě Album.java máme nadefinován objekt public Album(String nazev,int cislo) (včetně všech getrů a setrů, přidávání, ukládání vypisování funguje).

V hlavní třídě je (krom jiného:)



private void seradDleAlb(){
List<Album> seznam = new ArrayList<Album>();
for (Album k : databaze.getAlbum()) {
seznam.add(k);
}
Collections.sort(seznam);
vypisAlba(seznam);
}


a samozřejmě to nefunguje... Dočetl jsem se, že asi budu muset udělat vlastní komparátor, ale to jsem nikdy nezkoušel... Nejde to nějak obejít?
Díky za rady...

BlackHole
Offtopic › Teorie relativity
15. 5. 2008   #74015

Z pohledu kosmonauta plyne čas na Zemi pomaleji, protože může řící, že raketa stojí na místě a Země se pohybuje směrem od něj.
Pozorovatel na Zemi však vidí, že plyne čas pomaleji pro kosmonauta. Je to, jak říkáš, kompatibilní. Tolik speciální teorie relativity.
Po návratu by ale astronaut zjistil, že na Zemi zatím uplynulo mnoho let (nedojde tedy k žádnemu "vyrovnání"). Zde je tedy paradox (v rámci speciálky). Lze to však velmi dobře vysvětlit pomocí obecné teorie relativity. Ta se ale na středních školách nedělá, což je škoda.

 

 

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