Thin round T8 Mini, T8, T8 Pro smart watch 2024 trio, review of early version.

The original T8 is being replaced by a new trio of a 7.5% narrower T8 Mini, a T8 and a T8 Pro with speaker and mics for BT-calls.

These are ad renderings images of the T8 Mini and Pro where I scaled the dial by 87% resp. 92% to get the actual display to case ratio(!!), and scaled them too correct relative case size

 

Like the T8original post, this is likely to be an ongoing project for a while.

Latest updates: 2024-06-29, Release versions (and DA09).

Continue reading “Thin round T8 Mini, T8, T8 Pro smart watch 2024 trio, review of early version.”

A really THIN 6 weeks Smart watch, “T8”, (And “R18”)

(here with a loop band)

Merely 7.8mm thick (6.9 excluding small protrusion, and down to 4.0mm at the edge), AMOLED with AOD.

By far the most wearable smart watch I’d ever seen!!

ADD 20240405: I got an upcoming narrower T8 Mini. that is part of a trio replacing the original T8, see review here.

UPDATE: I have revised this thread to include the various updates from the over a year I have used it.

Currently at $25 including shipping…. Even better stamina than expected, six weeks! (less nine hours)
(This post is an ongoing project, the last change was 20240409 on 12% different weight between 1.00_24 and 1.00_23 )

Continue reading “A really THIN 6 weeks Smart watch, “T8”, (And “R18”)”

E600, E500, E400 Cheap ECG smartwatches w. breast strap

I bought this cheap E600 smart watch out of curiosity of what a breast strap mount can do.

And it is certainly better than I expected for the price, though not without its flaws!

UPDATE: The first unit is broken after just six weeks, refusing to charge!!
UPDATE II The E400 is broken with same failure, bought a E420, and adjusted a bit on that.

Continue reading “E600, E500, E400 Cheap ECG smartwatches w. breast strap”

The EASY way to make a .Net 8.0 WinForms app per monitor DPI aware

As posted in a rather old post, many apps have problems with windows scaling.

See these screen-dumps from Windows lengthy guide that was found here

With previous versions of .Net Framework this have been somewhat cumbersome, see my post here.

But with .Net 8.0 WinForms (well also 7.0 and 6.0), and Windows 11 (or newer 10), it is now fairly simple, as long as you follow a few rules, that can be relatively easy applied copying existing Framework projects. I experimented with VS 17.8 on Win 11 23H2.

Continue reading “The EASY way to make a .Net 8.0 WinForms app per monitor DPI aware”

Numeric facts on fractions, that few are aware of.

Assume a fraction k/m, with 0≤k≤m and look at its digits written out

  1. The fraction has a finite number of digits (less m) OR is a repeated sequence with at the most m-1 digits per group
  2. A repeated sequence will have at the most n-1 zeroes next to each other, if the number m is below 10ⁿ
  3. Interesting digit-structure of the sequence times m, with many 9’s (base minus 1) .

Continue reading “Numeric facts on fractions, that few are aware of.”

Cheap smart watches from AliExpress, primarily round, late 2022 and 2023

Ordered some cheap (<£40) smart watches from AliExpress in the late fall of 2022. and 2023.

First I was surprised that it was even possible to get smart watches in decent sizes, though we do not see them ‘in the west’.

Many, but not all, I bought were crap, here a collage of the crappy ones:

Continue reading “Cheap smart watches from AliExpress, primarily round, late 2022 and 2023”

Xiaomi Smart Band 7 Pro vs Huawei Band 7(/6)

Xiaomi Smart Band Pro 7 has a larger display in roughly same size case and is MUCH more expensive than Huawei Band 7. Adds a few extra features, and has bad band attachment.


(updated on the inferior software and DST a week later – and again a week later after a factory reset…)

Continue reading “Xiaomi Smart Band 7 Pro vs Huawei Band 7(/6)”

Automower 435X AWD, Husqvarna, review.

This Automower 435X AWD is an upgrade from my 330X, See review here.

Overall: 9/10. Hardware: Fine. Software: Improved, still unpolished!

This is both a continuation of the previous Automowers and a fundamentally different approach

Initial review 2019-08-06.

Review updates:
2020-04-29
, Some stuff are fixed with newer firmware.

2020-08-05 This review has evolved over time from an early review, with several updates, so bare with me, that things are not in a straight chronological line…

2020-09-05 Updated with new stuck-bug

2020-11-01 Updated with more elegant stop-protector

2021-04-28 Updated on serious bug during winter-storage.

2021-05-17 Updated after change of rear motors.

2022-05-01 Updated after new software.
(added lawn sketch)

2022-06-10 Updated after new mapping finally finished.

2022-06-28 Workaround to ignore the uselessly incorrect  GPS-map!!!

2022-07-16 Reset and dirt under jog-wheel

2022-10-14 Finally got it back, after long repair of trifle.

 

Continue reading “Automower 435X AWD, Husqvarna, review.”

Partition backup, unlocked Android phones, through Recovery.

Have you ever wanted to backup entire partitions of your Android phone?
Well it actually is quite easy for an unlocked device – Does NOT need to be rooted.
ADD: This requires the presence of a recovery boot option! E.g. from LineageOS

(The above image is ‘borrowed’ from here)

Continue reading “Partition backup, unlocked Android phones, through Recovery.”

Diagonal to width, simple fractions. Different aspect ratios

Obviously it is easy to calculate the diagonal of e.g. a sensor from the width and height with Pythagoras.
And a bit more tedious the other way round using the aspect ratio. [*]
But for common aspect ratios it is even simpler, 1+1/n fractions within less than 0.4%

Continue reading “Diagonal to width, simple fractions. Different aspect ratios”

The EASY way to make a C# Windows.forms app really per monitor DPI aware

For .Net 8.0 WinForms apps go HERE (Also 7.0 and 6.0)

The below is for .Net Framework, latest being 4.8.

As posted in another post, many apps have problems with windows scaling.

See these screen-dumps from Windows lengthy guide that was found here

UPDATE 2020. After Windows “Creators update”, they made things slightly more complicated, sorry…

Here is a reasonably minimalistic approach. You will often just need code like this:

    public partial class Form1 : Form {
         public Form1() {
             InitializeComponent();
             DPI_Per_Monitor.TryEnableDPIAware(this, SetUserFonts);
         }
         void SetUserFonts(float scaleFactorX, float scaleFactorY) {
            var OldFont = Font;
            Font = new Font(OldFont.FontFamily, 11f * scaleFactorX, OldFont.Style, GraphicsUnit.Pixel);
            Refresh();
            OldFont.Dispose();
         }
         protected override void DefWndProc(ref Message m) {
             DPI_Per_Monitor.Check_WM_DPICHANGED(SetUserFonts,m, this.Handle);
             base.DefWndProc(ref m);
         }
     }

You will need to obey a few rules, but often it can be implemented in existing code in minutes!

Continue reading “The EASY way to make a C# Windows.forms app really per monitor DPI aware”

Cases/shells for the Pro1, DIY experiments

There are no official case(s) for the FxTec Pro1, so I have ordered over a score of cases/shells for various phones of dimensions close the keyboard part…

Ten have arrived, nine Nov 13., and here are the preliminary results, and a flip case fitted

Add Nov 21, two more have arrived, for Huawei P20  Pro and Note 7

Add Dec 28, two more have arrived a week ago, Flip cases for Huawei P20  Pro and they are better (the above image)

Add Jan 23, a little more on a P20 Pro flip, reverting the inner part

Add Apr 1, a better shell case with strengthened corners.

Add Aug 6, a protector for the top half – disabling edge interaction

(Will update if any of the remaining ones proves a better fit)

Continue reading “Cases/shells for the Pro1, DIY experiments”

Save and restore positions of windows, WindowsPosSaveNRestore

WindowsPosSaveNRestore is a tool to save the position of windows for later restore

This is primarily useful if you frequently change display configuration, say add/remove external monitor(s) e.g. by docking, or turning a device with autorotate active.

Windows also has the bug that it sometimes cram all open windows (and icons [+]) on the primary screen on sleep.

Continue reading “Save and restore positions of windows, WindowsPosSaveNRestore”

A little post on keyboard phones, and the few alternatives available

Since BlackBerry-phones are now seeming to come to a complete end (not even licensed devices), the options for keyboard phones are even more sparse.

I guess no one reading the blog is unaware that I go for the Pro1.

But in all fairness there are alternatives.

2020-04-12 Updated with the Astroslide announced for spring 2021.

Continue reading “A little post on keyboard phones, and the few alternatives available”

Easy inexpensive chemical free fix for smelly microfibre cloths

Microfibre cloths are nice, but get sour and smelly, even after a machine wash. (same goes for or any other plastic cloths)

They usually smell fine directly from the machine, but soon after they get wet they stink again…

This is easily fixed by a microwave oven!

Continue reading “Easy inexpensive chemical free fix for smelly microfibre cloths”

Windows oddity: Schtasks.exe falsely reported error. Workaround.

If you run a command like this it works fine to any remote machine

    schtasks.exe /query /s SomePC /U MyAccount /P XXXXX

If you try to let it point back to your own machine you get an error-message

    ERROR: User credentials are not allowed on the local machine.

BUT this is actually FALSE!!! I found a workaround though..

Continue reading “Windows oddity: Schtasks.exe falsely reported error. Workaround.”

BlackBerry Priv, Almost EIGHT days stamina, no tricks, though light usage.

I have previously contradicted the claim that the BB Priv has a poor stamina, but here an even longer run.

This is a collage to contain the almost eight days  (7d 20h), as the 3C Battery Monitor app can only show five days.

Continue reading “BlackBerry Priv, Almost EIGHT days stamina, no tricks, though light usage.”

C# Set volume example

It took me quite some digging to find a clean way to set the standard default volume without external libs. So here the result.

If you do not want the console output, remove the writeline, and change the project from Console to Windows App.

I suggest using it as a Scheduled Task triggered by connect to user session and/or similar.

It is composed of a couple of bits and pieces combined/reduced primarily from these three.

https://stackoverflow.com/questions/31928429

https://stackoverflow.com/questions/36625576

https://social.msdn.microsoft.com/Forums/expression/en-US/90c6405d-44f6-48ce-82aa-c48a9b09dfb4

using System;
using System.Runtime.InteropServices;

namespace SetAudioLevel {
    class Program {

        [ComImport]
        [Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        private interface IMMDeviceEnumerator {
            void _VtblGap1_1();
            int GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice ppDevice);
        }
        private static class MMDeviceEnumeratorFactory {
            public static IMMDeviceEnumerator CreateInstance() {
                return (IMMDeviceEnumerator)Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("BCDE0395-E52F-467C-8E3D-C4579291692E"))); // a MMDeviceEnumerator
            }
        }
        [Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        private interface IMMDevice {
            int Activate([MarshalAs(UnmanagedType.LPStruct)] Guid iid, int dwClsCtx, IntPtr pActivationParams, [MarshalAs(UnmanagedType.IUnknown)] out object ppInterface);
        }

        [Guid("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        public interface IAudioEndpointVolume
        {
            //virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE RegisterControlChangeNotify(/* [in] */__in IAudioEndpointVolumeCallback *pNotify) = 0;
            int RegisterControlChangeNotify(IntPtr pNotify);
            //virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE UnregisterControlChangeNotify(/* [in] */ __in IAudioEndpointVolumeCallback *pNotify) = 0;
            int UnregisterControlChangeNotify(IntPtr pNotify);
            //virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelCount(/* [out] */ __out UINT *pnChannelCount) = 0;
            int GetChannelCount(ref uint pnChannelCount);
            //virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMasterVolumeLevel( /* [in] */ __in float fLevelDB,/* [unique][in] */ LPCGUID pguidEventContext) = 0;
            int SetMasterVolumeLevel(float fLevelDB, Guid pguidEventContext);
            //virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMasterVolumeLevelScalar( /* [in] */ __in float fLevel,/* [unique][in] */ LPCGUID pguidEventContext) = 0;
            int SetMasterVolumeLevelScalar(float fLevel, Guid pguidEventContext);
            //virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMasterVolumeLevel(/* [out] */ __out float *pfLevelDB) = 0;
            int GetMasterVolumeLevel(ref float pfLevelDB);
            //virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMasterVolumeLevelScalar( /* [out] */ __out float *pfLevel) = 0;
            int GetMasterVolumeLevelScalar(ref float pfLevel);
        }

        static void Main(string[] args) {
            int Level = 20;
            if (args.Length == 1) { int.TryParse(args[0], out Level); }

            try {
                IMMDeviceEnumerator deviceEnumerator = MMDeviceEnumeratorFactory.CreateInstance();
                IMMDevice speakers;
                const int eRender = 0;
                const int eMultimedia = 1;
                deviceEnumerator.GetDefaultAudioEndpoint(eRender, eMultimedia, out speakers);

                object aepv_obj;
                speakers.Activate(typeof(IAudioEndpointVolume).GUID, 0, IntPtr.Zero, out aepv_obj);
                IAudioEndpointVolume aepv = (IAudioEndpointVolume)aepv_obj;
                Guid ZeroGuid = new Guid();
                int res = aepv.SetMasterVolumeLevelScalar(Level / 100f, ZeroGuid);

                Console.WriteLine($"Audio set for {Level}%");
                //Console.Beep();
            } catch (Exception ex) { Console.WriteLine($"**Could not set audio level** {ex.Message}"); }
        }
    }
}

.

BlackBerry Priv, 5¼days stamina, no tricks. Display on 50m/day

The BB Priv has a pretty nice stamina, if it is not too infested with bloat (mine is debloated).

Though some complains that a 3410 mAh battery is too small for a phablet with a 5.4″ QFHD display, it is enough for me.

5¼ days on 96% battery

This is with no trickery of radios off or similar. 4G, WiFi, NFC all turned on. GPS off though. ADD: BT off too.

Continue reading “BlackBerry Priv, 5¼days stamina, no tricks. Display on 50m/day”

Android vs WPD bug. Wrong filesizes reported

I stumbled upon a strange bug in what Android can report to e.g. Windows trough the MTP/WPD interface.

Under some circumstances it reports a VERY wrong file size, but if you by WPD open a stream and copy the file until it sends no more bytes, it returns the correct full content.

Continue reading “Android vs WPD bug. Wrong filesizes reported”

Get new/changed files from WPD-device, e.g. Android. Enhanced version of Christophe Geers’ PortableDevices

I stumbled upon this nice project by Christophe Geers.

And edited and enhanced it to a tool that works a bit like an advanced REPLACE /UPDATE  to a tree on the PC based on the name of the device and the drives it exposes.

It is an efficient way to get changed & new files from a device to a PC.

Update: Now supports Exclude also.

It works with a WPD connected device, e.g. an Android device USB-connected in MTP or PTP mode.

Here an example of some of the tree generated

Most backup tools does NOT allow you to do an incremental backup, but they DO allow you to deselect e.g. images. So use this tool to do the incremental backup of the huge WPD-exposed stuff like the images/videos/music, and let your backup tool do backups of all the rest – and in more finite time than a total backup of everything every time – thus making it a bliss to take backups much more often….

Continue reading “Get new/changed files from WPD-device, e.g. Android. Enhanced version of Christophe Geers’ PortableDevices”

Displaying images. Colour management, sRGB and ICC. And when something fails.

Update This post started as description of a problem with displaying some files in FireFox and Chrome, but has been transformed to a more general post about sRGB, ICC, CMS and what happens if the browser gets it wrong…

It all started when I detected that most colours in some web-files got severely distorted when displayed in FireFox and Chrome on my system. Both JPG and PNG files were affected

colourchart_1_2_cmp

If you see the first one of these two squares blue_1 and blue_1_removed_srgb substantially different from the second clear blue, your CMS system have similar issues…
The first one is supposed to be a standard blue, the second is blue LEDs on your monitor only.

Continue reading “Displaying images. Colour management, sRGB and ICC. And when something fails.”

Blackberry Priv – Bought one after all… (post is likely to become a sort of review)

blackberry-priv-overview[1]

Well I bought one after all, as it was available including customs and delivery for roughly $400 to Denmark.

The keys ARE tiny, and the device HUGE but I think I might end up finding it a lesser bad compromise that an Iphone+keyboard-case.

Continue reading “Blackberry Priv – Bought one after all… (post is likely to become a sort of review)”

Working with numbers in Q with large nominator/denominator in C#

A nerdy idea:

A C# class that quicly can supply a lot of primes (here limited to about the largest prime about 50G – as arrays with over 2G entries are not currently supported without splitting the arrays)

A struct that supports basic arithmetic for large accurately represented numbers in Q,  by factorization into primes.

A test program that tries to find solutions for a!b!=c! with 1<a<b<c

Continue reading “Working with numbers in Q with large nominator/denominator in C#”