Présentation dythyrambique de la part des médias sur cet accord fiscal quasi mondial : extrait : "Accord historique à l’OCDE pour taxer les multinationales «d’au moins 15%» sur les bénéfices. 140 pays se sont mis d’accord pour la mise en place d’un impôt minimum « d’au moins 15% » sur les bénéfices des plus grandes entreprises mondiales." extrait : "« Je salue cette avancée majeure », un « accord ambitieux global novateur ». « Nous allons mettre fin à l’optimisation fiscale et à la course au moins-disant fiscal », qui est « une impasse pour l’Europe et le reste du monde », a mis en avant Bruno Le Maire, ministre français de l’Economie sur son compte Twitter." extrait : "La secrétaire américaine au Trésor a salué jeudi l’accord trouvé, y voyant un « jour historique pour la diplomatie économique. L’Allemagne a de son côté évoqué un « pas colossal » vers une plus grande justice fiscale. " Et évidemment, le clou du spectacle, extrait : "En revanche, l’Irlande et la Hongrie n’ont pas adhéré à l’accord conclu à l’OCDE." Je rappelle que 100% des multinationales du numérique, qui sont celles qui posent problème et qui sont à l'origine de cet "accord historique" sont domiciliées en Irlande. Par conséquent, cet accord va s'appliquer au monde entier, sauf à eux. A toutes les entreprises sauf celles qui étaient ciblées par l'accord. C'est un beau jour pour la politique internationale je trouve... |  |  | Posted on 01-July-2021 22:35 | Category: France | comment[0] | trackback[0] Windows 11 completely misses the point
Some desperate UI overhaul was needed, but not on a desktop computer, a device controlled by a keyboard and a mouse.
Actually it's on mobile devices that UI can become much better than they're at. Make UI discoverable, consistent, standard and you've got the golden key to the next decade.
Apparently Microsoft does not want to be part of it because what they are telling they are doing now is force mobile like gestures onto desktop devices. Which is awkward.
If you are a developer, as I am, there is nothing for you here. Move along.
|  |  | Posted on 25-June-2021 10:23 | Category: anti-Microsoft | comment[0] | trackback[0] I find it hard to believe that web browsers are pushing updates every single week, sometimes even more than once a week, and most of those update are automatically downloaded and installed, and yet, those guys still haven't found a mechanism for saving a default value for GDPR cookie prompts to not appear in the first place. Not necessarily because the web browser would provide a mechanism for hiding or not letting those in, but for setting a predefined bool value so the blocking banner does not need to appear. One would think this would have been thought throughout even *BEFORE* GDPR came into that cookie game thing. Why such slowness to act ? Are those guys beyond stupid ? What's going on ?
Also, that would also be a welcome improvement for adBlock since basically the event system lets adBlock know about banners wanting to show up, and given thus the opportunity to kill them before it bothers the viewer.
|  |  | Posted on 21-June-2021 11:58 | Category: News | comment[0] | trackback[0] Remember 5 years or so, SSL was described as horryfying mess and killed with great fanfare, causing all sorts of breakages in websites, at the expense of website owners not other parties. Websites owners were being told that this had to be done because "SSL was excruciably bad", no matter what this meant in practice. Yes, its successor, namely TLS, is apparently as much shit as SSL. Read, with great attention, extrait : "(...) Such attacks are possible because of the failure of TLS to protect the integrity of the TCP connection itself rather than the integrity of just the server speaking HTTP, SMTP, or another Internet language. Man-in-the-middle attackers can exploit this weakness to redirect TLS traffic from the intended server and protocol to another, substitute endpoint and protocol. (...)" Be ready for more breaks at the expense of website owners. At this point perhaps any auto-entrepreneur trying hard to get his website up and running and running into obstacles every year, should question whether this is worth it after all. The upending question is whether running any IT business is worth at all if your basis is going to break anytime for any reason, when you need stability for your business to exist in the first place. |  |  | Posted on 09-June-2021 20:15 | Category: News | comment[0] | trackback[0] Who is stupid and ignorant enough to claim the internet is a decentralized thing ? Not me. Here is a fresh counter-example, extrait : "For roughly an hour this morning—6 am to 7 am EDT, give or take a few minutes—enormous swathes of the Internet were down or interestingly broken. Sites taken down included CNN, The Guardian, The New York Times, PayPal, and Spotify, among many more—including The Verge, which resorted to reporting via Google Docs during the duration of the outage." |  |  | Posted on 09-June-2021 10:55 | Category: News | comment[0] | trackback[0] If you think Mozilla Firefox is doing bad UI choices by making tabs float instead of clearly separating them, you can still avoid it all by disabling this UI codenamed proton :
- type about:config in your address bar and confirm you want to make changes - enter browser.proton.enabled in the search bar and hit enter - toggle from true to false this boolean value
Problem fixed !
|  |  | Posted on 02-June-2021 23:06 | Category: News | comment[0] | trackback[0] covid : nous avons le smoking gun.
Que se passe-t-il depuis courant avril ? Le taux d'incidence, notamment, a chuté de moitié.
Mais, alors que la classe d'âge des plus de 50 ans a commencé à se faire vacciner début mai, leur vaccination ne peut pas être responsable de la chute du taux d'incidence de cette classe d'âge.
Et encore moi pour les tranches d'âge inférieur, puisque là c'est carrément pas de vaccination du tout.
Donc?
Donc, le parfait smoking gun. La parfaite explication que le gouvernement nous fait faire n'importe quoi et que l'évolution du virus ne dépend pas tant que ça de nos gestes. Gestes qui, pour la plupart d'entre nous n'ont pas changé, à savoir pour les tranches d'âge supérieur, une protection systématique avec le masque, les gestes barrières ainsi que la diminution drastique des sorties. Et pour les tranches d'âge inférieur, l'insoucience de la maladie. A juste titre d'ailleurs, lorsqu'on est responsable et qu'on sait quelle attitude adopter dans la semaine qui suit avec les gens plus âgés.
Bref, nous vivons là en direct une manipulation de la population. Il va falloir y mettre un terme rapidement avant que tout le monde ne devienne fou.
|  |  | Posted on 21-May-2021 18:54 | Category: France | comment[0] | trackback[0] With Google YouTube adding so much ads in user's videos, both pre-roll, mid-roll, etc. 20th of may 2021 will remain as the day the video internet imploded and became hostile to the user.
Mark my words guys.
|  |  | Posted on 20-May-2021 23:44 | Category: anti-Google | comment[0] | trackback[0] L'abonnement payant Twitter est un bon signe. C'est le signe que c'est la fin des haricots pour ces gens là.
Ils ont trahis leurs utilisateurs en privilégiant le militantisme des minorités actives aux utilisateurs, et la punition doit venir.
La punition prend du temps pour venir. Il faut pouvoir s'asseoir le long d'une rivière et attendre de voir passer le corps de ses ennemis. Mais ça vient !
Et un excellent signal à tous les autres qui se lancent dans l'abonnement, c'està-dire le contraire-même de ce pour quoi internet a été fait.
|  |  | Posted on 17-May-2021 16:18 | Category: France | comment[0] | trackback[0] L'abonnement payant Twitter est un bon signe. C'est le signe que c'est la fin des haricots pour ces gens là.
Ils ont trahi leurs utilisateurs en privilégiant le militantisme des minorités actives aux utilisateurs, et la punition doit venir.
La punition prend du temps pour venir. Il faut pouvoir s'asseoir le long d'une rivière et attendre de voir passer le corps de ses ennemis. Mais ça vient !
Et un excellent signal à tous les autres qui se lancent dans l'abonnement, c'està-dire le contraire-même de ce pour quoi internet a été fait.
|  |  | Posted on 17-May-2021 16:18 | Category: France | comment[0] | trackback[0] Build 4.9.0.10 of xlsgen improves memory performance in the following scenario : whenever a scenario implies a massive iteration amount of any of the following operations : insert row/col, delete row/col, sort row/col, remove duplicates, xlsgen 4.9.0.10 makes sure there is less memory consumption and much less memory re-allocations, making all those operations scalable.
|  |  | Posted on 16-May-2021 15:02 | Category: xlsgen, Excel generator | comment[0] | trackback[0] Mais qui est Guillaume Rozier pour bénéficier de tant de clameurs médiatiques ?
Il a inventé ou vaccin ou un traitement ? Non
Il fait avancer la science directement ou indirectement ? Non
Il sort des chiffres que personne ne sort ? Non (note : les chiffres sur son site sont ceux du gouvernement, ceux rendus publiques)
Il fait des graphiques incroyables ? Non
Il permet de mieux comprendre l'épidémie par la mise en ligne de graphiques pertinents ? Non
Mais en fait, que fait Guillaume Rozier ?
Je me pose toujours la question.
Peut-être un début de réponse, un peu cynique je l'admet : si vous allez sur son site covidtracker, vous verrez au milieu d'un capharnaum de graphiques peu lisibles et de boutons menant vers d'autres graphiques, que les titres font souvent référence à cette notion de taux d'incidence. Sous toutes ses formes, par exemple lorsqu'on parle de positivité, c'est la même chose. Il se trouve qu'il est admis aujourd'hui que le taux d'incidence n'est pas pertinent pour le suivi de l'épidémie, pour de nombreuses raisons : 1) très lié au nombre de tests 2) comptages multiples des tests pour la même personne 3) décorrélation entre contamination et contagiosité 4) décorrélation entre contamination et hospitalisation. En fait le taux d'incidence devrait être renommé taux d'indécence. Et celui-là il monte tous les jours, ça se voit.
Vous entendez une critique laudative sur Guillaume Rozier (ou sur le taux d'indécence) ? Passez votre chemin.
|  |  | Posted on 11-May-2021 09:53 | Category: France | comment[0] | trackback[0] Filling cells is an extension of paste where a source area gets duplicated to a larger area multiple times both horizontally and vertically, hence the fill. Creating a range fillAs an example, you could have content at row 3 that according to some scenario needs to be duplicated in rows 6 to 8. If the paste/pasteTo function is used, this needs iteration over rows 6 to 8. But using fill, a single statement will do : C/C++ code |
worksheet->Rows[L"3:3"]->Range->FillTo(worksheet, worksheet->Rows[L"6:8"]->Range, xlsgen::pasteoption_valuesandformattingandformulas);
|
Another example is range C3:F4 that gets used in order to fill range B5:Z8 of another worksheet : C/C++ code |
worksheet->NewRange(L"C3:F4")->FillTo(worksheet2, worksheet2->NewRange(L"B5:Z8"), xlsgen::pasteoption_valuesandformattingandformulas);
|
|  |  | Posted on 02-May-2021 18:02 | Category: xlsgen, Excel generator | comment[0] | trackback[0] Windows 10 version 20H2 messes up drivers.
So far, ever since this mandatory update went through,
- my printer stopped working completely, alerting that there was a communication problem as if there was no USB cable in between. Fix : uninstall then install the printer driver again. Updating the driver did not do anything.
- my graphics card would cause computer hang in some games, randomly. Again, the fix : uninstall then install the graphics card driver again.
So far it seems all good, but should this be a normal situation ? Should wrecking someone's computer in a mandatory update be the new standard ? What if I were unable to diagnose and fix things ? And what if Windows 10 20H2 had broken the network driver so I wouldn't be able to go online and find the driver ?
|  |  | Posted on 28-April-2021 09:35 | Category: anti-Microsoft | comment[0] | trackback[0] Build 4.9.0.8 of xlsgen fixes a problem for generating custom report filters in pivot tables. The bug appeared in XLSX and XLSB files.
|  |  | Posted on 18-April-2021 10:56 | Category: xlsgen, Excel generator | comment[0] | trackback[0] Build 4.9.0.7 of xlsgen adds support for Rust as a programming language. xlsgen supports Rust as a programming language which allows to build rust applications of any size and complexity. Rust in xlsgenRust is a functional language popularized in a number of environments and places, and it turns out that it can also make low-level calls. The xlsgen install package takes advantage of this and comes with an interface layer (called xlsgen.rs ) which exposes the entire object model to Rust code environments. Both enumerated types and interfaces are available. It is assumed that the basic Rust development or runtime environment is installed on the computer. The xlsgen interface layer does not use any particular feature of a recent Rust version, so most likely any Rust version of the language and environment is compatible with it. In fact, what xlsgen relies on is the Rust winapi crate, which provides a number of Windows types and macros that make it easier to expose and handle. Here is how a simple Rust program looks like in structure : - src | |- main.rs (your code goes here) |- xlsgen.rs (xlsgen interface layer (available from the xlsgen install package)) - Cargo.toml (known dependency declaration (winapi))
Here is how you build it : cd \tmp\rust\simple cargo build
Here is how you run it : cd \tmp\rust\simple cargo run
During the first run, the package manager will download a compatible version of the winapi crate in order to meet the dependency specifications, so the compuer where this runs must be online and ready to download stuff, even though this stuff has nothing to do with xlsgen. xlsgen.rs on the other hand is part of the xlsgen install package, so it can be copied over in your source code folder structure. xlsgen.rs is computer-generated by a tool that was designed to convert a COM IDL object model to a Rust compatible object model. Rust can execute low-level statements, but because of what they are those statements have to be enclosed inside an unsafe section. Here is how you put a number in cell B4 : let _hr = unsafe { (*p_worksheet).put_float(4, 2, 4.5); };
The return value of any call is a HRESULT, i.e. a value of zero means everything went fine, and you can look up winerr.h to find the list of existing HRESULT errors (for instance 0x80070057 = invalid parameter). Before you can load xlsgen in memory, the COM library must be loaded, which means a paired CoInitialize/CoUninitalize call. In Rust, all depending types must be declared, tha's why your typical application will include statements such as : use winapi::{Class, Interface};
Last but not least, Rust macros can help group code patterns together. For instance, if you'd like to create a pointer to an object, initialize to null, you would declare a macro like this : macro_rules! new_pointer { ($param:ident, $type:ty) => {let mut $param: *mut $type = unsafe { std::mem::zeroed() };} }
And then you would use this macro like this : new_pointer!(p_engine, xlsgen::IXlsEngine);
Here is a Rust sample application in full that creates a spreadsheet with two sheets, puts a couple numbers in it and reads back the content of a cell. It's available in the /samples folder of the xlsgen install : use winapi::um::winnt::{LPWSTR}; use winapi::{Class, Interface}; use std::ffi::{OsStr, OsString}; use std::os::windows::ffi::OsStrExt; use std::os::windows::ffi::OsStringExt; use std::slice;
pub mod xlsgen;
// *** MACROS begin here ***
macro_rules! retVal { ($param:ident) => {&mut $param as *mut _ as *mut _} }
macro_rules! new_pointer { ($param:ident, $type:ty) => {let mut $param: *mut $type = unsafe { std::mem::zeroed() };} }
macro_rules! release_pointer { ($param:ident) => { unsafe { (&mut * $param).Release() }; } }
macro_rules! release_bstr_string { ($param:ident) => { unsafe { winapi::um::oleauto::SysFreeString( $param as LPWSTR ) }; } }
// *** MACROS end here ***
// unicode strings (Rust stores strings using UTF8 encoding, not UTF16) so we have to convert back and forth
fn to_wstring(string: &str) -> Vec<u16> { let mut v: Vec<u16> = OsStr::new(string).encode_wide().collect(); v.push(0); // EOL v }
fn from_wstring(string: LPWSTR) -> String { let string_slice = unsafe { let len = winapi::um::oleauto::SysStringLen(string); slice::from_raw_parts(string, len as usize) };
OsString::from_wide(string_slice).into_string().unwrap() }
fn main() {
println!("step1");
let _hr = unsafe { winapi::um::objbase::CoInitialize(std::ptr::null_mut()) };
println!("step2");
new_pointer!(p_engine, xlsgen::IXlsEngine);
let _hr = unsafe { winapi::um::combaseapi::CoCreateInstance( &xlsgen::XlsEngine::uuidof(), std::ptr::null_mut(), winapi::shared::wtypesbase::CLSCTX_INPROC_SERVER, &xlsgen::IXlsEngine::uuidof(), retVal!(p_engine)) };
println!("step3 {}", _hr);
new_pointer!(p_workbook, xlsgen::IXlsWorkbook);
let _hr = unsafe { (*p_engine).new(to_wstring("d:\\tmp\\eer.xlsx").as_ptr(), retVal!(p_workbook)) };
new_pointer!(p_worksheet1, xlsgen::IXlsWorksheet);
let _hr = unsafe { (*p_workbook).addworksheet(to_wstring("sheet 1").as_ptr(), retVal!(p_worksheet1)) };
new_pointer!(p_worksheet2, xlsgen::IXlsWorksheet);
let _hr = unsafe { (*p_workbook).addworksheet(to_wstring("sheet 2").as_ptr(), retVal!(p_worksheet2)) };
println!("step4");
let mut i_wksht_count : i32 = 0;
let _hr = unsafe { (*p_workbook).get_worksheetcount(&mut i_wksht_count) };
println!("step4a {}, wkshtCount = {}", _hr, i_wksht_count);
unsafe { (*p_workbook).put_factorizedstringsmode(true) };
let mut b_factorized : bool = false;
let _hr = unsafe { (*p_workbook).get_factorizedstringsmode(&mut b_factorized) };
println!("step4ab {}, bFactorized = {}", _hr, b_factorized);
// write some content for r in 1..10 { let _hr = unsafe { (*p_worksheet1).put_label(r, 2, to_wstring("hello world").as_ptr()) }; }
// read some content
println!("step4b");
new_pointer!(cell_string, LPWSTR);
println!("step4c");
let _hr = unsafe { (*p_worksheet1).get_label(3, 2, retVal!(cell_string)) };
println!("step5");
println!("cell value is : {}", from_wstring(cell_string as LPWSTR));
println!("step6");
new_pointer!(p_richlabel, xlsgen::IXlsRichLabel);
println!("step6b");
let _hr = unsafe { (*p_worksheet1).newrichlabel(retVal!(p_richlabel)) };
println!("step6c {}", _hr);
let _hr = unsafe { (*p_richlabel).put_htmllabel(to_wstring("<span>hello <b>world</b></span>").as_ptr()) };
println!("step6d");
let _hr = unsafe { (*p_worksheet1).put_richlabel(1, 4, p_richlabel) };
println!("step6e");
let _hr = unsafe { (*p_workbook).close(); };
println!("step7");
release_bstr_string!(cell_string); release_pointer!(p_worksheet1); release_pointer!(p_worksheet2); release_pointer!(p_workbook); release_pointer!(p_engine);
unsafe { winapi::um::combaseapi::CoUninitialize() };
println!("step8");
}
Here is an excerpt from xlsgen.rs : (...)
RIDL!{#[uuid(0xD97500CF,0x37CC,0x48fd,0x87,0x72,0x0E,0xBC,0x8F,0x8A,0x93,0x76)] interface IXlsEngine(IXlsEngineVtbl): IDispatch(IDispatchVtbl) { fn new( // creates a new .xls/.xlsx file with the name (filename or filepath) passed in parameter. excelfilename : LPCWSTR, workbook : *mut *mut IXlsWorkbook, ) -> HRESULT,
(...)
RIDL!{#[uuid(0x12B7B224,0xC026,0x4eb6,0xBA,0x94,0xC4,0x9B,0x91,0x6F,0x77,0x40)] interface IXlsWorkbook(IXlsWorkbookVtbl): IDispatch(IDispatchVtbl) { fn addworksheet( // creates a new worksheet with the name passed in parameter. The following characters are forbidden : / \\ : * [ ], and the name must be less than 32 characters long. name : LPCWSTR, worksheet : *mut *mut IXlsWorksheet, ) -> HRESULT,
(...)
RIDL!{#[uuid(0xB150D9DA,0x1F10,0x4850,0x9A,0xBB,0x76,0xD9,0x95,0x47,0x96,0xEE)] interface IXlsWorksheet(IXlsWorksheetVtbl): IDispatch(IDispatchVtbl) { fn put_label( // puts a label in a cell. row : i32, col : i32, label : LPCWSTR, ) -> HRESULT,
|  |  | Posted on 17-April-2021 18:37 | Category: xlsgen, Excel generator | comment[0] | trackback[0] Build 4.9.0.6 of xlsgen fixes another problem related to relative cells and inserting/deleting rows and columns. This time the problem could corrupt the Excel file without producing an error message, and was related to rebuilding internal shared formulas.
|  |  | Posted on 07-April-2021 19:27 | Category: xlsgen, Excel generator | comment[0] | trackback[0] Si le vaccin Astra Zeneca pose autant de problèmes, c'est qu'on oublie un peu vite que son homologation a été "en urgence" (en anglais fast-track), ce qui permet à un vaccin candidat n'ayant pas garanti de toutes ses caractéristiques d'être utilisé en urgence. Dès lors, ceux qui sont vacciné avec ce candidat sont des cobayes. Techniquement il faudrait attendre que les essais sont menés à leur terme puis que la phase d'analyse soit faite. Mais on préfère prendre des risques, et casser par la même la sainte religion du vaccin qui ne perturbe pas la santé d'une personne en bonne santé.
|  |  | Posted on 30-March-2021 15:18 | Category: France | comment[0] | trackback[0] Build 4.9.0.5 of xlsgen fixes a problem related to manipulating rows/columns with formulas using partially relative rows or columns, such as R$170 (R is relative as a column, 170 is an absolute reference due to the presence of the $ prefix). Inserting, deleting rows or columns would corrupt such formulas. There was no problem with cell references either not relative at all (for instance $A$5), or both relative for rows and columns (for instance A5).
|  |  | Posted on 24-March-2021 18:22 | Category: xlsgen, Excel generator | comment[0] | trackback[0] Aujourd'hui les réseaux sociaux sont synonymes de censure. Et de censure privée au nom du bien. C'est une horreur.
La censure doit être le fait non de celui qui est propriétaire des tuyaux, mais de celui qui ne veut pas être importuné, bref de l'individu. Si l'individu veut pouvoir ne pas voir le contenu qui concerne une personne, un groupe de personnes, un sujet, un raisonnement, voire pourquoi pas des combinaisons de mots, grand bien lui fasse, et la plateforme doit lui fournir ces outils à titre individuel mais sans jamais interférer sur les souhaits de l'individu.
C'est ça une plateforme qui protège la liberté d'expression. L'équivalent de tuyaux dans lesquels circule le courant électrique, l'eau, le gaz, ...
Aujourd'hui ce que nous avons c'est le propriétaire des tuyaux qui, au nom du bien, bien défini par des minorités actives, qui a droit à ce qui circule dans les tuyaux. C'est arbitraire et ça donne un pouvoir exhorbitant à ces minorités actives. Bref ça leur donne le pouvoir, à ces minorités actives, de décider qui a le droit de voir et d'entendre quoi.
L'informatique a une solution contre ce manque flagrant de liberté d'expression. Mettons là en oeuvre et refusons l'informatique centralisée.
|  |  | Posted on 17-March-2021 12:13 | Category: France | comment[0] | trackback[0] <-- previous page
|
Products I distribute :
 xlsgen - native Excel generator
 Excel formatting style reduction tool
 search tool for Excel/Word
 wz - Encrypt/Decrypt tool. Free speech at its best.
 Grilles flash loto euromillions eurodreams
This site Home Articles
DevTools
CPU-Z
EditPlus
ExplorerXP
Kill.exe
OllyDbg
DependencyWalker
Process Explorer
autoruns.exe
Araxis
COM Trace injection
CodeStats
NetBrute
FileMon/Regmon
BoundsChecker
AQTime profiler
Source monitor
GDI leaks tracking
Rootkit revealer
Rootkit removal
RunAsLimitedUser(1)
RunAsLimitedUser(2)
Liens
Le Plan B
Un jour à Paris
Meneame
Rezo.net (aggr)
Reseau voltaire
Cuba solidarity project
Le grand soir
L'autre journal
Le courrier suisse
L'Orient, le jour
Agoravox (aggr)
|