Dismantled my old tent. Found out wild cats did more damage than I thought.
Spent several days to get out all my stuff, clean and wipe it, unpackaging, check if the content matches the database, update if not, then repackaging, wrap with plastic packaging film, label them, and finally stack them together. I think that's the best effort I can make to stop wild cats damaging my stuff.
I also noticed that there is one or two cats, run away very quickly when I come upstairs to check, and come back after I leave. The new tent is start becoming smelly.
----
I also ordered a cage, but the government here seems doesn't offer neuter service. Private clinic is too expensive for wild cats. Not to mention if the cats do fall into my trap willingly. Still don't know what to do after I captured one, but I hope it will learn through this non-damage but unpleasent way to not invade my tent.
I have successfully canceled my memento database subscription.
I subscribe to that service for my personal item tracking (or personal inventory management), at that time I need an Android app to scan barcode, and it works well.
As a cutting spend operation, now I save 60USD per year (or 80USD with the new plan with AI™) with my own software.
Introducing jim-cli: It's a command line tool for managing your inventory. Basic CRUD, tag system, keyword search with highlighting. Not very complicated, but good to me.
And to work on Android, I designed an encrypted API for LAN HTTP based on the pre-sharded key. I can run it when I need it, and save the server fee in the rest of the year. (I only need it around Feb and Oct)
You can have a look on github.
jim-cli:
https://github.com/hurui200320/jim-cli
Android app:
https://github.com/hurui200320/Vazan
Every time I update my Android project, I have to pick up what I forgot. Google is every helpful.
Until I finished all my tasks. About to build the release APK. Then I realized that I forgot the password of my signing keystore.
Everytime. Literally everytime. I spend a lot of time trying to remember the password. Then forget it again.
And there is a small bird, moving fast and hard to track. That's the best picture I got before I lost him.
Some bird in the Olympic Forest Park (Beijing). Apparently, winter is colder than I thought.
I put a cheap 10x42 monocular telescope in front of my phone's lens to get those pictures. You may notice the dispersion cause by the telescope.
I'm planning to buy a new telescope with ED lens which claims to fix or reduce the dispersion, but it's pretty expensive after I renewed my domain, dns and other stuff.
One more reason to get a job.
First time using color space other than RGB.
I'm implementing a cli based search function, where I need hightlight the keyword in the result.
I noticed there are several colors are really dark under RGB color space. I don't want hand pick any color palette since I'm bad at doing that. But this will result in a very unpleasant visualization.
Then I remembered OkLab, I randomly know that from the Internet, give it a try and it's amazing. But with `l` controling the brightness, with other two parameters called `a` and `b`, which control the green-red and blue-yellow, to me, totally nonsense. It's not a intuitive way to generate color.
With some unsatisfactory, I found OkLch, which I have no idea what it is. But hey, it can control brightness, chroma and hue. That's what I need exactly! I need random color to distinguish different keywords, but I want all keywords looks equal. With fixed brightness and chroma, I can select whatever hue I want!
Invitation denied.
10 friends? On ActivityPub? What a luxury.
But I do manage to found some (2) screenshots from movies I watched. Normally I don't save screenshots any more. I used to write reviews, until I found out I'm bad at writing.
Got a new temporary tent for long time storage. Don't have a dedicated room, but at least got a tent.
My last tent is an outdoor tent which has been dismantled by wild cats during the last strong cold wave. They cut the tent and make it a wild cat shelter, which makes it unusable anymore.
Also, the Cat Repellents Sprays are totally useless.
Can't believe there is sus C/C++ code mixed in my Kotlin/JVM project 😜
Never though I'm going to dive so deep in this Win32 rabbit hole.
I was originally thinking just wrote a simple wrapper of win32's tape API, but then I realized that the encryption is missing. With Win32's tape api, you can basically implement something like `/dev/st0` (simple read and write) amd `mt` command (rewind, seek, set compression, etc.). I was thinking just use LTOEnc for encryption control.
But that software can only read the encryption key from a file, which, to me, is a big security hole: I can do that in memory, why write to the disk temporarily?
So I start reading LTOEnc's code. I found Microsoft really don't want you to directly talk to SCSI. I read their documents, they never said about IOCTL_SCSI_PASS_THROUGH_DIRECT. They are recommending something like IOCTL_CDROM or something that is not so lower level.
Anyway, thanks to LTOEnc, and Oracle's helpdesk generously providing HPE product's tech ref manual, I now can implement the encryption control in my win32 lib. And soon I can do that in Java.
I would say win32 api is actually not bad. Despite the fact that I don't know how to write C and CPP in a proper way, meaning not just submit the code to get an "AC", but an actual project, where you build something for people to actually use, either lib or executable.
Microsoft did a decent job with the documentation. The cmake side needs a bit of work. Yeah, I don't know how to properly config it. Thanks to Google, I still don't know how, but it's working.
I blame c++ for my degraded sleep quality.
While jextract makes the header translation much easier compared to JNA and JNR, but win32 api still does not work, and c++ support is not good.
The standard header from llama.cpp is working, but other functionalities like grammar parsing and sampling init is not included. They shipped as a common component in the example codes. While I want to compile the example code as a shared lib and invoke them from Java, the jextract has some problems with C++ headers and not happy with it.
For wintun, it uses win32 headers in its header files, which let jextract to process (almost) the whole win32 lib. The pointer size seems to be a problem. One said it should be 32 bits but another said 64 bits.
No wonder it's still in preview stage.
Got my watch fixed. Spent a week and about 75USD.
I know casio's gshock is very tough.It already amazed me when I found the core is still functional after a great crash. I spent two weeks to regain my ability to walk, and until last week my last wound was healed.
Now I'm amazed again by its toughness. There is a huge crack in the front glass, across both XZ plane and Y axis. I assume the front glass is fragile, but guess what? I pushed on it and it still holds! This huge crack even failed to penetrate the whole glass! The inner side of the glass is still one piece.
With additional 2 backups, I guess it's a lifetime guarantee.
**I have a job now!**
I'm a Chinese shitizen, but I generally don't post in Chinese to avoid being suffering from other Chinese.
I'm physically a male, but I don't care how people think about my gender. I can be male, or female, or cat. But if you ask, I'd prefer to be referred to as male. Also, I support LGBT+ people, and I'm a copyleft. I don't think I'm too aggressive in arguing things, but sometimes I do. You should handle it with care.
I post about programming (most time is Java and Kotlin, unless I have a new love), and some random things I find interesting. I also post about my mental health, which is in a stable state of instability, thanks to my parents and Chinese society.
Anyway, if you want to follow me, I'm glad to see you. And, have a nice day.
Alt: @skyblond