- Details
- Category: Blog
- By Stuart Mathews
- Hits: 4704
I think that change is a wonderful thing - and it is inspirational - you have the opportunity to put into action that which you have had a chance to evaluate... Sure, you can evaluate constantly but none is more effective than that done right before of some major required action. That being said, it is not always the case though, and change can be seen as an opportunity or failure.
The SAS for example, suggest that inducing unexpected circumstances in military training best confirms the effectiveness of the application of learning. I would probably agree with that and suggest that it would probably boost confidence in soldiers also.
Opportunity and failure: I believe which one depends not only on your mindset but also how persistent you are. The latter being a function I think of the practice, particularly of endurance generally, but perhaps specifically in overcoming obstacles consistently and dealing with new situations as they occur. I mean that's life pretty much, isn't it?
I think programmers deal with new and unexpected situations all the time - we rationalise, evaluate, apply and move on without any hoo-ha. In this way, I think we consume a lot of uncertainty. The next problem, however, is always more interesting.
Interestingly I think a lot of time is spent not on solving the problems but choosing the solutions that solve the problem for the longest time...as change is inevitable in software engineering. I have come to realise that trying to find the best solution is impossible, there are not enough knowns in any software project and it comes down to pretty much civil law: a balance of probabilities that the solution is effective given what we know.
It's not easy to remember past events, specifically the influences, feelings and effects that events had without revisiting them, which I think is crucial for well-being and confidence. Exercising and thinking about things helps to plan what to do next.
Voltaire once said: "No problem can withstand the assault of sustained thinking", but I'm paraphrasing because he was french - and would probably have said something like : "Aucun problème ne peut résister à l'assaut de pensées résolues."
For example, earlier this year I had to complete a three-part programming exercise online and it was daunting at first (this was as lockdown started, so tons of uncertainty), and I guess with any unexpected event, a degree of trepidation was felt for sure. After overcoming the difficulty of the exercise itself, not just the technical complexity of the scenarios, but also the psychological growth that occurred as a result, was the sense of self-determination...
I also participated in a live group-work session via skype to solve a much larger problem, using hand-drawn diagrams, evaluating requirements and establishing a strategy. I'm a whole lot more comfortable with this now and I guess that is what experience is: everything I've done in the past and have encountered has taught me something that I can use in the next round.
I've become a lot more confident for example because I realised while doing it, how much I really enjoy solving problems and modelling situations and the whole experience was actually a lot of fun. I ended up developing a parser for markdown in one scenario. The other scenarios required me implementing a tracking system by using virtual functions to invoke overriding behaviour in base classes and the other was to do with sorting.
Small things like the above, you often brush away as just being part of the work to be done, but in doing so you lose so much of the valuable tacit knowledge that is ultimately lost with time.
After this, I started a big project at work, research and the development, and learnt so much about distributed databases and sharding it's quite amazing. I'm well suited I think to work on large projects that are high in uncertainty. I also learnt a new language, (not french - Ruby) which I've quite enjoyed. See my discussion around Deadlocks and databases.
I also began a new course on Information Security which is pretty neat, I'm working in a more theoretical aspect in this course than I did in Network Security which, like Digital Forensics was highly technical. It is basically implementing ISO27001 by implementing an ISMS (Information Security Managment System), so I'm doing a lot of assessing of criteria, risks, controls, security requirements, policies etc... It's pretty interesting.
Besides that, recently I've been working on my 2D game engine which is currently undergoing a major refactor. I find if I can reason about a system within an A5 page in my notebook, then the system is sufficiently complex
I've got pretty much most of the basics in place, a resource manager that swaps in scene resources in and out of memory - that works ok, scene management is there a system of layer hierarchies to manage drawing using the painter's algorithm - zorder that is.
What I need now is to write a level editor to interface with the format of my resouces.xml file and scene{n}.xml file formats so I can create levels and co-ordinate placement of assets etc. I'll probably do this in C# using WPF.
My current focus right now is on my event manager which is my baby right now. I built it from scratch using some primitive ideas but which has translated into a pretty robust system, handing the distribution of work throughout the subsystems. What I'm looking to do now is incorporate some tests to keep the system green through its lifetime and have just recently introduced some using the same framework I used when testing my circular buffer in my audio programming class.
Apart from this, I've watched all the Alien movies, which are frankly quite awesome. I've also watched all the John Wick films too. I clocked up about 35+ Kms last week but my feet are all torn up and I've been hobbling around at times. I also performed a mini-surgery on my foot to strip away all the old skin after a pretty major blood blister - this was a major success.
The company I write software for bought me a pull-up machine for my apartment and offered to pay my gym membership which I think is pretty great, so during covid I've been pretty active: I can do about 10 pull-ups with relative ease now.
I wrote an article on Design Patterns: Representation, Transmission and Dependencies which I found interesting (but I'm biased) and released my architecture design in Mazer Game Architecture Report for my game architecture class.
I think the next 6 months are going to be even more intense and I'm gearing up for it!
You can't do everything but you can do something.
- Details
- Category: Blog
- By Stuart Mathews
- Hits: 4544
I've found working from home to be a lot more useful than perhaps I'd ever imagined it to be.
The routine and flexibility have allowed me to more easily complete my deliverables in many cases (though I do tend to go to be later). For example, I am able to go for runs more routinely, and my days are uninterrupted which helps me concentrate and make productive advances in my work.
Due to these advances, I've very much considering this to be my default modus operandi moving forward and reducing my travel and potentially my rent in the future...
At the moment I'm learning about various design patterns and as part of my ongoing research and even made a foray into Lambda Calculus while reading a paper by Haskell author Paul Hudak written in 1989. I find reading papers to be quite enjoyable, and immersive - particularly as I'm already at home after work with no tiresome commute.
I've realised that I very much like doing investigative work, research or otherwise. Particularly true of debugging in general or any aspect where I need to paint a clear understanding from an otherwise unknown or blurry set of circumstances. I really enjoyed the Digital Forensics course I did for example.
I guess at the heart of it, this is a form of conceptual modelling - piecing together understanding about the unknown. And I think it can be quite a personal thing, and therefor quite rewarding - because you've got to figure out, in your own way how something works ie make it understandable. This can be a very creative process. I find drawing pictures in my notebook the best way to model things and ideas, I'm also quite partial to using my Surface too.
My running has made leaps and bounds, I've increased my fitness to a large extend while under lock-down, which perhaps compensates for the amount that I'm eating too!
I recently I wrote about some aspects of the testing framework in Ruby RSpec let and let! differences which came up during a discussion and have found the platform generally useful.
I've also been re-writing a prototype game to use Functional programming paradigms and techniques to first show that it can be done, and to document what they are - for purely research basis.
As part of this and other ongoing learning, I've updated my LanguageExt tutorial (which had made it into an arctic vault), so will now be enjoyed for generations to come! It also happens to be its 1st Birthday this month.
I've added a new use case for demonstrating the Try<T> monad, which is such a useful thing but is something somehow, particularly people I've spoken to about it, haven't appreciated as much.
I've also been prodding around in J2EE code around using RX-Rest, Glassfish, JSF, JPA and EJBs but not in a huge way these days. I'm looking for excuses now.
- Details
- Category: Blog
- By Stuart Mathews
- Hits: 5040
Since Set Theory, Ruby and Upgrades, I've been focusing on learning new technologies recently [Changed jobs] 15. The primary focus of the new platform under development is on centralizing the view of your current separate clouds [Multi clouds] 15 and managing them from single operational, governance, security and cost management perspective.
The platform is based on Ruby on Rails and it is a completely new and another level of learning which centres around a platform that provides the tools to develop online or cloud-based systems. There is a striking resemblance to ASP.net MVC and Spring MVC however the added twist of needing to use ruby makes it an interesting proposition, not to mention's provision for metaprogramming.
I've been in the thick of learning about RSpec, FactoryGirl and the base Rails platform documentation. I've also been watching a lot of Plural Sight videos which has been quite a time-consuming process however an interesting diversion at times. I'm not even nearly made a dent in the materials.
I recently decided to write a simple game called Ruby Mazer entirely in Ruby over the May bank holiday weekend. This was really fun and got me conversational with ruby. I used a gem called Gosu to help with the drawing and input. The premise of the game is that you need to reach a point in the autogenerated maze without touching the maze walls in getting there. Once you get to the exit point, you are teleported to a new maze which is slightly more difficult. I used Prims Algorithm to generate and solve the models that make up the level generation routines. You can read up on the implementation in Ruby Mazer.
I've had to dial back on my recent reads [Recent reads] 15 as priorities have changed and I'm re-focusing on other things [Re-focus] 15, however as my learning curve goes down, I'll probably continue with them. This has also been the case with my running over the last two weeks.
Having said that I went for a run yesterday as described in Hot weather running. I just about survived. I also earned two new(3 actually) blisters for my efforts. I played my specifically created Spotify playlist. A particular good running tune is Micheal Jackson - The way you make me feel and Dance Monkey.
In other news, I've recently started focusing on Euclid. It's fairly slow going, however 'slow and steady wins the race'... It's quite nice to see how common rules like how the angles under at the base of an isosceles triangle are equal - is actually solved in an actual proof so as to show/explain/prove where/how this rationale came from [Proposition 5, Book 1] 15.
The other thing I like about the proofs is that they build upon each other. Initially, if you look at the rationale of a proposition, particularly the starting diagram [Proposition 3, Book 1] 15 it's not entirely clear however that it proceeds from the previous Proposition [Proposition 2, Book 1] 15. This is sometimes a pain however I do think the mental realization of connecting where the previous proposition left off and where this one derives from it perhaps is a necessary mental step. The first 7 triangle propositions have been an interesting diversion over the last couple of weeks.
I've also been heavily customizing my editor recently for my new workflow - see it here complete with split screens and git integration!
Now, I must not forget to sleep and must run more. Sleep and run, sleep and run and program in the middle (7 hours)
- Details
- Category: Blog
- By Stuart Mathews
- Hits: 4676
Since Time shifting, CS algorithms and Game Architecture, I've been exploring trivial set theory to gain insights into the theory of what defines a function from a purely mathematical standpoint, which as it happens, is the product of two sets. For example, let C represents a function in terms of a set \( C \subset A \times B \) such that it produces a set where \( \{(a,b): a \in A, b \in B\}\) and which references all the possible inputs and outputs of the function where \( C = A \mapsto B \).
Usually the nomenclature of a function is usually represented as \( F = X \mapsto Y\) and alternatively \( f(x) = y : x \in X \ y \in Y \). Obviously, if you spend some time going through the theory of functions as expressed on a graph such as a linear equation, the relationship between the dependant variable \(y\) and independent variable \(x\) has a clear relationship. In programming, this is generally interpreted as the running of a function's code as opposed to the evaluation of an equation or expression to realise the dependant variable's value.
The theory of sets is pretty interesting in its own right however its particularly interesting in the context of functional programming, particularly pure functions which are programming constructs which are trying to model the mathematical ideals of functions. A pure function represents a bijective mapping (both injective and surjective) of the product of the two sets (domain \(X\) and codomain \(Y\)). This means nothing else exists that influences \(y\) other than \(x\) (it's a direct mapping). This is a key consideration of pure functions in functional programming and immutability.
The reason its key is because this makes \(f(x)=y\) absolutely reliable because if you know \(x\), then you know \(y\). These ideas have implications for real-time processing environments like games because they usually rely on highly concurrent and often parallel execution of tasks, where reasoning about functions within a threading context requires predictability. This is among some of the research I'm doing at the moment.
Parallel executing tasks usually lock critical sections of shared state and these tasks (functions really) themselves are prone to producing non-deterministic results due to the very fact that they don't exhibit a bijective nature between their domain and codomains. Executing environments that rely on I/O and other external factors make it impossible to guarantee the result of any function that relies on it - not great for a function's predictability.
Making tasks pure, arguably makes them reliable and then you don't need locking either. My argument then, is that this will make games perform better - and more reliably. Though my research looks to determine at what cost this comes at, particularly when it comes to the code itself such as readability and maintainability etc.
Interestingly if you do some reading about Memorization, this relies on this behaviour of a bijective function too ie. you never need to evaluate that function again in the future - provided of course you store its input and output.
Apart from Mathematics, I've upgraded my Investment Management project to .net core 3.1 which takes it right up to the latest supported version. It was a bit of a pain doing it, as I had to go from .net core 2.0 -> 2.1 -> 2.2 -> 3.0 separately and then finally to 3.1. It wasn't that complicated but it wasn't seamless either.
I've also done some more Canal-side runs lately, which I've enjoyed.
Although I don't use functional programming for my day-to-day work in C# anymore, I've written a prototype game in C# which I'd like to 'functionalize'. I've come to appreciate the ideas and would like to explore its applicability to game development now. I'm slowly reading through Functional Programming in C# and I'm weaving it in with the other readings I have going on. I've got through the first 2 chapters so I've yet to make real headway. I produced a tutorial about functional programming in C# (which got good feedback) and this, I guess is an extension of that.
There is scope to incorporate Scala into my future work and there are functional aspects to Ruby (see later) - so the trajectory is in the same direction, generally. So I'll not be dropping it quite yet.
I've also been playing around with latex, trying to get it working on my blog(which I've managed to do) and I think moving forward I'd like to use it to write up some of my work moving forward.
I've managed to get out my project proposal which is entitled "Evaluating and Applying Functional Programming Paradigms in Developing Computer Games using C# and MonoGame", though I had to chase up my supervisor to review the draft and by the time he'd done it, my proposal had diverged significantly and thankfully his comments were largely already covered in my revised version. I incorporated some of his comments however which was helpful. I'll need to start working on the delivery of it.
I'm slowly making it through A mind for numbers having made it through the first 3 chapters. I'm also learning more about Linear Equations and relationships between numbers, specifically the dependant and independent variables that constitute formulae (given my earlier foray into functions) such as trivial straight line equations in the form of \(y = mx +c \). I find it quite interesting going through it. I'm finding it quite useful for reinterpreting some of the fundamental algebraic ideas and others such as understanding the nature of proportional relationships (the meaning of gradients for example).
I've pretty much stalled on applying my linear algebra learning to 3D transformations (which is the stuff I need to do next and finish...DirectX math, coursework and some films) as I think I've been reading so much about it that I'm a little tired of it (I've read the first 6 chapters of 3D Game Programming Using DirectX 10 and OpenGL back-to-back as well as Frank D Luna's book - lots and lots of theory).
As a distraction, I bought a book a while ago which is old (managed DirectX 9 in C#) which I thought might be useful to obtain an alternative perspective on viewing transformations and the like, so I started to read that. I've got through the first 3 chapters and now I'm at a point where viewing transformations are being discussed. So I've got 3 books ready to get into about this! This one's obviously old and managed direct X is no longer a product, but it's exciting none-the-less. I've got to avert my eyes when I see some of the device enumeration and selection code as some of it now does not apply to later versions of Direct X with the version I'm most familiar with (DX10) being the one that did away with the compatibility checking code that features in this book. It is however nice to be back in C#.
I created a nice little C++ vehicle that shows the current frames per second and I'll use this as the basis for my next work, which should be shortly. It will probably also include some HLSL and shader programming as that's required for the vertex transformations to occur.
I've also been learning Ruby and Ruby-On-Rails recently, not in a massive way yet. I've read the basic tutorial on the main website, followed 2 video tutorials on the subjects respectively, the first 4 chapters of "Eloquent Ruby" as well as the section on ruby in one of my programming books and created my first dummy rails application. I find text-based tutorials much more effective than a video, but I guess it depends on your time and motivations. My plan so far is to integrate it into my Investment Management project, using Resque and Redis as the basis of a background job management system, which I've already partially set up.
I've got Halo Wars, Metro Last Light, Dragons dogma and Dantes Inferno currently sprawled out on my couch and I've not played any of them yet. This means I've been pretty productive. I have played Mass Effect 3 though, that is until I got to a stage where I kept on getting killed and it started to annoy me - I stopped playing... You got to make games adaptively progressive!
There is still much to do, and only 2 more weeks to do it in!
- Details
- Category: Blog
- By Stuart Mathews
- Hits: 4943
Since Convolution, Running and Finite State Machines, I've spent the last couple of days focused on reading lotsa different stuff.
I'm currently alternating between a few books: "Introduction to 3D Game Programming with DirectX10", which is by Frank D Luna. It's quite technical however, it's accurate and provides good perspective, particularly around the basic math such as vectors and Matrices.
I'm also reading Rautenbach's "3D Game programming Using DirectX10 and OpenGL", which is one of my favourites reads on the subject. I think it is primarily because it does the best coverage of 3D transformation I've ever read and its got great illustrations too.
With "Foundations and fundamentals concepts of mathematics", I'm taking a history lesson at the moment into the axiomatic, deductive method used throughout history in describing math. I've been reading about the development of the deductive method used by Euclid and Archimedes and some of the histories behind how varying degrees of assumptions including Axioms and Postulates and how they are used, how they were formed and it is pretty insightful. It's theoretical but/and pleasingly so.
On a more practical note, I'm now also reading "A programmers introduction to mathematics" where we're trying to implement a secret code sharing mechanism using polynomial theory, which is a little more practical. This book takes a little longer to read than the others but I'm quite interested in it.
Last in my round-robin of reads is "A mind for numbers", which is more inspirational than technical and sits squarely within the genre of some my previous 'popular research' reads such as "Mindset" and "Bounce" as well as "The Checklist". It reads more like a novel/story than a technical book.
Apart from physical the books, which are stacked up next to me on my coffee table, I've been wondering the passages of the internet too. I recently came across a BBC learning page about computer science fundamentals.
It introduces algorithms such as those used for searching including linear and binary search methods and sorting too using methods such as bubble sort, selection sort, merge sort etc.
Its a series largely aimed at children but it has real application (just like any math would) and I found it particularly interesting and fun, which perhaps further suggests that perhaps I've not yet grown up.
It also maybe suggests that some computer science fundamentals are a little more known to children that they have ever been before as it was surprisingly well documented and entertaining as it included videos, examples and was suitable 'gamified'. The only thing missing I found was actual code implementations...
I spent some time implementing some of them for fun as I wanted to test myself.
My first test was implementing Bubble Sort - a linear time, O(n) sorting algorithm, pretty inefficient and slow but it's got a very defined and coordinated setup which makes it easily modelled.
I used a do() iteration construct, as you'll be swapping at least once and I count the number of swaps done through each iteration or 'pass' running through the list of numbers. The process ends when there are no more swapping to be done, which forms part of my exit condition in my loop and then the list is sorted:
public static void BubbleSort(ref int[] input)
{
int swapped;
do
{
swapped = 0;
for (int i = 0; i < input.Length-1; i++)
{
if (input[i] > input[i + 1])
{
var temp = input[i];
input[i] = input[i + 1];
input[i + 1] = temp;
swapped++;
}
}
} while(swapped > 0);
}
It was actually pretty fun doing this, and can surely be improved upon - Next, I tried the insertion sort:
Insertion sort
Insertion sort is a simple sorting algorithm that builds the final sorted array (or list) one item at a time. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort.
This is a little more difficult because you need to 'look' back to see if any prior elements, so it needs a nested loop. One loop for the initial pass-through of each of the elements and then for each element, scan the previous elements leading up to the element. Pretty inefficient, somthing in the region of say O(n^2) I'd imagine, but totally something that can be modelled in code:
public static void InsertionSort(ref int[] input)
{
for (int i = 0; i < input.Length; i++)
{
for (int j = 0; j < i; j++)
{
if (input[i] < input[j])
{
var save = input[j];
input[j] = input[i];
input[i] = save;
}
}
}
}
These all sorted the list in-place. I stopped there but I'm going to add a few in the future, probably the more complicated and more efficient ones as it's a pretty interesting and enlightening process, and helps me practise.
So in other news, I've finally completed my Network Security course, and I'm pretty much done with the Digital Signal Processing. Actually, the last piece of work I did on it was the course work(which ultimately replaced the exam) was where I needed to implement a Circular Buffer and then use it in creating audio effects in C++ using fmod, among other things.
One example of this was creating a delayed(or time-shifted) signal effect like a flanger...
This is what I ended up doing in C++:
One of the other things I had to do, was set up an occlusion effect whereby walking in front of an object would effectively cut off sound originating from the object.
I used FMods geometry system to construct a polygon that represented a wall and positioned that in front of my object. I then registered it with the fmod system. Pretty fun as we had to import a new mesh and render it in the OpenGL - which was the first time I'd used OpenGL.
Looking back at my DSP course, I actually enjoyed it, particularly the theory but also too the C++ and the work I did on the ringbuffer. We covered aspects including:
- Logarithms, Real and complex numbers
- Sampling and Quantization analogue continuous signals into digital
- Wave theory and properties of waves
- Signal correlation and the Fourier transform: Dot product, Autocorrelation, Cross-correlation, Cross-co-variance, the Correlation coefficient
- Frequency Analysis
- Filtering and convolution
I enjoyed learning about the Fourier transform the most, and I suspect in the future I'll be using it again...
Apart from my Network Security and DSP course, which has taken a lot of my spare time, I also managed to also complete the Game Architecture course.
As a result, I've written a game engine in C# and MonoGame and produced a representable prototype to represent it. The main concepts covered include:
- Resource Management Strategy
- Character Control and Decoupled Input
- Collision Detection
- Moving and animated game elements and frame-rate independence
- The configurable game world and data-driven approach
- Decoupled removal of game objects from collision detection
- Scoring System use of event listeners
- High score or alternative state load/save mechanism
- Start-screen with FSM
- Power-ups using event listeners and re-use of base classes for game objects
- NPC opponents demonstrating FSM
- Overall game-play and presentation
I have a bit of a demonstration of a PAC-man like game which features collision detection, primitive AI and animation. It's very basic and is really just a prototype (not a whole game) to demonstrate the underlying architectural designs and concepts in the game code:
I started with a simple concept of a GameObject which takes on a lot of the functionality and responsibility of typical game situations such as calculating bounding boxes, doing collision detection and common updating routines, drawing and initializing of components etc.
Apart from the actual coding which has taken a lot of my time, I've also spent a considerable amount of time distilling the design decisions of my game engine into a report, which really helped me take stock of all the code I'd been writing, specifically the architectural aspects.
There have been a A few runs during the stay-in phase which are notable.
Yesterday, I put in Mass Effect 3 into the XBox and played a little bit, enough to cure the Krogen of the Genofage but I died like 20 times before I was able to finish the mission. But the persistence paid off!
I also upgraded my Investment Tracker application to Angular 6 from 5.2 which wasn't that bad however I'm a bit stuck now as I can't upgrade beyond that as I've got a strong dependency on a component that won't upgrade further - which I'll need to look to remove in the future but not a big issue right now.
I'm thinking of doing another project that uses my new knowledge around signal processing to implement a sort of Strava-like application in Angular 8/9 but the jury is out on the schedule of that. I've got a few weeks break before things start going again!
- Details
- Category: Blog
- By Stuart Mathews
- Hits: 4782
Since Encryption and network protocols, I wrote about Common network attacks and the shortcomings of standard network defences.
Apart from that, I've made some good progress using the classic MonoGame/XNA game tutorial which I manually reproduced a few weekends ago (https://github.com/stumathews/WindowsShooterGame).
I spent most of the day writing it up and trying to figure it out and I think its a great learning exercise. The fundamental concepts of which are to delegate as much detail to co-operating objects and then ask them to update() their states (or modify the world state) and draw themselves().
I've been trying to put into context some of the concepts I've learnt during the Computer Games Architectures course I'm doing too:
Recently we've touched on how to separate the architectural components into layers and how the organisation of components within a typical game engine is laid out. We've put together some theory about architectural design patterns and I'm quite enthused that my reading on the subject, pertain specifically to game development was used as a reference to MVC. I wrote this a while ago before I decided to take the course: A simple game engine architecture. This tells me that I'm doing the right course. There is also some application of physics slowly coming into the course which is great.
I've also spent quite some time learning about digital sampling and the quantisation of analogue signals into digital ones and representing them mathematically.
This is part of the game development course and it goes through the physics of audio. Basic topics include investigating sampling frequencies, downsampling/aliasing, filters, Nyquist frequency, sine, triangle, triangle and sawtooth wave patterns including Envelope generators(ADSR).
I'm also finding the mathematics fascinating, particularly the representation and modelling of waves. I've enjoyed learning about the Fourier transform and as a result, an application of complex numbers - which is something new and therefore interesting.
Last weekend I spent it doing practicals for my Network Security course work. I set up various switches and routers and configuring firewalls and routes. Very interesting. Quite a time-consuming. Details of that setup are here:
I also spent time investigating the EK Angler attack and used some interesting tools that report the attack such as Snort, Sguil, Bro, Elsa and of course...Wireshark. The attack particulars of the attack are quite interesting however the details are quite well described by Palo Alto networks here.
I used the Security Onion VM to research. I've long since uninstalled Tails...
Since then, however, I've been focusing on digital signal processing and physics. I've spent most of this weekend, going through a set of lessons described as the recommended reading. If I'm going to pass the exam, I've got to study as much of it as I can within the time I have left.
I think the most useful, apparent link I've made to gaming with regards to the theory of waves, which does seem out of place - is the representation of Tones or harmonics ie, that when running through an ASDR envelope, produce a noticeable variation of the sound which is very reminiscent of game sounds (less sharp but more tapered loudnesses). This is in fact exactly what ASDR envelopes do - they modulate the loudness over the duration of the tone. In other words, it's apparent that tones in games have been run through an ADSR envelope to make them sound better.
The mathematics is dry due to its abstractness however the fun is extracted by applying it to real practical pictures and realisation of ideas and concepts like - the motion of pressure waves, compressions and rarefaction. It also makes for more enlightened appreciation.
It's clear that there is a lot of work still to do, for example, the 2-hour lectures hide many details and the various aspects that you need to spend like I did this weekend - 2 days to appreciate and fully understand! There is a good chance If I don't focus on the detail, pay attention and study now, then in a couple of weeks, I'll be far too behind to catch-up adequately.
The maths work, particularly with my tendencies to solely focus on non-physics and non-mathematics related ideas daily such as solving theoretical problems or modelling problems in code, leaves much to be practised, especially to participate adequately in the mathematical domain. This might seem daunting but I find it quite empowering as I need to learn new things which I'm not used to which adds variety to my attention.
Speaking on logical problems that I face each day, these don't have standardised rules and laws that mathematics and physics have. For example, I don't need to manipulate or model problems as known mathematics algorithms such as coding around creating sine waves. That being said, I've already seen that this will change in gaming: I was reading code recently that made level objects bounce in a sine wave pattern/form...expressed that using sine waves in the code. That is something I don't do every day!
I think my everyday non-game related problems are logical - almost implicit, theoretical reasoning-related problems, not explicit formal manipulations of discrete math. That being said, I've found that my every-day type of thinking is more akin to the kind of thinking one does in physics - more contemplative, reflective and then I suppose, applicative by the realisation of code. Though, this might be a fallacy.
I also spent this weekend writing some code to decouple the input sensing code from the action that is performed as a result of that input sensing code. This is one of the key ideas that the computer games architectures course teaches. We're using Monogame and I was using events and delegates to represent this.
There is a lot to learn, and much sleeping has not happened because of it.
In other news, my trusty reliable laptop has started to show its age, though not in ways you might think. I've used the same laptop for almost 9 years and I've not noticed a single thing that appears to me that it's getting old. Ok, it might look old: https://www.cnet.com/reviews/lenovo-thinkpad-x220-review/, and the guy next to me in my gaming class says it looks like a big calculator! And I agree it ain't pretty, though Ironically, his gaming laptop is like a spaceship...not pretty either.
Anyway, I can run many browser tabs, none of the applications is slow - no degradations at all. So how has it shown its age? Unfortunately in the unlikeliest of places: drivers.
My graphics card, while absolutely capable of OpenGL cannot be used in Windows 10 because of the driver manufacturers (intel) have not added support for OpenGL for my particular graphics card, in Windows 10. So, its a limitation of the driver implementation in Windows 10, not the machine. If I ran Windows 8.1 - it would work ok. Attempts to get MonoDevelop and MonoGame on Ununbu are thus far inconclusive. Annoying.
With regards to my physical routine, with all the work and study, late nights and constancy of focus - waking up in the morning early to go to the gym has taken a hard hit. I went to the gym for the first time in months yesterday and it was tough. One thing that has offset this has been my running into the city. I've been able to do this with more frequency.
One noticeable change is that I've switched over from Strava Premium to TrainingPeaks. I'm following my fitness level through its TSS score and associated calculations.