This page lists all the site updates. These are short posts that describe the events in my life. These posts are frequently added here, but have less content than the blog post or the article pages. I like to post one everyday so that I can go back and check what series of changes for an extended period of time. These site updates also track the progress of various projects. Some of them might contain funny stuff, anything that can entertain the readers of these sites. Hope you enjoy them.
It has been a while without updates. I was busy playing FFXV and doing a new tutorial for code project. The game is quite addictive. It was easy to play and easy to level up. So player can get a lot of endorphins, and not much of adrenaline. It is ideal to me. So I play like 3 nights a week. Hence, the no update for 8 or 9 days in a row.
I am happy to report that I have successfully installed MySQL (actually MariaDB) on my EndeavourOS. Again, the process is tedious. Installing the application took no time at all. But starting it up took a lot of time. The problem was that the default Db instance was not part of the application installation. I have to explicitly create the instance via command line. And figuring out what the command line for this took a long while. But once it is done, I was able to start the instance. I have not done the secure installation yet (for tighten the security for the database). But the hardest part is completed. In case any one wondering how the install works, here is the link.
In case you wonder what the new tutorial is. It would be a tutorial on two way communication between an AngularJS directive and its parent controller. This is something I have always wanted to document. It is valuable information to me and I can reference back whenever I needed. It will be ready soon.
One last update. I wanted a video capture box so I can record game playing. Finally got one today. I don't know how easy/hard this would be. It is $135 so it should be all right. Because of lack of hardware, I can't use the laptop to record. This piece of hardware should be able to self record. I will try it out when it arrives. I will give a status update when I get it to work. Stay tuned.
Working on a New Tutorial for Code Project
First thing first, I installed slide-able drape for the skylight window for the attic room. It was scary because it was big and looks fairly complicated. And it wasn't fit. I had to use a garden clipper to trim the frame a bit. Turned out, the installation was pretty quick. First I had to remove the old one, which is busted, dirty. And apparently pretty easy to do. Two screw on the side gotta get them out, then there are the 4 clippers on all sides. Screwed them out then the frame for the windows would be clean. Then I had to get the 4 sides of the new drape put together. And push the who frame up. And first screw the two on one side, then the next two on the other side, finally the two in the middle. And it is all done. The scroll of the drape is bit hard in the middle. But it is up there and looks good. I was happy it worked out.
The other thing I did, I thought it would be funny if I change the Linux boot menu to display "Gundam Linux", with an icon that looks like Gundam. Turned out, it was pretty easy to do. I was able to change the config file for the Grub menu using grub-customizer. Then I decided to see if I can change the icon as well. The thing is the OS is called Gundam Linux, But there is the icon of "LM" displaying next to it. It looked like a buzz kill. The first thing I tried was edit the config file to display the Gundam icon. I found out that the config changes would not be permanent. And every time I open the config file and the change would be reverted back. I tried to change the 30_os-prober script. It was fairly complex and not something I can mess with. I reverted the changes. And found a better idea. It would be permanent. I renamed the default icon to a different name. Then I took the Gundam icon and name it as the default icon file name. And it was permanent, always displays. Here is a screenshot I have taken with my cellphone:
Word of Caution: I am sure what I do is not legal (a copy right/trade mark infringement). It was a joke. So please do not name of your OS "Gundam Linux".
Have Been Busy with Some Minor Fun
Recently I deleted my Manjaro Linux install and replace it with Endeavour OS, which is another Arch Linux fork. Afterwards, I proceeded installing Java 17 on it. At first, when I ran Java, it gave me error that the exec binary format was invalid. I checked and found out that Install the ARM version instead of the x64-x86 version. That was pretty funny. After correcting that mistake, I tried to set the system wide environment variable JAVA_HOME and PATH to the Java binary exec. I made the mistake of using SET to set the variables. When I rebooted the machine, I can't log in, the login process will cause desktop to crash and return back to the login screen.
So I learned how to boot to console, which happens after choosing the boot option on the Grub menu. Then click CTRL + ALT + F2 before the login screen comes up. Then I can login as root, and update the changes I made in /etc/profile. Then reboot again and I was able to login. Afterwards, I can run Java 17 at the command line. That was a lot of hassle.
After Java, I tried to install fcitx for Chinese input. I used pacman to install it. Then I tried to configure it and the configuration app was not there. I have to use pacman to install it which is:
pacman -S fcitx-configuration
After I checked the configuration and added the PinYin input to fcitx, I tried with CTRL + Space to switch between input languages and nothing showed up. After some more research, I found that there is a fcitx-diagnose application which spits out all the errors about the configuration. Turned out I need to add some more configuration to .xprofile for my user account. After I add those changes. Then I restart the desktop again, then the fcitx input window would appear. This is exactly what I have faced 12 years ago when I was working with older version Linux (don't remember which one, probably RedHat). But this exercise shows it is pretty hard to configure such a bare bone system for user for average user. For me, it is fun. The practical goal is that if this OS works OK with the laptop screen flip, then I will switch from Linux Mint to one of these Arch Linux flavors, and use it as my day to day work laptop.
Install Endeavour OS (for Fun)
Just want to put out a quick update. While I was doing my Desktop customization, I made a mistake and my shut down/log off options dialog disappeared. Instead, the power off button logs me out without allowing me to select an option on what to do. There is a way to re-enable this. I will write a quick tutorial on it. There is another thing I want to throw in for the same quick tutorial,
at this point I can't remember what it is. It is probably how to change your name and icon for your profile. I just remembered (edited on 09/21/2021), I will also include the tip on how to remove the annoying popup asking for the password to the system KeyRing that Chrome always asks. And I will also explain why this happens and why it is OK to disable it.
For my personal project, I have created the site links list for the admin page. And again, the paged items directive is working as expected. Although there is a duplicated code for the page flipping functionality. I need to thing of a way to resolve it so that I can eliminate the code duplication for this once for all. But so far, the effect is fantastic. It is combines re-usability and flexibility into one, which is great.
For fun time, I was play FFXV. The reason I put it off initially is that it is very time consuming, and a lot of the side quests were silly. But now, it feels like something rather enjoyable, and it does not spike up the excitement making me unable to sleep at night. And the achievement of completing the quests feels very good. And the leveling system feels all right, it is rather quick. I am now at Level 42. It is quite amazing how fast a few finished quests can quickly level you up. Making gil (money) is very quick and convenient as well. Hopefully, this will last.
Preparing Another Tutorial on Linux Mint
Two days of hard work, I finally completed the tutorial for Linux Mint 20.2 Uma XFCE desktop customization. It is quite hard. The writing is easy. Writing technical stuff is getting easier and easier because I write so much recently. That is progress for ya. The challenge with this one is that I have to take all the screenshots, upload all the screenshots, then associate the images with the post at the right location. It is quite crazy. After posting the tutorial. I realized two issues, one is that I forgot to mention adding the DockBarX to the "Session and Startup". The other is that I forgot to mask my name on the start up menu. Both were fixed. And took much of the time to do. It took a while. But it was done. Here is the link to it.
I just want to add one more paragraph here. I was playing FFXV. This is another crazy thing I found. I actually liked this game. I do not care much about FFVII (the original or the remake), this FFXV is something I like to finish. I especially like the way that one can go around and explore, taking and finishing quests. It is also different from the other JRPG, the playable character gets jump around and do actual fighting. I just hope the controller can hold up with all the finger hitting. I have broken one XBox One wired controller from playing too much of Shadow of Mordor (which I played really well). The nice thing about playing games is that once play enough, I can get good at it. It could be addictive, but I was able to plan the whole thing around my life and still get things done.
Finally Finished the Tutorial on Linux Desktop Customization
Sorry about the lack of updates recently. For the site work, I have completed the site user management. The home page of this functionality is using the new paged items list directive, and it was awesome and working as expected. I am currently working on the site links management pages to test the localized re-usability of this directive function. It is going to be awesome.
Another cool thing I did is that I created my own Ubuntu setup ISO. It is based on the tutorial from this site. It took an hour, and in the end, the newly generated ISO really works. That was exciting. The only problem is that once it is installed, it sets the GNOME desktop as the default session. And I packaged the XFCE, but I have to use the drop down on the login page to specify the XFCE desktop. Other than that I didn't install the xfce terminal so I can't install or uninstall anything. But the steps do works. My goal is to package a minimal set of software for an OS and then I can install anything on top of this minimal stage. This is something that seems to be impossible 10 years ago. Now, with all the available info. It is almost achievable.
Not Much Going On Recently
I am making this quick update so that I won't wait for another 9 days to post something here. Just trying to keep writing for this site a good habit. First, let me just tell you this, if you search "Han Sulu" in google, and this site will not appear on the list. not the first page, not the first 100 page. This is expected. The Admin site of this blog uses self generated SSL cert which will be invalid for Google. They have a good security measure and marks this site as unsafe. Hence it lows the rank for this Blog site. If you search "Han Sulu" in Bing, Yahoo and Duck Duck Go, they all display this blog site as the top result on the first page. I don't play according to Google's rules, so I don't really care about the ranking on Google. Using a self signed SSL saves $100 a year, which is nice for me. Note that, if you search han-sulu.com, it will be displayed in Google search results. So it is still visible in Google.
I did a lot of customization of my Linux desktop. I will write a blog post about it. It will feature some detailed steps how to change the looks of the desktop with lots of screenshots. I just have not found the time to do it, especially with screenshots. It will be available in the next 5 days or so. No plan to create another codeproject tutorial yet. The Desktop customization would be a lot of fun. So please stay tuned.
No Google Search Results on this Blog Site
I was trying to write a good update. But there is not much to say. I was distracted with Linux. One thing that was super awesome with, is the ability for user to customize the looks of the desktop. So I did that for a couple days. I didn't spend all the time doing it. But I did for fair amount of time. I spent the other free time with the rewrite of this blog engine.
Customize the desktop. Here is what I did: First, I got the source code for PolyBar. And I got the application compiled and installed. Then came the configuration. I got a few things added to the bar. But, I cannot add the wireless status, and alsa audio. They were not supported in XFCE. It was a dead end. The application is very cool. I just can't use it. I gave up on that.
Then I started customize the XFCE panel. It took a while to get it transparent as I liked. The problem is with the confusing configuration. After changing it, I had to log out then log back in to see the panel is transparent. Then I changed the wall paper for the login screen. It was very easy to do. There is a login window application in the system category that can easily do it. I got a good wallpaper for the login screen, then another one for the main desktop.
Another cool thing I have discovered is the power up and power off screen/animation. I didn't like the default one, so I installed a spinning circle for it. Apparently I can download the file then customize the boot up and boot down process with the new one. Finally, the docking bar. Plank is not working as I expected, so I did my research, and I found XFCE DockBarX. It was better than Plank. And allow many customization for me to pick a look I like. Functionality wise it was better. I can popup more than one instance of the same process and pick the window to bring it to the front. I like this the most.
For windows decoration, I have downloaded many application icons sets, and many themes. And switching them is pretty easy. But it can be very confusing. There is the Appearance application and the Window Manager. In order to get consistent looks, in both applications the same theme has to be selected. Or one will see inconsistent windows decorations. Such configuration process is confusing. Now I know how to do it, customizing the desktop will be doable.
I have made huge progress with my Blog Engine project. For my previous version, which is this application you can see now, there is a big problem with the paged items list. For the new version, I have designed a reusable page list that can be rendered with different list (list view or table view). I know there is the UI-Grid. That thing is cool. Yet I believe my design is more flexible. Yay!
Distracted, A Long Time Without Updates, Sorry...
I just want to make a quick note here. Yesterday I scored a small victory. It is about AngularJS directive. One issue I had before is that there is no send message back to the parent control from the directive. One good way to do it is to pass a method that is part of the parent control to the directive and have the directive call it. It is easy to do this when the method does not have any parameters. The real challenge is to pass parameters from the directive to the method so that the parent control can receive the parameters and use them.
I had a rough idea how this is done, and have done it once. So I set out to do this again, and within half an hour, I was able to get it to work. Then I left to play some FFXV. It was great that some small effort and it works out. Then again it is not a surprise that it works, everything is simple now once I have learned enough knowledge about AngularJS. I will make another tutorial about this, and post it on CodeProject.
Scored a Small Victory Yesterday
I installed Manjaro Linux on my old laptop for a reason. I want to be able to compile the CyberOS source code. The installation of Manjaro Linux is very pleasant. But the screen resolution was horrible. The old laptop has the screen resolution of 1366x768. The desktop environment looks blurry. Then I installed a bunch of things like Plank docking, and GIT. Then I started installing the QT development libraries.
First I compiled the libcyber-system. It was successful. At that point I knew I was on to something. I used GIT to clone the master branch of the libcyber-system to my local and compiled the source based on the command on the git repo page. And it worked. Next, I cloned the cyber-terminal repo (master branch), and the compilation was rough, I had to add two more libraries. Then the compilation goes through. And I ran the application. It look CyberOS themed. Yay. The same day, I tried to compile cyber-launcher, and cyber-dock. Both requires no more new libraries. I was not able to run Cyber-launcher by itself. But, when I successful run cyber-dock I was able to see cyber-launcher work with it.
All the build was done by cmake, and I can install these built applications into /usr/bin. And they can be launched from any directory. All these are done with QT. It is not something I am familiar with. So I decided to learn how to use QT development library. My goal of the rest of the year will be - getting to the point that I can make some contribution to the Cyber OS project. It is a long way to go. I hope I won't give up this goal.
Fun with Cyber OS
Three years ago, I made a huge mistake with my old laptop. I didn't realize it until yesterday. Four years ago, I turned off the WIFI of my old laptop, the one with Windows 7 Ultimate, and ultimately becomes very slow. It was FN + F11. I guess I was intentional, but I forgot about it. When I realized the internet was gone, I thought some weird power surge knocked it off. I went off and bought a USB WIFI modem, installed it and used it ever since.
So how I did realized my wifi device on my laptop is turned off by some key stroke? Well, it is a long story. I decided it is time to install a second laptop with Linux. And I used the old laptop. It has 203 GB of a second partition. It took a while for me to boot it with a USB (that is another long story. I was tired and made a few mistake, which made the process long). Once I boot it, I was facing an old nemesis - no network. The build in WIFI device is not working, the USB plugged in WIFI device is not working either. I searched Google with another PC for answers why the USB one is not working. There is no clear answer. There are a couple pages showed some commands that displays the status of network devices, and some suggested that the build-in device has to be turned off in order for the USB one to work. But no idea how I can do it. One of the commands showed that the WIFI is turned off, and is blocked by hardware. That hit me like a lightning. Did I turned off WIFI like three years, and not realizing it? So I looked at the keyboard and try to find the key that can turn off/turn on the WIFI device. And it was FN + F11. I hit them simultaneously and thought it was a long shot. What happened next took me by surprise, both WIFI devices, the build in one and the plug in one started show me all the networks available to join. Seen this, I just laughed. This is the most ridiculous thing ever happened to me for the past four years. Wulong!
I unplugged the USB device, and joined the WIFI for my home and installed the Manjaro on my old computer. It seems to be more stable than Linux Mint. Anyways. all my problems with Linux Mint was from the upgrade of 20.2 and a higher version of Linux Kernel. And the issue comes and goes. To make it stable, I boot it up every time. Then shut it down at the end of the day. Recently few days, it has been fairly peaceful and I got quite some work done. For suspension, I would first lock the desktop, then suspend and close the laptop. But after waking up, the unstable-ness would come after 2, 3 days. It is annoying but I can tolerate it. So I just boot up and shut down. Works well.
The Biggest Wulong for the Past Four Years
Finally I moved into the new house. It was under months of renovation. A lot of money was spent. And the deadline for the project to be done was pushed back several time and to my amazement, everything finished 3 days before moving in. I mean the major things. The kitchen door still don't have a lock. And the basement needs a lot of wall painting. But we moved in successfully.
The day before we moved in, I was cleaning up my Windows 7 PC, Windows 7, what a junk. I defragmented the PC a few times, It was still slow. I used an open source tool try to move the files and data together and making the free space as much as possible, so that I can free up a large chunk of space to make a bigger second partition, It was not able to. That was frustrating. I gave after one try. It took hours. I had 208 GB as a second partition, I am thinking putting the Manjaro Linux on it and play. Arch Linux had a lot of fun thing going on and I like to check it out. And it would be fun to have two boxes so that I can run some server client setup, which would be most interesting. I am just extending my horizon on open source to a new level.
Moved to New House
I have been using Linux Mint 20.2 Uma for a few days. And it is finally stabilized. When I first installed the upgrade, I saw a few issues. The biggest one is that somehow I installed the generic kernel 5.11.0.XXXX. After install it, I figure it would be best to restart the PC. And it bricked. The error was the kernel's signature was invalid and I couldn't boot. This surprised me a bit. Lucky for me, there were older version of the kernels in the advanced boot section. I choose the top one and boot it without any problems.
I took a look at the kernel I just installed in the Update Manager (under menu View -> Linux Kernels), the latest version was unsupported. I had no idea how I got it installed. Somehow it got pushed by the Update Manager. It might be some awful repository I added just before I got the notification for the latest kernel upgrade. Anyways, I was able to uninstall the bad one and find another version 5.11.0-22 which support ends on Feb 2022. It worked, no problem. A day or two later, another upgrade ups it to 5.11.0-25. This is as latest as I can get with Linux Mint. But the trouble it got me into almost made me throw away Linux Mint and install Manjaro Linux.
I got a couple more updates. And installing updates on Linux was so easy. It is an amazing experience. I had the "privilege" (sarcasm) to install Windows 10 service pack. What a lousy experience it was. The service pack took 2 hours to download. Then it failed pre-install check. Then it has to be downloaded again, then it stopped at 15%. Then on the third try, I was able to push it all the way through. All took 2 days (16 working hours) to complete. Then another two upgrades with numerous reboots to complete. It was not pleasant. Afterwards, it caused all kinds of problems for me. Even though Linux Mint had some issues (not minor issues), but I can comfortable live with them.
One issue (with Linux Mint and XFCE desktop) I still have not find a solution is that, I close the laptop lid and it can wake up and show me desktop within 2-6 hours unattended. If I leave it close for longer like 8 to 10 hours. I can see the login page but after logging in, the desktop is a black screen. I tried CTRL + ALT + F1 and CTRL + ALT + F8 or something, with no luck. The only work around I can find is suspend the laptop then close the screen. This will leave the laptop suspended as long as possible and wake up properly. So it becomes my routine to click the suspend button under the power section, seeing the physical power button blinking, then I can close the screen. I will expect the laptop will wake up properly. Nothing is perfect.
Linux on a Laptop - Another Update
I learned a few things recently while using Linux. First, I was able to get my old Huawei phone to capture videos and pictures using network connections. That was very easy. Next, I installed DropBox plugin with Thunar File Explorer. This was a bit tricky to setup because I have already 3 devices all interconnected. This Linux computer was the 4th and was unable to connect. I had to drop an old PC from the pool so that my current PC will connected. And the performance between my phone and this Linux PC was very good. The files are appearing on all devices seemingly immediate.
I tried to install Virtual Box for running CyberOS, but the repository and install was just not working. I tried several times and didn't work. I switched to Qemu-KVM, and the installation process is just two commands, one for QEmu-KVM, the other is for Virtual Machine Manager. And it worked almost instantly. There is however some weird things going on with the VM when I run it. I think it was CyberOS, not QEmu-KVM.
The worst was with Warpinator. The file sharing open source application for Linux Mint, and for Android. When I first installed it on my Moto G7 Power. It didn't connect with the Linux PC. Then I uninstalled and re-installed three times. They didn't work. Finally I realized that I need to open the port 42000 for the Linux PC. I closed the ports when I tightened the security of it. In order to get this to work, I have to open the port. So I did that and it still didn't work. As last resort, I restarted the PC and restarted Warpinator on both devices and magically they connected. The trick is that once I change the firewall setting. I have to restart the firewall service so that it can pick up the configuration change. And the user experience with this is really awful. Drop Box was way better when sharing files between devices. I think I will stick with Drop Box for now and use Warpinator as a backup process. All I need is something I can push files from one device to another with ease. Drop Box is fine for now.
Rewriting the blog site is going fine. I added a "Wait..." popup to the application. Also the one existing functionality I have moved over using ES6 syntax was working as well. Three days of hard work is paying off nicely.
Linux Adventures - An Update
It is been a while (11 days) since my last update. I was not sitting idle for all this time. I have posted two blog posts of things I have recently learned. Those are fun. One of them is regarding how to add application configuration to JDBC session for Spring. And the other is regarding enabling CSRF for Angular with Spring. They are interesting problem to resolve. And they gave me a lot of pleasure.
I also started the new project of migrating the existing code for this blog site to the new project. I mentioned earlier that I have had the services layer and data access layer all migrated, I am in the process of doing moving the code for the Admin project. This is a slow and painful process I have to redo almost all the front end coding using the latest ECMA6 script syntax and latest AngularJS code. One baby step at a time. The new syntax needs some time to get used to. Yesterday, I was able to get a "Hello World" displayed on the page using all the new syntax. I am definitely making progress.
I also got The Last of Us for PS4. And started playing it. It was a totally different experience. This game is not open world. So I had to move to specific point and trigger the progress of the game. But the game play was fairly exciting. Right now, because of the spare time work brings so much joy, I didn't even play the game during the weekend. I still think about playing games, but not as much desired as before. Completing Dragon Quest XI really lowered the urge. I tried to replay Horizon Zero Dawn, but I don't feel the same interest of grinding from beginning to end.
Recent Blog Posts and Updates
I copied all my blogging site code to my new Java project. And managed to get the services sub project and repositories sub project compiled, and integrated into my new web project. Next, I did an upgrade with the new knowledge I have acquired, such as using DB as session storage, and making all tables UTF-8 compatible.
Then I run into just one tiny problem. I use DB as session storage, and JDBC session access through injection by annotation. The only way to set the max session duration is by hard coding the timeout value as a constant and pass into the annotation. I don't want this. What I want is setting the value in the configuration file and pulling the value during startup from this configuration. And there is no way of doing this with annotation based dependency injection. I took a look at the source code from Spring, and found a way. I can take the current code base from Spring and add my own code to take the configuration values from the configuration values from database. The coding took two nights, and I made a mistake of taking the wrong code base so I had to rewrite the whole thing. In the end it worked as expected. I was pretty happy everything work out the way I have imagined.
I was playing Death Stranding. It was pretty fun. I was thinking of playing Days Gone. But that game creates too much adrenaline. It makes me harder to fall asleep. And I also got Final Fantasy XV for PS4, and The Last of Us. I think I will play the latter a bit just to get a feel what it is about. There are a lot of fun time ahead.
Hacking Spring Session Code