Saturday, 18 May 2019

Hardware problems

I have a new computer, a tabletop PC I built myself. I was surprised it started the first time and everything seemed to be ok, but then Windows 10 failed connecting internet. The problem seems to be Realtek's LAN and/or Windows. Obviously I tried to find a solution, but nothing seems to fix it. Reading other people's experiences I'm also going to try a LAN card which is going to have Intel's chip. In fact my current PC has Intel's LAN and I never had problems with it.

This is one of those strange things about PCs and hardware. How hard it would be for OS to figure out what exactly is wrong? Windows 10 doesn't really help that much, it just says the driver is not installed. When I install the driver from motherboard's site it doesn't do anything and the driver installation software is giving another error which tells it's not connected. It is and the cable works in my older computer. Maybe the cable or router is too old? No. It can't be. We'll find out about that when the card arrives in couple of days.

I'm really bad at working with hardware. I just want the computer to say it's ok. I spent a lot of time learning about new PC hardware just to be able to select proper parts that fit together. I don't know about the motherboard, it sure does look like it was not the best one to have (Asus Prime H370 Plus). Then again when you build from generic parts it's easier to change them. I even got a retail Windows 10 which means it's not tied to the motherboard (oem) so I can in theory change everything.

I also hate the way internet is full of "information" about how to fix these problems, because in most cases it's just noise. It's so hard to find actual solutions. I think the best one I've read this far was to remove memory and install it to another slot. You know, to fix that LAN port. I think the companies who build this crap should give us confirmed user stories how these have been fixed, but it's not likely, because companies like Realtek are way too large to have any kind of connection to regular computer users. I don't even want to talk about my bad experiences with computer repair, it's just not worth it to send a defected motherboard to repair. You have to remove it and wait for several weeks for it to come back with a note that it works.

Wednesday, 8 May 2019

How other languages can help

Wish I had tried other programming languages way before. I knew what Basic is, because it was my first language contact back in the 1980's. But then I moved to C and later C++. Recently I have tried out languages like D, C# and most recently Go. I think they can help by giving back more motivation to work with C++, because most other languages suck.

Yes, they suck. Even though C++ is far from being a perfect language it has the least amount of suckage.

So what is the problem with other languages? It's often not the theory behind the language, it's the implementation of it which should give the developer more or less painful access to things like graphical output. Yeah, about that... It's mindblowing to realize that the main output type of languages like Go is text output in the terminal or console window. There are external gui libraries, but in case of Go they are quite difficult to install/use and also they are bloated because some weird reason the language works. Maybe it's the garbage collection memory model or something like that.

I guess some of these languages were never designed for desktop use, but then why do people still ask why C++ is the most common language when the answer is obvious. It's because you can actually write desktop software in C++, even it's an ancient language and GUI support is quite bad with bloated antiquated gui libraries like wxWidgets. The point is it's still better than anything else.

Not only I'm sick and tired of all those things, but then there are people who religiously defend some sucky language like Go. Don't these people have anything else to do, like write actual working computer programs. They never do that, because they can't.

Wednesday, 24 April 2019

Visual Studio 2019 first contact

The install procedure as side-by-side version was smooth. Sadly the installation is the best part of the new Visual Studio. Let's list the things I didn't like.

1. Everything is slower in noticeable way. Solution loading is slower, the editor also and compiling. It's less an issue if you have a modern PC which I don't have.

2. Automatic formatting of source code by default. I just don't like it. Why not leave everything off and let the user add formatting as needed?

3. In some cases when you press arrow up it doesn't go up, but warps to the end of the line, for unknown reason. Didn't yet figure out how to turn that off.

4. The already infamous extra horizontal toolbar area under the menu. No one needed it, but there it is and of course you can remove tools from it, but not the bar itself and "live share/feedback" buttons. I think the feedback button will be used to give feedback about this feature. Everyone who is actually programming knows that you need vertical space for text editor, but this strip is taking 2-3 lines of code away for no reason at all. At least make it optional, it can't be that hard to do.

I really hope Microsoft isn't slowly crapping VS, because it's probably the best piece of software Microsoft has ever released. Even with these new features you can work with it, it's not that bad. And there is no competition so you have to take it.

Sunday, 31 March 2019

Daemons everywhere

Banana Rogue has already 6 files that compile which can be seen as a minor success. It tells that once you get old C translated to C++ compiler it will be "fine" if we forget about memory management problems of C like raw arrays etc.

Function pointer stuff in daemon and daemons modules doesn't work, because the function signature has to match the pointer in C++ which is more strict about types. If I'm lucky it will be fixed by changing all 'void' functions to 'int' return value, even if they don't use it. Or check out if the functions actually are all void type.

The gui refactoring is almost ready. Most of the action happens in Window (previously WINDOW) struct of curses which I replaced with a class. Window is used inside io module through procedural function wrappers which makes it "easy-ish" to replace later with other type of implementation. Everything works in ascii level, the Window is simply a rectangle of ascii data. It's quite brilliant. The only connection to SDL2 will be Display which shows the window. Then also you need SDL2 in keyboard routines which are also simple in case of ascii codes. There will be some complications if you want to use modifier keys or any special keys like arrow keys, but it can't be too difficult to fix.

The rest of bigger problems are in save game routine, options module (which can be easy, I have skipped it) and linked list routines. The internal type for linked list data is surprisingly char* which is a mystery, because malloc itself is void type or typeless.

Saturday, 23 March 2019

When otherwise

The strange 'when' keyword was just a macro for break;case pair which I think is cute. I may even keep that macro, but some macros may have to go. Oh, I'm talking about Banana Rogue, a derived game from Advanced Rogue. I've now gone through source files and mostly created missing header files. Somehow it was possible to compile the source without header files back in what year it was made, because they weren't missing from the source, otherwise there would have been #includes for them, right?

The year is also a mystery (well, guess I could google more about it...) because the source says it's 1985, but it can't be that early, right? Also, the xcrypt source code which is some kind of strange encrypting method for wizard's password is from 1994. I think 1990's is much better guess for this game, they just didn't put it into the source code, but kept some random year, maybe the year they started to work on this game.

Xcrypt can be removed, because it's used for networking (password) which is going to be removed also. The system they programmed this had some kind of built-in networking, this was I think before widespread use of internet as we know today.

What is quite surprising is how clean the source code actually is. There aren't too much parameters in functions and the game has only few datatypes. Probably the most dangerous one is the linked_list which is as mentioned before a linked list type and when you combine C's memory management to that it could be a source of bugs. It's maybe too big task to replace it with C++ version, but it's early to tell. Maybe the internal implementation can be changed.

I'm not too concerned about "destroying" the original source code, but at the same time it's silly to replace everything that looks "bad" from C++ perspective.

Sunday, 17 March 2019

Banana Rogue

The license of Advanced Rogue tells you can't use name Advanced if you derive from it so the project name could be Banana Rogue and in the story you work in a banana plantation, but want to escape hard working conditions in nearby deadly dungeon which sounds much better option.

I found rnd() function from main.cpp and it really looks like main could need some cleaning up. There is some kind of "network" code which is going to be removed. Also, there are signal handlers in case the program crashes which makes the player die from bug. I think it's better remove those also, because if the game crashes it's better to make it possible to load the game from possible existing save game.

This project really needs a gui module and there is already io.cpp which has things like msg for message output, but it could have everything gui related in it. I think the game doesn't have a "level" structure but it has at least four WINDOW arrays (which work as layers) which I think are from missing curses library. They are simply char arrays if I'm interpreting the code correctly.

I found another 'when' keyword switch-case which has the first keyword 'case' but the rest are 'when'. It's quite baffling, because I can't even find any mentions of 'when' being a keyword in C.

Saturday, 16 March 2019

Confronting a vast cosmic mystery

It might be possible that the random Advanced Rogue source code that I downloaded from somewhere and started to work on could be obfuscated. One clue for this are the missing function declarations, but I've also seen a switch - case with two 'when' keywords. Or could it really be possible that it's written in some kind of special version of C?

Anyway, rather than trying to compile one file at a time (which is still not even possible) I've started to re-create header files for each file with functions it has. There are some functions that has to be replaced, but luckily more modern alternatives are possible without changing the call style. One of those is msg() which has a vararg style parameter list, but the syntax is different than it will be in the "modern" version and also I'm probably going to change the internal implementation to std::string, because it just looks like it's better that way.

The number of datatypes I've seen this far is reasonable, it's four: coord, object, thing and linked_list. The last one is a manual linked list as the name implies and it could be heterogeneous through void pointer magic, but I'm not sure yet. But it's using macros to allocate memory for objects. I'm not sure if it's useful to replace that with something safer, at least if it actually works.