fixed dev dsi shop stuff

This commit is contained in:
IanSkinner1982 2022-08-25 19:21:44 -04:00
parent 43221ff4a3
commit 6af80cae64
352 changed files with 145938 additions and 118 deletions

View File

@ -0,0 +1 @@
I"¯{"source"=>"/home/rmc/Desktop/ianskinner1982.github.io", "destination"=>"/home/rmc/Desktop/ianskinner1982.github.io/_site", "collections_dir"=>"", "cache_dir"=>".jekyll-cache", "plugins_dir"=>"_plugins", "layouts_dir"=>"_layouts", "data_dir"=>"_data", "includes_dir"=>"_includes", "collections"=>{"posts"=>{"output"=>true, "permalink"=>"/:categories/:year/:month/:day/:title:output_ext"}}, "safe"=>false, "include"=>[".htaccess"], "exclude"=>[".sass-cache", ".jekyll-cache", "gemfiles", "Gemfile", "Gemfile.lock", "node_modules", "vendor/bundle/", "vendor/cache/", "vendor/gems/", "vendor/ruby/"], "keep_files"=>[".git", ".svn"], "encoding"=>"utf-8", "markdown_ext"=>"markdown,mkdown,mkdn,mkd,md", "strict_front_matter"=>false, "show_drafts"=>nil, "limit_posts"=>0, "future"=>false, "unpublished"=>false, "whitelist"=>[], "plugins"=>["jekyll-feed", "jekyll-sitemap", "jekyll-seo-tag"], "markdown"=>"kramdown", "highlighter"=>"rouge", "lsi"=>false, "excerpt_separator"=>"\n\n", "incremental"=>false, "detach"=>false, "port"=>"4000", "host"=>"127.0.0.1", "baseurl"=>nil, "show_dir_listing"=>false, "permalink"=>"date", "paginate_path"=>"/page:num", "timezone"=>nil, "quiet"=>false, "verbose"=>false, "defaults"=>[], "liquid"=>{"error_mode"=>"warn", "strict_filters"=>false, "strict_variables"=>false}, "kramdown"=>{"auto_ids"=>true, "toc_levels"=>[1, 2, 3, 4, 5, 6], "entity_output"=>"as_char", "smart_quotes"=>"lsquo,rsquo,ldquo,rdquo", "input"=>"GFM", "hard_wrap"=>false, "guess_lang"=>true, "footnote_nr"=>1, "show_warnings"=>false}, "name"=>"rmc's site", "title"=>"rmc's site", "url"=>"http://localhost:4000", "feed"=>{"posts_limit"=>20, "path"=>nil}, "livereload_port"=>35729, "serving"=>true, "watch"=>true}:ET

13
404.html Normal file
View File

@ -0,0 +1,13 @@
---
title: Error 404
layout: noinclude
permalink: /404.html
---
{% include nav.html %}
<div class="text-center" style="color: #fff;">
<h1>404</h1>
<h1>Not Found</h1>
<p><a href="javascript:window.history.back()">Previous page</a></p>
<p><a href="/">Home</a></p>
</div>

15
Gemfile Normal file
View File

@ -0,0 +1,15 @@
# frozen_string_literal: true
source "https://rubygems.org"
# gem "rails"
gem "jekyll", "~> 4.2"
group :jekyll_plugins do
gem 'jekyll-sitemap'
gem 'jekyll-feed'
gem 'jekyll-seo-tag'
end
gem "webrick", "~> 1.7"

79
Gemfile.lock Normal file
View File

@ -0,0 +1,79 @@
GEM
remote: https://rubygems.org/
specs:
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
colorator (1.1.0)
concurrent-ruby (1.1.9)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
eventmachine (1.2.7)
ffi (1.15.5)
forwardable-extended (2.6.0)
http_parser.rb (0.8.0)
i18n (1.9.1)
concurrent-ruby (~> 1.0)
jekyll (4.2.1)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (~> 2.0)
jekyll-watch (~> 2.0)
kramdown (~> 2.3)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
mercenary (~> 0.4.0)
pathutil (~> 0.9)
rouge (~> 3.0)
safe_yaml (~> 1.0)
terminal-table (~> 2.0)
jekyll-feed (0.16.0)
jekyll (>= 3.7, < 5.0)
jekyll-sass-converter (2.1.0)
sassc (> 2.0.1, < 3.0)
jekyll-seo-tag (2.7.1)
jekyll (>= 3.8, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
kramdown (2.3.1)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.3)
listen (3.7.1)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (4.0.6)
rb-fsevent (0.11.0)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.5)
rouge (3.27.0)
safe_yaml (1.0.5)
sassc (2.4.0)
ffi (~> 1.9)
terminal-table (2.0.0)
unicode-display_width (~> 1.1, >= 1.1.1)
unicode-display_width (1.8.0)
webrick (1.7.0)
PLATFORMS
universal-darwin-21
x86_64-linux
DEPENDENCIES
jekyll (~> 4.2)
jekyll-feed
jekyll-seo-tag
jekyll-sitemap
webrick (~> 1.7)
BUNDLED WITH
2.3.4

9
_config.yml Normal file
View File

@ -0,0 +1,9 @@
name: rmc's site
title: rmc's site
url: https://ianskinner1982.github.io
plugins:
- jekyll-feed
- jekyll-sitemap
- jekyll-seo-tag
feed:
posts_limit: 20

View File

@ -0,0 +1,12 @@
- name: csharpcollection
truename: CSharpCollection
icon: https://cdn.ncxprogramming.com/file/icon/csharpcollection.png
desc: A collection of C# things made with WPF.
- name: ncxcorelite
truename: NCX-Core-Lite
icon: https://cdn.ncxprogramming.com/file/icon/ncxcore.png
desc: The start of a cross-platform CLI/GUI program to install more programs.
- name: thevault
truename: theVault
icon: https://cdn.ncxprogramming.com/file/icon/placeholder.svg
desc: A collection of cross-platform C# console apps.

View File

@ -0,0 +1,20 @@
- name: ncxcore
truename: NCX-Core
icon: https://cdn.ncxprogramming.com/file/icon/ncxcore.png
desc: Our program to install more programs.
- name: rngtool
truename: RNGTool
icon: https://cdn.ncxprogramming.com/file/icon/rngtool.png
desc: A macOS/iOS app that generates random numbers.
- name: thevaultbasic
truename: theVaultBasic2.0
icon: https://cdn.ncxprogramming.com/file/icon/thevaultbasic.png
desc: A collection of C64 apps, similar to theVaultC.
- name: thevaultc
truename: theVaultC
icon: https://cdn.ncxprogramming.com/file/icon/thevaultc.png
desc: A collection of cross-platform C console apps.
- name: xware
truename: XWare
icon: https://cdn.ncxprogramming.com/file/icon/xware.png
desc: Our small programs that can be downloaded in NCX-Core.

7
_includes/footer.html Normal file
View File

@ -0,0 +1,7 @@
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="background-color: rgba(0, 0, 0, 0.25);">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
<br>
<span class="nav col-md-4 list-unstyled d-inline"><a href="https://github.com/IanSkinner1982"><img class="bi" width="24" height="24" src="https://cdn.ncxprogramming.com/file/image/navbar/github-dark.svg" alt=""></a> <a href="https://discord.gg/XZxxZngwDQ"><img class="bi" width="24" height="24" src="https://cdn.ncxprogramming.com/file/image/navbar/discord-dark.svg" alt=""></a></span>
</div>
</footer>

5
_includes/footerdsi.html Normal file
View File

@ -0,0 +1,5 @@
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>

25
_includes/nav.html Normal file
View File

@ -0,0 +1,25 @@
{% if page.title == "Error 404" %}
<nav class="navbar navbar-dark navbar-expand-lg bg-black">
{% else %}
<nav class="navbar navbar-dark navbar-expand-lg bg-dark">
{% endif %}
<div class="container-fluid">
<a class="navbar-brand" href="/">NCX Programming</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarText">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="/">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/programs/">Programs</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/blog">DS Stuff</a>
</li>
</ul>
</div>
</div>
</nav>

207
_includes/navdsi.html Normal file
View File

@ -0,0 +1,207 @@
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>

14
_layouts/blogpage.html Normal file
View File

@ -0,0 +1,14 @@
---
layout: dsiware
---
<div class="text-center pt-3">
<h1>{{ page.title }}</h1>
<h3>{{ page.date | date: "%Y-%m-%d" }}</h3>
<h4>{{ page.author }}</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
{{ content }}
</div>

38
_layouts/default.html Normal file
View File

@ -0,0 +1,38 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{ page.title }} | {{ site.title }}</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/style.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
{% if page.title == "Home" %}
<meta property="og:title" content="Welcome">
{% else %}
<meta property="og:title" content="{{ page.title }}">
{% endif %}
<meta property="og:locale" content="en_US">
<meta name="description" content="{{ page.title }} | {{ site.title }}">
<meta property="og:description" content="{{ page.title }} | {{ site.title }}">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
{% if page.custicon == true %}
<meta property="og:image" content="{{ page.iconurl }}">
{% else %}
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
{% endif %}
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
{% include nav.html %}
<div id="content-wrap" style="padding-bottom: 2.5rem;">
{{ content }}
</div>
</body>
<footer>
{% include footer.html %}
</footer>
</html>

38
_layouts/dsiware.html Normal file
View File

@ -0,0 +1,38 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{ page.title }} | {{ site.title }}</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
{% if page.title == "Home" %}
<meta property="og:title" content="Welcome">
{% else %}
<meta property="og:title" content="{{ page.title }}">
{% endif %}
<meta property="og:locale" content="en_US">
<meta name="description" content="{{ page.title }} | {{ site.title }}">
<meta property="og:description" content="{{ page.title }} | {{ site.title }}">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
{% if page.custicon == true %}
<meta property="og:image" content="{{ page.iconurl }}">
{% else %}
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
{% endif %}
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
{% include navdsi.html %}
<div id="content-wrap">
{{ content }}
</div>
</body>
<footer>
{% include footerdsi.html %}
</footer>
</html>

30
_layouts/noinclude.html Normal file
View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{ page.title }} | {{ site.title }}</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/style.css">
<link rel="alternate" type="application/atom+xml" href="https://ncxprogramming.com/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
{% if page.title == "Home" %}
<meta property="og:title" content="Welcome">
{% else %}
<meta property="og:title" content="{{ page.title }}">
{% endif %}
<meta property="og:locale" content="en_US">
<meta name="description" content="{{ page.title }} | {{ site.title }}">
<meta property="og:description" content="{{ page.title }} | {{ site.title }}">
<link rel="canonical" href="https://ncxprogramming.com">
<meta property="og:url" content="https://ncxprogramming.com">
<meta property="og:site_name" content="NCX Programming">
{% if page.custicon == true %}
<meta property="og:image" content="{{ page.iconurl }}">
{% else %}
<meta property="og:image" content="https://ncxprogramming.com/icon.png">
{% endif %}
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<div id="content-wrap" style="padding-bottom: 2.5rem;">
{{ content }}
</div>
</html>

26
_layouts/program.html Normal file
View File

@ -0,0 +1,26 @@
---
layout: default
---
<div class="container text-center">
{% if page.archived == true %}
<img src="https://cdn.ncxprogramming.com/file/image/banner/archived.svg" class="projectimg" style="width:80%;" alt="A banner that says 'Archved'.">
{% endif %}
<img src="{{ page.iconurl }}" class="projectimg" style="width:256px;height:256px;padding-top:8px;" alt="The program's icon.">
<div class="text-center pb-3">
<h1>{{ page.title }}</h1>
<p><b>By {{ page.author }}</b></p>
<p><b>Platform(s): </b>{{ page.platform }}</p>
<div class="dropdown pb-3">
<button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenuButton1" data-bs-toggle="dropdown" aria-expanded="false">
Project Links
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton1">
{% for item in page.links %}
<li><a class="dropdown-item" href="{{ item.link }}">{{ item.name }}</a></li>
{% endfor %}
</ul>
<div id="content-wrap" style="padding-bottom: 2.5rem;">
{{ content }}
</div>
</div>

View File

@ -0,0 +1,9 @@
---
title: Welcome to the Blog
titleshort: Hello Blog
author: NinjaCheetah
layout: blogpage
---
<p>Hello, and welcome to the NCX Programming blog! We plan to write about all sorts of tech nonsense here. Stay tuned for the first article, which will be about the Wii!</p>
<p>For now, that's all I have to say. Our first articles should be coming out soon.</p>

View File

@ -0,0 +1,21 @@
---
title: Enabling the Hidden Wii DVD Icon Part 1
titleshort: The Wii DVD Icon P1
author: NinjaCheetah
layout: blogpage
---
<p>NOTE: This article was originally written in OneNote and was not altered before being uploaded here. Please excuse formatting errors.</p>
<p>Unsurprisingly, this is more easily said than done. To do this, you need to modify the Disc Channels BRLYT file (“Binary Revolution Layout” file), which is contained in the diskBann.ash file, which can be found at</p>
<p> | 00000001/layout/common/diskBann.ash</p>
<p>and the BRLYT file is stored inside that at</p>
<p> | diskBann/arc/blyt/</p>
<p>Once youre there and can write to the file, its just a matter of changing a 00 to a 01.</p>
<p><b>1. Obtaining the Necessary Files</b></p>
<p>The first thing I needed to do is get the Wii System Menu files (in this case I downloaded System Menu 2.0U), using a tool like NUS Downloader to get them right from Nintendos servers. I chose to not pack the WAD, and to keep only the decrypted contents. The only file I really needed from this download was 00000001.app, but I kept the rest so that I could pack the WAD later.</p>
<p><b>2. Extracting</b></p>
<p>Now that I had the file I needed, I had to open it. I ended up using Sharpiis U8 extraction tool to extract 00000001.app into the directory 00000001. Once I had it extracted, I poked around to see if I could find what I needed to find. Fortunately, that was one of the easiest things I had to do. Once I located the diskBann.ash file that I needed to get into, I had to figure out how to get into it. Eventually I found a tool called Easy CSM, and used its command-line ASH extraction tool to extract diskBann.ash into diskBann.ash.arc (so just an ARC file). I then struggled to figure out what I had to do with that ARC file. I tried using ECSM, but it just crashed, probably because I didnt understand how it wanted me to set it up. I eventually discovered that the U8 extraction tool that from Sharpii is compatible with ARC files. What luck! Once I understood that, I was able to extract it and look through its files to find what I was looking for.</p>
<p>Once I had the BRLYT file in my sights, I finally felt like things were going to work! …until I realized that, like before, I had no idea how to get into this file. I managed to find a guide on banner creation for the Wii, and it has a guide on how to convert a BRLYT file into an XMLYT file (using a tool called Benzin), which I could just open in Notepad. (Pretty sure an XMLYT file is just an XML file - it certainly looks like one.) Once I had it in an acceptable format, I just had to scroll through, find the flag I needed to change, change it, and get out of there.</p>
<p><b>3. Recompressing</b></p>
<p>I thought the hard part was over. It wasnt. Now that I had changed what I needed, I needed to stick it all back together so I could use it. Luckily, Benzin could change XMLYT files back into BRLYT files, so that was easy enough. But then I had to figure out how to compress the diskBann folder back into an ASH file. I didnt have anything that could do that. I was able to compress it into a file that said it was an ASH file using Sharpii, but it was the exact same size as the ARC (which was much larger than the ASH), so it seems to have just created a renamed ARC file. I decided that was probably good enough, since I knew some other files were also just renamed ARC files. The next step, compressing everything back into 00000001.app, wasnt terrible once I figured out how the command worked. And this is where I hit the roadblock that stopped me. I needed to pack everything into a WAD so that I could actually use it. And the command failed every time. </p>
<p>So this is where things end for now. I <i>have</i> experimented more since this, and made more progress, so expect a follow up article at some point.</p>

View File

@ -0,0 +1,25 @@
---
title: Enabling the Hidden Wii DVD Icon Part 2
titleshort: The Wii DVD Icon P2
author: NinjaCheetah
layout: blogpage
---
<p>Before I get anyone's hopes up, I should state that this <b>did not</b> work. If that disappointment isn't too much for you, I'd love it if you kept reading.</p>
<p>So now with that out of the way, I'm sure you're wondering, <b>what did I do differently this time?</b></p>
<p><b>1. A different method of obtaining the system files</b></p>
<p>The first major change I made, which fixed the biggest issue from last time, was the way I obtained the .app files within the Wii System Menu install WAD. Last time, I chose to just save the decrypted contents in NUS Downloader, however that ended up preventing me from packing the WAD at the end of the process. This time I didn't save the decrypted contents, but instead had NUS Downloader pack the WAD for me. Once I had the WAD, I unpacked it with Sharpii, which left me with <i>almost</i> the same files. The difference is that this time I had the ticket<sup>[Check]</sup> which allowed me to pack the WAD at the end.</p>
<p><b>2. Recompressing the archives</b></p>
<p>Note: Since this article was written long after I tried the things listed in it, accuracy is not guaranteed.</p>
<p>What I tried this time was enabling LZ77 compression on the .arc file, then compressing the .arc again into an .ash, rather than going directly to a .ash. Thanks to my new method of obtaining the Wii Menu files, I was able to pack the WAD no problem and install it. However, once I installed the WAD in Dolphin, problems arose. The initial setup went just fine, as it should have since I didn't mess with those files, however once I tried to select the Disc Channel, it all came crashing down, in a way more literal than I would have liked. Fatal exception. Unfortunately, my .ash recompression method had not worked properly. (For the sake of making sure the WAD itself wasn't the issue, I unpacked, repacked, and installed an unmodified version and it worked just fine.)</p>
<p><b>So where does this leave me?</b></p>
<p>When I originally started (and then lost) this article back when I did all this, it left me with no leads and nothing else to try, or at least nothing I could think of. Thankfully, a fellow nerd known as <a href=https://github.com/Garhoogin>Garhoogin</a> gave me some extremely valuable information. It turns out I wasn't understanding the Wii's file formats correctly (specfically the .arc and .ash formats). Only .ash files are compressed, whereas .arc files are just archives. That's why adding the LZ77 compression to the .arc didn't help; it's not a compressed file. So now my new plan is as follows:</p>
<ol>
<li>Do everything I did last time up the the recompression part</li>
<li>Pack diskBann/arc into diskBann.arc, <i>without</i> LZ77 compression</li>
<li>Compress diskBann.arc into diskbann.ash, <i>with</i> LZ77 compression</li>
<li>Put diskBann.ash at 00000001/layout/common/ and compress 00000001.app</li>
<li>Pack the WAD and install in Dolphin</li>
<li>Profit (in theory)</li>
</ol>
<p>So, for now I leave you here. Hopefully there will be an update soon, as I intend to follow the plan above in the next few days so that I can make an update to this faster than last time.

View File

@ -0,0 +1,124 @@
---
title: Cleaning Up CC64
titleshort: Cleaning Up CC64
author: IanSkinner1982
layout: blogpage
---
<style>
code {
font-family: Consolas,"courier new";
color: crimson;
background-color: #f1f1f1;
padding: 2px;
font-size: 70%;
}
pre {
background-color: #f1f1f1;
padding: 2px;
}
</style>
<p>This article is to explain how I made Cookie Clicker C64 item buying more efficient. This probably isnt the most interesting article, but you may enjoy it nonetheless.
<br>
Here is the layout of a page in the store:
<br>
<br>
<code>1. Print a page in the store
<br>
2. Buy certain items depending on the pressed key (goes to sections 4-7)
<br>
3. Switch page if + or - is pressed
<br>
-------------------------
<br>
4. item 1 buying code
<br>
5. item 2 buying code
<br>
6. item 3 buying code
<br>
7. item 4 buying code
<br>
</code>
<br>
Now, this is for 1 page in a store. The store has over 5 pages… with 4 item buying routines each. Too much code, right? Well that's why I came up with an idea to make it better. First, let me explain how the store looks. You have 3 lines for each item. The setup is as follows:
<br>
<pre>
Item Name Amount Owned Ex. Cursors 69
Description of item Adds .1 cookies per second
Price of item 1000c
</pre>
<br>
I decided that I would put all the building info in a sequential and save it to a few arrays. (I'd have a name array, a price array, a description array and an amount array) It might not make sense why I did this, but you'll see why soon.
Instead of printing a whole page, I'd print the values in the array. So...
<br>
<br>
<code>
1. Select a range depending on the page selected. (0-3, 4-7, 8-12, etc)
<br>
2. Print the values in the range selected for each array
<br>
I will now add a for...next loop to handle all the menu printing. It will go through the range selected and print the desired values.
</code>
<br>
<br>
I have replaced all the page printing code with just 2 parts. (each page display would take 20 or so lines, meaning if I had 5 pages that would be 100 lines. With this new method, I need around 8-10 lines to load the array values, and 9 lines to print any selected page. With 5 pages, that is only 17-19 lines!) I can also add a whole new page just by adding one line of code.
<br>
Figuring out how to select an item with this new design was tough. I decided to assign a value to each item of the page. (x) If the input was within 1-4, then you will be sent to the buying routine.
<br>
<br>
<code>
1. Reset x and read keyboard input
<br>
2. Exit on a change of the current page or menu
<br>
3. Enter buying routine if an item was selected. (if x=1-4)
</code>
<br>
<br>
This ended up taking 18 lines instead of 50 lines for all the pages. Not a big improvement, but it is still good to clean stuff up.
<br>
As mentioned earlier, there are four blocks of code for buying items per page. Each bit of code was 6 lines. 6*4*5 is 120 lines. (still assuming I need 5 pages) Yeesh.
I have to chop that down.
Before, it was like this for each item:
<br>
<br>
<code>
1. Compare price and cookies
<br>
2. Subtract price
<br>
3. Add gain to gain.
<br>
4. Update amount owned.
<br>
5. Add 15% to price.
<br>
6. Update screen with new price and amount owned.
</code>
<br>
<br>
Now, once you have selected a item, it will do this:
<br>
<br>
<code>
1. Load the item number. (y=i+x-1) (i is the low number in the range)
<br>
2. Compare price(y) with your total cookies. (see if you can buy it)
<br>
3. Subtract price(y) from your cookies. Add the gain to gain(y). Multiply price(y) by 1.15. Add one to the amount owned
<br>
4. Update the price and amount owned on the screen. (this takes up a few more lines to determine where the item you want updated is)
<br>
<br>
(What is the gain? With Cookie Clicker, an idle game, the game is always adding something to your total amount of cookies. This is your CpS, or in this case, Gain. I made it so each item has its own gain. (in this case, gain(y)) All gains are added, and that is the total gain. The total gain is added to the amount of cookies you have.)
</code>
<br>
<br>
Now we have one routine shared by all items. So instead of 120 lines, we end up with 12 lines to handle all the items. If I were to add a thousand more items, it would still only be 12 lines.
<br>
<br>
In all, this took a week to figure out, and a few days to debug. In the end I got it to work, but I had to change a few things. All the ideas here still apply though.
<br>
Thanks for reading this extremely boring article!
</p>

View File

@ -0,0 +1,11 @@
---
title: Stylizing The Site
titleshort: Stylizing The Site
author: NinjaCheetah
layout: blogpage
---
<p>So as you've probably noticed if you got this far on the site, we've finally added CSS. For a while (from the start of the website on January 29th, actually) it became a joke of sorts that this site had absolutely no styling. That was mainly because of how annoying CSS can be, and also how bad <a href="https://ninjacheetah.github.io">my other site that uses CSS looks.</a> <sub>Editor's note: this article was written before NinjaCheetah overhauled his site in 2022.</sub></p>
<p>What started me off on making this site look better was some free time I had during school just yesterday. I decided to open GIMP and just see if I could create some sort of banner. It ended up coming out really good (in my opinion at least) so I added it to the website. From there, I decided to try and add the nav bar I used on my old site to this one, but this time actually make it look good. From there, I didn't like that the banner and nav bar used Sans-Serif but the body used Times New Roman, so more CSS it was! Eventually, with the help of <a href="/members/ianskinner1982">IanSkinner1982</a>, we managed to get the banner and nav bar to stretch to the edges of the screen which greatly improved how it looked. All I did after that was add the GitHub and Discord link icons, and it was done! (also for the record I have no idea if this is in chronological order)</p>
<p>I woke up this morning and had an idea: more banners! So I created banners for the <a href="/programs/">Programs page<a> and the <a href="/members/">Members page</a>, which both also came out pretty good (again, in my opinion at least). So for now, I think that just about wraps up our website "renovation". We will of course still add new things, but there shouldn't be any major changes coming soon.</p>
<p>Sorry for the short article, but I felt like it would be better to at least say something about it than nothing.</p>

View File

@ -0,0 +1,20 @@
---
title: Copyright Issues
titleshort: Copyright Issues
author: NinjaCheetah
layout: blogpage
---
<p><b>DISCLAIMER!</b> This article is about <i>my</i> experiences with false copyright claims. This is not a critique of the copyright system, only of the automatic copyright claim bots used on websites like YouTube or MediaFire.</p>
<p><b>Part I: The Claims</b></p>
<p>My first experience with a false-positive copyright claim was on YouTube when one of the pieces of music I made in GarageBand caused a video to get claimed. Twice in fact, once for each song I used. Now you would think that I could just appeal these claims with whatever proof they needed, right? Unfortunately this was not the case. (It should be noted that before submitting the appeal, I did my research and I am, in fact, allowed to use the loops provided by GarageBand for personal or commerical use.) Once I submitted the appeals, I was happy to see that the first was withdrawn, however that was short lived when a few days later I discovered that my second appeal had been <i>rejected.</i> (Thinking about it now, I wonder if I could have pursued that further since now a real person was saying that they owned something that they did not.) Another interesting fact about that claim is that I could not find the copyrighted music I supposedly used anywhere online, and believe me, I looked.</p>
<p>My second experience wasn't a claim but instead a takedown. I had been hosting downloads for the music that I made in GarageBand (same songs that caused trouble on YouTube) so I could link to the files on my website. I eventually discovered when linking to one of them that they had just been removed with 0 warning and could no longer be downloaded. Below is an image of what you get if you <a href="https://www.mediafire.com/file/rrjlp7nc3mowrji/Da_Song.m4a/file">visit the download page</a>.</p>
<img src="https://cdn.ncxprogramming.com/file/blog/2021-05-17/blog-copyright1.png" style="max-width: 100%;">
<p>If you're interested, <a href="https://cdn.ncxprogramming.com/file/blog/2021-05-17/blog-dasong.m4a">here's the song I uploaded.</a> Definitely not what it says it was.</p>
<p><b>Part II: Why These Claims Happen</b></p>
<p>Most of these sites, especially ones like YouTube and Twitch, use bots that check audio in your video against samples of copyrighted music. The biggest issue with this system is that if any other sound matches a sample, the video or stream will be claimed. Here's a <a href="https://screenrant.com/twitch-streamers-dmca-sound-effects/">ScreenRant article about it.</a> (Not endorsing ScreenRant or their content, it was just the first good article I found about the issue.) The reason these false claims make it through is that there's nobody checking them, as soon as the bots detect something it thinks should be a claim, it just goes through with that. Programs aren't perfect, but it sure seems like they expect them to be. Judging from which of my songs were claimed, the reason was most likely that they contained a loop that was present in the copyrighted music that was supposedly playing.</p>
<p><b>Part III: Fixing The System</b></p>
<p>So now we're at the part where I give my thoughts about how this issue could be fixed. Remember that these are <i>my opinions</i> about this could be done. The first and most obvious solution is to <u>have the claims verified by a real person.</u> I would imagine that a large number of these false claims would stop happening if there were people who could check these and notice that the claimed content sounds nothing like the music that supposedly is being used.</p>
<p>Another, albiet more difficult, solution would be to improve or change the way these bots compare the source content to the copyrighted content. Evidently the "sampling" method leaves too much of a margin of error. One of the most obvious issues with it is that there are plenty of loops that you can either buy once or just use for free and if they're used in a piece of copyrighted music, then any content uploaded that contains that same loop will be claimed, as I've experienced firsthand.</p>
<p>Now obviously I don't make copyright claim bots, so I don't understand everything about how they work. I'm just hoping that my thoughts (and the thoughts of many others too) won't fall on deaf ears.</p>
<p>And with that, we've come to the end of this article. I know that this article was less fun for exciting compared to the Wii DVD Icon adventures, but this is something that I've wanted, needed really, to talk about for a while. -NinjaCheetah</p>

View File

@ -0,0 +1,26 @@
---
title: Moving On
titleshort: Moving On
author: NinjaCheetah
layout: blogpage
---
<p>All good things must come to an end. And for me, that thing is my time working with C#. In this article I will outline my reasons for abandoning C# as well as what will happen with my C# programs.</p>
<h3>I. Why I'm Leaving It</h3>
<p><b>1. Free as in beer</b></p>
<p>One of my biggest issues with C# is the lack of open source. While all of my C# code is open, nothing about the language or its tools are. It's a proprietary language that uses proprietary tools and, if you're making a GUI app, only runs on a proprietary OS. So yes it may be free to use, but it offers no freedom.</p>
<p>With a language like C, there are options for what compiler you want to use because nothing about the language is proprietary. Or if, for example, let's say you'd like to make a GUI in C. You have several options, such as GTK+, which is an open source solution. When you're programming in C#, you have to use Microsoft's proprietary compiler and one of Microsoft's proprietary GUI frameworks, if you intend to make a GUI app.</p>
<p><b>2. Platforms</b></p>
<p>Another large issue I have is OS compatibility. C# desktop apps run only on Windows, and even then you have to install the .NET 5/Framework Desktop Runtime first. C# console apps can be run on Linux and macOS in addition to Windows, however you still need the .NET 5/Framework Runtime installed and you need launch the apps with the <code>dotnet run</code> command in the terminal.</p>
<p>On the other side, C code can be written to work on multiple platforms, and even if the same code won't you can (usually) make adjustments to let it run different code on different operating systems. (Of course Windows support can be a lot harder due to it not being POSIX compliant, read more about that <a href="/blog/pages/2021-08-16-c-on-windows">here</a>). C code also just runs on whatever OS it's compiled for, no need for any frameworks or runtimes, only the libraries for your program (and unless you're doing something crazy, a lot of common libraries you want to use might already be installed).</p>
<p><b>3. Abandoning Windows</b></p>
<p>My final reason for leaving C# behind is that I'd like to leave Windows behind, quite possibly for good. Since none of the GUI designer tools, <i>cough</i> Visual Studio <i>cough</i>, run on Linux or macOS (the 2 operating systems I will still have access to), then that leaves me with no way to continue developing my C# apps. And that brings me to the second part of this article:</p>
<h3>II. What will happen to my projects</h3>
<p><b>CSharpCollection</b></p>
<p>I'll keep this short. I have no intentions to continue developing CSharpCollection, or to pass it on to another developer. It is a test app and nothing more.</p>
<p><b>NCX-Core, XStore and NCX-News</b></p>
<p>While I, and by extension, NCX Programming, will still own the project, it is being passed on to <a href="https://github.com/rolfiee">Rolfie</a>, who will handle any future development or maintaining work. She will also be maintaining XStore. NCX-News will still be managed and updated by NCX Programming.</p>
<p><b>XWare</b></p>
<p>Like with NCX-Core, XWare will be passed on to <a href="https://github.com/rolfiee">Rolfie</a> as well.</p>
<h3>III. Closing words</h3>
<p>I'd like to wrap up this article by saying that this is by no means the end of any major NCX Programming projects. There will be more to come in the future, even if I don't know what they'll be now. That's all for now, and I'll be back next time with a fun Microsoft rant.</p>

View File

@ -0,0 +1,21 @@
---
title: The Problems With C On Windows
titleshort: C On Windows
author: NinjaCheetah
layout: blogpage
---
<p><i>This will be a short article.</i></p>
<p>As much as I like using C, I have one big issue with it. And that problem is Windows.</p>
<p><b>1. Libraries</b></p>
<p>Compared to macOS and Linux, installing/obtaining libraries to use on Windows is difficult. If you're on a Debian or Arch system, you have <code>apt</code> or <code>pacman</code>, respectively. If you're on macOS, you have a few options, such as my package manager of choice, <code>brew</code>. But on Windows? You don't have those options. You have to find and download those libraries yourself in order to use them in your program. Now is this a huge deal? No, not really. It's just inconvenient, compared to macOS and Linux where you'll always be using the latest libraries, and they can be installed with one command.</p>
<p><b>2. POSIX Compliance</b></p>
<p>Windows is not POSIX Compliant.<sup>[1]</sup> Now what does this mean? <a href="https://en.wikipedia.org/wiki/POSIX">"The Portable Operating System Interface (POSIX) is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems."</a><sup>[1]</sup> One particular POSIX standard that it doesn't meet is the C POSIX standard,<sup>[2]</sup> which is what causes me issues. Because Windows does not follow these standards, it doesn't include many of the standard C libraries, and instead forces you to use the proprietary Windows libraries. While this isn't inherently a bad thing, it does kill compatibility between Linux/macOS and Windows. This deters me from making Windows-compatible software because I need to rework a lot of code to do it. With macOS and Linux the changes I need to make are often either minor or nonexistent.</p>
<p><b>3. Compiler</b></p>
<p>Tying in with the previous section, Windows requires its own proprietary compiler because it needs to be able to include the Windows libraries.</p>
<p><b>Finishing Off</b></p>
<p>Overall, if you intend to only make Windows programs, there's no reason to not use C. However if, like me, you want to make programs that run on multiple operating systems, you'll have to write completely different versions for POSIX compliant and non-POSIX compliant systems.</p>
<hr>
<p><b>Sources</b></p>
<p>1. <a href="https://en.wikipedia.org/wiki/POSIX">POSIX</a> Wikipedia, retrieved on August 15, 2021.</p>
<p>2. <a href="https://en.wikipedia.org/wiki/C_POSIX_library">C POSIX library</a> Wikipedia, retrieved on August 16, 2021.</p>

View File

@ -0,0 +1,26 @@
---
title: The History of theVaultC
titleshort: The History of theVaultC
author: NinjaCheetah
layout: blogpage
---
<p>I've decided that it's probably a good idea for me to take a break from the rant-type articles and write something a little more fun. So here it is! The history of our project theVaultC, up through the day this article comes out.</p>
<h3>I. theVault (The C# One)</h3>
<p>Before theVaultC, my equivalent project was theVault, which was written in C#. The only projects it had were GuessMyNumber, GraphicStuff, and helloWorld. GuessMyNumber and GraphicStuff in theVault are almost identical to the theVaultC versions. HelloWorld was not remade because I didn't think there was any reason to remake that, as it was written when I was actually new to C# console apps, and was actually a test. By the time I started on theVaultC, I was already past that point with C.</p>
<p>I finally decided to abandon theVault when I decided to slow down (so that I could eventually stop) my work on C# programs. I archived it on March 19, which was the same day I had set up a workflow on the theVaultC repo, getting it to the point where it was practical to have it as a full replacement. The programs in it at that point were equal to the ones in theVault.</p>
<h3>II. theVaultC</h3>
<p>I decided to create theVaultC when I was learning C and wanted to create something to both test and show off my skill with C. I wanted to be able to replace theVault with it so I worked on creating versions of those programs in C. That is more or less all the history behind the program itself. In the next section I'm going to talk about the histories of each program in theVaultC.</p>
<h3>III. theVaultC's Programs</h3>
<p><b>GuessMyNumberC and GraphicStuffC</b></p>
<p>I'm grouping these two together because they have the same history. As I've already mentioned, these were recreations of the theVault programs.</p>
<p><b>PrintUnixTime</b></p>
<p>PrintUnixTime was originally a quick test that I made when I was learning how to seed random numbers using <code>time(0)</code>. After learning how it worked, I constructed it to print the number of seconds since Unix time "began" (also known as the Unix Epoch<sup>[1]</sup>) on 1 January 1970. I made this example program that just read the value from <code>time(0)</code> and printed it as a cool way to check how many seconds it's currently at, and then decided to add to theVaultC.</p>
<p><b>RNGTool</b></p>
<p>RNGTool (also known as the theVaultC program that has a name that is way too cool for what it is) is a program that generates random numbers. It also lets you enter a maximum and minimum number that you'd like be generated. I only created it because I had been working on random number generation when optimizing GuessMyNumberC, and wanted to use it in another program just for fun.</p>
<p><b>WordGenerator</b></p>
<p>WordGenerator is a (from the outside) simple-seeming program, that was actually the hardest to make by far out of all the theVaultC programs. I needed quite a bit of help from <a href="https://github.com/Garhoogin">Garhoogin</a> and <a href="https://github.com/Jonatan6">Jonatan6</a>, but in the end I got it done. It reads a list of words (conveniently located in a file named <code>words.txt</code>) and then picks a random selection of words from that list (the number of words it picks is random too!) and prints them. I don't quite remember when I first thought about this program, but it had been floating around for a while by the time that I finally got around to it.</p>
<p>I hope you found this little dive into the history of theVaultC interesting! Any questions? Feel free to <a href="mailto:github@ncxprogramming.com">shoot us an email!</a>
<hr>
<p><b>Sources</b></p>
<p>1. <a href="https://en.wikipedia.org/wiki/Unix_time">Unix time</a> Wikipedia, retrieved on August 22, 2021</p>

View File

@ -0,0 +1,15 @@
---
title: Unsupported Mac Adventures
titleshort: Mac Adventures
author: NinjaCheetah
layout: blogpage
---
<p>So as a fun way to document my work on my MacBooks, I thought I'd make a blog article out of them. Blog articles that are actually about our software will be coming soon.</p>
<h3>Part 1: My First Macbook</h3>
<p>The first old Mac I had to work on was my parents old 2010 White Unibody MacBook (Model identifier <code>MacBook7,2</code>) with 4GB of RAM, a 500GB HDD and a 2.4GHz Core 2 Duo CPU. The title of this part has a double meaning of sorts. It was indeed the first MacBook I experimented with, but it was also the first MacBook I ever used (and also the first computer I really used) and is what really got me interested in computers, so it's pretty cool that I've now come back to it.</p>
<p>When I first pulled it out, all I knew about was <a href="http://dosdude1.com/mojave/">dosdude1's Mojave patcher</a>, so my intention was just to install Mojave and then tinker with that. The installation was relatively uneventful, other than the minor stress I had from doing a BootROM update (since an interruption could brick your Mac!). I only had to do that update because this Mac was still running the macOS (or more accurately, Mac OS X) version that it came with, 10.6 Snow Leopard, and so it never got the APFS support update that I needed for Mojave updates to work, otherwise I would have avoided it.</p>
<p>After a while, I wanted some programs (mostly just Xcode) that needed Catalina, so I decided to check the compatibility list for <a href="http://dosdude1.com/catalina/"> dosdude1's Catalina patcher</a>... Lo and behold, my Mac was on the list! So I immediately went and downloaded the patcher and began preparing my USB, making sure to get a backup first (I learned my lesson after one of my laptops' HDD failed). Attempting to upgrade failed, but luckily one fresh install and a restore later and I had Catalina up and running with all my files, and that was enough for me.. For about a month.</p>
<p>Mostly by chance, I went to check on the MacRumours <a href="https://forums.macrumors.com/threads/macos-11-big-sur-on-unsupported-macs-thread.2242172/">macOS 11 Big Sur on Unsupported Macs</a> thread, and discovered that someone going by ASentientBot had added Graphical Acceleration back to older, non-metal GPUs, and mine was one of the ones it supported! So, like before, I made a backup and got to work getting my USB all set up. This time I was using <a href="https://github.com/dortania/OpenCore-Legacy-Patcher">OpenCore Legacy Patcher</a> instead of an OS patcher like dosdude1's, which allowed system updates without having to re-patch the system (possibly excluding the GPU Acceleration patches, I never got a chance to test that). This process was a lot more of a headache than for Mojave and Catalina. My biggest issue was that once I had Big Sur installed, it would lock up on boot when the progress bar was about 1/3 of the way across. I eventually figured out that the NVRAM needed to be reset, and since then that Mac has been running Big Sur about as smoothly (or likely more so) than you'd expect for an 11 year old Mac. It's honestly quite impressive that such an old Mac can still run the latest macOS version without too much trouble.</p>
<p>So for now, that's all. At some point in the future (might be the next article, might not be) I'll continue this and will talk about my new(ish) MacBook Pro and the adventures I've had getting Big Sur running on that one.</p>
<p>Also, here's a fun fact: almost every article on this blog was written on that 2010 White MacBook!</p>

View File

@ -0,0 +1,17 @@
---
title: Unsupported Mac Adventures Part 2
titleshort: Mac Adventures 2
author: NinjaCheetah
layout: blogpage
---
<h3>Part 2: My First Personal MacBook</h3>
<p>The second old (but newer than the other!) Mac that I had was a 2012 Unibody MacBook Pro (Model identifier <code>MacBookPro9,2</code>) with 4GB RAM, a 500GB HDD, and a 2.5 GHz Dual-Core Intel Core i5 CPU. This MacBook Pro was the first MacBook that was actually mine as the 2010 White MacBook is still my parents'.</p>
<p>When I got this one, I already knew that I'd need <a href="https://github.com/dortania/OpenCore-Legacy-Patcher">OpenCore Legacy Patcher</a> to patch it. The nice thing about this Mac is that it supports Apple's Metal API, meaning that it could do graphical acceleration in Big Sur wthout any patches (so I can use System Integrity Protection and Secure Boot Model!). Before patching though, I took the SSD out of my ThinkPad, which is a Samsung EVO 960, and put it in the Mac. I tried using it with the 5400RPM HDD that it came with in Catalina and it was too slow for me, especially coming from an SSD in my old Mac.</p>
<p>The initial patching went fine and I had Big Sur up and running without any issues. However, after updating from Big Sur 11.5.2 to Big Sur 11.6, I started to notice crashing. Apps and system processes would experience a memory leak of some kind, and then would crash itself and other programs until I either rebooted or a kernel panic occurred (I later discovered that the 11.6 update had no relevance). I tried debugging it by changing some OCLP settings and repatching, but it wouldn't help. My next idea was that maybe my backup, which came from my original patched Mojave install and had been updated through every version since, was causing problems because of all the potentially left over patches. Unfortunately a clean install of 11.6 didn't fix it.</p>
<p>After that I decided to wipe and do a fresh install of 11.5.2, because at this point I thought that the software update had caused my issues. Judging from the fact that the crashing still happened, it was safe to say that 11.6 wasn't the issue.</p>
<p>I then turned my attention to potential hardware problems. The first and easiest thing to try was putting the HDD back in and installing Big Sur to that, just in the off chance that something was wrong with my SSD (not that I though there was, since it was relatively new). No luck there. I then ran <a href="https://www.memtest86.com">memtest86</a>, a free bootable environment for testing RAM, and all 4 passes passed the tests. So for the time being, I just gave up and accepted that I'd have to deal with the crashing.</p>
<p>Luckily, someone in the OCLP discord server knew of the issue and said you could use the command <code>sudo purge</code> to purge the leaking memory, effectively fixing the issue for the time being (it would still come back eventually). Since I couldn't open apps while it was crashing, I enabled SSH and created a shortcut in the Shortcuts app on my iPhone to run <code>sudo purge</code> over SSH right from my home screen whenever I needed it, which worked pretty well. I later created an Automation quick action workflow on the Mac itself so that I could run my workflow just by pressing a key combination. This would let me stop a crash that had already quit all my apps but hadn't killed Finder yet (as I needed at least one app to be open to run the workflow).</p>
<p>So, what now? At this point this is what I was wondering because I just couldn't figure out what was wrong. That is until someone suggested to me that my RAM might be bad, as they had RAM that was bad but could pass memtest86. So, like with the SSD, I stole the 8GB of RAM from my ThinkPad and put it in my Mac.</p>
<p>And that brings us to now, where I'm writing this article on my seemingly no longer crashing Mac. Will this be the end? I hope so. If it's not, expect a part 3 ;)</p>
<p>Another fun fact: most of RNGTool's code was written on this 2012 MacBook Pro! (the entire Jekyll conversion for this site was done on here too!)</p>

View File

@ -0,0 +1,25 @@
---
title: Giving NCX-Core Some CPR
titleshort: Giving NCX-Core CPR
author: NinjaCheetah
layout: blogpage
---
<p><i>Welcome back to another edition of I Don't Stick With Anything.</i></p>
<p>I went back on my decision to completely stop using Windows because some stuff still absolutely requires it. <i>Chilling, isn't it?</i></p>
<h3>Atrocity #1: The Code</h3>
<p>Since I was already here using Windows 10 again (however it's the LTSC 2021 version so less telemetry and no Windows Store at least) I figured that I'd pop in and look at how NCX-Core's code was holding up (with the "new" and exciting VS2022!); this was my first mistake. Now to be fair I acknowledged that the code was bad when I first wrote it, but I hadn't quite realized just how severe it truly was. Most likely the worst (publically available) code I've ever written and ever will write. But hey, it was one of my first major projects so I can't be too hard on it.</p>
<p>Honestly I didn't do a lot to fix the code, but I did finally correct all of the incorrect file paths that would cause the program to inexplicably crash whenever it tried to access them since I continue to put off error handling. I also fixed a decent bit of inefficient code and removed a bunch of feature stubs that were just taking up space. Oh and button code stubs. There was a large amount of those for some reason.</p>
<h3>Atrocity #2: The GUI</h3>
<p>The GUI was the next thing I took another look at. Now, <i>overall</i> the GUI isn't awful. Yes, the fact that the Library has hardcoded icon positions is dumb and since even <i>I</i> don't have CSharpCollection installed, there's always an awkward gap in the first slot. The About screen is also not nice to look at. Oh and the Settings screen is far too empty. Like really.</p>
<p>The real issue with the GUI is all of the photo-based elements. This includes all of the buttons, menu bar items and program icons. If you weren't already aware, all of the buttons are PNGs. Really big PNGs. Like, really big.</p>
<img src="https://cdn.ncxprogramming.com/file/blog/2021-12-07/what-is-this-res.png" style="margin-left:8px;" alt="Image showing the resolution of the image is 1700x1100.">
<p>Yeah... And for some reason, I expected this to scale down to 104x66 for some reason (let's just ignore this bizarre resolution). I believe I though that the bigger the image the better it would scale down? I'm not even really sure at this point. So I decided step one for fixing this mess would be to create some brand new assets, this time as vector graphics so they'd scale down nicely. (Read 'A Love Letter to Vector Graphics' which may or may not ever come out for that backstory.) Since these are vector graphics, it means geometric shapes, which means that not only do they scale better but they also just look nicer to begin with. If you'd like to see a fun comparison, <a href="https://cdn.ncxprogramming.com/file/internal/NCX-Core%20Asset%20Pack.zip">click here</a> to download <code>NCX-Core Asset Pack.zip</code> from our not-CDN that has the old assets and the new ones.</p>
<p>With all of the new assets in, I can say that NCX-Core is now at least slightly less painful to use (not that anyone does anyway). Yay.</p>
<h3>The State of NCX-Core and its Future</h3>
<p><b>Can it be used?</b></p>
<p>Yes, but it's not very useful to anyone. I've made enough changes that it's now relatively usable. The issue is just that there's no real need for it.</p>
<p><b>If that's the case then what's going to happen to it?</b></p>
<p>I honestly don't know. My current plan is to finish polishing what's there and release it as v3.2, and then leave it. It's an important piece of "programmer history" so it's not going to get deleted or be privated. For now it's also not going to be archived. So if I ever decide to pick it up and use it's code for something new it's there.</p>
<h3>Wow this was kind of sad</h3>
<p>Yeah I know. But, officially saying this is done-ish means I'm finally going to stop holding out on NCX-Core-Lite and work on a proper big program, so stay tuned!</p>

View File

@ -0,0 +1,11 @@
---
title: Love Letter to Vector Graphics
titleshort: Love Letter to SVGs
author: NinjaCheetah
layout: blogpage
---
<p>I finally reached that point in my life where I learned what an SVG is! Not sure how I made it this far without that knowledge.</p>
<p>If you don't know what vector graphics are, I suggest reading <a href="https://en.wikipedia.org/wiki/Scalable_Vector_Graphics">Wikipedia - Scalable Vector Graphics</a> first. To sum it up briefly, SVGs are made of geometric shapes instead of pixels so they can be easily scaled up without losing quality.</p>
<p>Currently I'm only making brand new images as SVGs, but I intend to remake some other old images, especially the banners on this site. If you have a really big monitor (or at least one that's really high res), you can really see this difference by visiting either <a href="/">the homepage</a> or <a href="/programs">the programs page</a> and then <a href="/products/icons">our icon sales page</a> <i>(hmm what could this be)</i> and scroll down to the banner. Now, uh, I don't have a high-res screen (in fact my MacBook Pro is the last pre-Retina display) so I have no idea if this will work. But it probably should. Feel free to yell at me in an issue or something if this doesn't work.</p>
<p>That's all for now. Look forward to some scalable goodness in the near future.</p>

View File

@ -0,0 +1,32 @@
---
title: Bringing RNGTool to Your Pocket (Kinda)
titleshort: Bringing RNGTool to Phones
author: NinjaCheetah
layout: blogpage
---
<p>hey look, the first article of the year! happy new year!</p>
<p>So, what have I been up to recently (in terms of programming)? Mostly improving RNGTool. Since I've gotten more comfortable with Swift, it's started to push me away from C a little bit. Now I'm sure I'll return to it eventually, but for now this means I'm working on RNGTool and my websites exclusively. But hey, that means that RNGTool is becoming more usable!</p>
<p><b>Some quick clarification:</b> since this is Swift, the only pockets RNGTool is coming to are the ones with iPhones (or iPods (or even iPads if you have <i>really</i> big pockets)) in them. Sorry Android users.</p>
<p>So I finally made the realization that one can actually deploy iOS apps to their iDevices for testing. For some reason I genuinely thought you had to be an Apple Developer to even run your own app on your phone. Whoops. I also realized like 2 months later that I can actually run iDevice simulators on my Mac without much trouble so this wasn't even really an issue in the end.</p>
<p>Armed with this new information, I decided it was about time that I tried to port RNGTool to iOS. It's something that I've always wanted to do since I first created it but because of the afformentioned testing issues I didn't have a good way to make sure it actually did what it was supposed to. The basic porting process wasn't actually too hard. The beauty of Swift is that <i>most</i> code will work on all Apple platforms (especially since macOS 11.0, which added some previously iOS-specific features to Mac). At first the iOS version was actually just the macOS Swift files for the modes and settings with a new view listing. And then it got hard.</p>
<p>While my basic direct code porting was fine to get a working prototype, most of the UI was not really that usable. You can see this early UI below.</p>
<div style="display:inline-block;padding-left:8px;">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-01-07/rngtool-mobile-mode-list-beta.jpg" width="15%">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-01-07/rngtool-mobile-marble-mode-beta.jpg" width="15%">
</div>
<p>And thus began the quest to make RNGTool usable. I started with the settings, as they were a trainwreck that I unfortunately don't have any pictures of (and it was never committed to GitHub so it's long gone). These actually came out pretty well in the end. I managed to keep using the exact same code in both the macOS and iOS versions, just with different wrappings around the actual settings in the two <code>SettingsView.swift</code> files. The result is something arguably nicer to use than the macOS version, though I'll let you judge that for yourself.</p>
<div style="display:inline-block;padding-left:8px;">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-01-07/rngtool-mobile-settings1.png" width="15%">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-01-07/rngtool-mobile-settings2.png" width="15%">
</div>
<p>Next on the to-do list was to make brand new mobile-focused UIs for the actual generator modes. I tried to do what I did with the settings but it just wasn't working out; the UI needed to be basically redesigned from the ground up to work well on screens as small as 4 inches diagonally (looking at you, iPod Touch 7th gen). The easiest place to start was the text, so I shrank it all down until it was small enough to fit comfortably without being so small that it was hard to read. Then it was time to address the controls.</p>
<p>The annoying thing with the controls is that on macOS you really <i>have</i> to add extra properties to make them look decent. On iOS, however, that isn't an issue an raw controls look fine, excluding the buttons. The buttons needed some extra tinkering but what I came up with ended up looking pretty good, which is really only because all of my buttons use SF Symbols rather than text, so adding a rounded border was enough to make them big enough to press.</p>
<p>So by this point we've got working settings and working control (and of course functional number generation). What could possibly be left? Images.</p>
<p>While I briefly considered dropping the the dice and card images, I just felt like it would be weird since that was a feature I put a lot of time into on macOS. Thankfully, for literally the first time ever (that I can remember), math was useful in my code. Incredible, isn't it? I figured out how to read the usable screen size, and then used some fancy math to scale the dice and cards (as well as set the card offsets) to fit your screen nicely. The results can be seen below.</p>
<div style="display:inline-block;padding-left:8px;">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-01-07/rngtool-mobile-dice-mode.png" width="15%">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-01-07/rngtool-mobile-card-mode.png" width="15%">
</div>
<p>So with that, RNGTool on iOS reached what it is today (more or less, new features have been added that I'm not mentioning here because they weren't part of the inital port). Now, about the "Kinda" in the title. Unfortunately, as I'm not an Apple Developer, I can't publish the app on the App Store or really distribute it at all. So if you want to run it, you'll either need a Jailbroken device on iOS 15 (which is not currently possible) or a sideloading method like <a href="https://sideloadly.io">Sideloadly!</a> or <a href="https://altstore.io">AltStore</a>. I won't be covering that here, but neither of those programs are particularly hard to use, so it shouldn't be hard to get RNGTool installed. Downloads can be found in the <a href="https://github.com/NCX-Programming/RNGTool/releases/latest">latest release</a> or as a build artifact in the latest <a href="https://github.com/NCX-Programming/RNGTool/actions">GitHub Actions run</a>.</p>
<p>That's all for now! Hopefully it won't be a full month between articles next time.</p>

View File

@ -0,0 +1,24 @@
---
title: Bringing RNGTool to Your Wrist (Maybe)
titleshort: Bringing RNGTool to Apple Watches
author: NinjaCheetah
layout: blogpage
---
<p>Hmm this title sounds familiar...</p>
<p>More RNGTool updates! This time I'm porting RNGTool to watchOS rather than iOS. And it's interesting. The most difficult part of this is dealing with the limited screen real estate that the Apple Watch has. The solution? Cutting out the fat.</p>
<p>RNGTool is by no means a visually simple app. I've definitely overcomplicated its UI. This gives me a good chance to really cut out any parts of the app's UI that aren't needed so that you can fit the parts that matter. The actual process of porting the app's code was a lot easier than from macOS to iOS because most of the parts that aren't support on watchOS were being removed anyway, so I won't go over it here.</p>
<p>Here's the interesting part, a comparison of the iOS and watchOS apps:</p>
<div style="display:inline-block;padding-left:8px;">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-02-01/rngtool-mobile-number-mode.png" width="20%">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-02-01/rngtool-wrist-number-mode.png" width="15%">
</div>
<div style="display:inline-block;padding-left:8px;">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-02-01/rngtool-mobile-dice-mode.png" width="20%">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-02-01/rngtool-wrist-dice-mode.png" width="15%">
</div>
<div style="display:inline-block;padding-left:8px;">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-02-01/rngtool-mobile-about.png" width="20%">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-02-01/rngtool-wrist-about.png" width="15%">
</div>
<p>Unfortunately those are all of the screens I've completely finished at this point. I will likely make a post updating on when I finish the rest.</p>

View File

@ -0,0 +1,258 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Welcome to the Blog | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Welcome to the Blog">
<meta property="og:locale" content="en_US">
<meta name="description" content="Welcome to the Blog | rmc's site">
<meta property="og:description" content="Welcome to the Blog | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Welcome to the Blog</h1>
<h3>2021-01-29</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p>Hello, and welcome to the NCX Programming blog! We plan to write about all sorts of tech nonsense here. Stay tuned for the first article, which will be about the Wii!</p>
<p>For now, that's all I have to say. Our first articles should be coming out soon.</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,270 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Enabling the Hidden Wii DVD Icon Part 1 | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Enabling the Hidden Wii DVD Icon Part 1">
<meta property="og:locale" content="en_US">
<meta name="description" content="Enabling the Hidden Wii DVD Icon Part 1 | rmc's site">
<meta property="og:description" content="Enabling the Hidden Wii DVD Icon Part 1 | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Enabling the Hidden Wii DVD Icon Part 1</h1>
<h3>2021-01-30</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p>NOTE: This article was originally written in OneNote and was not altered before being uploaded here. Please excuse formatting errors.</p>
<p>Unsurprisingly, this is more easily said than done. To do this, you need to modify the Disc Channels BRLYT file (“Binary Revolution Layout” file), which is contained in the diskBann.ash file, which can be found at</p>
<p> | 00000001/layout/common/diskBann.ash</p>
<p>and the BRLYT file is stored inside that at</p>
<p> | diskBann/arc/blyt/</p>
<p>Once youre there and can write to the file, its just a matter of changing a 00 to a 01.</p>
<p><b>1. Obtaining the Necessary Files</b></p>
<p>The first thing I needed to do is get the Wii System Menu files (in this case I downloaded System Menu 2.0U), using a tool like NUS Downloader to get them right from Nintendos servers. I chose to not pack the WAD, and to keep only the decrypted contents. The only file I really needed from this download was 00000001.app, but I kept the rest so that I could pack the WAD later.</p>
<p><b>2. Extracting</b></p>
<p>Now that I had the file I needed, I had to open it. I ended up using Sharpiis U8 extraction tool to extract 00000001.app into the directory 00000001. Once I had it extracted, I poked around to see if I could find what I needed to find. Fortunately, that was one of the easiest things I had to do. Once I located the diskBann.ash file that I needed to get into, I had to figure out how to get into it. Eventually I found a tool called Easy CSM, and used its command-line ASH extraction tool to extract diskBann.ash into diskBann.ash.arc (so just an ARC file). I then struggled to figure out what I had to do with that ARC file. I tried using ECSM, but it just crashed, probably because I didnt understand how it wanted me to set it up. I eventually discovered that the U8 extraction tool that from Sharpii is compatible with ARC files. What luck! Once I understood that, I was able to extract it and look through its files to find what I was looking for.</p>
<p>Once I had the BRLYT file in my sights, I finally felt like things were going to work! …until I realized that, like before, I had no idea how to get into this file. I managed to find a guide on banner creation for the Wii, and it has a guide on how to convert a BRLYT file into an XMLYT file (using a tool called Benzin), which I could just open in Notepad. (Pretty sure an XMLYT file is just an XML file - it certainly looks like one.) Once I had it in an acceptable format, I just had to scroll through, find the flag I needed to change, change it, and get out of there.</p>
<p><b>3. Recompressing</b></p>
<p>I thought the hard part was over. It wasnt. Now that I had changed what I needed, I needed to stick it all back together so I could use it. Luckily, Benzin could change XMLYT files back into BRLYT files, so that was easy enough. But then I had to figure out how to compress the diskBann folder back into an ASH file. I didnt have anything that could do that. I was able to compress it into a file that said it was an ASH file using Sharpii, but it was the exact same size as the ARC (which was much larger than the ASH), so it seems to have just created a renamed ARC file. I decided that was probably good enough, since I knew some other files were also just renamed ARC files. The next step, compressing everything back into 00000001.app, wasnt terrible once I figured out how the command worked. And this is where I hit the roadblock that stopped me. I needed to pack everything into a WAD so that I could actually use it. And the command failed every time. </p>
<p>So this is where things end for now. I <i>have</i> experimented more since this, and made more progress, so expect a follow up article at some point.</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,274 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Enabling the Hidden Wii DVD Icon Part 2 | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Enabling the Hidden Wii DVD Icon Part 2">
<meta property="og:locale" content="en_US">
<meta name="description" content="Enabling the Hidden Wii DVD Icon Part 2 | rmc's site">
<meta property="og:description" content="Enabling the Hidden Wii DVD Icon Part 2 | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Enabling the Hidden Wii DVD Icon Part 2</h1>
<h3>2021-04-08</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p>Before I get anyone's hopes up, I should state that this <b>did not</b> work. If that disappointment isn't too much for you, I'd love it if you kept reading.</p>
<p>So now with that out of the way, I'm sure you're wondering, <b>what did I do differently this time?</b></p>
<p><b>1. A different method of obtaining the system files</b></p>
<p>The first major change I made, which fixed the biggest issue from last time, was the way I obtained the .app files within the Wii System Menu install WAD. Last time, I chose to just save the decrypted contents in NUS Downloader, however that ended up preventing me from packing the WAD at the end of the process. This time I didn't save the decrypted contents, but instead had NUS Downloader pack the WAD for me. Once I had the WAD, I unpacked it with Sharpii, which left me with <i>almost</i> the same files. The difference is that this time I had the ticket<sup>[Check]</sup> which allowed me to pack the WAD at the end.</p>
<p><b>2. Recompressing the archives</b></p>
<p>Note: Since this article was written long after I tried the things listed in it, accuracy is not guaranteed.</p>
<p>What I tried this time was enabling LZ77 compression on the .arc file, then compressing the .arc again into an .ash, rather than going directly to a .ash. Thanks to my new method of obtaining the Wii Menu files, I was able to pack the WAD no problem and install it. However, once I installed the WAD in Dolphin, problems arose. The initial setup went just fine, as it should have since I didn't mess with those files, however once I tried to select the Disc Channel, it all came crashing down, in a way more literal than I would have liked. Fatal exception. Unfortunately, my .ash recompression method had not worked properly. (For the sake of making sure the WAD itself wasn't the issue, I unpacked, repacked, and installed an unmodified version and it worked just fine.)</p>
<p><b>So where does this leave me?</b></p>
<p>When I originally started (and then lost) this article back when I did all this, it left me with no leads and nothing else to try, or at least nothing I could think of. Thankfully, a fellow nerd known as <a href=https://github.com/Garhoogin>Garhoogin</a> gave me some extremely valuable information. It turns out I wasn't understanding the Wii's file formats correctly (specfically the .arc and .ash formats). Only .ash files are compressed, whereas .arc files are just archives. That's why adding the LZ77 compression to the .arc didn't help; it's not a compressed file. So now my new plan is as follows:</p>
<ol>
<li>Do everything I did last time up the the recompression part</li>
<li>Pack diskBann/arc into diskBann.arc, <i>without</i> LZ77 compression</li>
<li>Compress diskBann.arc into diskbann.ash, <i>with</i> LZ77 compression</li>
<li>Put diskBann.ash at 00000001/layout/common/ and compress 00000001.app</li>
<li>Pack the WAD and install in Dolphin</li>
<li>Profit (in theory)</li>
</ol>
<p>So, for now I leave you here. Hopefully there will be an update soon, as I intend to follow the plan above in the next few days so that I can make an update to this faster than last time.
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,373 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Cleaning Up CC64 | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Cleaning Up CC64">
<meta property="og:locale" content="en_US">
<meta name="description" content="Cleaning Up CC64 | rmc's site">
<meta property="og:description" content="Cleaning Up CC64 | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Cleaning Up CC64</h1>
<h3>2021-05-03</h3>
<h4>IanSkinner1982</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<style>
code {
font-family: Consolas,"courier new";
color: crimson;
background-color: #f1f1f1;
padding: 2px;
font-size: 70%;
}
pre {
background-color: #f1f1f1;
padding: 2px;
}
</style>
<p>This article is to explain how I made Cookie Clicker C64 item buying more efficient. This probably isnt the most interesting article, but you may enjoy it nonetheless.
<br>
Here is the layout of a page in the store:
<br>
<br>
<code>1. Print a page in the store
<br>
2. Buy certain items depending on the pressed key (goes to sections 4-7)
<br>
3. Switch page if + or - is pressed
<br>
-------------------------
<br>
4. item 1 buying code
<br>
5. item 2 buying code
<br>
6. item 3 buying code
<br>
7. item 4 buying code
<br>
</code>
<br>
Now, this is for 1 page in a store. The store has over 5 pages… with 4 item buying routines each. Too much code, right? Well that's why I came up with an idea to make it better. First, let me explain how the store looks. You have 3 lines for each item. The setup is as follows:
<br>
<pre>
Item Name Amount Owned Ex. Cursors 69
Description of item Adds .1 cookies per second
Price of item 1000c
</pre>
<br>
I decided that I would put all the building info in a sequential and save it to a few arrays. (I'd have a name array, a price array, a description array and an amount array) It might not make sense why I did this, but you'll see why soon.
Instead of printing a whole page, I'd print the values in the array. So...
<br>
<br>
<code>
1. Select a range depending on the page selected. (0-3, 4-7, 8-12, etc)
<br>
2. Print the values in the range selected for each array
<br>
I will now add a for...next loop to handle all the menu printing. It will go through the range selected and print the desired values.
</code>
<br>
<br>
I have replaced all the page printing code with just 2 parts. (each page display would take 20 or so lines, meaning if I had 5 pages that would be 100 lines. With this new method, I need around 8-10 lines to load the array values, and 9 lines to print any selected page. With 5 pages, that is only 17-19 lines!) I can also add a whole new page just by adding one line of code.
<br>
Figuring out how to select an item with this new design was tough. I decided to assign a value to each item of the page. (x) If the input was within 1-4, then you will be sent to the buying routine.
<br>
<br>
<code>
1. Reset x and read keyboard input
<br>
2. Exit on a change of the current page or menu
<br>
3. Enter buying routine if an item was selected. (if x=1-4)
</code>
<br>
<br>
This ended up taking 18 lines instead of 50 lines for all the pages. Not a big improvement, but it is still good to clean stuff up.
<br>
As mentioned earlier, there are four blocks of code for buying items per page. Each bit of code was 6 lines. 6*4*5 is 120 lines. (still assuming I need 5 pages) Yeesh.
I have to chop that down.
Before, it was like this for each item:
<br>
<br>
<code>
1. Compare price and cookies
<br>
2. Subtract price
<br>
3. Add gain to gain.
<br>
4. Update amount owned.
<br>
5. Add 15% to price.
<br>
6. Update screen with new price and amount owned.
</code>
<br>
<br>
Now, once you have selected a item, it will do this:
<br>
<br>
<code>
1. Load the item number. (y=i+x-1) (i is the low number in the range)
<br>
2. Compare price(y) with your total cookies. (see if you can buy it)
<br>
3. Subtract price(y) from your cookies. Add the gain to gain(y). Multiply price(y) by 1.15. Add one to the amount owned
<br>
4. Update the price and amount owned on the screen. (this takes up a few more lines to determine where the item you want updated is)
<br>
<br>
(What is the gain? With Cookie Clicker, an idle game, the game is always adding something to your total amount of cookies. This is your CpS, or in this case, Gain. I made it so each item has its own gain. (in this case, gain(y)) All gains are added, and that is the total gain. The total gain is added to the amount of cookies you have.)
</code>
<br>
<br>
Now we have one routine shared by all items. So instead of 120 lines, we end up with 12 lines to handle all the items. If I were to add a thousand more items, it would still only be 12 lines.
<br>
<br>
In all, this took a week to figure out, and a few days to debug. In the end I got it to work, but I had to change a few things. All the ideas here still apply though.
<br>
Thanks for reading this extremely boring article!
</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,260 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Stylizing The Site | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Stylizing The Site">
<meta property="og:locale" content="en_US">
<meta name="description" content="Stylizing The Site | rmc's site">
<meta property="og:description" content="Stylizing The Site | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Stylizing The Site</h1>
<h3>2021-05-15</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p>So as you've probably noticed if you got this far on the site, we've finally added CSS. For a while (from the start of the website on January 29th, actually) it became a joke of sorts that this site had absolutely no styling. That was mainly because of how annoying CSS can be, and also how bad <a href="https://ninjacheetah.github.io">my other site that uses CSS looks.</a> <sub>Editor's note: this article was written before NinjaCheetah overhauled his site in 2022.</sub></p>
<p>What started me off on making this site look better was some free time I had during school just yesterday. I decided to open GIMP and just see if I could create some sort of banner. It ended up coming out really good (in my opinion at least) so I added it to the website. From there, I decided to try and add the nav bar I used on my old site to this one, but this time actually make it look good. From there, I didn't like that the banner and nav bar used Sans-Serif but the body used Times New Roman, so more CSS it was! Eventually, with the help of <a href="/members/ianskinner1982">IanSkinner1982</a>, we managed to get the banner and nav bar to stretch to the edges of the screen which greatly improved how it looked. All I did after that was add the GitHub and Discord link icons, and it was done! (also for the record I have no idea if this is in chronological order)</p>
<p>I woke up this morning and had an idea: more banners! So I created banners for the <a href="/programs/">Programs page<a> and the <a href="/members/">Members page</a>, which both also came out pretty good (again, in my opinion at least). So for now, I think that just about wraps up our website "renovation". We will of course still add new things, but there shouldn't be any major changes coming soon.</p>
<p>Sorry for the short article, but I felt like it would be better to at least say something about it than nothing.</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,269 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Copyright Issues | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Copyright Issues">
<meta property="og:locale" content="en_US">
<meta name="description" content="Copyright Issues | rmc's site">
<meta property="og:description" content="Copyright Issues | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Copyright Issues</h1>
<h3>2021-05-17</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p><b>DISCLAIMER!</b> This article is about <i>my</i> experiences with false copyright claims. This is not a critique of the copyright system, only of the automatic copyright claim bots used on websites like YouTube or MediaFire.</p>
<p><b>Part I: The Claims</b></p>
<p>My first experience with a false-positive copyright claim was on YouTube when one of the pieces of music I made in GarageBand caused a video to get claimed. Twice in fact, once for each song I used. Now you would think that I could just appeal these claims with whatever proof they needed, right? Unfortunately this was not the case. (It should be noted that before submitting the appeal, I did my research and I am, in fact, allowed to use the loops provided by GarageBand for personal or commerical use.) Once I submitted the appeals, I was happy to see that the first was withdrawn, however that was short lived when a few days later I discovered that my second appeal had been <i>rejected.</i> (Thinking about it now, I wonder if I could have pursued that further since now a real person was saying that they owned something that they did not.) Another interesting fact about that claim is that I could not find the copyrighted music I supposedly used anywhere online, and believe me, I looked.</p>
<p>My second experience wasn't a claim but instead a takedown. I had been hosting downloads for the music that I made in GarageBand (same songs that caused trouble on YouTube) so I could link to the files on my website. I eventually discovered when linking to one of them that they had just been removed with 0 warning and could no longer be downloaded. Below is an image of what you get if you <a href="https://www.mediafire.com/file/rrjlp7nc3mowrji/Da_Song.m4a/file">visit the download page</a>.</p>
<img src="https://cdn.ncxprogramming.com/file/blog/2021-05-17/blog-copyright1.png" style="max-width: 100%;">
<p>If you're interested, <a href="https://cdn.ncxprogramming.com/file/blog/2021-05-17/blog-dasong.m4a">here's the song I uploaded.</a> Definitely not what it says it was.</p>
<p><b>Part II: Why These Claims Happen</b></p>
<p>Most of these sites, especially ones like YouTube and Twitch, use bots that check audio in your video against samples of copyrighted music. The biggest issue with this system is that if any other sound matches a sample, the video or stream will be claimed. Here's a <a href="https://screenrant.com/twitch-streamers-dmca-sound-effects/">ScreenRant article about it.</a> (Not endorsing ScreenRant or their content, it was just the first good article I found about the issue.) The reason these false claims make it through is that there's nobody checking them, as soon as the bots detect something it thinks should be a claim, it just goes through with that. Programs aren't perfect, but it sure seems like they expect them to be. Judging from which of my songs were claimed, the reason was most likely that they contained a loop that was present in the copyrighted music that was supposedly playing.</p>
<p><b>Part III: Fixing The System</b></p>
<p>So now we're at the part where I give my thoughts about how this issue could be fixed. Remember that these are <i>my opinions</i> about this could be done. The first and most obvious solution is to <u>have the claims verified by a real person.</u> I would imagine that a large number of these false claims would stop happening if there were people who could check these and notice that the claimed content sounds nothing like the music that supposedly is being used.</p>
<p>Another, albiet more difficult, solution would be to improve or change the way these bots compare the source content to the copyrighted content. Evidently the "sampling" method leaves too much of a margin of error. One of the most obvious issues with it is that there are plenty of loops that you can either buy once or just use for free and if they're used in a piece of copyrighted music, then any content uploaded that contains that same loop will be claimed, as I've experienced firsthand.</p>
<p>Now obviously I don't make copyright claim bots, so I don't understand everything about how they work. I'm just hoping that my thoughts (and the thoughts of many others too) won't fall on deaf ears.</p>
<p>And with that, we've come to the end of this article. I know that this article was less fun for exciting compared to the Wii DVD Icon adventures, but this is something that I've wanted, needed really, to talk about for a while. -NinjaCheetah</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,275 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Moving On | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Moving On">
<meta property="og:locale" content="en_US">
<meta name="description" content="Moving On | rmc's site">
<meta property="og:description" content="Moving On | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Moving On</h1>
<h3>2021-08-14</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p>All good things must come to an end. And for me, that thing is my time working with C#. In this article I will outline my reasons for abandoning C# as well as what will happen with my C# programs.</p>
<h3>I. Why I'm Leaving It</h3>
<p><b>1. Free as in beer</b></p>
<p>One of my biggest issues with C# is the lack of open source. While all of my C# code is open, nothing about the language or its tools are. It's a proprietary language that uses proprietary tools and, if you're making a GUI app, only runs on a proprietary OS. So yes it may be free to use, but it offers no freedom.</p>
<p>With a language like C, there are options for what compiler you want to use because nothing about the language is proprietary. Or if, for example, let's say you'd like to make a GUI in C. You have several options, such as GTK+, which is an open source solution. When you're programming in C#, you have to use Microsoft's proprietary compiler and one of Microsoft's proprietary GUI frameworks, if you intend to make a GUI app.</p>
<p><b>2. Platforms</b></p>
<p>Another large issue I have is OS compatibility. C# desktop apps run only on Windows, and even then you have to install the .NET 5/Framework Desktop Runtime first. C# console apps can be run on Linux and macOS in addition to Windows, however you still need the .NET 5/Framework Runtime installed and you need launch the apps with the <code>dotnet run</code> command in the terminal.</p>
<p>On the other side, C code can be written to work on multiple platforms, and even if the same code won't you can (usually) make adjustments to let it run different code on different operating systems. (Of course Windows support can be a lot harder due to it not being POSIX compliant, read more about that <a href="/blog/pages/2021-08-16-c-on-windows">here</a>). C code also just runs on whatever OS it's compiled for, no need for any frameworks or runtimes, only the libraries for your program (and unless you're doing something crazy, a lot of common libraries you want to use might already be installed).</p>
<p><b>3. Abandoning Windows</b></p>
<p>My final reason for leaving C# behind is that I'd like to leave Windows behind, quite possibly for good. Since none of the GUI designer tools, <i>cough</i> Visual Studio <i>cough</i>, run on Linux or macOS (the 2 operating systems I will still have access to), then that leaves me with no way to continue developing my C# apps. And that brings me to the second part of this article:</p>
<h3>II. What will happen to my projects</h3>
<p><b>CSharpCollection</b></p>
<p>I'll keep this short. I have no intentions to continue developing CSharpCollection, or to pass it on to another developer. It is a test app and nothing more.</p>
<p><b>NCX-Core, XStore and NCX-News</b></p>
<p>While I, and by extension, NCX Programming, will still own the project, it is being passed on to <a href="https://github.com/rolfiee">Rolfie</a>, who will handle any future development or maintaining work. She will also be maintaining XStore. NCX-News will still be managed and updated by NCX Programming.</p>
<p><b>XWare</b></p>
<p>Like with NCX-Core, XWare will be passed on to <a href="https://github.com/rolfiee">Rolfie</a> as well.</p>
<h3>III. Closing words</h3>
<p>I'd like to wrap up this article by saying that this is by no means the end of any major NCX Programming projects. There will be more to come in the future, even if I don't know what they'll be now. That's all for now, and I'll be back next time with a fun Microsoft rant.</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,270 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>The Problems With C On Windows | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="The Problems With C On Windows">
<meta property="og:locale" content="en_US">
<meta name="description" content="The Problems With C On Windows | rmc's site">
<meta property="og:description" content="The Problems With C On Windows | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>The Problems With C On Windows</h1>
<h3>2021-08-16</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p><i>This will be a short article.</i></p>
<p>As much as I like using C, I have one big issue with it. And that problem is Windows.</p>
<p><b>1. Libraries</b></p>
<p>Compared to macOS and Linux, installing/obtaining libraries to use on Windows is difficult. If you're on a Debian or Arch system, you have <code>apt</code> or <code>pacman</code>, respectively. If you're on macOS, you have a few options, such as my package manager of choice, <code>brew</code>. But on Windows? You don't have those options. You have to find and download those libraries yourself in order to use them in your program. Now is this a huge deal? No, not really. It's just inconvenient, compared to macOS and Linux where you'll always be using the latest libraries, and they can be installed with one command.</p>
<p><b>2. POSIX Compliance</b></p>
<p>Windows is not POSIX Compliant.<sup>[1]</sup> Now what does this mean? <a href="https://en.wikipedia.org/wiki/POSIX">"The Portable Operating System Interface (POSIX) is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems."</a><sup>[1]</sup> One particular POSIX standard that it doesn't meet is the C POSIX standard,<sup>[2]</sup> which is what causes me issues. Because Windows does not follow these standards, it doesn't include many of the standard C libraries, and instead forces you to use the proprietary Windows libraries. While this isn't inherently a bad thing, it does kill compatibility between Linux/macOS and Windows. This deters me from making Windows-compatible software because I need to rework a lot of code to do it. With macOS and Linux the changes I need to make are often either minor or nonexistent.</p>
<p><b>3. Compiler</b></p>
<p>Tying in with the previous section, Windows requires its own proprietary compiler because it needs to be able to include the Windows libraries.</p>
<p><b>Finishing Off</b></p>
<p>Overall, if you intend to only make Windows programs, there's no reason to not use C. However if, like me, you want to make programs that run on multiple operating systems, you'll have to write completely different versions for POSIX compliant and non-POSIX compliant systems.</p>
<hr>
<p><b>Sources</b></p>
<p>1. <a href="https://en.wikipedia.org/wiki/POSIX">POSIX</a> Wikipedia, retrieved on August 15, 2021.</p>
<p>2. <a href="https://en.wikipedia.org/wiki/C_POSIX_library">C POSIX library</a> Wikipedia, retrieved on August 16, 2021.</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,275 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>The History of theVaultC | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="The History of theVaultC">
<meta property="og:locale" content="en_US">
<meta name="description" content="The History of theVaultC | rmc's site">
<meta property="og:description" content="The History of theVaultC | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>The History of theVaultC</h1>
<h3>2021-08-22</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p>I've decided that it's probably a good idea for me to take a break from the rant-type articles and write something a little more fun. So here it is! The history of our project theVaultC, up through the day this article comes out.</p>
<h3>I. theVault (The C# One)</h3>
<p>Before theVaultC, my equivalent project was theVault, which was written in C#. The only projects it had were GuessMyNumber, GraphicStuff, and helloWorld. GuessMyNumber and GraphicStuff in theVault are almost identical to the theVaultC versions. HelloWorld was not remade because I didn't think there was any reason to remake that, as it was written when I was actually new to C# console apps, and was actually a test. By the time I started on theVaultC, I was already past that point with C.</p>
<p>I finally decided to abandon theVault when I decided to slow down (so that I could eventually stop) my work on C# programs. I archived it on March 19, which was the same day I had set up a workflow on the theVaultC repo, getting it to the point where it was practical to have it as a full replacement. The programs in it at that point were equal to the ones in theVault.</p>
<h3>II. theVaultC</h3>
<p>I decided to create theVaultC when I was learning C and wanted to create something to both test and show off my skill with C. I wanted to be able to replace theVault with it so I worked on creating versions of those programs in C. That is more or less all the history behind the program itself. In the next section I'm going to talk about the histories of each program in theVaultC.</p>
<h3>III. theVaultC's Programs</h3>
<p><b>GuessMyNumberC and GraphicStuffC</b></p>
<p>I'm grouping these two together because they have the same history. As I've already mentioned, these were recreations of the theVault programs.</p>
<p><b>PrintUnixTime</b></p>
<p>PrintUnixTime was originally a quick test that I made when I was learning how to seed random numbers using <code>time(0)</code>. After learning how it worked, I constructed it to print the number of seconds since Unix time "began" (also known as the Unix Epoch<sup>[1]</sup>) on 1 January 1970. I made this example program that just read the value from <code>time(0)</code> and printed it as a cool way to check how many seconds it's currently at, and then decided to add to theVaultC.</p>
<p><b>RNGTool</b></p>
<p>RNGTool (also known as the theVaultC program that has a name that is way too cool for what it is) is a program that generates random numbers. It also lets you enter a maximum and minimum number that you'd like be generated. I only created it because I had been working on random number generation when optimizing GuessMyNumberC, and wanted to use it in another program just for fun.</p>
<p><b>WordGenerator</b></p>
<p>WordGenerator is a (from the outside) simple-seeming program, that was actually the hardest to make by far out of all the theVaultC programs. I needed quite a bit of help from <a href="https://github.com/Garhoogin">Garhoogin</a> and <a href="https://github.com/Jonatan6">Jonatan6</a>, but in the end I got it done. It reads a list of words (conveniently located in a file named <code>words.txt</code>) and then picks a random selection of words from that list (the number of words it picks is random too!) and prints them. I don't quite remember when I first thought about this program, but it had been floating around for a while by the time that I finally got around to it.</p>
<p>I hope you found this little dive into the history of theVaultC interesting! Any questions? Feel free to <a href="mailto:github@ncxprogramming.com">shoot us an email!</a>
<hr>
<p><b>Sources</b></p>
<p>1. <a href="https://en.wikipedia.org/wiki/Unix_time">Unix time</a> Wikipedia, retrieved on August 22, 2021</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,264 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Unsupported Mac Adventures | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Unsupported Mac Adventures">
<meta property="og:locale" content="en_US">
<meta name="description" content="Unsupported Mac Adventures | rmc's site">
<meta property="og:description" content="Unsupported Mac Adventures | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Unsupported Mac Adventures</h1>
<h3>2021-09-21</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p>So as a fun way to document my work on my MacBooks, I thought I'd make a blog article out of them. Blog articles that are actually about our software will be coming soon.</p>
<h3>Part 1: My First Macbook</h3>
<p>The first old Mac I had to work on was my parents old 2010 White Unibody MacBook (Model identifier <code>MacBook7,2</code>) with 4GB of RAM, a 500GB HDD and a 2.4GHz Core 2 Duo CPU. The title of this part has a double meaning of sorts. It was indeed the first MacBook I experimented with, but it was also the first MacBook I ever used (and also the first computer I really used) and is what really got me interested in computers, so it's pretty cool that I've now come back to it.</p>
<p>When I first pulled it out, all I knew about was <a href="http://dosdude1.com/mojave/">dosdude1's Mojave patcher</a>, so my intention was just to install Mojave and then tinker with that. The installation was relatively uneventful, other than the minor stress I had from doing a BootROM update (since an interruption could brick your Mac!). I only had to do that update because this Mac was still running the macOS (or more accurately, Mac OS X) version that it came with, 10.6 Snow Leopard, and so it never got the APFS support update that I needed for Mojave updates to work, otherwise I would have avoided it.</p>
<p>After a while, I wanted some programs (mostly just Xcode) that needed Catalina, so I decided to check the compatibility list for <a href="http://dosdude1.com/catalina/"> dosdude1's Catalina patcher</a>... Lo and behold, my Mac was on the list! So I immediately went and downloaded the patcher and began preparing my USB, making sure to get a backup first (I learned my lesson after one of my laptops' HDD failed). Attempting to upgrade failed, but luckily one fresh install and a restore later and I had Catalina up and running with all my files, and that was enough for me.. For about a month.</p>
<p>Mostly by chance, I went to check on the MacRumours <a href="https://forums.macrumors.com/threads/macos-11-big-sur-on-unsupported-macs-thread.2242172/">macOS 11 Big Sur on Unsupported Macs</a> thread, and discovered that someone going by ASentientBot had added Graphical Acceleration back to older, non-metal GPUs, and mine was one of the ones it supported! So, like before, I made a backup and got to work getting my USB all set up. This time I was using <a href="https://github.com/dortania/OpenCore-Legacy-Patcher">OpenCore Legacy Patcher</a> instead of an OS patcher like dosdude1's, which allowed system updates without having to re-patch the system (possibly excluding the GPU Acceleration patches, I never got a chance to test that). This process was a lot more of a headache than for Mojave and Catalina. My biggest issue was that once I had Big Sur installed, it would lock up on boot when the progress bar was about 1/3 of the way across. I eventually figured out that the NVRAM needed to be reset, and since then that Mac has been running Big Sur about as smoothly (or likely more so) than you'd expect for an 11 year old Mac. It's honestly quite impressive that such an old Mac can still run the latest macOS version without too much trouble.</p>
<p>So for now, that's all. At some point in the future (might be the next article, might not be) I'll continue this and will talk about my new(ish) MacBook Pro and the adventures I've had getting Big Sur running on that one.</p>
<p>Also, here's a fun fact: almost every article on this blog was written on that 2010 White MacBook!</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,266 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Unsupported Mac Adventures Part 2 | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Unsupported Mac Adventures Part 2">
<meta property="og:locale" content="en_US">
<meta name="description" content="Unsupported Mac Adventures Part 2 | rmc's site">
<meta property="og:description" content="Unsupported Mac Adventures Part 2 | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Unsupported Mac Adventures Part 2</h1>
<h3>2021-10-01</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<h3>Part 2: My First Personal MacBook</h3>
<p>The second old (but newer than the other!) Mac that I had was a 2012 Unibody MacBook Pro (Model identifier <code>MacBookPro9,2</code>) with 4GB RAM, a 500GB HDD, and a 2.5 GHz Dual-Core Intel Core i5 CPU. This MacBook Pro was the first MacBook that was actually mine as the 2010 White MacBook is still my parents'.</p>
<p>When I got this one, I already knew that I'd need <a href="https://github.com/dortania/OpenCore-Legacy-Patcher">OpenCore Legacy Patcher</a> to patch it. The nice thing about this Mac is that it supports Apple's Metal API, meaning that it could do graphical acceleration in Big Sur wthout any patches (so I can use System Integrity Protection and Secure Boot Model!). Before patching though, I took the SSD out of my ThinkPad, which is a Samsung EVO 960, and put it in the Mac. I tried using it with the 5400RPM HDD that it came with in Catalina and it was too slow for me, especially coming from an SSD in my old Mac.</p>
<p>The initial patching went fine and I had Big Sur up and running without any issues. However, after updating from Big Sur 11.5.2 to Big Sur 11.6, I started to notice crashing. Apps and system processes would experience a memory leak of some kind, and then would crash itself and other programs until I either rebooted or a kernel panic occurred (I later discovered that the 11.6 update had no relevance). I tried debugging it by changing some OCLP settings and repatching, but it wouldn't help. My next idea was that maybe my backup, which came from my original patched Mojave install and had been updated through every version since, was causing problems because of all the potentially left over patches. Unfortunately a clean install of 11.6 didn't fix it.</p>
<p>After that I decided to wipe and do a fresh install of 11.5.2, because at this point I thought that the software update had caused my issues. Judging from the fact that the crashing still happened, it was safe to say that 11.6 wasn't the issue.</p>
<p>I then turned my attention to potential hardware problems. The first and easiest thing to try was putting the HDD back in and installing Big Sur to that, just in the off chance that something was wrong with my SSD (not that I though there was, since it was relatively new). No luck there. I then ran <a href="https://www.memtest86.com">memtest86</a>, a free bootable environment for testing RAM, and all 4 passes passed the tests. So for the time being, I just gave up and accepted that I'd have to deal with the crashing.</p>
<p>Luckily, someone in the OCLP discord server knew of the issue and said you could use the command <code>sudo purge</code> to purge the leaking memory, effectively fixing the issue for the time being (it would still come back eventually). Since I couldn't open apps while it was crashing, I enabled SSH and created a shortcut in the Shortcuts app on my iPhone to run <code>sudo purge</code> over SSH right from my home screen whenever I needed it, which worked pretty well. I later created an Automation quick action workflow on the Mac itself so that I could run my workflow just by pressing a key combination. This would let me stop a crash that had already quit all my apps but hadn't killed Finder yet (as I needed at least one app to be open to run the workflow).</p>
<p>So, what now? At this point this is what I was wondering because I just couldn't figure out what was wrong. That is until someone suggested to me that my RAM might be bad, as they had RAM that was bad but could pass memtest86. So, like with the SSD, I stole the 8GB of RAM from my ThinkPad and put it in my Mac.</p>
<p>And that brings us to now, where I'm writing this article on my seemingly no longer crashing Mac. Will this be the end? I hope so. If it's not, expect a part 3 ;)</p>
<p>Another fun fact: most of RNGTool's code was written on this 2012 MacBook Pro! (the entire Jekyll conversion for this site was done on here too!)</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,274 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Giving NCX-Core Some CPR | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Giving NCX-Core Some CPR">
<meta property="og:locale" content="en_US">
<meta name="description" content="Giving NCX-Core Some CPR | rmc's site">
<meta property="og:description" content="Giving NCX-Core Some CPR | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Giving NCX-Core Some CPR</h1>
<h3>2021-12-07</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p><i>Welcome back to another edition of I Don't Stick With Anything.</i></p>
<p>I went back on my decision to completely stop using Windows because some stuff still absolutely requires it. <i>Chilling, isn't it?</i></p>
<h3>Atrocity #1: The Code</h3>
<p>Since I was already here using Windows 10 again (however it's the LTSC 2021 version so less telemetry and no Windows Store at least) I figured that I'd pop in and look at how NCX-Core's code was holding up (with the "new" and exciting VS2022!); this was my first mistake. Now to be fair I acknowledged that the code was bad when I first wrote it, but I hadn't quite realized just how severe it truly was. Most likely the worst (publically available) code I've ever written and ever will write. But hey, it was one of my first major projects so I can't be too hard on it.</p>
<p>Honestly I didn't do a lot to fix the code, but I did finally correct all of the incorrect file paths that would cause the program to inexplicably crash whenever it tried to access them since I continue to put off error handling. I also fixed a decent bit of inefficient code and removed a bunch of feature stubs that were just taking up space. Oh and button code stubs. There was a large amount of those for some reason.</p>
<h3>Atrocity #2: The GUI</h3>
<p>The GUI was the next thing I took another look at. Now, <i>overall</i> the GUI isn't awful. Yes, the fact that the Library has hardcoded icon positions is dumb and since even <i>I</i> don't have CSharpCollection installed, there's always an awkward gap in the first slot. The About screen is also not nice to look at. Oh and the Settings screen is far too empty. Like really.</p>
<p>The real issue with the GUI is all of the photo-based elements. This includes all of the buttons, menu bar items and program icons. If you weren't already aware, all of the buttons are PNGs. Really big PNGs. Like, really big.</p>
<img src="https://cdn.ncxprogramming.com/file/blog/2021-12-07/what-is-this-res.png" style="margin-left:8px;" alt="Image showing the resolution of the image is 1700x1100.">
<p>Yeah... And for some reason, I expected this to scale down to 104x66 for some reason (let's just ignore this bizarre resolution). I believe I though that the bigger the image the better it would scale down? I'm not even really sure at this point. So I decided step one for fixing this mess would be to create some brand new assets, this time as vector graphics so they'd scale down nicely. (Read 'A Love Letter to Vector Graphics' which may or may not ever come out for that backstory.) Since these are vector graphics, it means geometric shapes, which means that not only do they scale better but they also just look nicer to begin with. If you'd like to see a fun comparison, <a href="https://cdn.ncxprogramming.com/file/internal/NCX-Core%20Asset%20Pack.zip">click here</a> to download <code>NCX-Core Asset Pack.zip</code> from our not-CDN that has the old assets and the new ones.</p>
<p>With all of the new assets in, I can say that NCX-Core is now at least slightly less painful to use (not that anyone does anyway). Yay.</p>
<h3>The State of NCX-Core and its Future</h3>
<p><b>Can it be used?</b></p>
<p>Yes, but it's not very useful to anyone. I've made enough changes that it's now relatively usable. The issue is just that there's no real need for it.</p>
<p><b>If that's the case then what's going to happen to it?</b></p>
<p>I honestly don't know. My current plan is to finish polishing what's there and release it as v3.2, and then leave it. It's an important piece of "programmer history" so it's not going to get deleted or be privated. For now it's also not going to be archived. So if I ever decide to pick it up and use it's code for something new it's there.</p>
<h3>Wow this was kind of sad</h3>
<p>Yeah I know. But, officially saying this is done-ish means I'm finally going to stop holding out on NCX-Core-Lite and work on a proper big program, so stay tuned!</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,260 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Love Letter to Vector Graphics | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Love Letter to Vector Graphics">
<meta property="og:locale" content="en_US">
<meta name="description" content="Love Letter to Vector Graphics | rmc's site">
<meta property="og:description" content="Love Letter to Vector Graphics | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Love Letter to Vector Graphics</h1>
<h3>2021-12-07</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p>I finally reached that point in my life where I learned what an SVG is! Not sure how I made it this far without that knowledge.</p>
<p>If you don't know what vector graphics are, I suggest reading <a href="https://en.wikipedia.org/wiki/Scalable_Vector_Graphics">Wikipedia - Scalable Vector Graphics</a> first. To sum it up briefly, SVGs are made of geometric shapes instead of pixels so they can be easily scaled up without losing quality.</p>
<p>Currently I'm only making brand new images as SVGs, but I intend to remake some other old images, especially the banners on this site. If you have a really big monitor (or at least one that's really high res), you can really see this difference by visiting either <a href="/">the homepage</a> or <a href="/programs">the programs page</a> and then <a href="/products/icons">our icon sales page</a> <i>(hmm what could this be)</i> and scroll down to the banner. Now, uh, I don't have a high-res screen (in fact my MacBook Pro is the last pre-Retina display) so I have no idea if this will work. But it probably should. Feel free to yell at me in an issue or something if this doesn't work.</p>
<p>That's all for now. Look forward to some scalable goodness in the near future.</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,281 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bringing RNGTool to Your Pocket (Kinda) | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Bringing RNGTool to Your Pocket (Kinda)">
<meta property="og:locale" content="en_US">
<meta name="description" content="Bringing RNGTool to Your Pocket (Kinda) | rmc's site">
<meta property="og:description" content="Bringing RNGTool to Your Pocket (Kinda) | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Bringing RNGTool to Your Pocket (Kinda)</h1>
<h3>2022-01-07</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p>hey look, the first article of the year! happy new year!</p>
<p>So, what have I been up to recently (in terms of programming)? Mostly improving RNGTool. Since I've gotten more comfortable with Swift, it's started to push me away from C a little bit. Now I'm sure I'll return to it eventually, but for now this means I'm working on RNGTool and my websites exclusively. But hey, that means that RNGTool is becoming more usable!</p>
<p><b>Some quick clarification:</b> since this is Swift, the only pockets RNGTool is coming to are the ones with iPhones (or iPods (or even iPads if you have <i>really</i> big pockets)) in them. Sorry Android users.</p>
<p>So I finally made the realization that one can actually deploy iOS apps to their iDevices for testing. For some reason I genuinely thought you had to be an Apple Developer to even run your own app on your phone. Whoops. I also realized like 2 months later that I can actually run iDevice simulators on my Mac without much trouble so this wasn't even really an issue in the end.</p>
<p>Armed with this new information, I decided it was about time that I tried to port RNGTool to iOS. It's something that I've always wanted to do since I first created it but because of the afformentioned testing issues I didn't have a good way to make sure it actually did what it was supposed to. The basic porting process wasn't actually too hard. The beauty of Swift is that <i>most</i> code will work on all Apple platforms (especially since macOS 11.0, which added some previously iOS-specific features to Mac). At first the iOS version was actually just the macOS Swift files for the modes and settings with a new view listing. And then it got hard.</p>
<p>While my basic direct code porting was fine to get a working prototype, most of the UI was not really that usable. You can see this early UI below.</p>
<div style="display:inline-block;padding-left:8px;">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-01-07/rngtool-mobile-mode-list-beta.jpg" width="15%">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-01-07/rngtool-mobile-marble-mode-beta.jpg" width="15%">
</div>
<p>And thus began the quest to make RNGTool usable. I started with the settings, as they were a trainwreck that I unfortunately don't have any pictures of (and it was never committed to GitHub so it's long gone). These actually came out pretty well in the end. I managed to keep using the exact same code in both the macOS and iOS versions, just with different wrappings around the actual settings in the two <code>SettingsView.swift</code> files. The result is something arguably nicer to use than the macOS version, though I'll let you judge that for yourself.</p>
<div style="display:inline-block;padding-left:8px;">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-01-07/rngtool-mobile-settings1.png" width="15%">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-01-07/rngtool-mobile-settings2.png" width="15%">
</div>
<p>Next on the to-do list was to make brand new mobile-focused UIs for the actual generator modes. I tried to do what I did with the settings but it just wasn't working out; the UI needed to be basically redesigned from the ground up to work well on screens as small as 4 inches diagonally (looking at you, iPod Touch 7th gen). The easiest place to start was the text, so I shrank it all down until it was small enough to fit comfortably without being so small that it was hard to read. Then it was time to address the controls.</p>
<p>The annoying thing with the controls is that on macOS you really <i>have</i> to add extra properties to make them look decent. On iOS, however, that isn't an issue an raw controls look fine, excluding the buttons. The buttons needed some extra tinkering but what I came up with ended up looking pretty good, which is really only because all of my buttons use SF Symbols rather than text, so adding a rounded border was enough to make them big enough to press.</p>
<p>So by this point we've got working settings and working control (and of course functional number generation). What could possibly be left? Images.</p>
<p>While I briefly considered dropping the the dice and card images, I just felt like it would be weird since that was a feature I put a lot of time into on macOS. Thankfully, for literally the first time ever (that I can remember), math was useful in my code. Incredible, isn't it? I figured out how to read the usable screen size, and then used some fancy math to scale the dice and cards (as well as set the card offsets) to fit your screen nicely. The results can be seen below.</p>
<div style="display:inline-block;padding-left:8px;">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-01-07/rngtool-mobile-dice-mode.png" width="15%">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-01-07/rngtool-mobile-card-mode.png" width="15%">
</div>
<p>So with that, RNGTool on iOS reached what it is today (more or less, new features have been added that I'm not mentioning here because they weren't part of the inital port). Now, about the "Kinda" in the title. Unfortunately, as I'm not an Apple Developer, I can't publish the app on the App Store or really distribute it at all. So if you want to run it, you'll either need a Jailbroken device on iOS 15 (which is not currently possible) or a sideloading method like <a href="https://sideloadly.io">Sideloadly!</a> or <a href="https://altstore.io">AltStore</a>. I won't be covering that here, but neither of those programs are particularly hard to use, so it shouldn't be hard to get RNGTool installed. Downloads can be found in the <a href="https://github.com/NCX-Programming/RNGTool/releases/latest">latest release</a> or as a build artifact in the latest <a href="https://github.com/NCX-Programming/RNGTool/actions">GitHub Actions run</a>.</p>
<p>That's all for now! Hopefully it won't be a full month between articles next time.</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

View File

@ -0,0 +1,273 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bringing RNGTool to Your Wrist (Maybe) | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/styledsi.css">
<link id="pagestyle" rel="stylesheet" type="text/css" href="">
<link rel="alternate" type="application/atom+xml" href="https://ianskinner1982.github.io/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<script src="/assets/js/main.js"></script>
<meta property="og:title" content="Bringing RNGTool to Your Wrist (Maybe)">
<meta property="og:locale" content="en_US">
<meta name="description" content="Bringing RNGTool to Your Wrist (Maybe) | rmc's site">
<meta property="og:description" content="Bringing RNGTool to Your Wrist (Maybe) | rmc's site">
<link rel="canonical" href="https://ianskinner1982.github.io">
<meta property="og:url" content="https://ianskinner1982.github.io">
<meta property="og:site_name" content="rmc's site">
<meta property="og:image" content="https://ianskinner1982.github.io/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<style>
body {
background-image: url('/assets/dsi/background.jpg');
}
.nav ul {
list-style-type: none;
margin: 0;
padding: 0;
padding-left: 3.5%;
/* overflow: hidden; */
}
.navstd {
float: left;
}
.navalt {
float: right;
}
.container {
position: relative;
}
.imageOne {
z-index: 0;
}
.imageTwo {
z-index: 1;
}
.imageThree {
z-index: 2;
}
.image {
position: absolute;
width: 100px;
height: 100px;
}
.navimgoverlay {
opacity: 0.0;
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navimgoverlay:hover {
opacity: 1.0;
}
.navimg {
text-align: center;
float: left;
padding-top: .6vw;
width: 6vw;
height: auto;
}
.navicon {
text-align: center;
float: left;
padding-top: 2.1vw;
padding-left: 1.38vw;
width: 3.2vw;
height: auto;
}
.navedge {
text-align: center;
float: left;
margin: 1%;
width: 1.5vw;
height: auto;
}
.navpadding li {
padding-top: 1.5%;
}
.image2 {
position: absolute;
border-color: #FFFFFF
width: auto;
height: auto;
}
.titleimgoverlay {
margin: 0% 2% 0%;
opacity: 0.0;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleimgoverlay:hover {
opacity: 1.0;
}
.titleimg {
margin: 0% 2% 0%;
text-align: center;
float: left;
width: 16vw;
height: auto;
}
.titleedge {
text-align: center;
float: left;
margin: 1%;
width: 18vw;
height: auto;
}
.titlepadding li {
padding-top: 1.5%;
margin: 0% 2% 0%
}
</style>
<body>
<div class="nav">
<nav>
<ul>
<li class="navedge"><img src="/assets/dsi/leftbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
<div class="navpadding">
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/home.png" class="navicon"></div>
<div class="imageThree image"><a href="/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/twldevapps.png" class="navicon"></div>
<div class="imageThree image"><a href="/aaaaaaa/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/dsishop.gif" class="navicon"></div>
<div class="imageThree image"><a href="/gaming/htmls/DEBUG/startup.html"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/box.png" class="navimg"></div>
<div class="imageThree image"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/discord.png" class="navicon"></div>
<div class="imageThree image"><a href="https://discord.gg/XZxxZngwDQ"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
<li class="navimg">
<div class="container">
<div class="imageOne image"><img src="/assets/dsi/boxfull.png" class="navimg"></div>
<div class="imageTwo image"><img src="/assets/dsi/github.png" class="navicon"></div>
<div class="imageThree image"><a href="https://github.com/IanSkinner1982/ianskinner1982.github.io/"><img src="/assets/dsi/boxoverlay.png" class="navimgoverlay"></a></div>
</div>
</li>
</div>
<li class="navedge"><img src="/assets/dsi/rightbracket.png" style="width:1.5vw;height:auto;margin:auto;"/></li>
</ul>
</nav>
</div>
<div id="content-wrap">
<div class="text-center pt-3">
<h1>Bringing RNGTool to Your Wrist (Maybe)</h1>
<h3>2022-02-01</h3>
<h4>NinjaCheetah</h4>
<p><a href=/blog>&lt;- Back</a></p>
</div>
<div class="container">
<hr>
<p>Hmm this title sounds familiar...</p>
<p>More RNGTool updates! This time I'm porting RNGTool to watchOS rather than iOS. And it's interesting. The most difficult part of this is dealing with the limited screen real estate that the Apple Watch has. The solution? Cutting out the fat.</p>
<p>RNGTool is by no means a visually simple app. I've definitely overcomplicated its UI. This gives me a good chance to really cut out any parts of the app's UI that aren't needed so that you can fit the parts that matter. The actual process of porting the app's code was a lot easier than from macOS to iOS because most of the parts that aren't support on watchOS were being removed anyway, so I won't go over it here.</p>
<p>Here's the interesting part, a comparison of the iOS and watchOS apps:</p>
<div style="display:inline-block;padding-left:8px;">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-02-01/rngtool-mobile-number-mode.png" width="20%">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-02-01/rngtool-wrist-number-mode.png" width="15%">
</div>
<div style="display:inline-block;padding-left:8px;">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-02-01/rngtool-mobile-dice-mode.png" width="20%">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-02-01/rngtool-wrist-dice-mode.png" width="15%">
</div>
<div style="display:inline-block;padding-left:8px;">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-02-01/rngtool-mobile-about.png" width="20%">
<img src="https://cdn.ncxprogramming.com/file/blog/2022-02-01/rngtool-wrist-about.png" width="15%">
</div>
<p>Unfortunately those are all of the screens I've completely finished at this point. I will likely make a post updating on when I finish the rest.</p>
</div>
</div>
</body>
<footer>
<footer class="bg-light text-lg-start border-top align-items-center text-center" style="text-align:center;">
<div class="text-center p-3 align-items-center" style="font-size: 8px;">
Copyright &copy; 2021-<span id="footerDate"></span> Ian M. Skinner <a href="/contactus" class="text-reset fw-bold">Contact me.</a>
</div>
</footer>
</footer>
</html>

56
_site/404.html Normal file
View File

@ -0,0 +1,56 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Error 404 | rmc's site</title>
<link rel="icon" type="image/png" href="/icon.png"/>
<link rel="stylesheet" type="text/css" href="/assets/css/style.css">
<link rel="alternate" type="application/atom+xml" href="https://ncxprogramming.com/feed.xml">
<script src="/assets/bootstrap/js/bootstrap.bundle.js"></script>
<meta property="og:title" content="Error 404">
<meta property="og:locale" content="en_US">
<meta name="description" content="Error 404 | rmc's site">
<meta property="og:description" content="Error 404 | rmc's site">
<link rel="canonical" href="https://ncxprogramming.com">
<meta property="og:url" content="https://ncxprogramming.com">
<meta property="og:site_name" content="NCX Programming">
<meta property="og:image" content="https://ncxprogramming.com/icon.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<div id="content-wrap" style="padding-bottom: 2.5rem;">
<nav class="navbar navbar-dark navbar-expand-lg bg-black">
<div class="container-fluid">
<a class="navbar-brand" href="/">NCX Programming</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarText">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="/">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/programs/">Programs</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/blog">DS Stuff</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="text-center" style="color: #fff;">
<h1>404</h1>
<h1>Not Found</h1>
<p><a href="javascript:window.history.back()">Previous page</a></p>
<p><a href="/">Home</a></p>
</div>
</div>
</html>

339
_site/LICENSE Normal file
View File

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

5
_site/README.md Executable file
View File

@ -0,0 +1,5 @@
# IanSkinner1982.github.io
Imagine a making a website that is actually good. Couldn't be me.
Some parts of this site (the navbar) have taken from the [NCX Programming Website](https://github.com/NCX-Programming/site).

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,485 @@
/*!
* Bootstrap Reboot v5.1.3 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
:root {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg-rgb: 255, 255, 255;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-bg: #fff;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
background-color: currentColor;
border: 0;
opacity: 0.25;
}
hr:not([size]) {
height: 1px;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-bs-original-title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-left: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.2em;
background-color: #fcf8e3;
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: #0d6efd;
text-decoration: underline;
}
a:hover {
color: #0a58ca;
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: var(--bs-font-monospace);
font-size: 1em;
direction: ltr /* rtl:ignore */;
unicode-bidi: bidi-override;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: #d63384;
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.2rem 0.4rem;
font-size: 0.875em;
color: #fff;
background-color: #212529;
border-radius: 0.2rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
font-weight: 700;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: #6c757d;
text-align: left;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]::-webkit-calendar-picker-indicator {
display: none;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: left;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: left;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
outline-offset: -2px;
-webkit-appearance: textfield;
}
/* rtl:raw:
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-webkit-file-upload-button {
font: inherit;
}
::file-selector-button {
font: inherit;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,482 @@
/*!
* Bootstrap Reboot v5.1.3 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
:root {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg-rgb: 255, 255, 255;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-bg: #fff;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
background-color: currentColor;
border: 0;
opacity: 0.25;
}
hr:not([size]) {
height: 1px;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-bs-original-title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-right: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-right: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.2em;
background-color: #fcf8e3;
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: #0d6efd;
text-decoration: underline;
}
a:hover {
color: #0a58ca;
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: var(--bs-font-monospace);
font-size: 1em;
direction: ltr ;
unicode-bidi: bidi-override;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: #d63384;
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.2rem 0.4rem;
font-size: 0.875em;
color: #fff;
background-color: #212529;
border-radius: 0.2rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
font-weight: 700;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: #6c757d;
text-align: right;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]::-webkit-calendar-picker-indicator {
display: none;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: right;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: right;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
outline-offset: -2px;
-webkit-appearance: textfield;
}
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-webkit-file-upload-button {
font: inherit;
}
::file-selector-button {
font: inherit;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

11266
_site/assets/bootstrap/css/bootstrap.css vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

4999
_site/assets/bootstrap/js/bootstrap.esm.js vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

5046
_site/assets/bootstrap/js/bootstrap.js vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
@import '/assets/bootstrap/css/bootstrap.min.css';

View File

@ -0,0 +1,10 @@
#content-wrap {
padding-bottom: 2.5rem; /* Footer height */
}
#footer {
position: absolute;
bottom: 0;
width: 100%;
height: 2.5rem; /* Footer height */
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
_site/assets/dsi/box.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Some files were not shown because too many files have changed in this diff Show More