billroper: (Default)
In any case, I have managed to log into Gretchen's email and extract, print, and fill out (the last by hand) the forms that we need to have for Katie and Julie's dance camp that starts tomorrow morning. There are still a couple of items that need to be added, because for one reason or another, I don't have things like the phone number for the girls' pediatrician.

Because that is not a computer thing. That is apparently a Mom thing. :)

In other news, I think that I have figured out how to solve my computation problem at work. Now, I just need to spend a day or so coding it and testing it out to see if the algorithm that I have in my head actually produces the right results when reduced to electronic impulses.

But I think I have an impulse to wait until later -- like tomorrow -- to sort this out...
billroper: (Default)
One of the problems of having a program that is complex enough to have what I refer to as "behaviors" is when you're trying to figure out why a particular behavior has changed from one version to the next. This problem is worse when you've had major changes between the two releases.

You are in a maze of twisty passages, all alike.
billroper: (Default)
Well, actually, upgrading Gretchen's laptop.

Nearly two years ago, I bought Gretchen an HP Stream. Never again. It is now in the process of failing in all sorts of interesting ways. I may open it up and see if a cable is badly seated or something like that, but since the stupid machine will reboot itself when you have booted into the BIOS settings, I'm fairly sure that this is not a Windows problem.

And being an HP Stream, unless the problem is a badly seated cable, the machine is nigh unto unrepairable. For example, if this is a RAM error, you are out of luck, because the RAM is soldered to the motherboard.

But I will take a look at it. Eventually. (I have a litany of complaints about the machine, not the least of which is having to plug in an external hard drive in order to update Windows 10, because the Microsoft-size-mandated built-in flash drive is too small to allow for it.)

In the meantime, I have bought a nice little lightweight Acer laptop for Gretchen on heavy sale. It's only a dual core, but I've now upgraded the not-soldered-in RAM to 8 GB, which should give Windows 10 plenty of room to operate. I have also purged Firefox and McAfee and installed Chrome, Avira, and Alpine.

All of this only took about two hours, the largest single item being installing Avira.

I am sure that the machine will shortly busy itself downloading Windows 10 updates. But it can do that without me.
billroper: (Default)
I have spent the last three days working through the calculations in both C++ and Java with one of our large test files. As nearly as I can tell, everything now matches.

I am very tired.


Apr. 18th, 2017 11:56 pm
billroper: (Default)
Well, it only took three of us to sort this particular bug out.

I had a glitch when I was converting files. This caused reports to send out bad data. The bad data then caused the Excel plugin to fall down and crash.

So first, we got the Excel plugin fixed so that it didn't fall down and crash.

Then we fixed one of the methods in the reports to be a bit more bulletproof than it had been before.

Then I fixed the conversion.

Because you have to be able to see what's broken before you can fix it...
billroper: (Default)
I figured out the source of yesterday's problem.

I had put in a forward definition for a class in a header file so that I could declare a pointer to an object of that type inside the class that was defined in the header file. Like this:

class AnotherClass;

class ThisClass
  AnotherClass*   anotherClassInstance;

When I destroy ThisClass, I want to destroy the instance of AnotherClass that it contains. No problem. I'll just call delete on the pointer like this:

delete anotherClassInstance;

That should work just fine.

Except it didn't. Because I hadn't actually included the header file for AnotherClass in the .cpp file for ThisClass. What I would have expected was that this should have produced a compile error telling me that I was operating on a class that hadn't been completely defined.

But there was no compile error. Instead, the Visual Studio compiler just called delete on anotherClassInstance like it was a pointer to a random chunk of memory with no destructor.

Hilarity ensued.

Well, at least I should remember what caused me to waste so much time the next time I run into this problem...

billroper: (Default)
When I execute the destructor on this particular class -- a class that we have destroyed before, I am quite sure -- I am getting a big fat error. I have been starting at the destructor for half an hour and the solution to the mystery of why it is failing continues to elude me.

This is pretty much a sure sign that I should go to bed.
billroper: (Default)
Well, I added caching for another couple of classes today, which should reduce the memory footprint a bit further. Unfortunately, I am getting close to the point of diminishing returns.

The thing that's the real killer is a big doubly-linked list. Unfortunately, it's a big doubly-linked list that I really need.



Mar. 15th, 2017 10:58 pm
billroper: (Default)
Here I am, in the maze of twisty passages, all alike. Again.

When we open one of our models on the Java side, the memory usage in the JVM goes up by 200 MB. The heap dump says that the data associated with the model is only about nine MB.

Where the heck is the other 191 MB coming from? You'd think it would be easy to figure this out, but so far, not so much.



Mar. 14th, 2017 09:45 pm
billroper: (Default)
So we're studying heap dumps for our Java app to try to determine why our models are taking up as much space as they are. After staring down some of the models, I dropped in a bit of new code.

The model that I was working with -- one of the smaller ones, admittedly! -- shrank by almost 10% in its memory footprint. Larger models probably won't shrink quite as much, but it was a gratifying result.

Now to see if I can use this trick in some other places. :)
billroper: (Default)
Yesterday, I discovered that someone had (in error) created a new session object and left it to hang around forever.

Further investigation showed that had happened more than once, sometimes with big blocks of memory left attached to the session.

I have now exterminated those cases.

I also did a massive cut-and-paste operation to insert code that would throw an exception every time that an attempt to assert a transient lock failed. (Normally, it should wait a short period of time, the other lock should clear, and the operation should complete.) This was frustrating, but in the defense of the folks who wrote the code that wasn't throwing the exception, I hadn't added the quick-and-easy method of throwing the exception with all of the error information in it when they first started using the locks, so...

(Now, it's just call the constructor for the exception and pass in the lock object so that it can load up from the failure info. One line, nice and easy does it. This is because I am lazy and don't want to write this code more than once. :) )

All of this fell into the category of "more fun than human programmers should be allowed to have".
billroper: (Default)
I'm working on downloading the particular Linux version that I'm planning on installing on the laptop. I'm a stunning third of the way through it. Chrome claims it will be another hour. We'll see how that goes.


Feb. 14th, 2017 10:13 pm
billroper: (Default)
I have an old Toshiba laptop running Windows Vista that has become increasingly crochety about it. I've decided to try loading one variant or another of Linux on it and see if it becomes more useful.

Having seen a similar old Toshiba laptop doing so earlier this evening at the girls' school encourages me. :)
billroper: (Default)
There is nothing like finding a really old bug in the code.

Today, someone sent me a file and said, "This won't open. It doesn't open in the older version either."

I tried opening the file and discovered that they were correct. Hmm. I opened up the file in an editor just to check and make sure that it was, in general, correctly formatted, which it was. Of course, there could be something more subtle wrong.

Nope, nothing subtle about it at all.

Someone had once -- and against my advice -- put in a check for the specific file extension that we use for our files to solve a particular problem that they were dealing with. That obviously wasn't the problem here, because the file had the correct extension.

In ALL CAPS. Darned shame that whoever was checking for the extension had written code that checked for the extension in all lower case.

The comparison is now case-insensitive.

And the very old bug has gone away.


Jan. 4th, 2017 09:35 pm
billroper: (Default)
The second of the two Asus M32CD desktop computers that I bought for the family has developed the same failure mode around the power switch that the first one did. This is a pretty annoying design flaw, because the actual switch is held into a plastic bracket by two flimsy catches that break with usage so that the switch no longer makes contact with the big round button on the front. You can press the button, but the switch, not so much.

I fixed the previous break with some hot glue and help from Gretchen; I plan to do the same here.

But really! This is a stupid design.
billroper: (Default)
I'm continuing to break in the new studio monitors. I yanked some more sample tracks from my music collection down to listen to on the new monitors and they sounded really good, so this is all encouraging.

In other news, I may have sorted out some more of the nasty little buglets that are creeping around my code at work. I'll know more in the morning once this compile is done...


Dec. 15th, 2016 11:36 pm
billroper: (Default)
I am in a maze of twisty Java generics, all alike.
billroper: (Default)
It's not so much Minecraft that I hate.

I hate Minecraft mods. These are additional JARs that you can load into your Minecraft environment to add cool features and new things to play with. As a concept, this is a wonderful thing.

In practice, it is a steaming pile of poo.

The way Minecraft is structured, all of the mods need to be loaded into a single mods directory. But not all of the mods are available for all of the versions of Minecraft. Some of the mods will refuse to run if you don't fire up the correct version of Minecraft and will prevent Minecraft from loading at all. You can flip between versions of Minecraft that you intend to use, which is a wonderful, easy-to-use feature, but pick the wrong version and some mod will shut you down.

And did I mention that all of the mods seem to be hosted on websites that desperately attempt to download malware onto your computer? Or, as I encountered today, give you the "You need to call Microsoft!" screen with a bogus phone number for bogus tech support?

Of course, little girls love mods and beg me to download them. Three out of four times, the mod fails to work after I have run the gauntlet. And then is much sadness and "Can I have a different mod?"

I hate Minecraft for having a design this stupid. I just Googled and there are some marvelously complex ways to try to work around the problem.

But it all falls into the category of "What idiot designed this system?"
billroper: (Default)
One of the changes that I made managed to break someone else's build. However, that was easily fixed by adding one more JAR to the version of the build that they were using.

Someone else checked in a mismatched code change that broke the build. And yet another person fixed that.

Today, I found that I needed to do a different version of one of my changes or else the Integrated WebLogic Server in JDeveloper wouldn't start up. I certainly hope that everyone installed their "installed" version of our products on the C: drive, else we're going to have yet another build problem.

And we spent a substantial amount of time discussing WorkManager configuration, which is way more of a black art than it ought to be.

After all that, I was finally able to start running my unit tests. (Actually, these are unit tests that someone else wrote, but I have now beaten them into a condition where I can use them. I intend to add more later.)

And I have:

  • Found and fixed bugs in my code. (And observed that there are some more bugs there that need to be rooted out.)
  • Found and fixed bugs in other people's code.
  • Found and fixed bugs where people have inaccurately modified my code.
  • Found bugs where I have told other people that they need to go fix their code.

    Bugs, Mr. Rico! Zillions of 'em!

  • billroper: (Default)
    It would be nice if we could figure out a configuration for our build process so that all of the different build methods and test modes that we use could work at the same time for the various people using them.

    I have now fixed it so that it works for me. I wonder if someone else's process just broke. I don't think so, but...


    billroper: (Default)

    July 2017

    S M T W T F S
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22


    RSS Atom

    Most Popular Tags

    Style Credit

    Expand Cut Tags

    No cut tags
    Page generated Jul. 24th, 2017 12:49 pm
    Powered by Dreamwidth Studios