This is the weekly thread to discuss what you have done recently and are working on this week.
Please be descriptive and don’t hesitate to champion your accomplishments or ask for help, advice or other guidance.
I just finished up my scheme interpreter! It took about a year and I’m glad to release it and see what people think https://rain-1.github.io/scheme-10
Congratulations! That is one more scheme interpreters than I have written :)
I hate telling people about this.
But. I’ve been compiling java to native code, a little differently. I think I’ll get perhaps 30% speed performance over C when targeting today’s usual superscalar processors, a GIANT size advantage over the openjvm, and a certain predictability/reliability. No GC pauses, no JIT pauses, no warmup, and a variety of nice things you can tell the compiler to do for you. “Make sure that this method and whatever it calls obeys …”
A couple of months ago I managed to run a simple program with a complex cyclic data structure. Automatic memory management without runtime GC or rust-like ownership restrictions. That felt good.
“Don’t hesitate to champion”. Well, I’m quite some way from a release still, so there’s not much to champion. But I’d like to hear “oh, cool” and things like that. It’s a bit of a slog and today I’d appreciate some encouragement from random strangers ;)
That’s pretty damn cool man.
I’ve played a bit around with the same java to native code, although I was targeting small MCUs, which leads to a whole new set of constraints, but I quickly ran into the issue of how do you talk to hardware from Java… And with the concept I used “Hardware Near Objects” it ended up being silly.
But it was a good learning experience - are you targeting anything other than a learning experience from your project?
Improving the world and earning money in the process ;)
I don’t care about small size. Once upon a time it was possible to fill one typical unit of storage with the output of a large team of programmers, but today RAM, SSD and spinning rust has outgrown software development output. So I generate comparatively large executables and don’t worry about it. Most of the executables aren’t even paged into RAM, and that’s okay. I keep an eye on L1/2/3 cache friendliness and ignore the other target sizes.
Improving the world AND earning money - I don’t think you can wish for much more ;-)
Well, it can happen ;)
Many years ago, one day after having visited the dentist and needing another appointment, I noticed that the assistant used some undocumented keyboard shortcuts to make an appointment, and moved around the GUI’s dialogs and forms very fast. I also recognised the GUI library (Qt). So I said, “oh, you use the arrow keys with that program instead of the mouse?” “yes, that’s great” she said. I wrote those shortcuts. It may not be world peace but it was a nice feeling.
Most of what would help you has been commercial under the banner of Real-Time Java. Might be something in those links talking about hardware interfaces. I dont remember anything open source other than JOP, which was hardware/software mix.
Hey Nick. Thanks for the reply.
I know about Real Time Java, quite a bit of the implementation I did followed the JSR. I’m long done with that project though, it was a project I did back when I was still in university ;-)
Oh that’s cool. Anything you really liked or hated about that? Anything worth using today?
The main issue I had with implementing it, was a mismatch of models. When you doing real time Java on small MCUs you need to think about allocations, and the fact that you need to box primitives requries that you essentially never use the built in classes, and instead either make your own which conforms to the interfaces or find a third party library.
Another issue was interacting with hardware registers, I couldn’t find a Java way of interacting with them, so I ended up using a deeply unsatisfactory way instead.
I found that it was deeply unsatisfactory because you were essentially poking the bits by yourself, which Java isn’t good at (too high level in general) and it doesn’t look like Java either.
It was a very useful learning experience though :-)
Thanks for the insightful reply. It sounds like most of this could be done by using a suitable abstraction for Java which had a native implementation at the JVM level that handled the messy details. I say at the JVM level since it’s doing things like managing memory and threads. So, it might need to know when low-level, risky things are happening that might effect thread or memory state. The combo would let you stay close the the Java model.
Might even be what the RT JVM’s were already doing. Regardless, what you think about that?
Without sounding too pessimistic about the general skillsets of developers, I think it’s easier to state that doing all these things to Java effectively results in having to write a specific subset of Java, which the general population of Java developers are not trained in, which seems to be one of the issues that at least commercially has lead to the time spent on RTJVMs - can we take a commodity and turn them into real time developers?
There’s some problems with the way the JVM works internally (Generics are a compiler-time construct and not actually build into the JVM) for it to be effective, which are not that easy to solve without changing even more characteristics of how Java is written, and then again effectively invalidating quite a bit of the existing Java knowledge.
Interesting. Well, the market tends to support what you’re saying since they were all custom JVM’s with their own way of doing things. People did need to learn all that. They were usually subsets, too. I don’t think subsets would be hard to learn. They would be forced to solve old problems in different ways using those subsets. Maybe loss in productivity and code reuse since their favorite libraries using non-real-time features wouldn’t work. So many fewer frameworks, too. The pointy-haired bosses would freak out about that.
That’s pretty damn exciting. Java is one of those languages that the hipsters love to hate, ignoring the fact that a giant chunk of the modern computing world would simply fall over if it ever stopped working :)
Yeah, but that’s true with COBOL, too. I still say ditch it if you can. Decimal support is one thing modern apps, esp handling money, can learn from it. Likewise, new stuff can learn lessons from enterprise and embedded apps in Java. I’d just ignore the desktop side, though. ;)
OK. What other type safe object oriented performant language with first class tooling and one of the most incredibly rich library ecosystems in existence would you suggest?
(If you say something silly like C I’mma gonna laugh :) )
Sounds like you’re kind of forcing it to be an OOP, JVM language with heavy tooling. If on JVM, I’d say try modern languages developed after Java like Scala or Clojure. If it can call Java libraries, you get library ecosystem. If on .NET, any modern language with tool support that runs on its VM that can call its libraries.
If native, Pascal with Delphi and Ada with numerous IDE’s were alternatives with both being safer, lighter than .NET/JVM, Delphi having fast iterations, and Ada probably more safety and runtime speed. They had a C FFI for its libraries which should be compiled with all the error-finding options. Currently, I’d say Ada/SPARK with GNAT Pro or Rust with IntelliJ with an eye on Nim when its ecosystem improves. They’ll give you safe, maintainable code with Ada supported for decades so far.
If ease of learning and libraries are priority, Go language is easy to learn, tons of libraries, fast iterations, and performs well enough that few complain. Again, with IntelliJ IDE. I don’t use IntelliJ: just mentioning it since you wanted first-class tooling, supports both languages, and people online write good things about it.
“(If you say something silly like C I’mma gonna laugh :) )”
Making C as safe as Rust for arbitrary code would require running it through Softbound+CETS plus maybe Data-Flow Integrity plus a safe, concurrency scheme. Hard to be sure since I can’t remember what risks each tool counters at the moment. I am sure the combined slowdown of (wild guess) 300+% in performance from all the checks would, if running Electron apps, lead to a frame-by-frame, mouse-shadowing experience that would definitely leave you laughing. Then I nudge you saying maybe it be easier if we just try to further optimize safe Rust instead of securing unsafe, legacy C. ;)
I don’t see golang as being particularly easy to learn. I find the level of abstraction it presents to be frustratingly low. As a programmer I prefer more abstraction, not less. But this is why making firm statements about programming languages gets tricky :)
And are you really honestly suggesting that large business with huge teams creating projects that are many many KLOC should try to use Clojure? I mean, I love the language but I think you’re asking too much of the average engineer.
And, again, Tooling. You may not like Java, but I challenge you to find a similar language with IDE support as rich or mature. I know the hipster engineer maxim is that IDEs are for chumps, and maybe they are, but the “cold dark matter programmers” in their thousands out there grinding away writing code day to day would disagree.
You’re just listing most of the reasons why java won ;) Of course java has to be the answer when you load the dice like that.
I don’t see it as loading the dice. Different programming languages are suited to solving different problems. Sure, you can implement a stock trading system in Bash (It’s Turing complete, right? :) but why would you WANT to?
That’s an extreme example. Java was already inferior to languages like Common LISP with their IDE’s when it was introduced into the market. Its success had nothing to do with it being the right tool for the job. It was actually overly-complicated, used more memory, ran up to 15x slower than native competition, and so on. Its success was almost entirely due to a massive amount of money spent by Sun Microsystems on marketing it to enterprises and colleges. This put it everywhere. The ecosystem followed. The tooling and libraries improved getting it more useful overtime.
As a language and IDE, though, it’s still slower and with less power than a CL implementation. Actually, a number of things people were trying to build whole toolchains for in Java were done with a macro library in existing toolchain in CL before that. Maybe throw in Smalltalk, too, given what few studies were done showed their productivity ran circles around all the non-LISP languages. Easier to learn, maintain, change, and so on. I do wonder what productivity rate would be with Java’s refactoring tools vs whatever Smalltalk IDE’s have. I know Smalltalk could catch up quicky, though, since it looks to be a simpler language.
Again I am a HUGE fan of Lisp and Lisp-like languages. And I even have a tremendous amount of respect for Lisp-IDE like environments (which are usually built around/in emacs.)
But I don’t think anyone would seriously argue that such environments had the depth and richness of features that something like IntelliJ has.
I don’t LIKE Java, but there are reasons it’s used in so many places that people ignore but that would cause the world to stop spinning on its axis if they failed.
“ argue that such environments”
Those aren’t the LISP environments I compare a commercial offering to. You’d have to look at the commercial offerings, like LispWorks and Allegro, to make a comparison. AllegroCache looked like it was by itself justifiable reason to use that product given all the object to relational crap people were buying to work around Java and RDBMS weaknesses. They were doing that kind of stuff when folks were fighting to get Java to handle server workloads well. Unlike Java, you can live update these kinds of systems, too.
“but there are reasons it’s used in so many places that people ignore but that would cause the world to stop spinning on its axis if they failed.”
I agree it’s important given it’s entrenched. I also agree there can be good reasons to use it. I think that overstates the case, though, where you’ve jumped from there’s good reasons for some to use it to they had something to do with widespread, legacy adoption. Sun’s marketing work plus enterprise buyers and college admins caused almost all of the latter. Now, we’re stuck with it like we’re stuck with COBOL in business, Fortran in HPC, VB in some Microsoft shops, 4GL’s in some data-driven shops, and so on. Companies are stuck with it since the transition costs are too high and they prefer maximizing ROI on existing investments. Has nothing to do with the language features.
Heck, the people making the decision to force all developers to use Java don’t even usually know how to program. They’re managers and CIO’s. How much could language decisions have factored in if they didn’t know the language? They just read in CIO magazine that .NET and Java were the enterprise languages with all the commoditized talent and tooling. Some truth to that. Then, they went with it. Or they inherited it from others that made a similar decision with no intention to switch given they have to keep costs low to look good to their superiors. Again, that works against considering any language design but the existing one [which might be crap].
I’ve seen LispWorks and it’s definitely a nice IDE. Point taken.
And hey, I’m not saying Java + an IDE like IntelliJ + its libraries aren’t an amazing combination. If you can get that, Java might be a great language to use for a lot of use cases. That’s all working despite its weaknesses due to massive investment over time by companies. The IntelliJ people cranked out IDE’s for Rust and Go in no time. I think they internally use metaprogramming that Java doesn’t support for some of what they do. I’m just arguing the language itself should be avoided wherever possible if you don’t have that IDE money or can do the job without it.
Also, Oracle owns it now. They sue all kinds of people. They also say anything using their API’s is a derivative work. I won’t touch anything they own for legal liability and to avoid giving them more opportunities to sue. Same with Microsoft. Not everyone is worried about multi-billion dollar lawsuits, though. :)
You’re allowed to not like Java, but you need to come up with better arguments :)
Oracle? Solution? OpenJDK. It’s totally usable for pretty much everything now, and in fact so much so that my employer has created an enterprise supported version of it, Coretto for companies that want to build things in Java with LTS - e.g. someone to yell at :)
The reason I keep battling back is because a LOT of people (Not you in this case.) hate Java for really, REALLY stupid reasons. Note that I’m not talking about not preferring to use it, because that’s another story, but saying things like you just did about “Avoid it whenever possible.”
Because yeah Common Lisp is amazing, no doubt. My first gig in the industry was with a small company called ICAD which was built upon Symbolics Genera but then later ported to Franz Allegro CL. I was watching convex wing surfaces of the Boeing 7X7 (I can’t remember whether it was 6, 7, or 8 :) that was in development because our LISP based CAD system could model the curve in ways traditional CAD systems would burst a blood vessel trying to accomplish.
But many, MANY engineers find Lisp very hard to wrap their minds around and, much as it’s full of Boiler plate (The IDE can handle that) and has design flaws (anonymous inner classes anyone? Fixed in Java 7 or 8 I think :) there is a HUGE programmer pool for Java and a positively freaking GINORMOUS third party ecosystem that’s all basically just plug and play and as amazing as Common Lisp is, you can’t say that between CL implementations, because the Common Lisp standard at least was kinda fuzzy around the edges WRT implementation detail.
It’s gross, sure, but it’s the right tool for the job for a lot of very complex business cases, and some technical use cases as well.
What I find strangest is how people focus on languages’ weak aspects.
The weak parts matter. I remember a bug where I needed to read two giant blobs of IDE-generated boilerplate line by line. That wasn’t a fun bug, and I dare say I ranted a bit about autogenerated builders afterwards.
But focus on that strikes me as wrong. We want to do things, so the focus should be on the positive traits — the traits that make something suitable. I chose java for this thing because (omitting nontechnical stuff) it’s sort of low-level (it’s the kind of language where you can look at a method’s source code and estimate its number of register spills), it has a rich ecosystem and it has a very hard border downwards (no sizeof for example, no insight into memory layout). These are positive traits in my context, they are what enable.
The negative traits is what we should complain about over beer. Dragging them into the spotlight during the working day is… may I say morally wrong?
compiling java to native code, a little differently. I think I’ll get perhaps 30% speed performance over C when targeting today’s usual superscalar processors, a GIANT size advantage over the openjvm, and a certain predictability/reliability. No GC pauses, no JIT pauses, no warmup,
compiling java to native code, a little differently. I think I’ll get perhaps 30% speed performance over C when targeting today’s usual superscalar processors, a GIANT size advantage over the openjvm, and a certain predictability/reliability. No GC pauses, no JIT pauses, no warmup,
So, you made a Java-to-Rust transpiler? You’re brilliant!
Is this a joke or is it fanboyism? I can’t make up my mind.
FWIW, making a language suitable for writing by humans and editing by humans is strongly at odds with making it suitable for writing by compilers and simple to reason about using algorithms. Fanboys might think that Rust’s general qualities make it suitable for every role, but fanboys are wrong now and then, even Rust fanboys.
You may now classify me as either “unable to recognise a joke” or “not a Rust fan”. I’n guilty of the first, mixed on the second.
I was one of main dudes countering Rust Evangelism Strike Force here and on HN. One made Twitter with an official response. You can bet I was joking. Some truth built in like most of my jokes where at least one person advocated it as a compiler target (vs C or LLVM) to take advantage of its type system (among other things). Mostly joking, though.
The serious version of that idea was when I thought about mocking dynamic languages like Python in a high-performance CL or Scheme to leverage all the work put into optimizing their compilers. Also, get their powerful macros as a language extension. Generating such a mapping might be easier than me figuring out all the optimizations for a new language. How’s that sound?
That sound interesting – what technique are you using?
Several known techniques and some new insight. This part is the longest, most complicated story in the entire software.
Why so mysterious? Can you not share the details with us?
I didn’t mean to be mysterious. But I don’t think I can explain, either. (And perhaps I shouldn’t, this might be patent stuff and for once a patent I wouldn’t scoff at.) I’ve tried to explain this before, and failed quite frustratingly. The people I talked to ended up with either nothing or misunderstanding. Perhaps future-me will be able to give a useful four-paragraph overview, but I’m not able to do that now.
It really is complicated. Sorry.
I lost all interest when you brought up patents. Good luck with your stuff.
Doing anything to do with java means that Oracle’s opinions and behaviour matter. You don’t have to care whether I paint myself into any corner, but I care.
Are you planning to patent it to license for money? If so, then you need to remain secret. If not, then anyone else can patent it or sue you for it once it’s in public as words or an app. They can also sue you right now for any number of things. The good news is they tend to just sue people making piles of money since leeching off them is the goal. You’re nowhere near the six digits and up on this project where Oracle would consider suing you.
So, you can probably describe it somewhere in any scenario where you aren’t patenting it. By the way, if trying to prevent others patenting it, I think you can make it prior art by describing it in a journal like in ACM and IEEE. They usually let you keep a personal copy on your website. Otherwise, you sneak a draft out that’s Creative Commons with a second, final copy going to them. Lots of folks are doing that. Ask a lawyer, though.
Oh, cool :)
Are you following along the recent JDK developments, “syntax”/feature wise?
Yes. With variable lag.
Writing a collection of “classic” games (pong, space invaders, etc) in Love2D for beginners to reference and learn from.
Very cool! I’ve been super excited of late how much interest there has been in good old fashioned 2D game programming and how comparatively easy it’s become using Lua and frameworks like Love2D.
I have a Clockwork Pi stuck in Chinese customers, but if it ever arrives this is definitely one of the things I plan to dig my teeth into with it :)
I especially love the idea of doing this as a template for beginners. It’s one thing to make the mechanics easy (e.g. setting up a screen. Drawing some pixels, playing a sound) but understanding the algorithmic aspects of how such games are put together can be a challenge for beginners. I hope your tutorials will emphasize those bits :)
That sounds like a pretty neat project!
Would be interested in following …Do you have a blog or any other place where you put updates?
Re-reading my own response I just realized I want to know the same thing :) How do we know when you’ve published without bugging you incessantly ? :)
I’ll be putting up a devblog sooner or later, I might post a link to it here but it will definitely be posted on the Love2D forums.
Not yet, I’m planning on putting one together but I haven’t gotten to it yet. Keep your eyes peeled in the next week or three.
[Comment removed by author]
Hey thanks very much for the pointer! I’ve been doing some simple bodyweight exercises as an adjunct to my daily aerobic workout and have enjoyed the increase in upper body strength and muscle tone. I’ve been thinking that making a more sincere effort on that score might make a lot of sense, and this looks like a great system.
(Everyøne keeps telling me to get a trainer, only I mostly ever hear horror stories about how utter crap most trainers are :)
I’ve distilled the things I’ve helped software teams with over the years into a framework I’m calling Petri, and I’m writing up an introduction to it for my website. Additionally customer meetings, tackling the project on my AI nano degree, and FOSDEM!
Finishing the first 5 Advent of Code puzzles. That’s my goal for the week. Also getting through chapter 2 of Stafford Beer’s Brain of the Firm and chapters 5/6 of the Google SRE book for work book club.
Brain of the Firm, how cool!
Yeah a friend of mine has gotten WAY deep into cybernetics of late, and gushed about this book enough that I finally caved and started reading it. There’s some really great ideas in there, and I think folks interested in systems complexity would do well to go back and review some of these seminal texts in that genre.
Still on the hunt for a job. If you’re in the Seattle area and know of opportunities, lmk!
Packing for a trip to Hawai’i. Then, being in Hawai’i.
And I will think about envying that. Then, actually envying that.
My dad and stepmom bought land 25 years ago and have been improving it since. So, not only are we going to Hawai’i, we’re staying in a house to ourselves, for no money.
On the other hand, we have two toddlers, a giant snowstorm, and two flights of six hours to get there.
Final blaze of glory on a work refactor project, and then gods willing I’m taking two weeks off to contemplate my navel, play with my dog, and decompress.
Setting up testing for aforementioned work, sketching out deploy process.
Missing company retreat because I’m too chickenshit to deal with the stress of this long-running project and the stress of travel and the other life stuff to accomplish travel.
New blogpost in the works about burnout, which is remarkably hard to write about without turning either into sanitary useless little factoids or sprawling HST-esque first-person narratives.
Getting my players to send in their character builds for an upcoming Delta Green campaign. It’s like Call of Cthulu, but with even more mechanics for simulating the degradation of human bonds and the slide into isolation and madness while fighting an unwinnable war. Why no, this has nothing to do with work burnout, why do you ask?
It is my last week at my current employer. I am wrapping up some things related to EMR (Hadoop/Spark on Amazon) and taking it easy. At the end of the week I will travel to Brussels to attend Fosdem.
Setting up an Apache Kafka Cluster with encryption, authentication and authorization if possible
Plugging away on an experimental interface to our conferencing app, one that places the windows into an MDI-like interface. We bringing on some UX “experts”, so we’ll see what they think. It can get confusing for folks when their video windows are scattered about the desktop. Maybe this will help.
If you wanted to know what I worked on in a past life, check out this insteresting and pretty accurate article on Looking Glass Technology and Ultima Underworld, my last game dev project:
Interesting and impressive! Would you be able to demonstrate what you mean with an MDI-like interface or the actual project?
It’s pretty easy with Qt. Our app, a video conferencing app, has a main UI window and, when in a meeting, creates a window for each video feed (which can be up to 32 or more - honestly!). I just created a new mainwindow with an QMdiArea widget in it and then just add all the others windows as QMdiSubWindows instead of right on the root window. Works pretty nice and keeps things easier to manage. I may experiments with leaving the main UI window outside and just create the MdiWIndow to contain video feeds when you join a meeting as well.
Hey, I feel you. Unfortunately, when the SQL is the only language your source of truth responds to it’s hard to do anything else. I’ve found something akin to joy in visualization and query layers.
I’m working on a C compiler (in C).
The lexer is almost finished, I have some pieces for the parser, and codegen.
But now I want to get the preprocessor done before I keep working on the parser.
Still need to figure out how to go about it.
I’ll probably implement it first as a separate tool and then integrate it into the compiler.
Funny enough I’m working on a C like in Go right now. Just finishing my parser before I go to code gen.
How are you planning to go about code generation? I started out experimenting with Destination-drive code generation  because it seems simple enough. But I might first use LLVM to make sure the front-end is working fine and then focus on the back-end.
I brainstormed a project for a better preprocessor, but never ended up doing it. These docs/projects might be useful?
This will come in handy soon, thanks for pointing out those resources.
So far I’ve only been reading through Fabrice Bellard’s TCC  to get a feel for what I need to do.
The TCC code s pretty gross.
Ill warn you that TCC might not be easiest to learn from given it was a submission to the obfuscated, C contest. The only one I know designed specifically for education, with an accompanying book, is LCC. It’s not OSS/FOSS but was free for personal use.
I didn’t find it that bad, but definitely not straightfoward.
I skimmed through LCC’s accompanying book but didn’t look at the source code.
Have you gone through LCC’s material? How do you find it?
Oh, I didn’t study it or even use it. I have no idea.
I collected as part of research for diverse and verified compilation for C programs. I needed a bunch of compilers. At least one needed to be easy to understand. At least one formally-verified. They would all compile the same code run with same input to hopefully get same output. Once I had the list, I was done with that for what that exploration would need should I ever have to use that approach.
I collected a bunch of tests here you might be able to use:
At work, I’m currently learning Rust. I hope to start hacking on code this week. I’m developing a scalable threat intelligence platform on top of HardenedBSD, bhyve, and Rust.
At HardenedBSD, I plan to make the package sync subprocess in the package building process more robust. I’m also going to research a bit more about Cross-DSO CFI in HardenedBSD. We’ve seen an issue with various NFS utilities violating the cfi-icall scheme because they’ve assigned a function pointer a value that crosses the DSO boundary, which we don’t support currently. Integrating Cross-DSO CFI would add that support.
At home, I plan to hook up our “new to us” extremely old clothes washing machine. Our previous washing machine’s motor died, and a member of our congregation was looking to get rid of their really old washing machine. It’s still in good shape, so age doesn’t matter since our previous one was dead anyways.
I think I am bored with web development now, my time with it may be close to finished.
Currently exploring what I actually enjoy doing, maybe I can make a hobby+career from it?
Things I found out I enjoy doing, still dabble with when I can:
I will have a think this week.
I’m in the process of carefully refactoring a +20 year old embedded C code base into something that’s more comfortable to work with (read: many globals, not all headers but functions are externed where needed, many different names for the same types etc etc etc)
When the depths starts staring into me, I’m working on writing a set of xml wrapper classes for the xml that SpecFlow produces in Java. This is to make a small little webapp to show us, which cases fails and how many times in a row they have failed.
Most of the week’s watching EM immunity/radiation & ESD tests being administered to the new product. Fingers crossed.
Working on mfg image for the same thing in between.
As always – my company.
What’s your company?
EDIT: If it’s https://www.browserling.com/ then it looks cool! How long have you been working on it?
Yes, it’s Browserling. I’ve been working on it for 8 years now and I love it.
Yeah that does look cool. Ill bookmark it for anyone looking for such a service.
As previously mentioned here, I’ve been doing livecoding of a Java/Spring app on Twitch [here](https://twitch.tv/jitterted] called “kid-bank” (tracking how much money my son has, since we didn’t think it was worth opening up a “youth” account for him).
The open-source OBS broadcasting software has been rock solid, but the usability sucks (the bane of much open-source). And, since the streaming is mostly gamer-oriented, finding the right settings has been lots of trial-and-error, especially on the Mac where OBS sees the retina screen differently than other software, so resolutions are wonky. SwitchResX may be a solution, but haven’t tried that route yet.
Twitch.tv as a platform is OK, though it’s surprisingly lacking in features (you can’t schedule recurring broadcasts, for one). Also, the latency is a bit high for me (6-8sec) and that means responding to chat comments is a bit…weird (may be due to the odd resolution I’m broadcasting in). The 3rd party app support is aimed at Windows, which makes sense given the gamer-focus, so for me it’s all a hodgepodge of little apps and lots of manual work to get it right.
All that aside, it’s been a blast doing the livecoding! On my first session, I started out assuming that nobody was out there – because I wasn’t talking to anyone about it yet – but someone dropped by and had some nice/useful comments, which made it more fun. I’ve now done 9 live sessions – one of them was over 3 hours, which is waaay too long for livecoding – and plan on doing them as much as possible, at least once a week. I’ve got two more scheduled for this week.
I’ve got a half-dozen sessions that I still have to put through the video editing process, the ones so far have been posted on YouTube. On the one hand, I’ve gotten really good at editing out the many “uhhmmmm”s that I can’t seem to help (I am doing a lot of thinking out loud), on the other hand, I’ve spent way too much time doing the editing given that I’m not making any money off it (yet?).
My blog post has all the details if you’re interested: https://www.tedmyoung.com/kid-bank-the-money-tracker-for-kids/.
Adding Login/Authorize with JWT-refresh token to our Android App.
What a pain that is.. Cannot be very complementing to Android framework.
AccountManager.getXYZ if you are in Main UI,
then call AccountManager.somethingElse if you are in non-UI thread.
And half of those calls require ‘Activity’ (reference to a window) – which I do not pass around to our Retrofit2 Rest calls.
Oh!, and do not forget to save everything to a cookie (bundle), when the screen rotates – as all your current state data structures, be ripped apart and nullified by the rotation!
The newly introduced AnroidLifecycle made it bit easier, but it looks like React state management – but when you have to use the APIs internal to React.
Feels like Android framework is collection of patches written by different authors.
Some of them came with ‘one page per screen’ with ‘cookies’ in between pages, world.
Some others came from operating system internals world
All are probably smart, and good with interview puzzles – so the whole book (the Android UI framework) looks like a collection of puzzles.
So I am quite stressed of not getting the business logic done on time, while struggling with the login/refresh flow.