I needed a quick (DIY) solution to create a hot plate (a.k.a. Screen Repair Separator Machine Heating Plate) for repairing the screen of my wifes mobile phone. It is a cheap phone so I needed a cheap solution to create hot plate alternative.
After staring at the kitchen oven (too hot, even on the lowest setting), I got this brief mental lapse… What about a take-out (Dutch Chinees food) container filled to the top with hot water.
It is easy to control the temperature, by mixing 100 degrees kettle water with tap water (assumed to be ambient temperature): 1 part 100 degrees + 1 parts 20 degrees: (100+20) / 2 = 60 degrees 2 parts 100 degrees + 1 part 20 degrees: (100+100+20) / 3 = 73 degrees
Shucking a hard drive is the practice of removing a hard drive from it’s (external) USB exclose. This may sound like a stupid thing to do, but this can save you some money (150 euro vs 220 euro) 🤑
The scary side of shucking is that you never really know what you will get, it is a little like a surprise egg for nerds. This time we got lucky, the WD80EMAZ is actually a helium filled HGST Ultrastar, modified to run at 5400 RPM (instead of 7200 RPM).
The shucked drive ( WD80EMAZ ) runs 5-6 degrees cooler than my original 8TB WD Red drives (WD80EFAX) 😎
Hard drive temperatures WD80EFAX (8TB WD Red) vs WD80EMAZ (Shunked 8TB WD Elements).
Update: I have multiple shucked drives in use WD80EMAZ (WD Elements with the blue text on the box) and WD80EDAZ (WD Elements with the orange text on the box). All drives have 256MB cache and are running without issues in a Synology NAS. The WD80EDAZ drives will run a lot hotter 😐
A BUG in SharpDX.XInput ci-ci217, resulting in issues with the left Thumb Stick, Left Trigger, and Right Trigger!Please stick to SharpDX.XInput v4.1.0-ci184 for now.
using System;
using Com.Okmer.GameController;
namespace XBoxSampleConsole
{
classProgram
{
staticvoid Main(string[] args)
{
XBoxController controller = newXBoxController();
Console.WriteLine("XBox 360 Controller (Press ENTER to exit...)");
//Connection
controller.Connection.ValueChanged += (s, e) => Console.WriteLine($"Connection state: {e.Value}");
//Battery
controller.Battery.ValueChanged += (s, e) => Console.WriteLine($"Battery level: {e.Value}");
//Buttons A, B, X, Y
controller.A.ValueChanged += (s, e) => Console.WriteLine($"A state: {e.Value}");
controller.B.ValueChanged += (s, e) => Console.WriteLine($"B state: {e.Value}");
controller.X.ValueChanged += (s, e) => Console.WriteLine($"X state: {e.Value}");
controller.Y.ValueChanged += (s, e) => Console.WriteLine($"Y state: {e.Value}");
//Buttons Start, Back
controller.Start.ValueChanged += (s, e) => Console.WriteLine($"Start state: {e.Value}");
controller.Back.ValueChanged += (s, e) => Console.WriteLine($"Back state: {e.Value}");
//Buttons D-Pad Up, Down, Left, Right
controller.Up.ValueChanged += (s, e) => Console.WriteLine($"Up state: {e.Value}");
controller.Down.ValueChanged += (s, e) => Console.WriteLine($"Down state: {e.Value}");
controller.Left.ValueChanged += (s, e) => Console.WriteLine($"Left state: {e.Value}");
controller.Right.ValueChanged += (s, e) => Console.WriteLine($"Right state: {e.Value}");
//Buttons Shoulder Left, Right
controller.LeftShoulder.ValueChanged += (s, e) => Console.WriteLine($"Left shoulder state: {e.Value}");
controller.RightShoulder.ValueChanged += (s, e) => Console.WriteLine($"Right shoulder state: {e.Value}");
//Buttons Thumb Left, Right
controller.LeftThumbclick.ValueChanged += (s, e) => Console.WriteLine($"Left thumb state: {e.Value}");
controller.RightThumbclick.ValueChanged += (s, e) => Console.WriteLine($"Right thumb state: {e.Value}");
//Trigger Position Left, Right
controller.LeftTrigger.ValueChanged += (s, e) => Console.WriteLine($"Left trigger position: {e.Value}");
controller.RightTrigger.ValueChanged += (s, e) => Console.WriteLine($"Right trigger position: {e.Value}");
//Thumb Positions Left, Right
controller.LeftThumbstick.ValueChanged += (s, e) => Console.WriteLine($"Left thumb X: {e.Value.X}, Y: {e.Value.Y}");
controller.RightThumbstick.ValueChanged += (s, e) => Console.WriteLine($"Right thumb X: {e.Value.X}, Y: {e.Value.Y}");
//Rumble Left, Right
controller.LeftRumble.ValueChanged += (s, e) => Console.WriteLine($"Left rumble speed: {e.Value}");
controller.RightRumble.ValueChanged += (s, e) => Console.WriteLine($"Right rumble speed: {e.Value}");
//Rumble 0.25f speed for 500 milliseconds when the A or B button is pushed
controller.A.ValueChanged += (s, e) => controller.LeftRumble.Rumble(0.25f, 500);
controller.B.ValueChanged += (s, e) => controller.RightRumble.Rumble(0.25f, 500);
//Rumble at 1.0f speed for 1000 milliseconds when the X or Y button is pushed
controller.X.ValueChanged += (s, e) => controller.LeftRumble.Rumble(1.0f, 1000);
controller.Y.ValueChanged += (s, e) => controller.RightRumble.Rumble(1.0f, 1000);
//Rumble at the speed of the trigger position
controller.LeftTrigger.ValueChanged += (s, e) => controller.LeftRumble.Rumble(e.Value);
controller.RightTrigger.ValueChanged += (s, e) => controller.RightRumble.Rumble(e.Value);
//Wait on ENTER to exit...Console.ReadLine();
}
}
}
A little “fun” Qt5 console application to create a directory (a.k.a. folder) ending with a space character (” “). This directory can not be removed with standard Windows tools, including most console applications.
This little (cross-platform) executable compression tool Ultimate Packer for eXecutables (UPX) can greatly reduce the size of (static build) executables. The executable filesize will be reduced to the size of a ZIP file containing the same executable.
The tool is very easy to use, just drag-and-drop your executable onto the upx.exe to use the default (fast) compression option of the tool, or type “upx <filename>” in the command-line. Adding the (much slower) “–utra-brute” command-line argument will reduce the filesize even further.
A static build Qt5.1.1 MinGW compiled application with a filesize of 12.972.032 bytes (12.3MB):
DEFAULT: 12.972.032 bytes (12.3MB) is reduced to 5.218.816 bytes (4.97 MB) using the (fast) default settings.
ULTRA-BRUTE: 12.972.032 bytes (12.3MB) is reduced to 4.488.704 bytes (4.28 MB) using the (much slower) “–ultra-brute” argument.
Modified the CPU cooler of my ASRock ION 330 by shortening a number of the CPU cooler fins, to make space for a small 40mm fan (Noiseblocker BlackSilent XM-1).