Press SHIFT to disable caps lock

When typing, it’s always disconcerting to realize THAT CAPS LOCK IS ON. Caps Lock is useful (sometimes), but more often than not I find myself accidentally engaging it. However, you can change things around in your preferred OS (this guide is for Windows) to allow disabling Caps Lock with Shift. This simple setting changes things for the better, and makes more logical sense.

We’ve Been Doing It Wrong

The logical argument for disabling Caps Lock with Shift boils down to states, and being aware of the key’s current state with the least amount of information possible.

If Caps Lock is a toggle, it’s possible to accidentally hit the key an unknown number of times, or lose track of whether it’s on or off. In order to discover the ‘state’ of the key, you must begin typing. The other way to discover the ‘state’ would be to glance down at your keys, or have some other sort of ‘indicator’ like a keyboard implements visually or graphically. Both of these are wasted efforts and time.

When typing, you shouldn’t look at the keys as much as possible. The cleaner way to handle our problem then is to make Shift disable Caps Lock. When you start typing your sentence, if caps lock is on, it’s naturally disabled. It works naturally with how you type and I no longer encountered any errors with Caps Lock at all upon integrating this. When you need to use it, turn it on. Then, go back to typing as before. It’s no longer a separate mechanism to keep track of, but integrated into the typing experience and bows out quickly after usage without any extra key press. As an added bonus, you don’t have to wonder if Caps Lock is ON either. You simply click it, and type. If it was on, no effect!

To learn how to enable this glorious setting, just read on. Or, if you’re using Linux, this will get that Google search (or DuckDuckGo) started for you. 🙂

Windows 10

  1. Visit Settings > Typing > Advanced keyboard settings
  2. Then find Input language hot keys
  3. From there you will see the very last image’s menu

Windows 11

  1. Navigate to Time and Language > Typing > Advanced keyboard settings
  2. Find Input language hot keys
  3. You will see the very last image’s menu

You will then want to change this option:

Now I can’t go back, and I never wonder or think about caps lock accidentally being on. Been using this as default for around five years now. It surprises me this isn’t the de facto setting.


It helps me if you share this post with anyone who might be interested.
Quick Links to My Stuff

Published 2022-08-19 07:05:33

Carbon Coding Language: Google’s Experimental Successor to C++

On July 19th 2022, Google introduced Carbon Language. What exactly is Carbon, and what does it aim to achieve? Note that the Carbon coding language is experimental.

To understand Carbon, we first need to take a look at the language it’s attempting to augment. That is, C++. It remains the dominant programming language for performance critical software, and has been a stable foundation for massive codebases. However, improving C++ is extremely difficult. This is due to a few reasons:

  • Decades of technical debt
  • Prioritizing backwards compatibility over new features
  • C++, ideally, is about standardization rather than design

Carbon, as Google puts it, is okay with “exploring significant backwards incompatible changes”. This has pros for those wanting to work with a language developing with the mindset of “move fast and break things”.

Carbon promises a few things in their readme:

Carbon is fundamentally a successor language approach, rather than an attempt to incrementally evolve C++. It is designed around interoperability with C++ as well as large-scale adoption and migration for existing C++ codebases and developers. A successor language for C++ requires:

  • Performance matching C++, an essential property for our developers.
  • Seamless, bidirectional interoperability with C++, such that a library anywhere in an existing C++ stack can adopt Carbon without porting the rest.
  • A gentle learning curve with reasonable familiarity for C++ developers.
  • Comparable expressivity and support for existing software’s design and architecture.
  • Scalable migration, with some level of source-to-source translation for idiomatic C++ code.

Google wants Carbon to fill an analogous role for C++ in the future, much like TypeScript or Kotlin does for their respective languages.

JavaScript → TypeScript
Java → Kotlin
C++ → Carbon?

Talk is cheap, show me the code

Okay, so what does Carbon look like then?

First, let’s see how to calculate the area of a circle in C++.

// C++ Code
#include <math.h>
#include <iostream>
#include <span>
#include <vector>

struct Circle {
  float r;
};

void PrintTotalArea(std::span<Circle> circles){
  float area = 0;
  for (const Circle& c : circles) {
    area += M_PI * c.r * c.r;
  }
}

auto main(int argc, char** argv) -> {
  std::vector<Circle> circles = {{1.0}, {2.0}};
  // Converts 'vector' to 'span' implicitly
  PrintTotalArea(circles);
  return 0;
}
C++ coding example

Compared to Carbon:

// Carbon Code
package Geometry api;
import Math;

class Circle {
  var r: f32;
};

fn PrintTotalArea(circles: Slice(Circle)) {
  var area: f32 = 0;
  for (c: Circle in circles) {
    area += Math.Pi * c.r * c.r;
  }
}

fn Main() -> i32 {
  // Array like vector
  var circles: Array(Circle) = ({.r = 1.0}, {.r = 2.0});
  
  // Array to slice implicitly 
  PrintTotalArea(circles);
  return 0;
}
Carbon coding example

My initial thoughts are that the syntax looks mixed between C#, JavaScript, and C++. Prepending “var” before each variable seems redundant. Why not a type name followed by a declaration? One might argue that it leads to easy variable identification without memorization of variable types but that makes little sense as you put the type anyway. The way variables are initialized with “:” instead of =, reminds me of Javascript. Not sure if that’s a good thing, it looks less like C++ than I expected. Oddly, they chose “import” for the system packages it seems which is also shared with Python. I do like the shortening of function to fn. You could argue shorthand is the point because it’s cleaner and smaller, but again why is it defined as a function and then an ‘i32’? Seems redundant. unless they decided fn FunctionName() -> i32 is shorter than int FunctionName(). It could be their goal is simply to separate the syntax from other known languages enough to recognize at a glance. Maybe I’m missing something.

One neat feature they’ve shown is the interoperability between Carbon and C++. You can call C++ from Carbon and vice versa. You can rewrite or replace as little or as much of your libraries as you want without fear of breaking anything. Well, at least without breaking anything more than normal when dealing with C++.

// C++ code used in both Carbon and C++;
struct Circle ( float r; ); 
// Carbon exposing a function for C++:
package Geometry api; 
import Cpp library "circle.h";
import Math; 
fn PrintTotalArea(circles: Slice(Cpp.Circ/e)) {
    var area: f32 = 0;
    for (c: Cpp.Circle in circles) { 
        area += Math.Pi * c.r * c.r;
    } 
    Print("Total area: {0}", area); 
}
// C++ calling Carbon:
#include <vector>
auto main(int argc, char** argv) -> int { 
    std::vector<Circle> circles = {{1.0), (2.8)}}; 
    Geometry::PrintTotalArea(circles);
    return 0; 
}
C++ code used in both Carbon and C++

And better memory safety is also promised

Safety, and especially memory safety, remains a key challenge for C++ and something a successor language needs to address. Our initial priority and focus is on immediately addressing important, low-hanging fruit in the safety space:

  • Tracking uninitialized states better, increased enforcement of initialization, and systematically providing hardening against initialization bugs when desired.
  • Designing fundamental APIs and idioms to support dynamic bounds checks in debug and hardened builds.
  • Having a default debug build mode that is both cheaper and more comprehensive than existing C++ build modes even when combined with Address Sanitizer.

Time will tell if the language develops into a developer favorite or fades into obscurity like Dlang. What, you haven’t heard of D?


It helps me if you share this post with anyone who might be interested.
Quick Links to My Stuff

Published 2022-08-03 00:19:33

Realtime Priority: Ask and you will receive

At some point when looking through Task Manager you may notice the ‘priority’ setting in Task Manager and decide that you want your favorite game (example: Minecraft) to run faster. You right click the process in Task Manager and set the priority to ‘realtime’, the highest setting.
realtime priority preview

However, upon clicking that option, a scary looking dialogue option pops up informing you that this is probably a bad move.
realtime priority warning

Changing the priority in this instance causes our laptop mouse to lag across the screen and explorer.exe to stop responding. Fun! Why is this the case? What’s going on here?

Realtime priority is the absolute highest priority you can set a program. This tells Windows you want to dedicate as much CPU time as possible to that process, so basic process like mouse input and Windows UI start competing for CPU cycles.

Realtime is the highest process class

This doesn’t lead to locking the system entirely because most programs don’t actually use 100% of the CPU regardless of their priority. Most threads do wait for things sometimes, and that could include waiting for a read/write to complete, or some other thread to indicate that they don’t have to wait any more. Additionally, “real-time priority” as a term actually consists of a range of priorities, as indicated by the table above. It’s possible for one “real-time” process to have higher priorities than those of another “real-time” process.

Most of the time, there’s no real reason to change process priority, although a few times it has been personally helpful in situations where two programs are working on a CPU intensive task, and they are slowing each other down. It’s possible to set the program’s process priority to “Above normal” pretty safely, allowing the CPU to dedicate more time to it.


It helps me if you share this post with anyone who might be interested.
Quick Links to My Stuff

Published 2022-07-24 05:03:48

Undertale Mobile Native Android Build with Controller & Keyboard Support + Save Editor

What the heck?” I hear yourself asking.

“Is there even an android version of the game out?” No. 🙂

Undertale has been one of the most influential and one of my favorite games of all time. Since the game’s release in 2015 I’ve been entranced by its secrets and storyline. I played it blind when it first came out and have been hooked ever since.

I’ve been a part of a few different Undertale data mining communities over the years and although I admit there probably aren’t any secrets left, I’m still interested in any new theories or fan works/mods.

I came across a method to patch gamemaker files including Undertale to mobile, and then discovered there’s already been some work in the community into this area. I took the existing mobile Undertale modifications online and added full controller and keyboard support (note this build is Android only).

A SAVE EDITOR has also been added into the game. If you visit the SETTINGS menu from either the beginning of the game or the Continue menu, you can overwrite your save file with presets. Save file preset names are below, but THEY CONTAIN SPOILERS (if you haven’t somehow heard/played UNDERTALE already)

This along with the added Bluetooth controller support should make it bearable to play Undertale on mobile devices!

This build is for educational purposes and Undertale research only. Also, some stuff is broken right now. If you can’t get past “Begin game” or the game freezes, try going to the settings beforehand and loading a preset save file.

Download .APK v0.0.8 for ANDROID


It helps me if you share this post with anyone who might be interested.
Quick Links to My Stuff

Published 2022-06-17 07:39:00

Easiest way to download YouTube videos and convert them to any format including .mp3 in 2022

Methods of downloading YouTube videos have changed over the years. Here are two of my preferred methods for doing so in 2022.

tl;dr: easy:

Use a Youtube-Mp3 converter site, if you know how to Google then you’ve probably found one of these already.

tl;dr: is asked to fix printers:

Get the latest ‘youtube-dl’ fork like yt-dlp. Use ffmpeg to convert.


Easy

Yeah there’s really nothing else you need here

The Other Method

  1. Get yt-dlp. Put it in a folder somewhere in C:\ like ‘youtubedownload’. Rename the .exe file to yt.exe.
  2. Get ffmpeg. Put it in the same folder. You could rename this .exe file if you want as well, the names will be the commands used in the future.
  3. Press the WINDOWS key, and type ‘path’.
    (INCOMING WALL OF PICTURES)
  4. Choose ‘Enviroment Variables’
    enviroment variables pointer
  5. Then,
    edit path detailed pointer
  6. You can then add a new entry for the ‘path’ environment variable. The system uses this to allow the executing directory to be in any directory listed in the path. Meaning, when you run a command in CMD, the system will always check any directories in the ‘path’.
    add new path entry
  7. Click OK on all open windows after adding the directory the exes are in to the ‘path’.

Example Usage

We will be using this song from YouTube: Moving Romance – Yoann Garel. It’s also available on Soundcloud here.

Right click on your Desktop > ‘Open Command Window Here’. If you don’t have this option in the context menu, you can download these registry edits to add it.

Next type the name of the yt-dlp .exe followed by a space and the url. So if you renamed it ‘yt’ like stated previously, it would look like so:
yt https://www.youtube.com/watch?v=dIMdcJWOEFM
Hitting enter will start downloading that video to the desktop directory you just launched the CMD window in. (Hint! If you want to use a Soundcloud URL like we have below, that will work too! Isn’t technology great?)
yt-dl download example

If you want to convert the resulting video to a proper audio file like .mp3, you have two options. You can use the quick solution right from yt-dl:

yt -x --audio-format mp3 [video_url]

Or to download a playlist:

youtube-dl --extract-audio --audio-format mp3 -o "%(title)s.%(ext)s"

You can ignore missing (“unavailable in your country”, or removed) videos with an -i flag. If your playlist isn’t working and the URL contains v=<ID>, remove it so just the ?list= item is in the query string.


Or, since ffmpeg is useful for other tasks (and you should have it anyway), you can use it directly. A simple syntax of an ffmpeg command that would convert to an mp3 would look like ffmpeg -i [input file name] [output file name].[output file extension]. But wait, we don’t want to type that long, ugly file name in that yt-dlp just spit out onto our desktop… luckily we have a trick for that.

Run ‘dir /x‘ in the open CMD window.dir /x example yt
This is an extremely helpful windows command that will show ‘short’ filenames for files, making working with longer file names a breeze. Windows is telling us in the screenshot above that we can refer to the video we just downloaded as ‘moving~3.web’. Now assuming no renaming of the ffmpeg .exe took place in the setup step, our command simply becomes:

ffmpeg -i moving~3.web output.mp3
ffmpeg -i output.mp3 example

And you’re done! You now have ‘output.mp3’ on your desktop saved as the song we were just playing on YouTube. I’ve combined this process with scripted metadata adding/titling for an offline library. And, with the right yt-dlp commands it can even become an efficient way to export entire playlists of music.


It helps me if you share this post with anyone who might be interested.
Quick Links to My Stuff

Published 2022-03-06 02:23:43

Nothing is permanent… especially on the Internet

Link rot is a problem that affects everyone using the internet on a daily basis. This is when a link becomes dead and no longer links to where it’s supposed to because of site changes. Either the owner stopped maintaining and paying for the domain/hosting, the structure changed, or it was deleted or inaccessible for another reason. Nothing is permanent online (unless it’s your ad data 😉), regardless of what your parents may have said.

Research from Harvard Law School shows about a quarter of all articles on the New York Times suffer from link rot, meaning resources linked on the page are no longer accessible. Additionally, links are not immutable. I personally have links such as ‘https://l.gmr.dev/tiktok‘ that link to my TikTok blog post and that can be changed so I can always keep it up to date. This can be a disadvantage if the site goes offline or the link is mismanaged however.

The problem can be combated by using web archivers, and linking to primary, trusted sources as much as possible. Additionally, it’s helpful to copy + paste the information that’s relevant from the site you’re sharing/linking in case it dies somehow later on.

Factcheck.org, which launched in 2004 now has almost 6,000 dead links. Roughly one third of all the links on Pagella Politica, the Italian fact-checking website I edited before joining Poynter, are currently broken. At the same time, trying to manually keep tabs on the state of a site’s links is too time-consuming to be feasible.

cjr.org

The advent of ‘online-only’ services have marked a period full of slow, buggy, overly designed applications, such as Creative Cloud or Epic Games, that run at all times on your computer to feed you advertisements or update notifications. Engines like Unity have transitioned more and more of their editor services and features to online services. Or, they’ve deprecated more traditional methods that would eliminate the need to connect to “Unity Teams” and/or login to their accounts & manage organizations.

When Flash was purged from the internet a few years ago, one of the largest issues Flash archivers faced were games that required connections to servers. Because those servers are no longer around, a game’s functionality can be crippled or even completely broken without a solution. This can easily happen to any server in the future. A program’s functioning that exists on something that may not be there in the future… well, it makes relying on that utility poor planning at best. Many modern day software applications ship without any sort of offline mode or planned use case 20-30 years from now, so that will be interesting to see.

Photos, old posts, and media people thought would be around forever are constantly being deleted. Make any playlist on YouTube with a sizeable number of videos and soon enough a fair number of them will be unavailable. My music library exists entirely on my own servers streamed to me because I can’t trust that Spotify or an alternative will be around in 20 years with the same music I listen to or want to stream now.

Jailbreaking iOS is an increasingly difficult task, and I switched to Android away from Apple’s walled garden a few years ago, but even now most companies are locking it down more and more in the name of security and the common user experience. Samsung removes the ability to unlock the bootloader in most US variants of their new models, so rooting Android is out of the question for me as well.

A bit rambly, but I don’t think there’s much to do about this other than being personally careful about what technologies I enable and what I work on. I’m simply commenting on the current direction of the Internet as a whole because I want the best for it. I’ve become more and more aware of how fragile the current state of everything online is, and began saving and archiving everything preemptively.

Voting with your money and just being aware is probably the best move, and I’ve personally been more and more selective about digital media or programs I’m choosing to spend time, data, energy and finances on.


It helps me if you share this post with anyone who might be interested.
Quick Links to My Stuff

Published 2022-02-15 04:01:27

Small MedTracker Project

Many years ago I created a small app to help me remember whether or not I had taken my medications for the day, so I never took them twice and could be reminded at designated times. I slapped a button and a counter on the screen, made it track the last taken date and display a clock, and that was it. It looked terrible, but it worked, and I was planning on making it look better. However, I tested the concept app for a day or two and that test turned into full time usage. I never updated it or uninstalled the dev copy that I was testing with. If it works, don’t fix it, right?

Recently I decided I was tired of it looking terrible and since I’d been wanting an excuse to use React Native again I decided to remake it.

Here’s the original:

😳 but in my defense this was the first and only ever build

Here’s the updated copy with a UI I spent slightly more than 30 seconds on.

has random quotes that change from a few different APIs
pretty simple but much needed attention!

The app isn’t distributed, just something I updated personally for myself, as the app helps me a lot and has become a part of my routine.

🙂


It helps me if you share this post with anyone who might be interested.
Quick Links to My Stuff

Published 2022-01-27 10:31:14