2,754,828 events, 1,399,729 push events, 2,110,101 commit messages, 149,703,603 characters
mutant boss slime rain attack completely reworked fishron attack completely reworked mutant's true eyes dont have contact damage always moves downwards during nuke arena is stationary during pillar guntera tentacles can grip air in p2 holy price lasts 15 seconds now chlorophyte bullets are slower and despawn after 3 seconds spirit champ slowed down spectres fires crossbones only straight down during shield shadow champ does more damage on flamebursts pumpking scythes do more damage when they home has dungeon guardian's telegraphs on the guardians attack earth champ moves much slower during fireball breathing attack hands reposition faster during first attack in p2 first attack has movement adjusted first attack now causes chain explosions after finishing a punch flower petals split after travelling a short distance in p2 hand slams spawn semi homing life orbs in p2 contact damage inflicts lethargic (mythril reference) vortex ench portal no longer instakills enemies, instead does a very high damage explosion as it dies abom wand halves sparkling adoration cooldown and boosts damage mutant eye upgrades sparkling adoration's friend hearts to love rays
Put the dot back in dotfile
I've been feeling for a while now that all these directories with one file are just confusing (i.e. mbsync/mbsyncrc ...) and so I've resolved to "put the dot back in dotfile" -- remove the nested subtrees, and mirror a real $HOME directory. Anything that I don't really want to be under $HOME, I'm tucking away in ~/etc, which feels appropriate (i.e. vc configs or perl setup, etc).
This approach was inspired by this HN comment 0.
The beauty in this is that you can then use git to inspect the how $HOME looks as a worktree of this repository. The key thing here is that it's not a full work tree! there's no .git file in $HOME that links the two, so a rogue "git status" in $HOME won't trigger any output. All changes go through the "cfg" alias which diffs the repo (~/.cfg, bare) and the worktree ($HOME).
On machines where I only want a fraction of the dotfiles (i.e. work), I can still do a full checkout and manually symlink.
This was super easy to change with the exception of the submodules (hot dang were they tricky to move correctly) -- note to future self, the clone URL is in .git/config (not just .gitmodules)...
Not much functional change, except for removing my zshrc, which I
haven't used in ages anyways (oh my zsh on macOS? those were the early
days for sure :) ). From a git perspective, there are no more
.gitignores, being replaced with a single '*' entry. Despite it not
being a true worktree I want to be able to git add .
(force of habit)
and not add my whole $HOME.
I'll be curious to see how this simplifies/complicates working on multiple machines. I don't plan to maintain multiple branches, but that could change.
Holy Father of the Holy Saints, have mercy with ours plegary, we summon you to bless this merge and avoid the evil presence in conflicts and lose information
Merge pull request #9 from fionnn/patch-1
fuck you seth
I debugged and went through any possible way a password can be generated through the generator and all seems well. I had to fix many placements of code in the javascript file, many of my problems generated through flow and syntax errors. Anyways, we now have a full functioning, customizable password generator that also validates itself if it doesn't meet the users standards. Damn this was a lot of headache, but a good assignment to understand flow, javascript, functionality, debugging. It was a wild ride but now I can sleep.
Increase the max-width of the caseworker pages
There are a couple of visual issues at the default govuk-width-container width (960px):
-
The tab headings on the dashboard overflow onto a new line in an ugly way that doesn’t seem intentional. If you make the window sufficiently small then they eventually turn into a stacked list, but everything up to that point is ugly.
-
Some tab contents - especially the tables - on the 2/3-width intervention details page overflow the tabs sometimes.
Long-term, this will need some design thought - either we change the offending content, tweak some other sizing, or accept the larger width. We have a Trello card [1] for thinking about the max width, so our findings from what we’re trying here can feed into that.
I am curious about why the Design System tabs component is misbehaving, though. It’s possibly that I’m misusing it.
I struggled to get my bespoke width container to work for the main content so had to write an overly specific rule; I don’t think it’s the end of the world in a prototype but I’d love to know where I went wrong.
[1] https://trello.com/c/VsOQleo7/300-find-out-the-best-screen-size-for-different-users
Did some cubelight shit
ngl it seems kinda fucky tho
DAMN YOU FUCKING BALTIC STATES SING YOUR 1 2 7 3 SOMEWHERE FUCKING ELSE AND REMOVE YOUR SHITTY BOI 2016 PARK PROBLEM
Increase the max-width of the caseworker pages
There are a couple of visual issues at the default govuk-width-container width (960px):
-
The tab headings on the dashboard overflow onto a new line in an ugly way that doesn’t seem intentional. If you make the window sufficiently small then they eventually turn into a stacked list, but everything up to that point is ugly.
-
Some tab contents - especially the tables - on the 2/3-width intervention details page overflow the tabs sometimes.
Long-term, this will need some design thought - either we change the offending content, tweak some other sizing, or accept the larger width. We have a Trello card [1] for thinking about the max width, so our findings from what we’re trying here can feed into that.
I am curious about why the Design System tabs component is misbehaving, though. Maybe I’m misusing it.
I struggled to get my bespoke width container to work for the main content so had to write an overly specific rule; I don’t think it’s the end of the world in a prototype but I’d love to know where I went wrong.
[1] https://trello.com/c/VsOQleo7/300-find-out-the-best-screen-size-for-different-users
7.1. Class and style binding
🏳️ Style Binding In the last lesson, we added the feature where if you hover over “green” or “blue”, you update the image that is being displayed; the green or blue socks, respectively. But wouldn’t the user experience be nicer if instead of hovering over the *word “*green” or “blue”, we hovered over the actual colors green and blue? Let’s create green and blue circles that we can hover on. We can achieve this by using style binding. First, to style our divs like circles, we’ll we need to add a new class .color-circle to the variant div. This class already lives in our css file. As you can see, it simply transform our divs into a circle with a 50px diameter. Now that we’ve got that out of the way, we can move on to the actual style binding. Just like it sounds, we want to bind styles to the variant divs. We do so by using v-bind (or its shorthand: :) on the style attribute, and binding a style object to it. Here, we’re setting the divs’ backgroundColor equal to the variant.color. So instead of printing out those strings, “green” and “blue”, we’re using them to set the background color of our circles. Checking this out in the browser, we should now see two color circles filled in with a green and blue background. Cool! Now let’s understand, on a deeper level, how this is all working.
🏳️ Understanding Style Binding On our variant div, we added the style attribute and bound a style object to it. That style object has the CSS property of backgroundColor, and we’re setting that equal to whatever the variant color is at the time of that v-for iteration. In the first iteration, variant.color is "green" Vue takes that information and converts it into the code:style="{ backgroundColor: green }" Then prints out a green background circle.
🏳️ Camel vs Kebab There are some important things to consider when using style binding like this.
Inside of this expression, remember that this style object is all JavaScript. That’s why I used camelCase in the property name. If I had said background-color, that - would’ve been interpreted as a minus sign. But we’re not doing any math here. We’re setting a CSS property name. So since we’re in this JavaScript object, we have to use camelCased unless we want to use ‘kebab-cased’ in quotes to avoid the mathematical misinterpretation, like so: Both options will work, as long as you remember your quotation marks.🏳️ Style Binding: Objects Sometimes you might want to add a bunch of styles to an element, but adding them all in-line could get messy. In these situations, we can bind to an entire style object that lives within our data.
📄️ index.html
📄️ main.js data(){ return { styles: { color: 'red', fontSize: '14px' } } }
Now that we’ve taken a look into the topic of style binding, let’s look at a similar topic: class binding.
"10:50am. Last night was exhausting. Not only did I go to bed late, I kicked my mind into high gear once it was time to rest.
Fiction.
Yesterday I indulged my greed a little, and once I went to bed I indulged my other desires. I was reminded that my main purpose is the self improvement loop. But it is a problem. Though I have the determination to personally go through it, there is a huge issue in that I do not have the foundation for it.
I said that the dominant strategy is not to fuse - but not to separate in the first place, but I do not feel it after all. I was bold and said that, but I do not really feel it.
I have a bunch of plans, but I have no idea how realistic any of them are. The non-separation one is the craziest. The others I doubt as well as they seem to go straight through the libidinal drives in my system.
11am. If I could see just a bit further, then my mental health would definitely improve. Having money will help a bit in the respect, but new insights into the self improvement loop are above all in importance.
In order to get them, my AI skills in the real world will need to go through a qualitative change. Once I know what is possible and what is unrealistic in reality, I will be able to put some of my regrets behind.
It is not the matter of reaching the human level of intelligence in artificial agents that is the problem here. What I do not understand is what level of control is realistic.
What I do not understand is what the knobs and the levers will be. Without that I do not know whether I will be watching a movie, or playing a RTS or FPS.
11:05am. Without that vital knowledge anything I can come up with is just indulgence. It is just fiction.
Take Reverend Insanity. I love it to death, but it is not like I am gaining much from that. Seeing Fang Yuan scheme so well might be affecting my drive to negotiate and exchange my PL for benefits, but it is not like the cultivation system in that story will have anything to do with the self improvement loop in real life.
In fact, I find the whole drive towards immortality in that story too much humanist. A person's lifespan is not some mythical quality, instead it is accumulated damage to the body. Given the kinds of healing Gu that exist in that world, dealing with that challenge should not be a big deal.
11:10am. It is just too unlikely that I am going to find any clues to the nature of reality in anything that I consume. I need computers to give me a hand.
I am really dead tired right now. But that is not too bad as I do not have the energy for stray thoughts. God knows I have too much garbage in my head, that is better off not being processed. I should be able to do some programming based on past experience of being in these situations.
Let me read a bit and then I will start. Let me get breakfast right away."
Monday 2020-09-28 09:21:16 by [email protected]
Fix bad thumbnails on hires displays
Why thumbnails look pixelated or blurred on hi-res monitors
It took some more time to understand what @parafin comments really mean for this problem and to get me on the track. Just what he wrote
Citation: PPD is pixels-per-dot. All screen dimensions GTK/cairo/etc. operate on are in dots. So let's say 3840 x 2160 monitor with ppd == 2 will have dimensions of 1920 x 1080 dots. So full-screen cairo surface has width of 1920 and height of 1080, but if you want to render a pixmap to it with full resolution, it needs to be 3840 x 2160 pixels. The idea was that not high-dpi-aware application will work without any code changes (so what was one pixel in size in low-dpi, automatically becomes 2 pixels with high-dpi). But it results in this brainfuck to write high-dpi-aware apps. P.S. Also note that DPI is dots-per-inch, not pixels-per-inch, so with ppd=2, dpi is half the real DPI of the monitor.
This is of course right and means: If we want to have a thumbnail with size wd*ht shown on the main surface/display, wd and ht both must be doubled on a hires display, here ppd == 2.
BUT this is not happening in current dt code.
The underlying function is
dt_view_image_get_surface(int imgid, int width, int height, cairo_surface_t **surface, const gboolean quality)
width & height are both in dots and so we search for a a proper thumbnail via
dt_mipmap_cache_get_matching_size
with ppd->pixel corrected size. (The double multiply there is of course wrong)
Later on we create the bitmap surface corrected using const float scale
This scale is wrong! I should be corrected also by *ppd to return the read thumbnail, as it is now
the bitmap surface for ppd==2 systems is not better than on ppd==1 systems.
This means: currently on ppd==2 we later have to upscale the small bitmap by 2; with best-neighbour rendering this leads to pixelated, with good filter to blurred thumbs which can be clearly seen when pixelpeeping by screenshot or viewing through an enlarging glass.
SO: Make sure dt_view_image_get_surface returns a proper/large thumbnail surface.
The next part is something i need more help (or other people might do it) as i have no gtk experience at all.
The thumbnails shown must not be scaled by gtk-default (the whole gtk stuff seems to be done in dots not pixels) but needs scaling & positioning corrected for ppd (the current masters code does not need to do so).
I confess i don't know how to fix this at all places, never touched this part of dt code before.
At least - take this as a proof of concept -
- Attached example show master and new pr code results
- It explains the sometimes bad experiance of people on hires monitors and how we could tackle this.
Stop sending outgoing-only EOF on SSH sockets.
When PuTTY wants to cleanly close an SSH connection, my policy has been to use shutdown(SHUT_WR) (or rather, sk_write_eof, which ends up translating into that) to close just the outgoing side of the TCP connection, and then wait for the server to acknowledge that by closing its own end.
Mainly the purpose of doing this rather than just immediately closing the whole socket was that I wanted to make sure any remaining outgoing packets of ours got sent before the connection was wound up. In particular, when we send SSH_MSG_DISCONNECT immediately before the close, we do want that to get through.
But I now think this was a mistake, because it puts us at the mercy of the server remembering to respond by closing the other direction of the connection. It might absent-mindedly just continue to sit there holding the connection open, which would be silly, but if it did happen, we wouldn't want to sit around waiting in order to close the client application - we'd rather abandon a socket in that state and leave it to the OS's network layer to tell the server how silly it was being.
So now I'm using an in-between strategy: I still wait for outgoing data to be sent before closing the socket (so the DISCONNECT should still go out), but once it's gone, I do just close the whole thing instead of just sending outgoing EOF.
Added a short video comparison project as of fucking 11 or more years ago the h265 codec was a sham that was basically just the h264 codec in disguise because their developers were still working on the shit, well works now, however as of "2020" it only works in the most unused browser on the planet, fucking ms edge. whatever the hell. anyway 2nd time or so added this project. By now most of colorado should be taking a trip to the fucking electric chair, old sparky has their fucking chomo names on it ! anyway, fucking garbage.
This project is simple and functions. Thats all the thing needs to do, just allows the output of the ffmpegdirprocessor project to viewed side by side with the originals, config as like, not spending forever on a simple tool for a very specific small purpose.
Just pushing the unfinished code while working on another project simultaneously. I personally believe in a gui and command line for EVERYTHING or at the very least a language binding. Linus has taught us that one cannot always rely on the goddamn GUI. Shit breaks. Bless that probably dirty bastard who likely was the only one who didnt quite spearhead the push to enslave people via their own personal spybox in their house which basically helped the bad guys like bill gates.
path-finding: source-based, mistakes, missing piece
- feerate vs "fee rate" : so far we have always used "fee rate" (2 words). I would stick with this for consistency. Also it is better English as feerate is an invented term.
- you wrote "FREERATE" --> ha ha very funny, a Freudian slip, but sorry, it will not be free. ;) smiling
- uppercasing
- commas
- avoid extremes and hype, avoid "very" : very expensive --> expensive
- successfull -> ...ful (one L)
- sentence simplifications
- Onion vs onion, lowercase or uppercase, since this is not a product name it should be lowercase
- the example does not contain the information needed, added "forward" field in onion
- some part missing from a sentence
- etc
sorry :P we're so very very sorry :P not really. they are though. i'm a sorry fucking bitch :) again :)
art startups serverless-computing databases postgresql sql design-inspiration psychedelics finance investing css future gamedev drinks tea 2017 hazel type-theory graphql networking ssh brain-computer-interfaces funny wiki-workflow podcasts adblocking clojure flutter go js-libraries threejs vue django rails ruby rust-libraries swift-libraries zig software-architecture marketing research cryptography vs-code tools video firefox deno nodejs search-engines web-accessibility web-components web-performance
"2:45pm. Done with the break and the chores. Let me resume. I'll focus a bit on the review. This is the best time to do it.
Before I start, what did I write in the previous one? I completely forgot what stage I was a month ago. Let me check out the PL sub post.
2:50pm. Ok, at that juncture I wrote that the typechecker was 95% done. The testing must have taken quite a while then.
///
While in the background spiking NNs are closing the gap with float-using ones, I continue to work on Spiral v0.2, eager not to be left behind by the flow of circumstances. In my last review I said I was 95% done with the typechecker. During the first half of the month I spent the time filling in the gaps and testing. In the type inferencer all the features that I wanted have been added, and the feedback from the hover provider works great. The bugs that I could find have been eliminated and the whole system is smooth and snappy. The errors get displayed directly in VS Code and the hover provider shows the type in the tooltip when I hover over variables. It is simply a thing of beauty. I have to give credit to the Hopac library where it is due. Both it and NetMQ made the concurrency challenges much easier, and I would have had a lot harder time making progress without them. I was completely right to take my sweet time during the first half of the year to educate and build up my skills in concurrency.
Very recently, I've finished the partial evaluation prepass, and now I am gearing up to finish the language implementation. Once I do the partial evaluation pass, the language will be pretty much done. There is also the codegen after it, but out of all the passes the code generation is the easiest one in my view.
The partial evaluation pass is something I am deeply familiar with at this point and I have a large cache of code from the previous version, so it won't give me much trouble. Right now I am struggling though. It happens every time I decide to make a big step, the prepass was not an exception either - there is a big sense of inertia that I need to push myself to overcome. I need to coax, cajole and brainstorm; I need to shut myself away from the world and look inwards. Once I do that for long enough the strength needed to overcome the psychological inertial builds up and I am able to make progress.
Working a language is tough. As great as the finished, polished Spiral v0.2 will be, a great asset to both myself and the world at large, the language as it is now in its unfinished state is just a huge burden to me. Thanks to my newfound concurrency skills I feel like my programming has made a qualitative change and could act in a professional capacity regardless of the domain, but until v0.2 is done I will be completely chained to work on the language.
Though getting to a polished level will take me till the end of 2021, by the end of October I will have something that can compile code from start to finish and will be able to breathe welcome sigh of relief. My willingness to work on a compiler has been hitting my limit for a while now, and I would much rather program in Spiral instead. Though I am deeply familiar with partial evaluation and code generation, it is still a large pile of work I have to essentially grind though.
It's torture.
Let me talk about something more fun. Now that I've finished the prepass and am sensing the completion is coming nearer, my thoughts have moved towards what I am going to do once I have something useful in my hand. Back in 2018 I was very driven to do what I could not in 2016, which was making a good ML library that would have been impossible in F#. I tossed common sense aside and immersed myself whole heartedly in my pursuit. It is really a pity that my goal of making a good RL agent (and starting an invasion of online gambling dens after that) did not get far. And it really a pity that by the end of 2018 the force of the experience has pushed me to admit, that yes, even though join points and partial evaluation are great and can do anything, maybe it is not the best idea to do everything with them. They are a first rate foundation, but no amount of power is worth giving up the ability to do top down reasoning. The episode where I spent 5h fixing type errors after a single refactor convinced me of that.
Spiral v0.09 never had an user apart from myself and I think all things considered that was for the best.
But the value proposition of v0.2 with all the design edges of v0.09 smoothed out will be quite good. The courageous way of making your way forward with a language is to use the edge it gives you to make Skynet ahead of everyone else, but abject poverty is getting old for me. Even if v0.2 in its completed form will be a wonder, getting the libraries, the neurochip backends, the editor support extras and the package management done will be a shitload of work. I had not really expected that my foray into machine learning would turn me into a PL creator, but this time I might as well use those skills and experience and have other people pay for my progress. The paper mentions there like 50 start ups out there. The presentation by Mike Davies of Intel was especially impressive - while I definitely want to get my hands on Loihi, the business case for Spiral is what I need to focus on. If you check out page 24 of the slides from that talk you'll see that their stack two years ago was Python + C. I doubt that has changed. If it was that easy to move away from C, Nvidia for example would have done it for its GPUs. There is no way the smaller outfits working on new hardware would venture far from the Python + C basic formula. It is a decent guess that unless somebody comes around and shows them a better way of doing things, the status quo won't change.
That is what I will make my role for the next few years.
Spiral v0.09 proved to myself that its features set are trully a first rate foundation for doing interop between different language and compiling efficient code. Making a good ML library - that is one goal that I haven't failed at all.
Once October is through and v0.2 has reached a decent level of stability, one thing I am going to look into is - if not a Cython backend, then taking advatange of Python's runtime system in order to have it manage memory and interop with its ecosystem. Though I favor .NET, Python is where the ML crowd is and that is where I should be if I want to break Python's dominance in that space. In early 2019 I honestly considered defecting to Python, but that was not the right choice - the right choice is to build up my skills and make it my lunch instead.
While the work on that is ongoing, what I will do on the side is negotiate with my potential sponsors. The monetary potential of v0.2 lies in the fact that there is a significant amount of these new hardware companies, and I'll be able to sell them on having a Spiral backend much like a subscription. Now Spiral is MPLv2. This is open source and there is nothing stopping any of these companies from forking the language and implementing a backend on their own should I refuse them, except how much per month would that cost them. If not me, they'd have to pay somebody else to essentailly maintain their own version of the language. Now I do not know how much that would cost exactly, but probably between 5-10k per month, maybe even more if they are in the richer parts of the world.
If I priced my rental & support fee at something like 3k per month (I'd do the backend as a freebie in return for a sample chip) that would make it rational for them to accept. Now there are a bunch of them, so where will that leave me? No doubt, paid according to my skill level. And even just the basic 3k per month is not that low of a salary depending on where you are located. Where I am located, the average is a bit over 1k per month.
15-30k per year which I could make as a working programmer in Croatia is not something that would compel me to get out of bed in the morning - those sums are so low that I'd rather work for free instead apparently, but for the kinds of sums I am thinking of, my interest is piqued. I want to give this a shot. It feels like the veil is being lifted from my eyes.
Providing a service is just the start of things - the important thing is that I will be doing exactly the kind of work that will directly tie into and enable what I want to do later, rather than being some side gig. Since we are still talking money, check out how much esports can net you. You probably couldn't beat these guys on your own, but if you had artificially intelligent agents on your side you could absolutely dominate these pitiful humans.
I anticipate there will be a short period where AI is good enough to tackle a broad domain previously thought to be unbreakable, but the people haven't exactly awakened to the fact that camera-in-your-face is a necessity pretty much in every game that has money at stake. But the scary part is directly after that where camerading stops working as a defense because AI is suddenly good enough to fabricate recordings in real time. I want to be alive and present in that era of fear, chaos and madness. I want to give it my utmost to drive the world towards that point. And I want to see what lies beyond that point as well. I want to contest for that power. Just what will be possible for me to do when the machines at my command grow beyond games and can look towards the real world?
I think in that era, previously philosophical matters such as the nature of the soul will become very down to earth and practical. The machines are a programmer's power, but what is power if not the very essence of self?
///
6:15pm. This is what I have written. This is a good rant. It might not be a good idea to layout my business plan before I am really ready, but who is really going to step in at this point? It has to be a language like Spiral and there are no copy cats. There is no need to worry. It is just such an immense pile of work that only I can do it.
6:20pm. Damn my, head hurts from the fatigue. My stress is sky high.
Think of the dollars and lay down the bricks. That is the way to go. I need to do it. The final stretch of the grind is here. I need to embrace it whole heartedly.
Let me finally finish vol 3 of Reverend Insanity (I have 17 chapters left) and then I will drop the thing for a month or so. Every time I pick it up I can't stop reading till 1am.
Where is lunch?"
mesa: Promote Intel's simple logging façade for Android to util/
I'm bringing up freedreno Vulkan on an Android phone, and my pains are exactly what Chad said when working on Intel's vulkan for Android in aa716db0f64d ("intel: Add simple logging façade for Android (v2)"):
On Android, stdio goes to /dev/null. On Android, remote gdb is even
more painful than the usual remote gdb. On Android, nothing works like
you expect and debugging is hell. I need logging.
This patch introduces a small, simple logging API that can easily wrap
Android's API. On non-Android platforms, this logger does nothing
fancy. It follows the time-honored Unix tradition of spewing
everything to stderr with minimal fuss.
My goal here is not perfection. My goal is to make a minimal, clean API,
that people hate merely a little instead of a lot, and that's good
enough to let me bring up Android Vulkan. And it needs to be fast,
which means it must be small. No one wants to their game to miss frames
while aiming a flaming bow into the jaws of an angry robot t-rex, and
thus become t-rex breakfast, because some fool had too much fun desiging
a bloated, ideal logging API.
Compared to trusty fprintf, _mesa_logewi is actually usable on Android. Compared to os_log_message(), this has different error levels and supports format arguments.
The only code change in the move is wrapping flockfile/funlockfile in !DETECT_OS_WINDOWS, since mingw32 doesn't have it. Windows likely wants different logging code, anyway.
Reviewed-by: Tapani Pälli [email protected] Reviewed-by: Kristian H. Kristensen [email protected] Part-of: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6806
So here goes. I added all of my code and the Libraries it needs and it looks to be without error. I added @Disabled to a bunch of opmodes that I don't plan on using right now, so hopefully there won't be a super long list of the on the DS. If you decide you want to run one, you just have to either comment out or delete the @Disabled near the start of the program (usually right above the @Autonomous or @Teleop. At Carl's request and because I think it would b useful for me as well as anyone else, I'll add a list of the libraries I added and what they do. You shouldn't need to do anything to download them, as when the gradle files sync they should automatically do it. There is a good chance that right now OpenCV will give an error about the app running in the 64-bit mode I believe, and if that happens (I will check soon), I will fix it.
So the first library I added is called FTCLib (https://github.com/FTCLib/FTCLib). To quote their documentation "The project was initially meant to be a port of WPILib, which is the standard programming library for FRC that almost all teams use. However, with FTC, there are a ton of libraries that not many people have heard about, especially rookie teams who are just starting. The goal of FTCLib is to improve the initial programming experience for new members as well as greatly enhance the efficiency of code for veterans." You can find documentation for it by going to the Github page and clicking on the wiki or by going straight to this link (https://docs.ftclib.org/ftclib/).
Inside of this library is both a bunch of code that they either ported from the aforementioned FRC library or wrote themselves, which has a lot of really useful stuff, especially for things like their geometry and kinematics and stuff methods (or at least I think. I'm not smart enough to use them). Other notable things are methods to easily make PID loops (https://docs.ftclib.org/ftclib/features/controllers#pid-control), and then also to implement those into motors (https://docs.ftclib.org/ftclib/features/hardware/motors#simplemotorex), but they don't use the built in FTC_APP PID loops using RUN_USING_ENCODERS, and I have heard that making your own in the loop of the code can be a bit sluggish in responsiveness, but I haven't tried it myself so I'm not really sure. The other thing I am using from this is their odometry class. Specifically ConstantVeloMecanumOdometry. It's got a lot of cool stuff and I recommend reading the documentation as it is more of a guide than the standard javadoc stuff you might be used to, so it isn't too hard to read. (Also just learned while looking at the documentation that they also have Look Up Tables, which could be useful for this year.) Also has something possibly very useful, a pure pursuit controller built in. You will see further on why I make maybe a smaller deal out of this.
Next up are the libraries included in FTCLib
The first is that FTCLib is originated as a fork of OpenRC-Turbo, which is a project for FTC that basically is supposed to shrink the size of the SDK and make it build faster to the phones. Last year, this was legal (pretty much, you can look at them talking about on the readme of the repo https://github.com/OpenFTC/OpenRC-Turbo#legality-for-competition-use), but there was a change of language that makes this possibly not legal this season, but I figure they will find that out before competition time and either everything will be fine or we won't be using this library. It's also notable that I haven't gotten it to work yet, but I don't know that I would use it anyways.
Next, we have a library that Carl actually installed before this commit; EasyOpenCV (https://github.com/OpenFTC/EasyOpenCV), which is a version of OpenCV, a library that can be used for many different very flexible computer vision applications. We will most likely use this for our vision this year, and most of you have already used the python version of it some because carl was doing that. They link on the repo itself some javadoc (https://javadoc.io/doc/org.openftc/easyopencv/latest/index.html), and some example programs (https://github.com/OpenFTC/EasyOpenCV/tree/master/examples/src/main/java/org/openftc/easyopencv/examples) but just skimming, I would recommend the FTCLib documentation on it (https://docs.ftclib.org/ftclib/v/v1.1.0/features/computer-vision).
So now we get to the libraries not included with FTCLib (looking back, there are less in it than I remember, but whatever). The first is maybe the most ubiquitous FTC library out there, although maybe behind OpenCV. I'm talking about RoadRunner (https://github.com/acmerobotics/road-runner). Now I will warn you that I have not used roadrunner like any, but it seems like a really good way to make autos better than I could program without it, so I want to use it. On that topic, I have also not fully read through any documentation for it. I have skimmed them and get some of the basics, but I have by no means read them cover to cover, although that might be useful. So there are two places I have found that seem to have good documentation for RR. The first is as you would expect, the github wiki page for RR, accessed the same way as the FTCLib one. Either from the readme on the repo, or a direct link https://acme-robotics.gitbook.io/road-runner/. The other place is a page made by someone (as far as i know) not affiliated with the RoadRunner team who just wanted to help out. It can be found at https://www.learnroadrunner.com/. I do not know which of these two is better and I don't have a recommendation, although my gut feeling is that learnroadrunner seems a bit more comprehensive. I will try to set aside some time to read through both of these and give my opinion on which others would benefit most from.
Roadrunner also uses a project called FTCDashboard (https://github.com/acmerobotics/ftc-dashboard) which is made by the same guys as roadrunner (I believe), and is pretty cool. It is basically another webserver hosted by the RC (phone or control hub) just like blocks or OBJ. But what it does is it basically gives you all of the functionality of a DS phone from a computer (although I haven't gotten gamepads to work even though they claim they do, but they also say that the latency is pretty bad and they do not recommend it.), which is cool enough, but they also have something like being able to graph telemetry data sent to it, which is really useful for things like tuning PID loops, and they also have the ability to change static variables from your code on the fly from the computer. It also allows for graphing over an image background, and roadrunner uses that to output the robots position over a field picture, which is kinda cool. My only concern with this is that it is also kinda not legal but kinda is. Basically, it isn't legal at competitions, but you can turn it off from the RC phone, so it's fine, but last I checked there isn't a way to turn it off form a control hub, which makes it a bit hard for us as that is our current plan. Again, either it gets figured out by them or we figure something else out. None of these libraries are necessarily absolutely essential, but they do certainly make things nicer. Also, because I forgot, documentation for this can be found here https://acmerobotics.github.io/ftc-dashboard.
Also, for anyone interested in looking through my code, I will give a quick rundown of what stuff does and what is mine and what I stole (but from people that put it on the internet for the purpose of being used, so like consensual stealing).
The Drive and Util folders are both code from roadrunner. They are related to logging stuff to the dashboard and tuning things. this page (https://acme-robotics.gitbook.io/road-runner/quickstart/tuning) seems to explain all of the tuning classes.
Slimchassis V3 is all code that is meant to be used with Max's SlimchassisV3 drivetrain design (the current one me and him are using and is in CAD). Some of it is my code and some isn't. The only code that isn't mine is the folder called WizardsExeOdometry, named after the team Wizards.exe, who did a series of youtube videos on odometry and released code to be used with them for it (https://www.youtube.com/playlist?list=PLICNg-rquurYgWAQGhu6iC0At75vgqFJp). I am not currently using any of their code because I heard online that their method of doing it isn't super accurate, but the videos are still super useful for trying to understand odometry some.
The folder StaticVariableTests was just me testing something someone said online about static variables in the FTC control system. Basically, a variable declared as static and changed during oen opmode (auto for instance) retains the new value into another opmode (the heading at the end of auto for the field oriented in teleop to be offset by, for instance).
ETControl is my offseason project that was half me just wanting to get back into programming and get less rusty, and half me trying to find an easier way to control motors. The idea it started on was that I am tired of having to type the names of motors twice when initializing them. Once in the name of the variable and once during the hardwareMap.get() call. Apparently this can be done using some complex reflection or something, but I didn't understand it, so the names of the motors and the actual motor objects are stored in two arraylists with the same indexs for corresponding names and objects. In the end, to manipulate a single motor it probably takes more typing, but for things like setting the runmode of many motors it can speed things up. In the end, I might use it, but there's a good chance I won't. It was just kinda to get me back into the groove of programming.
So then the other opmodes; FTCLibOdo is my current odometry opmode, using FTCLib's odometry algorithm. Also has a field oriented drive teleop built in that I wrote (I tried using the FTCLib mecanum drive stuff but I couldn't get the field oriented one to work right, so I just wrote it myself). FirstTestTeleOp was just the first teleop I wrote for the drivetrain me and max have; isn't field oriented but does have some experimental stuff for some power ramping using some code that I wrote with chris bailey last year but never tested. Init was what I was kinda like the precursor to ETControl, and I don't use anymore. ShooterTest is my current opmode for well testing the shooter. I have tried as I have improved it to make it look a bit nicer and add a few more comments, but it could still use a lot more documentation also has some experimental logging stuff that I don't quite think works but I'm not 100% sure. SimpleTeleopThatIsntStupidlyOvercomplicated was my first field oriented teleop with the new drivetrain.
This super long message was as much for me as it might be for everyone else interested. The stuff about the libraries and documentation I will also probably add to a document on BaseCamp, as that is useful to have easily accessible.
MVKDevice: Only force a mux switch when a swapchain is created.
We only want the window server to use the high-performance GPU if we will use it to present to the display. If we won't use it to present, we can save some battery life by not using the display. I had hoped this would help window server stability in case something goes horribly wrong while using the GPU, but my experience has sadly not borne this out.
My testing shows that the device returned by
MTLCreateSystemDefaultDevice()
is exactly equal (i.e. has the same
pointer value) to one of the devices returned by MTLCopyAllDevices()
,
so we should see no problems from doing this at swapchain create time
instead of device create time.
Updating: 9/28/2020 4:00:00 PM
- Added: codemix/ts-sql (https://github.com/codemix/ts-sql)
- Added: ongoing by Tim Bray · Won’t Subscribe (https://www.tbray.org/ongoing/When/202x/2020/09/25/Subscription-Overload)
- Added: Remember ASP.NET Request Culture Using Middleware (https://khalidabuhakmeh.com/remember-asdotnet-request-culture-using-middleware)
- Added: Shawn Wildermuth's Blog (http://wildermuth.com/2020/09/27/Playing-with-Vuelidate-Alpha-with-Vue-3)
- Added: Web Debugging: Watching Element Changes (https://textslashplain.com/2020/09/25/web-debugging-watching-element-changes/)
- Added: Introducing DotNet.SystemCollections.Analyzers (https://kevinavignon.com/2020/09/22/introducing-dotnet-systemcollections-analyzers/)
- Added: AnthonyGiretti/commonfeatures-webapi-aspnetcore (https://github.com/AnthonyGiretti/commonfeatures-webapi-aspnetcore/tree/migration-to-aspnetcore5)
- Added: Happiness is Bad - Naughty Computer (http://www.naughtycomputer.uk/happiness_is_bad.html)
- Added: .NET App Developer Links - 2020-09-28 (https://links.danrigby.com/2020/09/app-developer-links-2020-09-28/)
- Added: Town Hall [w/ASL Interpreting] (https://www.youtube.com/watch?v=ZdSCr_vDoS4)
- Added: Your Man in the Public Gallery: Assange Hearing Day 18 - Craig Murray (https://www.craigmurray.org.uk/archives/2020/09/your-man-in-the-public-gallery-assange-hearing-day-18/)
- Added: git commit-tree parlor tricks, Part 9: How can I bulk-revert an entire repo to an earlier commit? | The Old New Thing (https://devblogs.microsoft.com/oldnewthing/20200928-00/?p=104302)
- Added: For Us, Without Us: Addressing Tech's Shortcomings in Creating Equity for Black People [w/ASL] (https://www.youtube.com/watch?v=2uoaVYkHA-M)
- Added: The Serverless Hype Explained! (https://www.youtube.com/watch?v=tgFiOzVEL0Q)
- Added: Zig's New Relationship with LLVM (https://kristoff.it/blog/zig-new-relationship-llvm/)
- Added: French Fathers Will Now Get Double the Paternity Leave (https://www.vogue.com/article/french-fathers-paternity-leave-doubled)
- Added: Static hosting with Azure Blob Storage and Azure CDN - Simple Talk (https://www.red-gate.com/simple-talk/cloud/cloud-development/static-hosting-with-azure-blob-storage-and-azure-cdn/)
- Added: Announcing Azure Deprecation Notices (https://blog.tomkerkhove.be/2020/09/25/announcing-azure-deprecation-notices/)
- Added: Microsoft.PowerShell.ConsoleGuiTools 0.5.0 (https://www.powershellgallery.com/packages/Microsoft.PowerShell.ConsoleGuiTools/0.5.0)
- Added: It’s not free software if you can’t easily fork it (and how to fix it) (https://d33tah.wordpress.com/2020/09/27/its-not-free-software-if-you-cant-easily-fork-it/)
- Added: Universal Split Screen (https://universalsplitscreen.github.io/)
- Added: Streaming an HTTP response in Blazor WebAssembly - Gérald Barré (https://www.meziantou.net/streaming-an-http-response-in-blazor-webassembly.htm)
- Added: Back to Machine Learning Basics - Decision Tree & Random Forest (https://rubikscode.net/2020/09/28/back-to-machine-learning-basics-decision-tree-random-forest/)
- Added: Twitter Contributions (https://tweetlog.azureedge.net/)
- Added: This Hacked Coffee Maker Demands Ransom and Demonstrates a Terrifying Implication About the IoT (https://www.gizmodo.com.au/2020/09/this-hacked-coffee-maker-demands-ransom-and-demonstrates-a-terrifying-implication-about-the-iot/)
- Added: American Hotel Guest In Thailand Arrested & Jailed For Defamation After Posting Bad Online Reviews (https://loyaltylobby.com/2020/09/27/american-hotel-guest-in-thailand-arrested-jailed-for-defamation-after-posting-bad-online-reviews/?omhide=true)
- Added: My summer 2020 road trip along the Italian Riviera (https://st.im/summer-2020-road-trip-along-the-italian-riviera/)
- Added: Building a Xamarin.Forms Moon Phase App – .NET Tools Blog | JetBrains (https://blog.jetbrains.com/dotnet/2020/09/25/build-a-xamarin-forms-moon-phase-app/)
- Added: A Subtle Gotcha with Azure Deployment Slots and ASP.NET Core (https://haacked.com/archive/2020/09/28/azure-swap-with-warmup-aspnetcore/)
- Added: Reading Documentation Upfront (https://davidgomes.com/reading-documentation-upfront/)
- Added: How do I remove the first 300 million lines from a 700 GB txt file on a system with 1 TB max disk space? (https://unix.stackexchange.com/questions/610494/how-do-i-remove-the-first-300-million-lines-from-a-700-gb-txt-file-on-a-system-w)
- Added: 221: Swift on Windows, Clean Code, and iOS 14 (https://www.mergeconflict.fm/221)
- Added: BBC Micro Elite source code (https://www.bbcelite.com/)
- Added: Edgescan Questions & Answers with Troy Hunt Part 2 - Cyber Security, Security Scan, Full Stack Vulnerability Management (https://www.edgescan.com/edgescan-questions-answers-with-troy-hunt-part-2/?hss_channel=tw-2925438791)
- Added: Battle of the $350 laptops: Acer Swift 1 vs. Gateway Ryzen 3 3200U (https://arstechnica.com/gadgets/2020/09/battle-of-the-350-laptops-acer-swift-1-vs-gateway-ryzen-3-3200u/)
- Added: Sidecar Pattern in Action (https://techcommunity.microsoft.com/t5/azure-architecture-blog/sidecar-pattern-in-action/ba-p/1714983)
- Added: Bipolar: feelings vs. reality - BrettTerpstra.com (https://brettterpstra.com/2020/09/21/bipolar-from-the-other-side/)
- Added: How I keep ads away from me (https://akhil.me/2020/How-I-keep-ads-away-from-me/)
- Added: Thoughts on Structured Editing: Breaking Away from Syntax (https://mbuffett.com/posts/structured-editing-syntax/)
- Added: Eat The World Vs. Eaten by The World — Juan David Campolargo (https://www.juandavidcampolargo.com/blog/ambition)
- Added: If You Don't Understand Quantum Physics, Try This! (https://www.youtube.com/watch?v=Usu9xZfabPM)
- Added: Advisory: security issues in AWS KMS and AWS Encryption SDKs (https://vnhacker.blogspot.com/2020/09/advisory-security-issues-in-aws-kms-and.html)
- Added: http://conference.nber.org/conf_papers/f143926.pdf (http://conference.nber.org/conf_papers/f143926.pdf)
- Added: The DevOps Handbook – The Value of A/B Testing (https://www.codingblocks.net/podcast/the-devops-handbook-the-value-of-a-b-testing/)
- Added: Don’t Launch a Browser Running ASP.NET Core Back-end Created from Web Template Studio (https://elanderson.net/2020/09/dont-launch-a-browser-running-asp-net-core-back-end-created-from-web-template-studio/)
Generation took: 00:10:03.5056419 46. Added: Automatic factory with Microsoft.Extensions.DependencyInjection and Castle DynamicProxy (https://thomaslevesque.com/2020/09/27/automatic-factory-with-microsoft-extensions-dependencyinjection-and-castle-dynamicproxy/) 47. Added: Dew Drop – September 28, 2020 (#3284) (https://www.alvinashcraft.com/2020/09/28/dew-drop-september-28-2020-3284/) 48. Added: How to Adapt Your .NET App for SameSite (https://developer.okta.com/blog/2020/09/28/adapt-dotnet-app-for-samesite-fix) 49. Added: C# in Simple Terms - Primitive Types, Literals, and Nullables (https://exceptionnotfound.net/csharp-in-simple-terms-2-primitive-types-literals-and-nullables/)
Generation took: 00:05:57.9036634
THE GRAND RENAMING HAS BEGUN (#481)
-
THE GRAND RENAMING HAS BEGUN but holy crap it still doesn't work because of some nbsphinx thing that I don't know how to even begin troubleshooting
-
Update .github/PULL_REQUEST_TEMPLATE.md
I am the goo0dest typer
Co-authored-by: Benjamin Pedigo [email protected]
- Update README.md
Co-authored-by: Benjamin Pedigo [email protected]
-
Make the build status badge less obnoxious
-
Made a sentence actually make sense
-
Ah the last merge from dev must have overwritten some of the changes I made. This should be fixed now.
-
Found another instance of graspy in the issue template
-
Some last second changes, including a fix to the utils init file because the all value was being populated by identifier names not string representations of those identifier names
-
I approve of black hating the single quotes for a string because I also hate it but it's still pythonic even if I wish it weren't so
Co-authored-by: Benjamin Pedigo [email protected]
Added roads, with automatically connecting sprites on their gameobjects
God fucking damn that took ages.
Lithoid balance shit
i am in so much fucking pain
Do some sound and music work. Rainbow Factory seems to be ContentID'd alot... which is a bloody shame. I flippin' hate YouTube's ContentID system.