Back over to Java Spring stuff again. A very interesting possibility that was on hold has come back on the table. I’ve done a decent amount of Java but generally spring was in the background for me. Recently started looking at it after some opportunities involved that environment and it looks pretty cool.
Might also poke at azure/c# a bit but since I’ve done more in the AWS environment I’m going to spend my initial time doing a quick java refresher (already done some but putting together some spring microservice code will do more 🙂 ) and looking at working through some spring exercises (probably in docker containers but we’ll see).
I spent the last few years designing, documenting, implementing and releasing a secure multicast protocol with full key management and seamless key rotation for Draeger Healthcare.
That protocol is their property and I cannot go into great detail about its design here. That protocol was also severely constrained by the very old hardware it needed to run on and by the very out of date operating systems and cryptography libraries those systems used. While I cannot share that design, I can create the design I would have built if not for those limitations.
I intend to put together that design and share it here while I’m looking for my next job. I will be using this work to showcase my technical abilities and as a focus for refresher work in the various languages and coding environments I have available here at home.
I’m expecting to target C, C++, C#, Java and Python (probably in that order). I’ll likely use both OpenSSL and BCryptLib for cryptography support. At this point my OS targets are windows and Ubuntu Linux. If things run on I may look into other options including possibly Android and Kotlin (a language I’ve been interested in for some time but unlike Java haven’t found time to experiment with).
Initial goals for this are:
- Target fully capable OS and hardware environments that can support elliptic curve cryptography and X.509 certificates.
- Multiple root certs per device.
- Root cert, site cert (for authorization) and device cert
- Root cert(s) pre-installed on devices (out of band)
- Key management to add new root certs, site certs.
- Device generates CSR to sign device cert.
- RESTful TLS API for key management (or off the shelf standard, need to look into this)
- Seamless cert rotation to ensure no loss of functionality as certs expire.
- Elliptic curve cryptography to establish device keys.
- Send only for multicast activity.
- TLS side-channel for reliable communications between peers.
- Full library support in multiple languages on a range of operating systems.
There doesn’t seem to be any protocol out there similar to this at this time so I’m hoping this proves useful. It is pretty clear that TLS/SOAP based protocols do not scale as well as a multicast protocol for data dissemination and many application require a scalable and secure way to make information available in real-time.
I’ll keep posting as I move things forward. Currently I’m just getting this started and depending on what comes up I may divert into other areas along the way. I expect to share the code on my github repos at https://github.com/ninecrows
Looking at doing some C++/OpenGL coding today, perhaps along with some other various C++ coding.
Thinking I may look at sketching out a ‘real’ multicast protocol for securely sending data. The protocol I put together for Draeger is proprietary information but it is also crippled by the limitations of the devices that it needed to support. I think a design that is more modern and can use https for credential management and uses public key cryptography can be put together that would be superior (on devices with hardware that is relatively modern) and support dissemination of information over a multicast network with excellent security and acceptable network impact. This would give me something I can share that is based on things I’ve learned when implementing the design that Draeger needed. Definitely worth thinking about.
Later in the week I want to do a little windows forms coding and see if I can project the OpenGL coding into a windows forms HWND. After that I’ll probably do a bit of WPF coding and do a bit of 3D along with some practice with LINQ features I’ve not generally made use of in the past.
The java spring work is interesting but will likely be pushed off towards the end of the week. There are many cool features in there but that is a bigger lift and doesn’t deliver the relatively quick benefits that C# and C++ exercises do at this time.
More later today…
End of another week. Looking at the upcoming week and managing focus.
I expect that next week I’ll be bouncing around between Java/Spring, C++/OpenGL and C#/WPF trying to cycle through things that are high on my list of technologies I’d like to be involved with (probably not all at the same time 🙂 ) in my next role. Knocking some rust off and getting a bit more breadth and depth in some areas (I’ve worked around spring in the past but not tried putting together a complete solution) seems best.
I am going to need to make up some project goals for this week. Simple things, obviously,m as I have very limited time in each area but I need better focus than the last week of reading and tiny code samples provided.
Happy to have my bigger Linux machine up and running pretty well now. I will need to consider whether to replace the failed memory module(s) of just run with 8GB on that system. Most of my windows dev boxes have 32GB or more but Linux has a reputation for handling low resource systems better. Perhaps this will be a workable configuration…certainly better than reloading the OS every few weeks after the system gets currupted though…
So Alert Innovation has opted for a different candidate. I have several more very capable seeming recruiters involved with my search and a few very interesting possibles in the pipe. Ups and downs again.
The rollercoaster continues as I talked with recruiters yesterday and have some more possibilities in the pipe. Keeping on keeping on.
Probably going to do some more spring/java reading today. Cool tools for microservices that I haven’t really played with in there.
Figured out that the stability problems I’ve been seeing with my bigger Linux machine is a bad DDR4 module. I was reinstalling Ubuntu after yet another OS corruption issue and tried the memory test with the 16GB module only in the machine. Many memory errors came back and when I swapped in an 8GB module I had on hand all of these went away. Re-loading things on that machine now and hopefully things will stay stable. This is an older core-i7 NUC and has always run very hot so I do still have concerns. At this point I have is set for low power as best possible.
Definitely feeling a bit discouraged at the moment. So many possibilities that seemed exciting and like good fits where some detail that in many cases feels workable gets a ‘no’. I certainly don’t want to accept a bad fit but it definitely feels challenging right now.
Not going to stop or slow down but very much hoping to find one where everything comes together in the near future. It is interesting walking around various tech stacks knocking the rust off and investigating areas I’ve not had a need for in the past but I get far more satisfaction from seeing a large project come together and ship and that isn’t something I can do on my own.
Got a reply from veeva saying they’re not moving forward. Disappointing as there were very interesting possibilities building out cloud microservices for the sort of work they were looking at.
I will keep the java/spring books handy but given this off the table I’m going to head back to WPF and C++/OpenGL stuff for the moment. Plenty of interesting technology to look at at and rust to knock off…
Some minor resume clean-up done. Mostly pushing my ‘keyword’ sections at the top together and doing ‘triage’ on the contents to clear out redundant items and tighten up some others.
I had two sections for things I’ve done lots of and things I’ve worked with but don’t feel I have ‘deep’ expertise in. Thinking that really isn’t necessary as I can talk to any of these items and the consolidation makes it easier to read.
Realistically those are aimed mostly at automated and human filters in any case. A quick way for someone to scan my resume and match up items on the ‘want’ and ‘need’ lists to things I’ve done without having to dive into the individual job items. It also adds in some areas where I’ve done prototyping or side projects that don’t show up on the main resume but where I’ve gained experience with certain things (MongoDB comes to mind)…
It is always challenging to decide what to include and what to strip out of a resume. I suspect I probably should have two (at least) versions, one with lots of extra key-words to help deal with over specific filters and the other to be more human friendly. At this point I’ll probably stick with the one I have though…there are enough items in there to get the job done (I think) while keeping it a little more streamlined for human readers.
Going to spend much of today reading and putting together some spring code as a java and spring refresher.
I have a number of spring books around that I’ve gone through at one time or another when working on spring based systems. I’ve not been central to the spring part so these were just familiarity issues but at this point I’m seeing a lot of interesting features in there and looking at taking my knowledge to another level.
Tine to refresh my Java and Spring knowledge. Had a good high level talk and I’m pretty sure I could be a good fit for what they’re looking to do. I’ve not written any Java code in around five years though so refresher time…
Ah, things turn and turn again…had a good talk with a company doing medical information management in Java on AWS. Last weekend I was diving into OpenGL and now I’m headed back over to do a Java and Spring refresher. Didn’t so a lot with spring as at Amazon we have our own framework (may have been spring derived, don’t know) and at KMC I was involved more with the JavaFX UI side than the core system (which I’m pretty sure was spring). More stuff to learn in case this goes to another round. Fingers crossed and preparing regardless 🙂