June 16, 2025
Included many fixes and also added Logger
(which a logging system that allows you to push log on it and the old one will be hidden) and PagingTable
, which allow you to make multiple pages of field using Field
(it does remove some flexibility on what you can do tho)
This is a demonstration of how it can be used (although not included in the library) and I am sorry for the laggy recording since my laptop is too old, it feels much better if you don't record at the same time.
The top is the paging table and the bottom is the logger (the control bar was just button and bounded spinner which have previously shipped)
As requested for certification, where Python Notebook is not allowed for shipping, I add another version of demonstration written within a single HTML file (which is also a pain btw)
Well, it is another multi-small update
Fixed a bunch of random bugs that cause the table to malformat (which took majority of the time)
Add more chaining for some functionality that make it easier to use (Like IComponent.WithChange
which immediately edit the component that the function described)
Edit ComplexTest
so the test is also demonstrate the new thing like multi line field and table of input
Implemented ComponentStore
so that you can use handler system (particular in Button
) directly with custom defined storage without having to defined custom class
I don't think people like to see 2 empty class (ComponentStore
abstract class and EmptyStore
) so here some more fun side-effect of it
Implemented:
- ITable
, Table
, LatexTable
, FormattedTable
for displaying 2D components
- ILatex
for latex from (some) components
- Fix some math for prototype in ui.test
The cj is finally ended(including documentation period)
Basically adding some easter egg for SoM that isn't included in the codejam (which 1/10 chance you would see a ultra long question that no human can solve practically) and writing the README.
For disclosure purpose for the project(before shipping), as far as I aware, a small amount of question_set.json
(consequently hard_set.json
as it is copied from question_set.json
then added modification), the entire styles.css
in demo frontend and some amount of index.html
in demo frontend is fully/partially AI generated. This doesn't consist of 30% of the project.
Basically completed(for the coding side) as the end of coding portion of the codejam
Done some modification of the UI
Add a logout system and the website now remember you have login
The question is now in image so you cannot automatically solve them as easily
Here a fun 100 step question that exist only for fun and no practical reason, that AI failed to solve:
A little bit lazy to create a seperate version of devlog to the PR description so here you go:
Add Dockerfile
config and docker compose
Add environment variable
Add a build system to generate correct set of domain
Rewrite /frontend/demo/*
to use CAPTCHA system correctly
Update captcha_handler.py
to support micropython (not fully verified)
Add captcha_handler.js
if even faster loading is necessary
Finally completed the CAPTCHA ui where the user write code!! (Done a bunch of debugging)
Added cryptohraphy folder to output JWT token, and added a pyscript to handle the redirection to the CAPTCHA page. (<- this is my work)
My other teammate is working on the frontend and backend of the system for now.
A very non-practical CAPTCHA system that require user code to solve the CAPTCHA? That just insane. This is a group project for the codejam #12 in Python Discord server (group name: peppy poppies) for the theme "Wrong tool for the job" (proposed and voted by every participant in the codejam) and "Python in Browser"(selected by the hoster). Sidenote: I know the group name is weird but we are randomly allocated and don't have the option to pick the group name.
Added a Padding
class (just a quick wrapper), added underlining for input field, a exit button (again another quick wrapper) and design a nice menu for testing, and now you have this!!!
Some minor update:
- Fix unnecessary Console.Write
with no UI update
- Cache ANSI sequence generation for coloring string
- Make resize instantly reactive (instead require a mouse movement/keyboard click)
This took longer than expected due to debugging, but I now made Frame
class, so now you can put a frame around a component, or group of component!
Add Switcher
so it can switch between component group(which only possible after change made in previous devlog)
Add chain style to add attribute of component in a single line!!! (I love function chaining)
And now added the switcher and mounting to be autobuild
Added Mount
, Dismount
Uninit
etc. API to allow component to be modular and can be dismount from an component and mount to another (also discover some bug due to the new test application that was occuring with previous test that wasn't notice)
Fixed various bug that make multi-input field possible! (you might confused what the difference compare to the single field one, but that code wasn't able to properly test the active handler that control which component is active)
So now, it fixed some bug like deactiving the wrong component, and off by one error on the row/col for the cursor position.
Implemented a single line text field and fix various other bug!
Now include a frontend built with python marimo!!!
(mind me don't know much about js/css/html, so this is the best way for me to build a competent UI without AI, however due to it is implement in python, depend on the device, it can be very slow to startup)
Added basic websocket handling which allow the user to attach a websocket which the worker would announce when would the file removed from the server
Added logging with Cloudflare Observability
Simplify code logic
I know I have spent excessive amount of time than I should have... but bare with me! This is the first time I learn to use async rust, and the API provided by worker package from Cloudflare is not too well documented as it is a work in progress. This is what I have got now:
A Cloudflare Worker rust script based on Durable Object (that is recently released for user in the free plan). This exposes an API which allows the application to upload a file that can be downloaded with a code within 5 minutes. (Note that upload restriction applied)
Quick update: Added seperator component so now you can seperate between item, Like following:
Finishing TextLabel and make Button a subclass of TextLabel(since well, Button is just an interactive text label)
Add an alignment system for string, for aligning the text content in the component
Took me a little bit too long but finally got word wrapping handling working (include python and equivalent C# persumably)
Add a Button demo... And also the multi-button one!!!
Yes, I forgot to write a devlog for a single button but now you can also have this by implementing GroupComponent abstract class that support vertical and horizontal component and they finally link up to each other!!! I am so happy rn.
Add a button class, ANSI handling, adding some convenient class for coding and more... (Kind of forgot some of the thing I did because I jump around with random thought and then immediately go and change something for the whole 2h)
Don't have a demo yet for the button so here more code snippet on what I have done. You should see a demo next devlog
Add handler for mouse activity
Rewrite active component management
Add further abstraction and fix some incorrectly used access modifier
Updated:
- Pasting to input field
- Parsing value to fraction in exact form instead of calculating fraction base on non-precise double (64-bit)
- Add attestation to GitHub build and other build improvement
- Fixed default color wouldn't be consistent to potential updated color
Demo:
- Added new demo for testing what can parse for fraction
- Updated Prototype demo to have longer input field
Finally implement full build workflow to build the library and all the demo of the library
Fixed Rust -CString-> C# FFI cause potential error due to null byte
Fix UI bug and actual math solving
Setup basic demo finally
Add Fraction class for aspect ratio calculation for the component group such as containers
new partially complete App component
Update on BaseComponent:
- Add click event handler
- More rigorous lock checking
- Update Render logic to allow component to display animation
- Allow getting and setting parent(root) of the component
- Add active status handling
Update BaseComponent...
Basically horror
Finally fix Console weirdness ig
Trying to add Component
Fix the input handling (probably) by adding some messy code
Writing some C# horror (X
Adding Console Size control which allow program to run with a different size than the terminal size
A C# Library that render TUI(Text User Interface) that handle mouse click and more
Fixing some type issue and bug now that I previously didn't notice :3
A library that emit signal between asynchronous task
This was widely regarded as a great move by everyone.