Byla vydána nová major verze 5.0.0 svobodného multiplatformního nástroje BleachBit (GitHub, Wikipedie) určeného především k efektivnímu čištění disku od nepotřebných souborů.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).
Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.
Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.
Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
můj manifest.jsoin
{ "name": "Test56", "description": "Test56", "version": "1.0", "manifest_version": 2, "background_page" : "background.html", "browser_action": { "default_popup": "popup.html", "default_icon": "icon.png" }, "permissions": ["notifications"] }
budeš potřebovat tři soubory. manifest.json samotnou tu html stránku background.html co budeš jako zobrazovat a pak skriptík background.js kterej zajistí že se bude poslouchat událost máčknutí ikonky a ždycky když se to stane tak jako otevře novej tab s tim našim vlastním obsahem ;D
to background mimochodem znamená že běží někde na pozadí né že se bude zobrazovat na pozadí :O ;D pro tendle účel se jako muže menovat jakkoliv jinak ta html stránka ;D
manifest.json
{ "name": "Test56", "description": "Test56", "version": "1.0", "manifest_version": 2, "browser_action": {}, "background": { "scripts": ["background.js"] }, "permissions": [ "notifications","activeTab","tabs" ] }
backgound.js
chrome.browserAction.onClicked.addListener(function(tab) { chrome.tabs.create({"url": "background.html"});});
vyšla sem z tohodle myslim dobrýho tutoriálku hele a z jejich dokumentace hele ;D
joa myslim že tam mam možná nějaký zbytečný práva navíc pro tu extension asi by to jako šlo ještě vočesat :O :O ;D
<!DOCTYPE html> <html> <head> <script src="app.js"></script> </head> <body> <button onclick="copyFile('./files/a/a.txt', './files/b/a.txt')">copyFile</button> </body> </html>a v souboru app.js mám
/** * Copy an existing file. * * @param {String} originFileId ID of the origin file to copy. * @param {String} copyTitle Title of the copy. */ function copyFile(originFileId, copyTitle) { var body = {'title': copyTitle}; var request = gapi.client.drive.files.copy({ 'fileId': originFileId, 'resource': body }); request.execute(function(resp) { console.log('Copy ID: ' + resp.id); }); }při spuštění ale dostanu chybu
Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.Našla jsem, že se musí do manifest.json vložit něco jako
"content_security_policy": "script-src 'self' https://example.com; object-src 'self'"ale nevím přesně kam a hlavně javascript budu načítat přímo z adresáře toho rozšíření. Zkusila jsem i toto
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"ale chyba zůstáva. Můžete mi prosím ještě poradit? Celé rozšíření bude jenom obsahovat tři buttony a po kliknutí zkopírují soubory a.txt nebo n.txt nebo c.txt. Podle toho na který button se klikne.
lepší je jako udělat zdrojáček jinak než snižovat zabezpečení :O ;D
vadí tomu hádám js inline funkce v background.html tak ji bude potřeba jakoby nahradit hrabáním se dom html. v tý background.html dej pryč onclick="funkce" a přidej mu nějaký id takže to jako bude vypadat třeba takhle
<button id="tlacitko_A">copyFile</button>
a udělat to v js přes dom
document.getElementById("tlacitko_A").addEventListener("click", copyFile('./files/a/a.txt', './files/b/a.txt'));
skript se musí volat až tam bude ten html objekt vidět nejednoduší řešení je strčit v html <skript> až pod <button> nemusí bejt nutně v hlavičce ;D
jestli tamto je jako celej obsah toho tvýho app.js tak toho bude potřeba udělat ještě trošičku víc si myslim. bude potřeba nějak inicializovat tamto google api a nějak se do něj přihlásit a až pak do něj zkoušet něco kopírovat ;D jako já extension teda netestuju přímo v chrome ale chromiu. nóó a chromium je vočesaným o ty různý google věci navíc tak se zdroják muže chovat jinak v každým z těch dvou prohlížeču a v čistým chrome to jako fungovat muže tak dej vědět ale bojim se že takle samotný ti to nepoběží :O :'(
manifest.json
{ "name": "Test56", "description": "Test56", "version": "1.0", "manifest_version": 2, "browser_action": {}, "background": { "scripts": ["background.js"] }, "permissions": ["notifications","activeTab","tabs"] }
background.js
chrome.browserAction.onClicked.addListener(function(tab) { chrome.tabs.create ({ "url": "background.html" }); });
background.html
<!DOCTYPE html> <html> <head> </head> <body> <button id="button_a">Button Copy File A</button> <button id="button_b">Button Copy File B</button> <button id="button_c">Button Copy File C</button> <script> function copyFile(originFileId, copyTitle) { var body = {'title': copyTitle}; var request = gapi.client.drive.files.copy({'fileId': originFileId,'resource': body}); request.execute(function(resp) {console.log('Copy ID: ' + resp.id);}); } document.getElementById("button_a").addEventListener("click", copyFile('./files/1/a.txt', './files/2/a.txt')); document.getElementById("button_b").addEventListener("click", copyFile('./files/1/b.txt', './files/2/b.txt')); document.getElementById("button_c").addEventListener("click", copyFile('./files/1/c.txt', './files/2/c.txt')); </script> </body> </html>
Po spuštění dostanu chybu
Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem:". Either the 'unsafe-inline' keyword, a hash ('sha256-sM9j1UeatRmsfdWERRqhids54g87aCF+he9zFlWMV5fN0='), or a nonce ('nonce-...') is required to enable inline execution. background.html Trasování zásobníku background.html:9 (anonymní funkce)PS: Na řádku 9 v background.html je <script>
no tudletu konkrétní chybku de jako vobejít tim že skript strčíš samostatnýho souboru třeba to app.js a v html ho naimportuješ <script src="app.js"></script> pak by si to jako nemělo stěžovat. pokud si ti to v tenhleten moment jako začne stěžovat že neví nezná google drive že je nedefinovanej nebo tak nóó tak extension takle jednoduše nebude fungovat a gogle api se budou muset načíst ručně a neni to jako jenom specifikum mýho chromia :O :'(
jako sem si s tim ještě chvilku hrála ale nemam to jak vyzkoušet protože google api nepoužívám a když sem se tam chtěla regnout tak hnedka jako dejsem číslo gréto my ti nevěříme že ty seš jako ty tak sem je jako poslala někam už teďko toho jako vo mě vědí děsně moc :O :O :'( :'( :D :D
každopádně jak sem tam potřebovala přidat tamtu jejich knihovničku client.js tak sem to zabezpečení stejně snížila bylo to i v nějakým tutoriálu. nóóóó dostala sem se sem ale jak jako řikám nemam to zatim jak vyzkoušet :O :'(
background.js je stejnej
chrome.browserAction.onClicked.addListener(function(tab) { chrome.tabs.create ({ "url": "background.html" }); });
manifest.json má navíc tamto security policy pro google apis
{ "name": "Test56", "description": "Test56", "version": "1.0", "manifest_version": 2, "browser_action": {}, "background": { "scripts": ["background.js"] }, "permissions": ["notifications","activeTab","tabs"], "content_security_policy": "script-src 'self' https://apis.google.com/; object-src 'self'" }
background.html je pár zbytečnejch blbinek navíc a skript je odělenej do app.js
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <button id="button_a" disabled>Button Copy File A</button> <button id="button_b" disabled>Button Copy File B</button> <button id="button_c" disabled>Button Copy File C</button> <p id="keci">čeká se na gapi!!!!!!!!</p> <script src="https://apis.google.com/js/client.js"></script> <script src="app.js"></script> </body> </html>
app.js je uplně jiný
//si to někde u nich musíš registrovat asi :O :O var PROJECT_ID = 'YOUR_PROJECT_ID'; var CLIENT_ID = 'YOUR_CLIENT_ID'; var API_KEY = 'YOUR_API_KEY'; var SCOPES = 'https://www.googleapis.com/auth/drive'; function authorization() { gapi.client.setApiKey(API_KEY); gapi.auth.authorize ( { client_id: CLIENT_ID, scope: SCOPES, immediate: false }, function(authResult) { if (authResult && !authResult.error) { console.log('Auth was successful!'); nastavKnofliky(); } else { console.log('Auth was not successful'); } } ); } function copyFile(originFileId, copyTitle) { var body = {'title': copyTitle}; var request = gapi.client.drive.files.copy({'fileId': originFileId,'resource': body}); request.execute(function(resp) {console.log('Copy ID: ' + resp.id);}); } function nastavKnofliky() { var butt=document.getElementById("button_a"); butt.disabled=false; butt.addEventListener("click", copyFile('./files/1/a.txt', './files/2/a.txt')); butt=document.getElementById("button_b"); butt.disabled=false; butt.addEventListener("click", copyFile('./files/1/b.txt', './files/2/b.txt')); butt=document.getElementById("button_c"); butt.disabled=false; butt.addEventListener("click", copyFile('./files/1/c.txt', './files/2/c.txt')); document.getElementById("keci").innerHTML = "Načteno gapi mužem mačkat"; } gapi.load('client', function () { gapi.client.load('drive', 'v2',authorization); } );
s google api ti asi jako moc nepomužu vyšla sem z tohodletoho hele:'( možná založ další dotaz třeba se někdo chytne protože pak by to jako byla záležitost javascriptu a google api néééé extension. exxtension je tam jenom taková jakože třešnička na dortíku :O ;D
počkej počkej!!!! :O :O možná mi jako nejdřiv popiš o co se jako vlastně snažíš protože já z tý kopírovací funkce pochopila že se snažíš kopírovat soubory na googlím cloudu google drive ne že chceš dělat něco lokálně :O :O :D :D
jinak kód extensions si mužeš prohlížet. nejdřivi si otevři chrome://extensions/ a tam jako pod každou tou extension uvidíš jeji id. nóóó a chrome/chromium maj tajný složky kde je uloženej profil včetně těch zdrojáčků rozšíření :O ;D
v linuxu cesta ke složce ve který sou je ~/.config/google-chrome/Default/Extensions/ a pak id tý extension.složka extensions neexistuje dokavaď neni nainstalovaná aspoň jedna extension pak ji to jako vyrobí.
pro windows by měla bejt cesta C:\Users\<Your_User_Name>\AppData\Local\Google\Chrome\User Data\Default\Extensions
někdy prej muže bejt v zipu ta extension. v chromiu je tak nemam a sou to normální soubory. pěkný počtení to asi ale jako nebude ;D
Jejda to se velmi omlouvám, jsem kráva, nenapadlo mě, že bych mohla kopírovat soubory někde jinde než u sebe v počítači.
Tak zkusím znova popsat.
V pravo nahoře v Chrome jsem chtěla tlačítko, na které když kliknu, tak se načte html soubor s tlačítky (to díky tobě už mám a funguje to skvěle).
A teď potřebuji po kliknutí na tlačítko udělat cokoli (na lokálním PC) aby jiný script běžící ve Windows poznal, na které tlačítko se v tom rozšíření kliklo a podle toho provedl danou akci.
Jako první mě napadlo použít sessions nebo coockies ale ta jsou šifrovaná.
Jako další mě napadlo zkopírovat do nějaké tempt složky (nebo přímo vytvořit jiný) soubor s nějakým názvem. A to si myslím, že by jít mělo. Na webu někdo psal, že to není možné, ale naše p. učitelka nás taky učila, že příjde doba, že si v obchodě vezmeme všechno co budeme potřebovat a nemusíme za to platit. Ta doba sice přišla, ale nějak opomenula sdělit, že se za to ty lidí zavírají
Nevím, myslím, že by ty soubory mohly jít vytvořit, co myslíš?
Nedávno ma tu celkom prekvapil odkaz na FileReader pretože som si myslel, že dosiahnuť z JavaScriptu na lokálny disk sa nedá - a celkom to dáva zmysel. Bola by to diera ako hrom, nie? FileReader má zjavne výnimku a zafunguje len za špeciálnych okolností.
Keď chceš siahať na lokálny systém, tak sa to dá urobiť cez native messaging, ale je to dosť netriviálne a treba na to ďalšiu natívnu aplikáciu.
jako já zase neměla blbě něco předpokládat a hnedka pohlavě skákat do skriptování to máš uplně fuk :D :D ;D
jak už jako tady řikali tak přímo zapisovat někam uplně kamkoliv na disk z browseru je celkem nebezpečný. extensions maj nějakej svuj local storage hele a jestli je jako fakt nutný jako jít cestou souboru na disku tak si asi zistit kam co extension zapisuje a nějak to scanovat tim skriptem.
mě ale napadlo něco jinýho co si myslim že je mnóóóóóóóhem lepšejší ale jako nepoužívat jako zase na něco rizikovýho hesla citlivý data a tak :O :O ;D
mě napadlo použít webovou socketovou komunikaci websockets hele. teda nevim jestli to tvý řešení jako umožňuje ale na pozadí by furt běžel nějakej ten tvuj skript jako jakoby server a extension by se k němu připojila jako klient. a server by vždycky nějak zareagoval něčim nato co by mu extension jako klient posílala
tady html extension. je pozměněná jenom trošku
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <button id="button_a" disabled>akce jedna</button> <button id="button_b" disabled>akce dva</button> <button id="button_c" disabled>akce tři</button> <p id="keci">cekame na spojeni!!!!!!!!</p> <script src="app.js"></script> </body> </html>
a app.js
var socket= new WebSocket('ws://localhost:8765');//připojujem se na tenhleten počítač na port 8765 socket.onmessage = function(e){ console.log("server poslal: "+e.data); }; socket.onopen = () => nastavKnofliky(); function posliZpravu(zprava) { if (socket.readyState != socket.OPEN) { console.error("webSocket is not open: " + socket.readyState); return; } socket.send(zprava); } function nastavKnofliky() { var butt=document.getElementById("button_a"); butt.disabled=false; butt.addEventListener("click", function(){posliZpravu("jedna")});//musí to bejt takle pitomě zabalený v tý funkci jinak nefunguje :O :'( ;D butt=document.getElementById("button_b"); butt.disabled=false; butt.addEventListener("click", function(){posliZpravu("dva")}); butt=document.getElementById("button_c"); butt.disabled=false; butt.addEventListener("click", function(){posliZpravu("tri")}); butt=document.getElementById("keci").innerHTML="máme spojení mužem mačkat :O :D"; }
sem namastila jednoduchej server v pythonu nevim v čem skriptuješ ty. je to podle tohodletoho hele ;D
potřebuje to mit nainstalovaný knihovny websockets a asyncio
#!/usr/bin/env python import asyncio import websockets async def echo(websocket, path): async for message in websocket: print("mam zpravu od klienta: "+str(message)) if message=="jedna": print("nejakej prikaz k akci jedna") await websocket.send("akce jedna provedena ;D") elif message=="dva": print("nejakej prikaz k akci dva") await websocket.send("akce dva provedena ;D") elif message=="tri": print("nejakej prikaz k akci tri") await websocket.send("akce tri provedena ;D") else: print("nevim :O :O") await websocket.send("ja ti nerozumim :D") asyncio.get_event_loop().run_until_complete( websockets.serve(echo, 'localhost', 8765)) asyncio.get_event_loop().run_forever()
jako funguje to tak že nejdřiv pustíš ten skript python3 wserver.py a až pak mužeš mačkat ty čudliky jinak ti bude extension nadávat že neni spojení. klinet do webový konzole piše co mu server posílá zpátky se nějaká zpětná vazba ze servru možná taky muže hodit k něčemu v tý tvý extension ;D
No přesně takto to mám teď. Mám nainstalovaný webserver apache + php a na pozadí mám spuštěný loop.bat který hlídá adresář a podle toho reaguje. Problém je v tom, že musím mít nainstalovaný ten webserver, chtěla jsem to vytvořit líp, bez použití localhost-u.
Tvé řešení ale vypadá, že by to snad mohlo jít i bez instalace localhostu. Možná i bez instalace pythonu?
Opět moc děkuji, jdu to vyzkoušet.
jako na todleto apache mysql ani php neni nutný ;D a localhost neni něco co by se instalovalo je to jakoby prostě tento počítač hele :O :O ;D
websockety sou nějaká nadstavba nad obyč tcp protokolem a to neni o použitým jazyku websocket server jako pude snad namastit skoro v čemkoliv tady třeba v takovým tom jejich divným ale ve win světě používaným c# hele tutorial c# websocket server a javascript client :O :O ;D
s win ti ale neumim poradit jak websocketserver pustit bezpečně jako službu kterou by to furt nahazovalo kdyby třeba spadla a hlídalo jeji běh a tak a nevim jestli takový věci bude vědět třeba i někdo tady :'( systemd tam ve windows asi nemáš že :O :O :D :D ;D
nóóóóó a mužu se ještě jako zeptat proč to musí bejt ta extension do chromu nebylo by jednoduší udělat nějakou gui apku s tlačítkama co by akce jako dělala rovnou když už to má bejt jenom na jednom compu všecko?? ;D
..nebylo by jednoduší udělat nějakou gui apku s tlačítkama...Jakou apku přesně myslíš?
jako jakou apku mi spíš jako řekni ty ;D
co sem tak zatim jako pochopila tak ty chceš nějakaký klikátko s tlačítkama a vždycky když nějaký máčkneš tak se něco na tom samým počítači udělá. nóó a na to by stačila nějaká jednoduchá aplikace nějakej malej prográmek s grafickým uživatelským rozhraním kde by byli všecky ty tlačítka a každý to zmáčknutí by uďálo nějakou tu tvou akci. by se to jako taky obešlo bez tý server/client komunikace bylo by to bezpečnější jednoduší a tak ;D
nevim o co se jako přesně snažíš ale předpokládám že máš nějaký ty hádám windowsí *.bat skripty který něco dělaj a chtěla bys je pouštět tlačítkama v nějakým grafickým rozhraní?? :O :O tošičku víc nám problém popiš jestli to neni jako něco děsně tajnýho :O :O :D ;D
nóóóó jestli si jako mužeš vybírat proč jako nešáhnout po něčem co ti bude běhat jak pod win tak i pod linuxem třeba python?? :O :O
je jednoduchej rychle vněm de namastit skoro cokoliv i to gui by uměl a tak ;D
jako je dost pravděpodobný že už bude hotový nějaký řešení na tehleten problém ale nevim nic se mi nedaří najít :'(
předpokládám že umíš s těma *.bat skriptama a tim divným jazykem a tady hele je jako nějaký snad jednoduchý řešení s gui okýnkem ;D
Tiskni
Sdílej: