owenSoft.net - Articles http://owensoft.net/ Reviews, previews and more text en http://owensoft.net http://owensoft.net/favicon.png owenSoft.net http://owensoft.net/
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3566/ The xbox helix situation (Articles) http://owensoft.net/v4/item/3566/ <a href="http://owensoft.net/v4/item/3566/"><img src="http://owensoft.net/v4/photo/thumb/7687.jpg" alt="related image" /></a><p>The video game console cycle starts again with the announcement of the Xbox Helix, set to launch in 2028. That is roughly 2 years away and the youtube shills have already started promoting the thing to the literal moon. While the corpse of the current Xbox Series X is not even cold yet. Might as well kick the current console in the nuts by announcing something new 2 years in advance.</p><p>The yt marketing is pretty much solidified on a few key points; PC/Console &quot;hybrid&quot;, backward compatibility???, steam store integration, easy development and game publishing. And lets not forget &quot;most powerful xbox ever&quot;, something they said about every console they ever release.</p><p>I will discuss each of these marketing points individually. These fantastical - &quot;lets wait and see&quot; - points that will surely fall through by the time this thing is released. Many commenters and youtubers are kicking the ball down the road trying to NOT form any opinion on this while praising the called &quot;potential&quot; of being able to play PC games. The idea is that PC games are popular or &quot;becoming&quot; popular because of fortnight/robox players - I am not sure - PC is popular just like how mobile gaming is popular. Its all snake oil. Anyway;</p><h4>PC/Console &quot;hybrid&quot;</h4><p>This is by far the biggest BS lie that is being mentioned. A PC/console hybrid thing cannot exist. The 2 concepts work against each other. They might even be polar opposites. Just because both can play games does not mean the games can co-exist in the same hardware. PC by definition is personal which includes customized hardware/software specs while consoles rely on fixed specification to maximize efficiency.<br /> <br />The fixed specs of consoles allow for optimizations which are only possible when you are working with exact limits and boundaries. Min-Maxing your config. The console scene has been fuzzed over the years with the introduction of &quot;pro&quot; consoles (<a rel='external' href='/v4/item/3361/' title='ps4 pro by Sony'>ps4 pro by Sony</a>) and &quot;quality vs performance&quot; settings. But the concept is still held strong with Nintendo and Sony. Xbox on the other hand has been doing all sorts of damage with the &quot;everything is a xbox&quot; marketing as well as releasing a xbox branded PC handheld that only plays PC games. (they later abandoned this bs)</p><p>PCs thrive on flexibility, being able to run any kind of software or hardware combination. this opens it up for hacking, modding, unlocking, emulators, over clocking etc. Stuff like that leads to bugs, updates, lots and lots of updates. Security updates, Update updates, game updates, driver updates, patches, you will never know what its downloading fixing at any point It is an unstable mess.</p><h4>backward compatibility</h4><p> <br />There is no point in waiting for the helix to play games that you can already play today on current xbox consoles. Xbox has been carrying the fake BC feature for years now, selling the old games at new game prices. The few who had already bought these BC games digitally get to look at them in a list of thumbnails forever locked to their online account.</p><p>The reason I call it fake &quot;BC&quot; is because xbox is more than likely recompiling or emulating these games in order to get them work on the newer consoles. Xbox is basically converting all their old games to PC builds and claiming BC. The downside of this kind of BC you only get a small selection of the old library because everything has to be re-licensed. You are not playing the old game - you are playing a new version of the old game. This relicensing includes altering the game to remove things, plus fixing bugs. Some would say its better than nothing but real BC plays old discs and the old content, not some recompiled-rerelease disc key bs. </p><h4>steam store integration</h4><p>I do not know why any well thinking video game company would want steam to be available on thier home hardware. There are probably millions of games on steam. Majority of which are made for keyboard and mouse. Why would you want to expose your user base to that level of abuse? It is madness. Not to mention the shovelware? How are you going to do quality control?</p><h4>Easy development and game publishing</h4><p>This is one of those situation where you have to ask why not do this now? why wait until new hardware is released to do something that can just do now on your current hardware. Makes absolutely no sense. Another thing to note is that all games are written on PC then compiled to work on console. There is no great difficulty in creating console games vs pc games in modern times (unreal, godot, unity etc). This &quot;easy development&quot; bs is made up to onboard indie devs to publish on xbox. If the devs dont see value in your platform why bother? This is not revolutionary. </p><h4>Conclusion</h4><p>I dont see this turning out well for Xbox Helix at all. If the world doesnt destroy itself in imperialist wars - this device is going to crash and burn in epic fashion. Overtime the concept and marketing will evolve to accommodate reality. As with everything nowadays the marketing will shift and sway in group think as the lies fade away. The console moniker will have to be dropped at some point which is when the sheet will hit the fan.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3566/#comment">Post your comments on this article</a></p> Fri, 13 Feb 2026 17:07:16 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3549/ Xbox Play Anywhere - gimmick or deeper troubles? (Articles) http://owensoft.net/v4/item/3549/ <p>In the constant move by xbox to get its player base comfortable with the <a rel='external' href='https://en.wikipedia.org/wiki/You&#039;ll_own_nothing_and_be_happy' title='&quot;owning nothing&quot;'>&quot;owning nothing&quot;</a> to get everyone off dedicated consoles on to PC master race. Xbox start promoting PlayAnywhere; something that PC gaming has had forever but nonexistent on consoles. PC gaming does have its own advantages and problems. But mostly problems - if you ask me. </p><p>The major problem with PC gaming is the constantly changing and varying hardware configuration, video cards, RAM sizes and formats. Many reviewers will not mention this fact because they have a sadistic relationship with PC gaming. They game on PC so they want everyone to game on PC. They will spend tonnes of money to setup up a PC just to play a single game at max settings. After which they will sell and repeat the cycle in a couple months. On the flip side console games will keep the same hardware for 5 to 10 years. The hardware stability gives console game devs room for performance improvements over time. Not so with PC gaming. PC game devs are constantly dealing with hardware fragmentation.</p><h4>Big pipeline</h4><p>How this relates to &quot;Play Anywhere&quot;(PA) gimmick I will try to explain. Shifting hardware is tightly coupled to &quot;PC Culture&quot;. If you bought a game for Windows or Linux in 2005 there is a good chance that you can play it today on any PC. This is not the same for Consoles. Console games are locked to the generation on which you bought them. This is the price you pay for having dedicated software that &quot;just works&quot;. The tight coupling makes everything better. Its a strength through limitations tactic. Its both a blessing and curse.</p><p>Play Anywhere(PA) can only exist if everyone is in PC Land. When this happens you can sell everyone a new PC box every month and for the suckers on the old box you simply send them patches until they just give up and buy a new PC box. PA is not an advantage, its a fools errand. There is a reason why the older consoles do not get new software patches every week. The limited hardware reduced the surface area for attacks and exploitation. Once you buy into PA/PC culture you lose stability and you gain a crab hole of hardware and software problems brought on by the competing needs of a constantly changing marketplace. You gain the &quot;churn&quot;. You start getting 3 year support and security patches every week.</p><p>Its bad enough with <a rel='external' href='/v4/item/3361/' title='&quot;pro&quot; consoles'>&quot;pro&quot; consoles</a>, and now you have handhelds + PC/Console hybrids that all need to be supported. The quick solution is &quot;game profiles&quot; that try to configure your custom PC to match a random game that was sent out into the PC world. Who is making these game profiles? </p><p>On the latest console they have performance vs quality modes which should have signaled the dead howl but since game reviewers are compromised they promoted this bastardization. There is no need for a quality vs performance setting - the dev should pick a balance and be done with it. But we cannot have nice things anymore, only pain, lots and lots of pain.</p><p>Back to PA; none of your old console games will work in the future because they will recompile then to PC as long as they still have the license. PA marks a line in the sand that says &quot;these games are Play anywhere&quot;, forget about the old games. The old stuff be dammed. The trick with digital games is that they can keep the prices of games permanently high, then drop random sales to create FOMO and keep people watching the market places like hungry puppies. </p><p>Digital game purchases are like youtube videos that you bookmark - it might be there is 10 years, it might not, it might lose half of its previous content, it might not. No one really knows what might happen to the data you pay for in the cloud. Own Nothing. You rent a license.</p><p>What happened to the <a rel='external' href='https://www.reddit.com/r/GTA/comments/8f48c1/full_list_of_all_removed_songs_from_grand_theft/' title='GTA4 sound track'>GTA4 sound track</a> can happen to any licensed content that lives in a market place that is constantly extorting the content producers as well as the people who consume it. The market place needs to constantly sell the new stuff while the old stuff is just an annoyance that is tolerated as padding for new suckers who sign up. When they want to stop paying the owner of content they simply delist it or start charging marketplace rent like a supermarket.</p><p>It is true there are options that you get access to 400 games as long as pay $50 dollars a month. But if you dig into it you will see that the service is a buffet that you cannot consume. The games are huge, often 50 gigs or more, while your local storage is small so you can only have 10 or so games installed at any point in time. You could play the games via &quot;cloud&quot; at a sub par resolution and framerate but only if you pay extra for good internet. Either way the service requires you to be always online and paid up. There is no way you come out on top. The only way to win is not to play. The platform has the last laugh.</p><p>I have games that I have played for 80 plus hours. Even with a free schedule it would take me 5 months to play such a game exclusively. So the other 400 games mean nothing once I have found a game that I am interested to play. You can only load one at a time. Having access to so much content is really a FOMO tactic to keep you hooked on to service that charges you every month to do nothing but look at advertisements. </p><h4>Conclusion</h4><p>PA is really just a move to PC digital gaming where you buy a PC/handheld PC but you use it mostly on your couch while your family watches Netflix on your 65 inch 8k tv. You have all the hardware; but not enough time to play. Your virtual digital game library continues grow. Major sunk cost fallacy you can never escape from. You buy something that you cannot sell or share. You cannot stop paying for gamepass because new games constantly come out, you cannot enjoy the games you have because the launcher/homepage gives you anxiety and FOMO for new stuff. You swirl deeper and deeper into a hell hole of constant updates and patches and DLC that feeds on your focus.</p><p>Its not a feature - they are just saying they will not sell you the same game twice - but only for these new games. You are getting another reason to waste money.<br /></p> <a href="http://owensoft.net/v4/item/3549/"><img src="http://owensoft.net/v4/photo/thumb/7638.jpg" alt="related image" /></a> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3549/#comment">Post your comments on this article</a></p> Fri, 13 Feb 2026 09:36:45 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3540/ The new netflix UI is a curse and should be cast into a bottomless pit (Articles) http://owensoft.net/v4/item/3540/ <p>Everything changes eventually. Sometimes the change is subtle and insignificant. Other times its wils as if a designer spilled something on a keyboard in the back office. This new netflix UI is a evil change that only the devil would push into production.</p><p>The overall vision of this change seems to be to create permanent FOMO. Everytime you log now you are greeted with &quot;upcoming content&quot;. Sometimes a new thing will popup and you will say to yourself &quot;oh, I&#039;d like to watch that!&quot;. But you cannot watch it, you never can. The things you see first are coming next week or next month or whenever. Some point in the future.</p><p>This creates a loop of seeing something, then not being able to watch it EVERY TIME you open the application. You will forget the new thing you saw the last time i.e. if you are lucky. The unlucky will have the upcomming stuff stay in the back of their minds like a brain leech. Personally I find myself logging in less and less. I have to remind my wife to login instead of watching youtube. I tried getting her to unsubscribe but she is fully deep in the FOMO; &quot;what if something shows up that I want to watch?&quot; she says but nothing new ever shows up. Only things from the past.</p><p>When I open the app - once or twice per month, thinking that I have given it enough time for it the new stuff to be released but nope, still nothing or by that time I have forgotten it totally. So then I scroll down, scroll, scroll. Nothing interesting. If you have watched netflix alot you would have already watched most of the interesting stuff. The older stuff certainly, so you can look the release date of a movie and know that you have already watched it. Multi-episode things can last you a bit longer but you will burn through those very quickly.</p><p>So I scroll, scroll, down and find nothing. I think maybe I have something saved in my list but then I realize that my list has been changed to &quot;my stuff&quot; which has now been moved to the top of the screen which makes be try to scroll up - never reaching the start - because I had scrolldown so far - i just give up. There may be a way to get back to the top quickly but I just get annoyed I give up. Another thing about the top menu is the search is also stuck at the top, which means you are basically trapped in a infinite scroll list.</p><p>So what can you do? Nothing. Because the entire launch screen is upcoming stuff so you need to scroll down to see what you actually can watch. If you do that you are trapped in the rabbit hole of scrolling. This rabbit hole is simply an algo categorized set of &quot;gripping action movies that we think you&#039;ll like&quot; or &quot;Pulsating romantic films&quot; or &quot;because you watched&quot;. These sets are chaotic. You never know what will show up. The list could have been a simply &quot;comedy&quot;, &quot;action&quot;, &quot;adventure&quot; but instead you get this perplexing-mishmash-wordplay that hints at something deeper. What you actually get is the same old stuff mixed in with more old stuff. You scroll left in the hopes of seeing something new but alas nothing.</p><p>The content had to run out eventually. So this UI maybe a tactic mind games to keep users entrenched. There is stuff there, hiding in the cracks but making it easy to find would only make the situation worse. The UI exists to keep you trapped watching things you are NOT partially interested in watching. You might like this or that but do you really want to watch it? Likely not. You can never find what you really want to watch. There is so much other trash on it so what not waste your time watching? That is the main goal; to waste your time.</p><h4>Conclusion</h4><p>My rating 4/10. Worse ever. My time in 2025 was spent watching old movies. When the old movies get de-listed I search for something else. Rinse and repeat. Currently watching Elisa and Marcela in spanish. Why? Because, why not? I also like Roma but I think it has been de-listed.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3540/#comment">Post your comments on this article</a></p> Mon, 02 Feb 2026 08:09:13 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3535/ Wordpress is for users, big frameworks are for PHP programmers (Articles) http://owensoft.net/v4/item/3535/ <a href="http://owensoft.net/v4/item/3535/"><img src="http://owensoft.net/v4/photo/thumb/7580.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3535/"><img src="http://owensoft.net/v4/photo/thumb/7581.jpg" alt="related image" /></a><p>I have always wondered why wordpress remains the most popular CMS in the PHP scene after all these years. But in my mind it had always been obvious, I have written about it before; <a rel='external' href='/v4/item/3064/' title='Modern Open Source PHP, OOP, PSR'>Modern Open Source PHP, OOP, PSR</a> exists not to solve the problems of the web but as a honey trap for new aspiring PHP programmers. A way to generate mindshare by muddying all the simple things with complications that only a framework will be able solve. This kind of &quot;mindshare capture&quot; is very profitable as it allows these frameworks to direct revenue into itself rather than the community. Its a kind of self importance that doesnt need a big user base but rather a big group of paying developers who are enslaved with in it.</p><p>It links back to my earlier article called <a rel='external' href='/v4/item/2642/' title='code slavery'>code slavery</a> where instead of the goal being to create solutions, modern PHP frameworks exist merely to create bigger and bigger ecosystems around its own API. Just like google wants everyone to use Android or Apple wants everyone to use an Iphone. Its not because their phone is useful but rather they <a rel='external' href='/v4/item/2294/' title='want eyeballs'>want eyeballs</a> and captive audiences. Its no longer about solving web problems but more about creating ever deeper rabbit holes for the developers who should be making things and helping users. Users and devs be dammed.</p><p>The rabbit holes created are so deep that most devs can never think their way out of it because they are fully surrounded. Some build apartments inside the rabbithole, plugins for other programmers, mini rabbit holes inside the bigger rabbit hole. Then label them as &quot;open source&quot;. Most of which are ignored. Trust is not shared amount the members of the rabbithole. Only the paid products control mindshare, everything else must not be trusted. And if some third party plugin gains trust it is quickly cloned and incorporated for the &quot;good of the open source&quot; community. This is the way. Great ideas are first ignored as disruptive then consumed without remuneration or credit.</p><p>I have written about <a rel='external' href='/v4/item/2577/' title='composer'>composer</a> but connecting it to this article requires a level of introspection into the rabbit hole. If someone is interested in solving problems, they would spend most of their time ensuring that everything they release does exactly that - solves problems. However there is no money in solving problems. The money is in the <a rel='external' href='https://www.youtube.com/watch?v=G-rM5VyxVHk' title='churn'>churn</a>: the constant re-basing, over engineering and complication created by the underlying frameworks. As more CMS tools move to using composer as their only install method, it becomes harder and harder to detect the true size of these systems. Harder for regular users to install them and harder for programmers exist without some kind of package management. The package manager becomes the driver and obfuscates the bloat.</p><p>Its not that wordpress is not apart of the composer song and dance - it is, but its more about who the target audience really is. Laravel, Drupal and platforms like it are not interested in making simpler websites that users can install. They exist to create mindshare and keep developers trapped writing plugins and installing tools against their bloated ecosystem. An ecosystem which cannot be pinned down because of its every growing size. If you have issues just hire us and we will help you solve it. It all leads back to the mother ship. If your site breaks its because you havent installed the latest update and you are insecure. It is classic &quot;park at your own risk&quot; development at a large scale.</p><p>Casual users and php do-it-yourselfers no longer matter if you can make everything so complicated that they need to hire a developer to built and maintain it. And if you as a platform have all the developers and the tutorials+books then you basically own the farm.</p><p>So why isn&#039;t Laravel more popular than wordpress? The answer simply is that devs are using Laravel to build customs bespoke apps. its like a house of cards ontop of another ever changing house of cards. or better yet its a rabbit hole inside a rabbit hole which contains houses made of cards. The bigger multi-million dollar projects are kept alive by the core developers or paid experts. Smaller projects just get deprecated or re-based everytime a new version comes out. None of the things built on Laravel ever grow big enough to be better than wordpress. You could clone wordpress exactly in one of these frameworks and it would be 10x as big and take 10x as long to develop. There is no escape. Its not about being better than wordpress - its about trapping devs in bloat so you can sell books.</p><p>But being scalable, user friendly, simpler doesn&#039;t matter. None of it matters because these frameworks are not for people but instead are for developers to buy into and chew on forever - never being able to break free. The only people who see the bloated code and the PSR standards are the same developers. It is <a rel='external' href='https://en.wikipedia.org/wiki/Eating_your_own_dog_food' title='dog fooding 101'>dog fooding 101</a> - you write code for yourself, that checks itself, that you show to other devs like yourself. Its a great song and dance masterbation that only you can see and keeps only you in check because the PSR standards tell you to do so. </p><p>The causal users don&#039;t care about the technical details or the unit tests that you spent 2 years writing. The users only care that the website works and they get to do what they want to do. In fact I think PSR was created to keep any independent thought from usurping the mindshare dominance of these huge frameworks. PSR is a way to keep all the modern PHP devs chasing the same ball and falling into the same bloated rabbit hole. Everyone writing the same code in slightly different ways. Controlling vocabulary and the jargon is becoming a profitable way to ensure that nothing get solved. Things just keep going in circles while you syphoned off profits at the edges before the next major version where you can start all over. Modern PHP is the new legacy code.</p><h4>Conclusion</h4><p>The fun thing about the dynamic nature of PHP is that you can build anything you want. The side effect of this is that you can also build all kinds of <a rel='external' href='https://www.youtube.com/watch?v=65NrzJ_5j58' title='Frankenstein systems'>Frankenstein systems</a> that exist as a patch work of things that claim to be modern. In any other compiled language this kind of development would be unsustainable. Modern PHP has allowed framework devs to create thier own hivemind developer hell. And its hungry for more souls. Developer souls, not users.</p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3535/#comment">Post your comments on this article</a></p> Wed, 28 Jan 2026 06:39:44 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3527/ Playing video games in my 40s (Articles) http://owensoft.net/v4/item/3527/ <a href="http://owensoft.net/v4/item/3527/"><img src="http://owensoft.net/v4/photo/thumb/7553.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3527/"><img src="http://owensoft.net/v4/photo/thumb/7554.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3527/"><img src="http://owensoft.net/v4/photo/thumb/7555.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3527/"><img src="http://owensoft.net/v4/photo/thumb/7556.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3527/"><img src="http://owensoft.net/v4/photo/thumb/7557.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3527/"><img src="http://owensoft.net/v4/photo/thumb/7558.jpg" alt="related image" /></a><p>Right off the bat this year I plan to play exclusively &quot;xbox 360&quot; games. Games which at the time of this writing are technically &quot;old/retro&quot;. Most of them releasing 10-15 years ago. No point in playing the latest games which retail for $80 that you can only play on a $800 console which requires a sign-in, and high speed internet. Good games are coming out every day but there is no way to really justify buying a new game when there are so many old games that are cheap and unencumbered by modern bs. There is no single modern game that really draws my attention that much. Even the great new games can be quickly consumed.</p><p>So the plan for now is to buy a bunch of 7th gen xbox360 games that I missed out on when they originally came out (in 2010s I was mostly <a rel='external' href='/v4/archive/2010/' title='doing other stuff and wii'>doing other stuff and wii</a>). The xbox 360 games are cheap, high quality and best of all they do not require any kind of subscription or internet in order to play.</p><p>I have laid out my path for playing these;</p><h4>Playing everything on easy</h4><p>Most games do not really craft interesting difficulty modes - you basically choose how much you suffer. I want to suffer less in my old age. In some games the harder difficulties exist only to annoy the player. There is no point making the enemies take more damage without equally making them slower because of the extra armor. This adjustment would balance out the fact that they are now &quot;bullet sponges&quot;. I feel its a waste of time to expose myself to such poor design. When I was younger, had fewer games I would spend hundreds of hours playing a single game repeatedly. I never knew when I would get another game so I would look for every secret in the few games I had. Nowadays you can watch a complete game playthrough on youtube - so there is not point to even physically playing some games yourself. Playing on easy is the best middle ground.</p><h4>No Launch games, latest build only</h4><p>On some consoles the launch games are often a little rough - except Mario64. So I have resorted to only play xox games after 2010-ish. There are a few exceptions such as BioShock, GTA4 and the Orangebox. </p><p>I have to limit the game selection in some way so that I can minimize the number of games I purchase. There a couple popular games that have cemented themselves into the aisles of time but I will skip those and only play the latest version (eg Halo4, DeadSpace3, Gears3). Games usually get better overtime - usually. Halo4 is trash. I am not going playing through the trilogies.</p><h4>No Generic Games</h4><p>There are some games which I despise. So I definitely will not be playing those games. Repetitive games and long RPGs are also omitted. 5 to 20hours games are ok with the exception of games that are really unique such as Dark Souls. Some games are interesting enough in my mind that I will spend extra time in the world.</p><h4>No online multiplayer or paid subscriptions</h4><p>Clearly I am not big on wasting my time, so online multiplayer is out of the question. Multiplayer is a huge FOMO trap. Plus I am not going to pay for something that I will not get full use of because I am busy doing other things. Having money burning in background while I am sitting on the toilet is not the kind of mental anxiety I want to put myself through. If I am playing a game I want to be able to put it down and pick it up again when I get free time to play it. I don&#039;t want it to be a ticking timebomb linked to my credit card. No FOMO.</p><h4>Do not overstay the welcome</h4><p>Some games like Watchdogs or GTA have very addictive mini games that you can basically play forever. They are like comfort games that give you enough newness and variety to scratch that video game itch. I will play these side quests alittle but eventually I will need stop playing the game as soon as the main quest is done. No game should be more than 20 hours in length. The longest game I have played this year is Dark Souls 2 which I clocked in 80 hours over a couple months because the game is really wild.</p><h4>Playing games from physical media</h4><p>As I mentioned before I want the game to still be there when I am ready to play. Buying games on physical media saves me time, and money. Its cheaper because it&#039;s used and has little chance of <a rel='external' href='https://www.reddit.com/r/GTA/comments/nakwm7/gta_iv_complete_edition_on_steam_did_they_restore/' title='disappearing'>disappearing</a> as time goes buy. Inflation a side, video game publishers are always releasing new stuff and they WANT YOU TO BUY IT. So It is nice to be able to buy a bunch of games and just play them without worrying about sales, updates or chaotic FOMO marketplace practices. The biggest advantage of physical media is I get to play stuff offline, day or night, no internet or internet downloads.</p><h4>Conclusion</h4><p>So far I think I have worked out a good plan. I have completed 6 or so games so far, some awesome, some so so. In total I bought roughly 50 games which is a good amount of entertainment. I will document my journey in the <a rel='external' href='/v4/category/45/' title='Video Games section'>Video Games section</a>. Wish me luck.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3527/#comment">Post your comments on this article</a></p> Tue, 13 Jan 2026 09:27:31 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3486/ The problems with Ai that no one talks about (Articles) http://owensoft.net/v4/item/3486/ <a href="http://owensoft.net/v4/item/3486/"><img src="http://owensoft.net/v4/photo/thumb/7395.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3486/"><img src="http://owensoft.net/v4/photo/thumb/7396.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3486/"><img src="http://owensoft.net/v4/photo/thumb/7397.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3486/"><img src="http://owensoft.net/v4/photo/thumb/7398.jpg" alt="related image" /></a><p>I avoided writing anything on AI 2025 while the <a rel='external' href='/v4/item/2515/' title='hype train'>hype train</a> was still hot. I figure that no one lives forever and I might as well drop something before the bubble burst. So I might as well write some notes. I am gonna keep this simple with a list of hurdles;</p><h4>Poisoning and Dogfooding</h4><p>You will dump a bunch of data into your Ai model, do lots of testing then compile what you think is a stable model. There is this point before and after the model is released. Before release the input data is pure. After the release your model starts polluting the environment from which the data originates. This is a feed back loop which will make it harder and harder to deduce what is original data as opposed to data created by the Ai. Poisoning your own well. Each rebuild there-after of the Ai model has the potential to run the ship into the dock. The summary becomes the detail. Everything looks like a hammer because you are living in a hammer factory.</p><h4>Changing anything, breaks everything</h4><p>Ai could end up in a situation where slight changes can break whole sections of logic. Like flying through space where moving a finger throws off your trajectory by 10 years. The more data you ingest, the higher the chance that some of that data might generate a bad model. The more users you have the faster these issues will bubble to the top of the pile. In the best scenario; one could simply block all the edge cases but eventually you will end up boxing yourself into a corner where every move is fatal. Check mate.</p><h4>The power consumption</h4><p>Ai is using alot of electricity to build a huge data cache/index. That &quot;thing&quot; - in my mind - is basically pattern matching search. This power usage is only going up. At some point we will need human batteries and even then there will still not be enough power to produce the model. Also note that this power is not insignificant - it is a lot of power - we know this power curve like we know light speed. It limits who can create and use &quot;Ai&quot;. Most companies are using someone else&#039;s cloud services and/or data. Ai cant exist without the power draw. Everyone else is pure talk and subscriptions. <a rel='external' href='https://en.wikipedia.org/wiki/Software_as_a_service' title='SAAS'>SAAS</a>.</p><h4>Glorified Search</h4><p>From what I have noticed use cases around Ai nowadays is &quot;search&quot;. Fancy search but still search. Search is essentially the ability to find something, but with computers you can find it super quickly. Ai lets you find stuff really, really quickly with some extra fluff around it. This extra fluff is nice but the fluff is just that; fluff. I swear most answers I see in Ai web search are reddit/stackoverflow posts. Funneling people into a easy &quot;catch all&quot; solution is a kind of &quot;<a rel='external' href='/v4/item/2610/' title='web search your way to success'>web search your way to success</a>&quot; - yes you get your answer quickly but you lose all the other benefits that surround the act of &quot;looking for something&quot;. This is coming from someone who used an encyclopedia Britannica for research in high school. Fun times.</p><h4>Ai has no context of time and space</h4><p>A trend on modern websites is to not put dates on their content because they want the content to stay &quot;ever green&quot;. Added to that social media does not want you to stop scrolling because it wants your attention. These things combined are worse with Ai because responses have no concept of the time that has passed between when the data was collected and when it is output. So Ai produces this lovely data but it might be wrong in the past, present or the future. Bits of the data might be from 10 years ago or 5 minutes ago. Lets not even mention censorship and blocking information. ignorance is bliss.</p><h4>Ai is Blackbox Tech</h4><p>This is one of those things which layman like to talk about because they have no idea what it is. The more ambiguous the subject - the easier it is to speculate and market it. A plane crashes in the desert and the report says it was caused by pilot error. I have never seen the inside of a airplane blackbox, is it full of mp3 files? video? graphs? little text logs with telemetry? </p><p>We kind of imagine what is inside but no one really knows except the few people who can view the curve of the planet from space. All this enables layman to talk about Ai in &quot;suppositions&quot;, acting as if something is inevitable based on something else then applying it to everything. <a rel='external' href='https://en.wikipedia.org/wiki/Law_of_the_instrument' title='Hammer theory'>Hammer theory</a> - the over reliance on a familiar tool, but in this case Ai hype is Chinese telephone: someone telling someone else&#039;s lie. <span class="h"><em>&quot;Ai is where everything is going&quot; and other folk tales.</em></span> All this while secretly hoping that no one tests their assumptions. What matters is the fire or the ash that remains?</p><h4>Ai creates nothing new</h4><p>Besides creepy Ai slop videos and slop art, most Ai content creates is mostly remixing. Everything is a <a rel='external' href='https://www.youtube.com/watch?v=MZ2GuvUWaP8' title='remix'>remix</a>. At some point we will hope that the remixes will get better but the most popular Ai slop can almost instantly be followed back to the source(s). Ai isn&#039;t helping anybody outside of the internet. And people on the internet tend to only talk about things in terms of internet physics - they stay far away from real work problems and effects. At some point the internet became 100% marketing and having something to market became more important than life itself.</p><h4>Conclusion</h4><p>There is alot of investor capital inflating this tech <a rel='external' href='https://www.youtube.com/watch?v=HJt-8suxH38' title='bubble'>bubble</a>. Ai like every other buzzword <a rel='external' href='/v4/item/2148/' title='pie kite'>pie kite</a> is heading into space. One thing for sure Ai will not solve world hunger, make flying cars or free Palestine. If you are doing neither of those things you are just marketing. What matters.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3486/#comment">Post your comments on this article</a></p> Thu, 16 Oct 2025 08:49:35 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3398/ Gaming on a Xbox 360 in 2025 - January Update (Articles) http://owensoft.net/v4/item/3398/ <p><br />After about 2 months of tinkering around with the Xbox 360 E here is my setup;</p><h4>Accounts</h4><p>I have 2 accounts; 1 offline and 1 on xbox live that I set up first on the xbox website then signed in via the xbox360. Do not try to sign up from the xbox itself. I play all my single player games on the offline account. I have no interest in xbox live and I do not pay for it. the xbox live account is needed because it is the only way to get updates for any new game disks. When ever I start a new game I log in with the live account with Ethernet connected and it usually prompts for an update. After the update I restart and auto boot disk and offline profile.</p><h4>Auto booting to disk</h4><p>The thing to note about auto-booting is that the time is not set even if you have the Ethernet plugged in. The time not being correct will be an issue when dealing with your save files being out of order. Some games load the save file which has the newest date. This means that sometimes if you have more than one save it will chose the wrong one simply because the time is more recent because that play session was longer than your current. Of course this will only affects you if you unplug your console after every use (which I do). I have settled on leaving the Ethernet cable plugged it, no WiFi then auto booting to the dashboard to resolve this time issue.</p><h4>Power brick</h4><p>I bought a new OEM power supply (175w) + adapter to replace the thirdparty version that came with the console. It resolved the spontaneous shutdown issues I was having with the console. Getting a new original power supply that says &quot;microsoft&quot; on the label is not easy or cheap. </p><h4>Games</h4><p>I only buy the best and cheapest games which I have the most interest. Get the newer games made after 2011. There are some bad games on the console, Dark Souls 1 comes to mind, so dont go in thinking that every game is worth your time. However at the same time Dark Souls 2 is awesome so your level of tolerance may depend on how much you like the a particular game genre.</p><p>Ensure that you do your research on a game before buying it, because a game might be expensive and still suck or cheap and awesome. Some games are expensive because they are rare not necessarily because they are good. And some games are cheap because they are bad and but sold a lot of copies. Perfect example is Halo 4 which is cheap because it sold alot of copies but is boring. Based on current prices $10 USD is cheap, $20 is average, $30 and above is an expensive game.</p><h4>Storage</h4><p>Make sure you get the internal harddrive - 250gb is good enough. I install all my games. It takes about 20 minutes to install a game so make sure you play the game BEFORE you install it (just in case the game sucks). You can always delete games you do not play often to save space. Installing games cuts the console noise output by half - the disk drive buzzes constantly if you play the game from disk. You could use a external usb stick but I personally hate having things stick out from the console which potentially could break off or damage a port. </p><p>Secondly I think the harddrive always shows first in the &quot;pick a storage location&quot; list, always, no way to reorder the list - so using the harddrive is the most UI efficient place to store saves. Get the internal harddrive with the console, its required for some games like GTA5 (says on the box). External USB SSD/Sticks can be used for other games and work well based on tests I saw on <a rel='external' href='https://www.youtube.com/watch?v=Zrn31z_e05Y' title='youtube'>youtube</a>. </p><p>I am investing in a <a rel='external' href='https://www.amazon.com/Lexar-JumpDrive-Expansion-Plug-n-Stay-LJDS47-128ABBKNA/dp/B0CFXG94RZ/?th=1' title='mini-usb flash drive'>mini-usb flash drive</a> which should resolve the sticking out problem and speed up loading for installed games. Game saves will still be stored on the hard drive because of the previously mention pick list issue.</p><h4>Avoiding the red ring of death</h4><p>When ever I play the Xbox I take it out of the tv stand so that it gets maximum air flow - because my tv stand is pretty enclosed with only a small hole in the back. I placed it vertically onto of the stand, not on the carpet where dust will get to it faster. Keeping it vertical saves space. Hopefully it doesn&#039;t get knocked over. I always unplug the power brick but this is optional. The power brick has a bright orange light which I find annoying. I do not plan to dismantle my console anytime soon but eventually it will have to be done - possibly by someone else.</p><h4>Conclusion</h4><p>As long as you are playing offline single player games, you will find that the 360 is a competent retro console. Once you find the games you want, just pop them in and play without worrying about updates, internet speed or whether you account is still up-to-date. Some games are expensive but if you are only interested in a few games then you might no mind spending the money on something you are going to enjoy.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3398/#comment">Post your comments on this article</a></p> Sat, 01 Feb 2025 10:18:40 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3307/ Full frame vs crop sensor (photography) (Articles) http://owensoft.net/v4/item/3307/ <p>I have been watching tons of videos covering the advantages and disadvantages of sensor sizes. The key take away from this research is that bigger sensors are better. Which I already knew. The con is that full frame sensors have to be huge in order to hold the sensor and lens. That is pretty much it. When you go crop sensor you are sacrificing extra detail around the edges for camera size and cost. All the numbers and conversions do not matter because at the point when you take the picture you either get less or you get more - that&#039;s it.</p><h4>Film vs digital</h4><p>Comparisons to analog film also boil down to the same thing. When you shoot on 35mm analog film you are always shooting full frame at max resolution. The bigger the film frame the more image you get. This fact against digital photography means that you are always at a disadvantage unless you have the biggest sensor possible. Repositioning, changing lenses, doesn&#039;t matter in the digital world - you only get what you take - exactly. It is the exactness of digital which is the reason why we need bigger and bigger sensors so we can capture more. Film just has all the resolution while digital is limited from the start. Film is more expensive but this is no secret.</p><h4>So what to do</h4><p>Once you understand the parameters of the tools you are working with then you know your limit. I think 35 megapixels on a full frame camera is the sweet spot. You want the resolution for the detail and you need the full frame to capture the biggest frame you can. With a crop sensor you lose everything around the edges. Even if everything in the center frame is awesome. All you can do is stuff as much as you can in the center and shed a tear for the fallen edges.</p><h4>Conclusion</h4><p>Possibly at some point in the future they will be able to make super small and cheap full frame sensors. But for now we are stuck with the choice between small/cheap crop sensor or expensive and big full frame cameras. You have to choose your battles. Maybe the only times you will miss the full frame is when you barely miss a person at the sides of a picture or you wish there was a little bit more sky to work with in post. Make the pictures you can make with the tool you have. Below I will attach some photos I took with my ASPC crop sensor GR3 in May2024.</p> <a href="http://owensoft.net/v4/item/3307/"><img src="http://owensoft.net/v4/photo/thumb/6580.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3307/"><img src="http://owensoft.net/v4/photo/thumb/6581.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3307/"><img src="http://owensoft.net/v4/photo/thumb/6582.jpg" alt="related image" /></a> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3307/#comment">Post your comments on this article</a></p> Sat, 01 Jun 2024 11:26:23 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3234/ NewoZero v4 - Postmortem (Articles) http://owensoft.net/v4/item/3234/ <p>This update of my racing game sub titled &quot;Zero&quot; started out pretty much the same as the last <a rel='external' href='/v4/item/3023/' title='v3 update'>v3 update</a> with a flash in the pan of an idea.  I figured out dot-products.  When I say &quot;figured out&quot; I mean that the concept of it mapped directly to the inner workings of my animal brain and it made sense, maybe not at a mathematical level but I could call the function and understood what the result ment.  </p><p>With this new tool in hand I set out to optimize everything I could get my hands on.  This might end up being a really technical article but this is how it is in game development.  The changes between v3 and v4 are not as dramatic as prior versions.  This time around the changes were to get the game to render faster, everything else was just icing on the cake.  I also want to add a 2 player split screen mode so this version I went hard on optimizations.  I got rid of the screen tearing at the top - if you noticed it - or at least reduced it a whole lot.</p><p>I changed the buildings to 3 quads that faced the camera based on the dot product.  Then I added dotproduct into the frustum code as well which led to other things.  I started reading up on branchless code as well even though I don&#039;t think the Wii has that kind of optimization.  But branchless code sparked a curiosity in my head which led me down a path to reduce all my loops to only the essential items.  No much looping over the entire array checking if something &quot;is active then continue;&quot;.  I made the move to create many many lists of things.</p><h4>Lists of things</h4><p>Startingfrom about <a rel='external' href='/project/screenshot/?dr=2023/2023-06-01' title='June 2023'>June 2023</a> I went on a crusade to change every loop in the same to operate on my internal list structure.  I would build a list of items in the animate() function then loop over it in the draw() function with minimum checks for whether the thing I am drawing is visible or not.  This resulted in smaller loops and less time checking conditions.  I even took it a step further by creating several lists instead of a single big list for example, the track itself is rendered in 4 loops over 4 loops instead of intermingling things that are spread out over the track array.</p><h4>Replacing hard coded objects</h4><p>I wanted to replace a as many models that are drawn in code with wavefront objs loaded from disk. Hardcoding graphics in code is faster but loading externally makes it easier to swap out and customize when modding.  Since wavefront obj files are normally triangulated I end up sending more data to the GPU but its not exorbitant as long as I keep the new models small.  <br />The main downside being that I can no longer have thin models made up of hand coded lines - everything has to be made up of triangles.  I did discover a cool new use for objs by rendering them as points (instead of wireframe lines) at the center of each triangle to produce a point cloud that could be used for something in the future.  After some work I swapped out all the roof decorations for new designs that I thought up in MOI3d.  </p><p>I added a new decoration below the raised sections of the track for a bit of visual complexity plus I was sure it would not affect anything.  The special sections of the track also got 3 new models that vary based on the stage number.</p><h4>New Bugs</h4><p>I had a random frame drop on a particular stage that took 2 hours to debug.  A repeating facade texture was causing the frame drop.  The GPU was not happy with a particular combination of parameters for the repeat.  Also I discovered this bug while testing a new level on real hardware but Dolphin_Emu (in which I was spending most of my time).  The process of elimination was more difficult because if you remove a thing or pause the game the fps would return to 60fps. Making it hard to deduce which single thing was causing the issue.  Signs? Buildings? skybox? Track? Spritesheets? #gamedev</p><p>I like this instant feedback of #gamedev except when it gets so overwhelming that literally anything could break the delicate house of cards and madness that you just spent months constructing.</p><h4>Colours and more colours</h4><p>I redid the entire colour engine merely so that I could switch the palette to black and white or red or blue if I wanted.  It was a tedious task getting rid of all the hard coded colours and initializing them at level start but it was worth the effort even if it&#039;s just a new option in the menu.  It&#039;s still not perfect because some aspects such as the random coloured signs often choose colours from the reserved set so it&#039;s hard to have a red track without red signs popping up somewhere.</p><h4>Fixed the dpad handling</h4><p>I finally sat down and added some easing to the dpad resulting in less jerkiness when turning corners - it makes a world of difference - a whole world.    So much so that I use the dpad all the time.  Its almost better than the analog stick.  So good I back ported the handling fixes to v3.16 then released a new version v3.25 while I was still working on v4.  No use forcing everyone to wait until 4.0 to get better handling. Because the better handling is worth it more than any graphical improvement that version 4 could bring.  This was a prickly task but I managed to do it by digging up an old version which took some head scratching because I never planned to go back to old versions.</p><h4>Quad.h</h4><p>I created a new lib called quad.h which accepts world space coords and converts them all into model space in order to draw them in one draw call.  I am really deep into this one draw called multi-object batching life.  Similar to what I did with the sprite signs+decals but this is for quads.  This is how the green landscape is a prototype you can see on <a rel='external' href='https://www.youtube.com/watch?v=bJ9LMgflmCg' title='youtube'>youtube</a>.  This lib was quickly added into NZ to replace a similar hack for the buildings - I had to do a few calcs to figure out where the 8 corners of the cube fell but it was straight forward once I worked it out.  It was not as big of a performance jump as I had hoped but everything is buzzing along nicely for the upcoming NZ4 release.</p><h4>Building facades and batching</h4><p>I spend a good deal of time working on batching draw calls instead of drawing things individually.  This ment that things that shared the same texture could be drawn together reducing the over head of things such as the signs which are now drawn all at once in model space.  It was alot of work but the performance improvement was irresistible.  This led me to realise that I could manipulate the repeating texture feature in ways which allowed me to create larger signs with 3 or 6 sections simply by allowing the texture to repeat.  Once I did that the building facade problem was solved.  Now the builds look unique while only using one texture.  They do not look so good up close but far away they look excellent.</p><h4>Simple prototypes and side projects</h4><p>One of my goals during the year were to make more prototypes and simply the game engine for possible porting in the future.  Some of the enhancement in NZ came from these prototypes.  A Lot of this work has been uploaded to the <a rel='external' href='https://www.youtube.com/channel/UCBUb3q4p5Jl7G1BM8GS2pNg' title='NewoGame youtube'>NewoGame youtube</a> channel.  Please subscribe for more silent videos that have no purpose.</p><h4>Conclusion</h4><p>The NZ codebase has gotten huge.  I dread thinking about the number of systems that I have put in place over the 2 years that I have been working on it.  Lots of things are happening at the same time especially in the UI to make everything work together.  I need to simplify alot of the variables if I ever hope to add multiplayer.  But no one knows what the future holds.  You just have to enjoy what you have now.</p><h4>Footnotes</h4><p>Social Media Links;<br /><a href="https://twitter.com/NewoGame" rel='external'>twitter.com/NewoGame</a><a rel='external' href='https://www.youtube.com/channel/UCBUb3q4p5Jl7G1BM8GS2pNg' title='NewoGame1'>NewoGame1</a> youtube<br /><a href="http://wiibrew.org/wiki/Newo_Zero" rel='external'>wiibrew.org/wiki/Newo_Zero</a></p><p></p> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6186.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6174.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6175.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6176.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6177.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6178.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6179.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6180.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6181.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6182.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6183.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6184.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6185.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6187.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6188.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3234/"><img src="http://owensoft.net/v4/photo/thumb/6189.jpg" alt="related image" /></a> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3234/#comment">Post your comments on this article</a></p> Sat, 13 Jan 2024 09:00:26 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3097/ The race to the bottom. Adendum (programming) (Articles) http://owensoft.net/v4/item/3097/ <a href="http://owensoft.net/v4/item/3097/"><img src="http://owensoft.net/v4/photo/thumb/5384.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3097/"><img src="http://owensoft.net/v4/photo/thumb/5385.jpg" alt="related image" /></a><p>It&#039;s been a month since my original <a rel='external' href='/v4/item/3064/' title='race to the bottom'>race to the bottom</a> article.  I figure I should do a follow up post to cover the latest events surrounding the project that I used as a benchmark.  At this point the project has 23 stars up from 8 it had at the time the original article was written - progress is progress.</p><p>But I do not plan to check on the <a rel='external' href='/v4/item/3064/' title='github project'>github project</a> every month.  The initial plan was to check on it in another year&#039;s time but something happened.  A <a rel='external' href='https://old.reddit.com/r/PHP/comments/10vcw71/calling_laravel_developers_help_improve_gmax_crm/' title='new thread'>new thread</a> was created by the author as a call to order to get help.  Fresh out of the solo programmer basement he had not gotten the &quot;open source&quot; attention that was assumed when all the rules were followed.  So this prompted me to write a new article.  Let&#039;s see what attention he gets now.  The star count increased but for the most part it was more of the same in the comments section;</p><blockquote><p>I charge $150/hr. HMU.</p></blockquote><p>Programmers need money just like everyone else.</p><blockquote><p>Why reinvent the wheel with invoicing?</p></blockquote><p>Here the comment listed a few other projects that have the same functionality but of course are more popular.  This is one of those fall backs for people who are not actually interested in programming at all but exist only to discourage other people from designing something new and innovative.</p><blockquote><p>there isn&#039;t a single open issue to help people get started. How do you expect someone to jump into a project with no roadmap or any place to start?</p></blockquote><p>Egg or chicken problem.  There are no issues because no one is participating.  No one is participating because there are no issues?  Classic.</p><blockquote><p>I would suggest you write some tests, before inviting other people to participate, so as to make integrating their contributions easier and save yourself a LOT of manual testing.</p><p>My brother in the God-Emperor&#039;s light, you are not yet in that phase. Not even close.</p><p>Like, you committed the Vendor folder ...</p><p>Also, you have what looks like maintenance scripts triggered by (unprotected) routes ... no bueno.</p><p>i&#039;m sure you mean well, but the people who come here are *NOT* your users.</p></blockquote><p>This person probably put in the most work in looking into the project only to end up just putting another hurdle in front of the person without directly telling them that the thing he is trying to do is futile.</p><blockquote><p>I had a brief look through some of the controllers and classes - a few things I spotted immediately:</p><p>Your code should adhere to psr standards - Capitalise class names and their corresponding files. This means contributing developers don&#039;t have (too many) differing styles.</p><p>Consider using form requests to validate your form submissions. There was little to no validation that I could see, which is a huge red flag.</p><p>You shouldn&#039;t commit the vendor folder.</p><p>There don&#039;t appear to be any tests ...</p></blockquote><p>Here we go again.  Add tests and we will love you.  Do X or Y then run around in a circle.  Superficial syntax sugar that exists to keep you coding in your basement forever which they sell programming books.</p><blockquote><p>Didn&#039;t you post this on Reddit before and people were asking where your tests are?</p><p>You might&#039;ve changed the name of the application but I swear the repository and the pictures look very similar. I remember going through it.</p><p>Thank you for not using a new Reddit account.</p></blockquote><p>Lol, didnt you get a hurdle to jump over?  why aren&#039;t you jumping over it?</p><h4>Conclusion</h4><p>The author also posted the request in the <a rel='external' href='https://old.reddit.com/r/laravel/comments/10vcv54/calling_laravel_developers_help_improve_gmax_crm/' title='Laravel subreddit'>Laravel subreddit</a> where it did not even get 1 up vote.  This is not surprising to me because the organisation is not interested in helping <a rel='external' href='https://old.reddit.com/r/laravel/comments/113zake/laravel_shift_has_made_over_500_pull_requests/' title='anything but itself'>anything but itself</a>.  And this inherent drive to get bigger spreads into the community - you are already trapped in the ecosystem so....</p><p>So that is pretty much it for now, the dev has probably given up on reddit or has started working on another project.  I added some new screenshots.  I need to reiterate that this is not a dig on the programmer but on the ecosystem of web slavery, pointless OOP API bloat and the meme of design patterns sold as community open source but are really masochistic rabbit holes that you pay to enter.</p><p></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3097/#comment">Post your comments on this article</a></p> Fri, 24 Feb 2023 09:20:11 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3064/ Modern Open Source PHP, OOP, PSR and the race to the bottom (programming) (Articles) http://owensoft.net/v4/item/3064/ <a href="http://owensoft.net/v4/item/3064/"><img src="http://owensoft.net/v4/photo/thumb/5162.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3064/"><img src="http://owensoft.net/v4/photo/thumb/5163.jpg" alt="related image" /></a><p>Reddit/PHP is a unique echochamber which exhibits certain traits and patterns.  This is a software development rant.  I evaluate software everyday to determine how useful it is to me and to others.  Software is being created all the time around the world, some of this software is doomed from the start.  Others are posted on reddit/PHP in order to generate attention, approval or commentary - I am not sure why exactly because reddit is a cold place.  But we are going to look at what seems to be the typical way it goes down - at least on reddit.  I am going to do a deep dive on this <a rel='external' href='https://old.reddit.com/r/PHP/comments/zzo3ll/new_open_source_crm_for_project_management_and/' title='reddit thread'>reddit thread</a>.</p><h4>Open Source</h4><p>This is common in basically every posted project.  There is a misconception that software being &quot;open source&quot; is an advantage and alot of emphasis is placed on the &quot;open sourceness&quot; even though it does not matter, no one cares.  Modern PHP code is so generic and it might as well be generated by A.I. - there is no point in reading it or open sourcing it.  If it&#039;s OOP you know it&#039;s going to be eating its own dog food like every other PHP PSR OOP project.</p><h4>Designed to Make things Easy</h4><p>There are many projects that claim to solve a problem by making it easy.  Easy is a fool&#039;s errand.  It is fine to spend a year coding something that is &quot;easy to use&quot; but has hidden headaches in a rat&#039;s nest of API calls.  What is this &quot;easy&quot; that marketing people talk about?  Who is it directed towards?  admins? end users?  small business?  reddit users?  programmers?  Certainly can&#039;t be everyone.  No one knows, it&#039;s nebulous.  It can be easy but most likely not in the way that you think.</p><h4>On top of Modern Stack</h4><p>This &quot;modern stack&quot; meme also comes with a whole lot of baggage because it is a moving target.  No one determines what is modern or legacy.  Pundits throw the term around to promote the fancy new cluster-fk of tools that someone has thrown together and convinced others to use.  What was modern yesterday is legacy tomorrow.  It all depends on who you are talking to and what middleman role they are shilling.  Anything can be modern and there is no upper limit.</p><h4>Working on this PHP project for a while</h4><p> <br />I can only imagine that devs in the <a rel='external' href='https://www.php-fig.org/psr/' title='PHP Standard Recommendation (PSR) Workflow'>PHP Standard Recommendation (PSR) Workflow</a> ecosystem live a lonely life. If they post their work that they spent 3 years constructing to be PSR compliant, the first comment will be &quot;but X does this already!&quot; or &quot;framework Y does it more efficiently&quot;. IT does not matter how good it is or how close they follow the spec.  They have already lost because they are given a wheel in which to re-invent which is enormous and ever growing.  You can show your wheel until it meets a baseline of 10k lines of boilerplate code.  Hello world? gtfo!</p><p>There are tons of plugins out there that hope to one day get enough stars to be relevant.  Because of the nature of OOP+PSR you could spend many years programming and still come out with a boring text file of class definitions that no one even looks at because they know what&#039;s there and they also know it&#039;s a dead end.  So much time is wasted by new programmers just trying to meet these recommendations.  It is large scale <a rel='external' href='https://en.wikipedia.org/wiki/Cargo_cult_programming' title='cargo cult programming'>cargo cult programming</a> designed to sterilize new innovations by standardizing how people think about solutions to problems.  Part of it is to keep the giant PHP framework projects relevant and chugging along getting bigger and bigger.  There are always easier ways to do things.</p><h4>If you would like to contribute, fork my repository</h4><p>Alot of those projects hope to attract contributors but the way I see it; if you have the skills to contribute to such a new project then you most likely have the skills to create the whole thing yourself.  This is another itch that I have with OOP projects; no matter how well you string your object/classes together it&#039;s never perfect or universal.  I have told the story of a OOP programmer who would redesign his object structure every 6 months with the goal of making the perfect structure - it&#039;s a kind of paranoid schizophrenia.  <br />It is even worse if you want someone else with the same disease to fork code that you spent X years gluing together.  If they change the structure there is no way you are going to accept the pull request that messes with your almost perfect mental model.  Bigger projects get around this by just being huge and directed by one person or a team.  So contributors are left with minor busy work tasks or expanding in allowed areas.  The hand that rules the project rules the world.</p><h4>First Comment: No Tests</h4><p>There is always something, a bar to jump over, a hill to climb.  These structures are set up to keep the lonely programmer coding away forever in thier basement.  Imagine you write this awesome PSR compliant piece of software but you forgot to unit test every single feature using hard coded unit tests?  GET OF OUT HERE!  In some cases with the nature of OOP programming <a rel='external' href='https://en.wikipedia.org/wiki/Test-driven_development' title='test driven development'>test driven development</a> (TDD) will nearly double the code base.  Worse yet when you are a lonely dev writing your own unit tests for software that no one uses.  It&#039;s an endless cycle.  Next thing they are going to mention is automated tests.</p><h4>Constructive criticism</h4><pre><code>*Don&#039;t commit: node_modules, vendor, .vscode directoriesAlso follow PSR-12, <br />*don&#039;t have uncapitalized classes, there are a lot.<br />*Use fillable property so you don&#039;t have these massive assignments to your models. <br />*Also look into form requests.Your project controller has about 25 functions/routes, split these off into separate more specific controllers.<br />*Use constants or enums for things like your status, so you don&#039;t have -&gt;status = 0, 1, 2, etc.<br /></code></pre><p>Point 1 is a github open source thing - use github follow these github rules.  2,3,4 are style choices that are being imposed on the programmer by a random stranger.  Who knows if the author finds this style useful or more efficient?  why should they change something that they spent X years coding to match an arbitrary coding style?  Maybe he likes having 25 routes in his controller?  Maybe he likes constants being constants.  Rather than enums.  Why send him down a rabbit hole of changes that dont matter?  I think its a form of slavery as I <a rel='external' href='/v4/item/2642/' title='mentioned before'>mentioned before</a>.  There is always something you missed in the standard, something that you need to do.</p><h4>I got a hammer, you got nails?</h4><pre><code>It looks like fields in the database related to money are text fields. You might want to evaluate the available field types and pick something less generic.I was looking at the money fields because I was curious if the project used ints for money - to track everything in cents or a decimal for dollars and cents. If I were starting a fresh project it would be an int, but that is just my 2 cents (not my 0.02).</code></pre>In this case this person just likes using INTs for money; they are invested in propagating this ideology.  I don&#039;t know, maybe it works, maybe it doesn&#039;t.  I am sure the unit tests will determine the best route.  Either Way, what if the programmer likes string numbers?</p><h4>Build it and they will come</h4><pre><code>Do you have any early-adopter users? Was it developed with any user involved?  Thanks! Have you started using it yet? What were you doing before? How did it change your business?</code></pre>I am not sure what this person was getting at because the author definitely said the project was &quot;new&quot;.  But this is just another hurdle placed in front of the lonely dev.  This is funny because it takes so long to create a OOP PSR proof of concept that it makes it difficult to secure a client AND then build it in reasonable time.  So what tends to happen is that new programmers build solutions to problems hoping that someone will want to use it but once they show it to other programmers they get rewarded with sidequests to waste more of thier time.</p><p>[bu]You modern stack is not modern enough[bu]</p><pre><code>How come you&#039;re on Laravel 8 and Tailwind 1.x?</code></pre>lol, if it takes you 3 years to write the code on a platform that updates every six months you are always going to be chasing your tail.  And people will tell you that you are behind knowing fully well that it is impossible to keep up with the churn of modern stacks.  Churn produces new tutorials, articles, tweets, books, maintenance requests - there is a whole ecosystem of people who benefit from instability, changing numbers and upgrades.</p><h4>Add this and I will like you</h4><pre><code>Please add tests.  I will never use any application or package that doesn&#039;t have tests because I lack confidence in the software. Tests are a great way to ensure that everything is working without the monotony of manual testing via a browser.</code></pre>This is just another sidequest.  This person is neither a potential client or a contributor to the code base.  Why does this person exist?  This person&#039;s job in life is to perpetuate memes on the internet.  Tests are the thing that will make them happy and tell others about your excellent code that you spent years writing.  There is always something you need to do to make them like you. And if you had already done it they wont say &quot;congrats&quot; or pat you on the back - all they will do is seek out the next poor soul on which to propogate thier meme.</p><h4>Conclusion</h4><p>All these modern PHP apps must follow this OOP song and dance of autoloading and PSR.  I know these trends are limited to echo chambers because if you apply them to dev environments outside of PHP you will quickly realise that much of it is busy work destined to be deprecated for the next thing which is handed down from up above.  In the end this project will gather dust like the thousands of other PSR PHP projects on github,  Littering the internet forever until its consumed by AI. It&#039;s a gigantic ball of code.  Somewhere in this mess there might be a few nuggets that maybe worth the look but chances are there is nothing but a well crafted waste of time.</p><h4>Footnote</h4><p>At present the code base has 8 stars.  Maybe it will get 1000 stars by next year.  Downloading the code results in a 77mb zip full of compressed text files which means that there are alot of tiny little files and sub projects. In fact its 26,990 Files, 4,619 Folders. 272mb in total.  There are fakers, dummy classes, factories, listeners all sorts of PHP OOP mannerisms: In the end it doesn&#039;t matter how big the codebase is or what frameworks are in use.  </p><p></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3064/#comment">Post your comments on this article</a></p> Sun, 08 Jan 2023 08:05:10 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3038/ Reasons why I dont open source my C games (programming) (Articles) http://owensoft.net/v4/item/3038/ <a href="http://owensoft.net/v4/item/3038/"><img src="http://owensoft.net/v4/photo/thumb/5002.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3038/"><img src="http://owensoft.net/v4/photo/thumb/5003.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3038/"><img src="http://owensoft.net/v4/photo/thumb/5004.jpg" alt="related image" /></a><p>The main reason i don&#039;t open source <a rel='external' href='https://wiibrew.org/wiki/User:Owen' title='my homebrew'>my homebrew</a> is because the code is super messy and experimental. Its wasn&#039;t written to ported like doom or quake. Lets look at <a rel='external' href='https://wiibrew.org/wiki/Newo_Zero' title='NewoZero'>NewoZero</a>; #thread<br /><ul><li><strong>Coupling</strong>: In NZ the track, the player and the camera are basically co dependent structures. Joined at the hip. Though drawing the track is separate strangely enough.  Modern coding best practices discourage this kind of coupling but suggest no good way to actually make the thing work without spending 10yrs writing MVVM code. This coupling allows me to iterate quickly, fail fast.</li><li><strong>Hacks</strong>:  The track is using a spatial grid, frustum, distance list and a big array to figure out what to draw and collide with the player. It also tells the camera where to look.  This is a big song and dance of code.</li><li> Basically everything is stored in structs because C. Whenever i can store a value instead of calculating it I will pin it to the struct without mercy.  I am burning RAM to save CPU.</li><li> Every module has a init(), animate(), draw(), gethits() and an exit() function. There are roughly 40 c files including wind, road, building, sign, grid and stars. I like to partition things out into modules so I can tinker with them independently plus better compile times.  There maybe better ways to code this but they do not matter.</li><li> Everything runs on a timer. All the time. Not frame rate independent so it has to be &gt; 60fps or not at all. Timers are everywhere waiting to fire all the time. I use them because they work.</li><li> The only reason most the game even runs is by knowing exactly which systems interact with each other and ensuring that none of them block or try to change things that they dont own.</li><li> There is no threading. A Lot if it is time splicing and ensuring that the per frame cost of everything is low. If a tree falls in the forest and there is no one there to see it, does it make a sound? There are no falling trees. All the trees are on the ground.</li><li> For NZ in particular there can be no intersections on the track because of how its drawn. The first thing people will try to do is add intersections. I could refactor it in the future but the change cost too much and wastes too much time. Too many things to change. Too many optimizations to undo.  I accept this short-coming and I keep it warm at night when I go to sleep. Some coders would get hung up on this and it prevents them from doing awesome but imperfect things. Embrace your struggle.</li><li> All the signs know which building they are posted on. So since there are 4x more signs than buildings they all check if the building they are on is visible instead of using the frustum to check if they themselves are visible.  Saves some sqrts.  This is an optimization that is probably only done in one place because of the unique relationship between the signs and buildings. You have to know this and embrace the madness of a custom engine.</li><li> The menu is a recursive function that draws itself similar to how you print out a directory structure. Over all my years of coding its the only time i have found such a simple solution to UI. So I use this menu in all my games because it works. All the menu options are pointers to in-game global variables. #gamedev </p><p> This is another one of those unique optimizations that only works in one situation.  So I am juggling multiple constructs in my head that solve problems in different ways.  This is the antithesis to modern OOP which tries to convert everything into a million classes that eat each others <a rel='external' href='https://en.wikipedia.org/wiki/Eating_your_own_dog_food' title='dog food'>dog food</a>.</li><li>I rebase often once i find a cheaper/better/harder/faster way to complete a task. Because i am the only one working on it i can add/remove optimizations based on what i want to achieve instead of what&#039;s more compatible.  break fast.</li><li>Git doesn&#039;t add anything to my workflow. I don&#039;t miss any of the code I delete. It either works or it doesn&#039;t. Sometimes I tinker with multiple modules to get one thing to work. If it doesn&#039;t work then I rebase.  I don&#039;t have a team of coders and even if I did I would not allow them to step on each other randomly.</li><li> Even the math functions i use are crude. I took a look at the standard frustum culling code and was like; &quot;nope&quot;, i am just gonna do everything with AABB. Octree? Nope, spatial grid. Linked list? Nope fixed arrays.  If I had a team I would assign someone to code that module and never think about it again.</li><li> The spatial grid is a bit of magic so I would advise you to avoid asking about that just do an octree. Some things are hacks that worked for a blue moon then I just left in there because some random code still uses it.  Basically it divides world space into an integer that is +- 50 on all axis and stores the indexes that fall into each bucket into a 3d array that needs to be recenter if the player moves out of the range.</li><li> I do put comments into a few sections but it&#039;s mostly for things NOT to do as opposed to the thing being done. If there is a section which look like it can be easily optimized but shouldn&#039;t I will put a comment there to stop myself from doing the obvious. #gamedev</li><li> I use multiple paradigms. depending on the situation. Sometimes they converge+overlap. Modern code tends to try to stuff everything into OOP. I like to wild out ex; procedural, functional, passing by val, by ref, time splicing, partitioning, whatever gets the job done.</p><p>Predicting which paradigms I use for which problem depends on several things; the time it will take, speed, complexity, code size, maintainability, error rate, magic etc. So you cannot blanket the code with ECS or something like that it will just break in mystical ways.</li><li> Some systems (the track) have multiple variables scattered over the code that can be tweaked for a desired result. This means that there are multiple places where you could upset the system or cause a domino effect on performance. It&#039;s like climate change in video game code.</li><li> look at this; why am I doing this?</p><pre><code>static bool seek_back=false;<br />seek_back = !seek_back;<br />if(!seek_back) for(int i=0; i&lt;TRACK_MAX; i++) game_track_seek(i);<br />if(seek_back) for(int i=TRACK_MAX-1; i&gt;0; i--) game_track_seek(i);</code></pre>This is a circle loop instead of the normal typewriter loop.  Moving forward then back through the list is an optimization I use when updating visible track pieces.  Will explain at some point.</p></li></ul><h4>Conclusion</h4><p>I would rather share <a rel='external' href='/project/code/' title='parts of my'>parts of my</a> <a rel='external' href='/project/newogame/src/' title='codebase'>codebase</a> for those who are interested.  Having random pull requests and questions is not going to be worth my time when people only have a passing interest in wii homebrew.  Having more trash code on git doesn&#039;t make anything better or code more accessible, it only creates clutter.  Create code with purpose, create new code and most of all stop wasting time being entertained by <a rel='external' href='https://owensoft.net/v4/item/2148/' title='pie'>pie</a> in the sky technology.<br /></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3038/#comment">Post your comments on this article</a></p> Sun, 04 Dec 2022 10:33:12 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3023/ NewoZero v3 - Postmortem (Articles) http://owensoft.net/v4/item/3023/ <a href="http://owensoft.net/v4/item/3023/"><img src="http://owensoft.net/v4/photo/thumb/4891.jpg" alt="Testing facades" /></a> <a href="http://owensoft.net/v4/item/3023/"><img src="http://owensoft.net/v4/photo/thumb/4892.jpg" alt="Frustum cone" /></a> <a href="http://owensoft.net/v4/item/3023/"><img src="http://owensoft.net/v4/photo/thumb/4893.jpg" alt="AABB frustum" /></a> <a href="http://owensoft.net/v4/item/3023/"><img src="http://owensoft.net/v4/photo/thumb/4894.jpg" alt="Skybox ring" /></a> <a href="http://owensoft.net/v4/item/3023/"><img src="http://owensoft.net/v4/photo/thumb/4895.jpg" alt="New skybox textures" /></a> <a href="http://owensoft.net/v4/item/3023/"><img src="http://owensoft.net/v4/photo/thumb/4896.jpg" alt="Skyfox frames" /></a> <a href="http://owensoft.net/v4/item/3023/"><img src="http://owensoft.net/v4/photo/thumb/4897.jpg" alt="New moons/suns" /></a> <a href="http://owensoft.net/v4/item/3023/"><img src="http://owensoft.net/v4/photo/thumb/4898.jpg" alt="Grid with transparent colour" /></a> <a href="http://owensoft.net/v4/item/3023/"><img src="http://owensoft.net/v4/photo/thumb/4899.jpg" alt="Better colours" /></a> <a href="http://owensoft.net/v4/item/3023/"><img src="http://owensoft.net/v4/photo/thumb/4900.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/3023/"><img src="http://owensoft.net/v4/photo/thumb/4901.jpg" alt="Shadow city" /></a> <a href="http://owensoft.net/v4/item/3023/"><img src="http://owensoft.net/v4/photo/thumb/4902.jpg" alt="Building facades" /></a><p>I jumped back into the NewoZero(NZ) code late in August 2022.  I was in a programming slump while working on a pointer based <a rel='external' href='https://www.youtube.com/watch?v=UBQYh-hj9NE' title='vector style tank game'>vector style tank game</a> (which I will get back to at some point in the future).  I started out by doing mostly graphical tweaks to the textures used for the turn signals and an alternate track texture.  I sometimes like to go back to old games to see what i can improve based on new tricks i have learnt.</p><p> After playing around the code a bit I realised that there was a lot more that could be done in the NZ game engine so I started optimizing everything I could find.  Get ready for a wall of text and technical explanation.</p><h4>New Colour management</h4><p>I have always had an issue when brightening or darkening colours in code so I created a whole new set of functions to correct this problem. Some scenes is NZ called for specific colours to match the synthwave theme. Random colours would not work. The main idea is that I want to adjust any colour by slight amounts without overflowing.  So I came up with this function;</p><pre><code>u32 colour_dark(u32 color, short percent) { //2022<br />float r=abs(percent)/100.0f;<br />return RGBA(R(color)*r,G(color)*r,B(color)*r,A(color));<br />}</code></pre>In the past I would overflow into other colours(see image) if I increased by too much in some colours.  So I created these new functions to better dark and bright changes. In the past the simple trick I would use to get darker colours was to play with the alpha channel of the colour but now with these new functions I can easily achieve a similar effect without messing with transparency.   However there is still one advantage to using alpha transparency to create darker colours; if you allow them to overlap in a consistent way they gradually get brighter. This creates a pleasing overlap effect on horizons which does not happen with a solid colour. </p><h4>New Skybox</h4><p>In most of my games there is a flat plane in the background on which I draw the sky.  I rotate this plane so that it always faces the player.  In the prior month of &quot;vector tank game&quot; coding I had seen a <a rel='external' href='https://twitter.com/Why485/status/1563155318799880192' title='tweet by Why485'>tweet by Why485</a> that inspired me to change my entire skybox strategy.  I realised that I could use my draw line function to create a wall that sounds the player in all directions.  My line function isnt technically cheap because it calculates the distance between 2 points but the wii should be able to handle it without much effort.  With this new technique I could have 64 quads surrounding the player which ment I could do a skybox texture that scrolls left/right as the world turns.  </p><p>The simplest way I found to draw the circle around the player is bly stepping around in degrees;</p><pre><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float frame_y=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;guVector start, next, last, first;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short first_frame=horizon_first_frame, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curr_frame=first_frame-1, max_frame=horizon_max_frame;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start=vector_move(focus_pos, vec(0,0,1), skybox_dist ); //position of the horizon fade&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first=vector_zero(); //initialize it.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;skybox_reset_current();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int i=0; i &lt; steps;i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next=vector_rotate_to_angle(start, focus_pos, 0, -(i*step_deg), 0); //rotate on one axis around a center<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&gt;0){ //start after first point s calc<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(frame_y==0) frame_y=vector_distance(next, last)*0.5f; //calc the dist between points and use to find y<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next.y=last.y=frame_y; //always the same level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;skybox_add(focus_pos, next, last, curr_frame, 0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i==1) first=last; //we need to keep this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last=next;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curr_frame++; //cycle sprite frames<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(curr_frame &gt; (first_frame+max_frame-1) ) curr_frame=first_frame; //check for last frame and reset<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;skybox_add(focus_pos, first, last, curr_frame, 0);<br /></code></pre><p>In NZ 2.16 I had 4 textures for the sun and 1 texture for the fade on the horizon.  The new setup in NZ v3 will allow for 8 background horizons (16 x 64 x 128), 32 suns (128x256px) and 8 foreground horizon objects. The new sprite sheet has taller sprites which is more flexible as it allows for sunsets, up/down positioning and more decorations such as rings, clouds/moons. trees? <br />Apparently the Wii hardware or the GRRLIB code does not like my 256x512px sun texture frames. </p><h4>Menu / User Interface</h4><p>I added a new menu to the display options for demo mode and background.  The background menu to allows you to disable the signs, buildings, skybox and track while also enabling high contrast black and white mode.  I get the ability to have a high contrast mode because I now have full control over all the colours used in the game through one central api - almost all the colours.</p><h4>Building facades and repeating textures</h4><p>I had always wanted to do texture tiling in GX but never really got a hand of it until I dug deeper into why it did not work.  The goal was to put little windows on the buildings.  I got the repeating textures working (all I had to do was use textcoords that are greater than 1) but in the end only a few buildings got them because I could not figure out the correct scale for the windows.  Here s a video with me playing <a rel='external' href='https://www.youtube.com/watch?v=pw5LSR1X3FE' title='around with windows'>around with windows</a>.</p><h4>The grid</h4><p> <br />The ground grid is a 8x8 grid but I would get some slow down in dolphin on the water stages so I decided to add some frustum culling to it. This reduced the total drawn segments by more than half. Anything that doesnt need to be drawn saves resources for something else.</p><h4>Slowdown on complex levels</h4><p>NZ v2.16 was very stable when it was released with only a few frame drops in Level 2+7 on Hard mode .  Level 7 is the most taxing level in the game (that I can easily remember) because it has a section of the track with multiple fly-overs that come into view at the same time causing the fps to drop below 50fps.  Not bad during gameplay because it only lasts for a couple seconds but it was a clear sign that something needed to be optimized.  The slow down occurs because the game engine has to check if there are other sections of the track that are near the player&#039;s view in order to render them at higher detail.  Usually only 15 pieces of track <a rel='external' href='https://www.youtube.com/watch?v=vaiCqY72SAQ' title='ahead of the player'>ahead of the player</a> are in high detail.  On level 7 this can rise to about 30 so I had to find a solution in my frustum, scanning for new sections of track, or player_track collision detection.  The solution involved a multi-stage approach;<br />I do not scan/update for new track every frame so there is a 0.25 sec delay.  Because of this delay inherent in the scanning/updating new track I implemented a &quot;cool down&quot; hack.  This cool down involved skipping frustum tests for 8 track pieces that come after a piece that tested as &quot;visible&quot;.  This ensured that there were always live track pieces ahead waiting to be retested even while the scan was far away.  This worked well but has one issue; the cool down only happened ahead of the player since the scan loop flows in one direction - not a big problem since 99% of the game play is from start to end.  The only time it would be a problem is if a part of the track was heading in the opposite direction.  This required another new unique hack.</p><pre><code>static bool seek_back=false;<br />seek_back = !seek_back;<br />if(!seek_back) for(int i=0; i&lt;TRACK_MAX; i++) game_track_seek(i);<br />if(seek_back) for(int i=TRACK_MAX-1; i&gt;0; i--) game_track_seek(i);<br /></code></pre><p>I have never done this before in any game.  I realised that I needed to scan in reverse so I could find back-facing track pieces faster.   The best way to really demonstrate it is to look at <a rel='external' href='https://www.youtube.com/watch?v=ntnYexkI9Jk' title='at it in video form'>at it in video form</a>.  After this new double loop was implemented The cool down was able to work in both directions with no extra CPU load.  This implementation is probably 50% faster than the original while updating the track twice as fast.  There are no longer any fps drops/spikes because it works no matter how the track is laid out.  The workload is always the same but more efficient.  The track updates at 0.25 times a second and the scan is running at 0.05 times a second waking up a few track pieces each lap.  track pieces sleep longer based on distance/maxspeed and get checked once they get worked up by the scan (shown in green).</p><h4>Conclusion</h4><p>Most of the work in this version was under the hood but it was fun pushing the limits and creating new hacks. Download the latest version from; <a href="https://wiibrew.org/wiki/Newo_Zero" rel='external'>wiibrew.org/wiki/Newo_Zero</a> follow me on <a rel='external' href='https://www.youtube.com/channel/UCBUb3q4p5Jl7G1BM8GS2pNg' title='youtube'>youtube</a> or <a rel='external' href='https://twitter.com/NewoGame' title='twitter'>twitter</a> for the latest updates.</p><p></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3023/#comment">Post your comments on this article</a></p> Sat, 05 Nov 2022 19:33:23 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/3018/ Programming is difficult, Entrepreneurship is arbitrary (Articles) http://owensoft.net/v4/item/3018/ <p>I haven&#039;t written an article in quite a while so bare with me as I crack my knuckles and flex on this draft email that may or may not see the light of day.  I will keep it short.</p><h4>Programming is difficult</h4><p>It might be easier to teach programming than it is to actually be a programmer in the general sense of the term.  We program things every day, we input and get output.  But the programming I am talking about is the magical kind.  10 thousand lines of React mixed with Javascript on top of a framework that everyone hates - it will change your life.<br />If you look into the stats there might be more people teaching programming than actual people working as programmers.  There are a lot of programmers but certainly not enough to call it an emerging market.  In fact I see less and less programmers everyday - I see more new projects started on github than people actually maintaining these new open source projects.  It is all the same people, over and over dog-fooding.<br />If you put 10 people into a room maybe 2 or 3 will &quot;get&quot; the whole concept of programming.  And even then you will need more time and examples to really launch them into the stratosphere.</p><h4>Entrepreneurship is arbitrary</h4><p>When I was in high school they were teaching everyone &quot;Office Procedures&quot; or maybe it was just girls I am not sure.  But back in the day of OP you at least knew what you were getting into - you were destined to work in an office and write stored procedures all day.  Entrepreneurship is not like that - its more fuzzy.  Do something you like that might make you rich or happy or both.  Stay high all the time.<br />There is a caveat to this however; you must do things legally - you can&#039;t become a thief or some kind of underground criminal.  You have to start some kind of business where you work for yourself and maybe employ some other people.  This is the way.  Settle down and buy a house in LA.  I tell young people to start a church or a bank.  Go hard or go home.</p><h4>Conclusion</h4><p>Any which way you take it you have to stay vigilant.  Keep you head on the ground.  Stay out of trouble.  Work hard at the things you like* and stop wasting time on social media watching self help videos and articles designed to waste your time.<br />* Like doesnt mean entertainment.</p><p></p> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/3018/#comment">Post your comments on this article</a></p> Sat, 29 Oct 2022 10:06:55 +0000
Warning: Undefined array key "uaid" in /home/offipwrh/public_html/owensoft/v4/include/template.inc.php(83) : eval()'d code on line 1
http://owensoft.net/v4/item/2995/ Talking Street - All about focus (Articles) http://owensoft.net/v4/item/2995/ <p>I miss focus ALOT. Generally I use &quot;center auto focus&quot; which makes it easy for an arm or something in the foreground to grab the camera focus and ruin the shot. Sometimes I get happy mistakes. You win some, you lose some. </p><p>Firing from the hip requires practice in keeping people in the frame without cutting off their heads. 28mm struggles. I rarely bring the camera up to my eye unless I want to ensure I get the framing correct. It takes practice.</p><p>In the case of taking a picture of a sign or an inanimate object then I will have all the time in the world to frame my subject. The worse thing you can do in street photography is startle someone without first determining which direction they are heading. Macro photos definitely require extra care when focusing because the subjects are so small.</p><p>If I really want to ensure that something is in focus I often have to make myself known and be purposeful about the shot. This means I have to indicate to the person what I am actually aiming at or I have to pretend to be shooting something else in order to let the subject &quot;win&quot;. Once this happens I can set up the shot, check my settings and work the scene for however little time I have before I lose control.</p><p>It all depends on the situation; if you miss a shot you move on. Such is life. Even with the best camera there are some situations which are just not good for talking pictures. Spray and pray? Just keep shooting and review later.</p> <a href="http://owensoft.net/v4/item/2995/"><img src="http://owensoft.net/v4/photo/thumb/4770.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/2995/"><img src="http://owensoft.net/v4/photo/thumb/4771.jpg" alt="I think the hand is in focus and the food on the table" /></a> <a href="http://owensoft.net/v4/item/2995/"><img src="http://owensoft.net/v4/photo/thumb/4772.jpg" alt="I am really sure if anything at all in this is in focus" /></a> <a href="http://owensoft.net/v4/item/2995/"><img src="http://owensoft.net/v4/photo/thumb/4773.jpg" alt="related image" /></a> <a href="http://owensoft.net/v4/item/2995/"><img src="http://owensoft.net/v4/photo/thumb/4774.jpg" alt="All out of focus" /></a> <a href="http://owensoft.net/v4/item/2995/"><img src="http://owensoft.net/v4/photo/thumb/4775.jpg" alt="Focus correct" /></a> <a href="http://owensoft.net/v4/item/2995/"><img src="http://owensoft.net/v4/photo/thumb/4776.jpg" alt="Lucky shot with the water in focus on the first swipe" /></a> <p><strong>by owen</strong> <a href="http://owensoft.net/v4/item/2995/#comment">Post your comments on this article</a></p> Wed, 07 Sep 2022 10:14:00 +0000