2,608,736 events, 1,322,369 push events, 2,078,001 commit messages, 155,183,621 characters
Fix bug in database pruning (#1564)
Closes #1488
- Prevent the pruning algorithm from over-eagerly deleting states at skipped slots when they are shared with the canonical chain.
- Add
debug
logging to the pruning algorithm so we have so better chance of debugging future issues from logs. - Modify the handling of the "finalized state" in the beacon chain, so that it's always the state at the first slot of the finalized epoch (previously it was the state at the finalized block). This gives database pruning a clearer and cleaner view of things, and will marginally impact the pruning of the op pool, observed proposers, etc (in ways that are safe as far as I can tell).
- Remove duplicated
RevertedFinalizedEpoch
check fromafter_finalization
- Delete useless and unused
max_finality_distance
- Add tests that exercise pruning with shared states at skip slots
- Delete unnecessary
block_strategy
argument fromadd_blocks
and friends in the test harness (will likely conflict with #1380 slightly, sorry @adaszko -- but we can fix that) - Bonus: add a
BeaconChain::with_head
method. I didn't end up needing it, but it turned out quite nice, so I figured we could keep it?
Any users who have experienced pruning errors on Medalla will need to resync after upgrading to a release including this change. This should end unbounded chain_db
growth! 🎉
ok so first i was coding and being all cute and shit and then my gf asked me to scoop her ice cream and i was like yes my queen and then i got up and opened the freezer and took out some ice cream and took out a cup and took out a spoon and used tthe spoon to stib stab the ice cream and scoop up a big glob of The Good Stuff and put it in the cup and then I shook in some sprinkley dinkleys and then I went OOoo and then I brought the cup of ice cream and sprinkely dinkleys (with a spoon) to my gf and gave it to her and she said omg thank you how unexpected and then she ate it and was very happy and even gave me a lil smoocheroo hehe
Removed remaining sanist language (mostly from source code comments).
Bit of an explanation: I understand that "sanity checks" is a common term in programming parlance, but this common usage stems from sanism that has been entrenched into our culture and even into the English language. By describing bad situations as "insane", you end up subtly implying that those with mental illness cause problems, even if you did not intend that connotation. This change removes all those references and replaces them with terms that both are not sanist and which are more precise (usually "validity" or "safety").
This also meant that the "in-sanity" tool's name was changed to "in-valid" (keeping a joke but one that doesn't have sanist origins). Some function names were also updated.
This also includes updated POT files since I wanted to make sure I got everything. The only sanist references left now are those in Autoconf itself (which of course we can't really do anything about), and possibly words like "stupid", "idiot", "moron", which are also sanist, but which I haven't specifically looked for yet.
hammer smear. annoying animation shit cause it's separate and a new rig. brought back my editor script motherfucker fight me
Fixes
- Decreased light intensity
- Adjusted Brainwash, Torture and Raise Dead spell values
- Dazed behaviour and dazed trait
- Icalawa changes (Lowered explore chance and edited map size)
- PangatLooVillageInvader null fix
- Brainwash weights update for Evil/Treacherous characters in Normal Mood
- Cultist -> Necromancer. Undead becomes Friendly
- Demons should not attack characters that just got tourtured/brainwashed until they get home.
- Initial dead characters in graveyard should not be part of monster faction
- Do not spawn corpses on tombstones that are destroyed by demonic structure building (Because of possibility that blessed characters spawn inside room, making room useless)
- Locust Swarm fixes
- Spell tutorial text updates
- No opinion adjustment fix
- Plagued chances update
- Reduced Character Info UI Testing tooltip size
"11:50am. Usually at this point I would be having breakfast, but I said I would skip it.
12pm. Right now I am just slacking.
12:05pm. What should I do next?
12:10pm.
type AuxEnv = {
hoc : Map<int,HigherOrderCases>
union_cases : Map<string,int> // TODO: This is broken. See the 8/18/2020 final commit.
}
It has been over a week since I left this it seems. Right now, since I do not have much inspiration, let me fix the way I am inferring union and nominal types. Let me get rid of union_cases
and I will go from there.
Though the TC is 80% done, the last 20% is still a lot of work. I will have to fill in the gaps and integrate it with editor support. The mock typechecker was not perfect as I did not implement state passing for it.
...Maybe I should have done that before moving away from it?
...Yeah, let me make this a challenge. Right now, for each block the ids go from 0. Instead let me make it so they start from the end of the previous block. That will prove I have state passing capabilities in the server. This will make it much easier to deal with the needs of the real typechecker.
12:15pm. Do I want to deal with the TODOs in the real TC or do I want to deal with state passing?
State passing. Let me go for this first. Then I'll deal with the TODOs. All of this should not take me more than a few hours. And hopefully after I am done with that, I will have some inspiration on how to approach the full TC. Probably with those BundleTop
s.
12:20pm.
// A mock typechecker to serve as scaffolding for editor support.
let mock id_count x =
let ranges = ResizeArray()
let g x = ranges.Add(x, sprintf "id %i" (id_count + ranges.Count))
The changes here aren't too fancy.
let a = ranges.ToArray()
let b = if 0 < a.Length then ["some error", fst a.[a.Length/2]] else []
(a,b), id_count + a.Length
Likewise, here is what I'll do at the end.
Now...
waiting data <|> Alt.prepareFun (fun () ->
if res.Full = false then Hopac.start (bundle x |> mock |> IVar.fill res)
processing data x'
)
Now this place is red.
12:55pm. Had to take a short break.
let server_typechecking (uri : string) = Job.delay <| fun () ->
let req = Ch ()
let rec waiting data = req ^=> extracting data
and extracting data subreq =
waiting data <|> (IVar.read subreq ^=> fun (bundle,res) ->
let rec loop = function // Does memoization by fetching previous computed values.
| [], bundle -> List.map (fun _ -> IVar()) bundle
| (a, ivar) :: a', (b :: b' as bundle) -> if a = b then ivar :: loop (a',b') else loop ([], bundle)
| _, [] -> []
let x = loop (data, bundle)
Hopac.start (IVar.fill res x)
let x = List.zip bundle x
processing 0 x x
)
and processing state data = function
| [] -> waiting data
| (x,res) :: x' ->
waiting data <|> Alt.prepareFun (fun () ->
if res.Full then IVar.read res ^=> fun (_,state) -> processing state data x'
else
let (_,state as x) = bundle x |> mock state
Hopac.start (IVar.fill res x)
processing state data x'
)
Job.server (waiting []) >>-. req
Before I left, I managed to complete this.
1pm. Fixed it up in other places. Now...
Let me try it out.
...It works. This is quite pleasing. Now I have state passing as well in the server. Magnificent.
1:05pm. I got that out of the way. I think it is now that I am really done with the mock typechecker. Going through this exercise was really worth it.
1:10pm. I taking a short breather and getting lost in daydreams.
type AuxEnv = {
hoc : Map<int,HigherOrderCases>
union_cases : Map<string,int> // TODO: This is broken. See the 8/18/2020 final commit.
}
Let me do some work. Since I am still not that inspired, let me just get this obviously broken thing out of the way. This is a clear goal at least.
After I do this, I'll make a function that takes in those BundleTop
s. This will be the entry point into the typechecker.
1:15pm. Focus me, focus. Let me get this thing out of the way. Then I'll take a real break. Maybe I'll even call it a day depending on how I feel.
| ValueNone ->
match Map.tryFind name aux.union_cases with // TODO: This is broken. See the 8/18/2020 final commit.
| Some i -> assume i
| None -> errors.Add(r,CasePatternNotFound name); f (fresh_var()) a
First let me take care of this.
let rec ho_fun = function
| TyFun(_,a) | TyForall(_,a) -> ho_fun a
| a -> ho_index a
This is how I will extract the index from the dictionary itself.
1:20pm.
match term_subst s |> ho_index with
| ValueSome i -> assume i
| ValueNone ->
match v name with
| Some x ->
match term_subst x |> ho_fun with
| ValueSome i -> assume i
| ValueNone -> errors.Add(r,CannotInferCasePatternFromTermInEnv x); f (fresh_var()) a
| None -> errors.Add(r,CasePatternNotFound name); f (fresh_var()) a
This should be good.
Yeah, I am definitely doing things well.
| PatNominal(_,(r,name),a) ->
match Map.tryFind name top_env.ty with // TODO: This is broken. See the 8/18/2020 final commit.
| Some x ->
match ho_index x with
| ValueSome i ->
match aux.hoc.[i] with
| HOCNominal(vars,v) -> let x,m = ho_make i vars in unify r s x; f (subst m v) a
| HOCUnion _ -> errors.Add(r,UnionInPatternNominal i); f (fresh_var()) a
| ValueNone -> errors.Add(r,TypeInGlobalEnvIsNotNominal x); f (fresh_var()) a
| _ -> errors.Add(r,UnboundVariable); f (fresh_var()) a
I always need to look in the current env. The only exception is for local module opens.
| PatNominal(_,a,b) -> (if Map.containsKey (snd a) top_env.ty = false then errors.Add(fst a,UnboundVariable)); f b
Since I am fixing this, let me start the unbound variable test.
| PatNominal(_,(r,a),b) ->
if Set.contains a ty = false && Map.containsKey a top_env.ty = false then errors.Add(r,UnboundVariable)
f b
Now this is consistent. Let me also do it in infer
.
| PatNominal(_,(r,name),a) ->
match Map.tryFind name env.ty |> Option.orElseWith (fun () -> Map.tryFind name top_env.ty) with
| Some x ->
match ho_index x with
| ValueSome i ->
match aux.hoc.[i] with
| HOCNominal(vars,v) -> let x,m = ho_make i vars in unify r s x; f (subst m v) a
| HOCUnion _ -> errors.Add(r,UnionInPatternNominal i); f (fresh_var()) a
| ValueNone -> errors.Add(r,TypeInGlobalEnvIsNotNominal x); f (fresh_var()) a
| _ -> errors.Add(r,UnboundVariable); f (fresh_var()) a
Let me do it like this. Nevermind the pasting.
|> fun l -> {
union_cases = Map.fold (fun s k _ -> Map.add k i s) aux.union_cases l
hoc = Map.add i (HOCUnion(vars,l)) aux.hoc
}
Let me get rid of the second line here.
1:35pm. That was all it took.
1:40pm. I am thinking. Let me commit since I hit two of my goals for the day.
Rather that trying to fit the old typechecker into the new mold, how about I start it all from scratch? I'll build it all up again and reuse the code as I go along. Getting a start on this is merely a matter of setting my priorities properly.
I'll use the mock typechecker as the template and move from there."
"1:45pm. I suppose I can take a short breather.
1:55pm. Mhhhh, ok, damn it. Let me go for one more thing in the day.
Let me make a new file, and I will copy the mock typechecker into it.
2:05pm. I factored out all the utility functions and type definitions from MockTypechecker
into TypecheckingUtils
.
2:10pm. Focus me.
| TopUnion of Range * TypeVar list * RawTExpr list
| TopNominal of Range * TypeVar list * RawTExpr
Huh, it does not have a name in front?
let top_union d =
let clauses d =
let bar = bar (col d)
(optional bar >>. sepBy1 (root_type root_type_defaults) bar) d
(range ((skip_keyword SpecUnion >>. many forall_var .>> skip_op "=") .>>. clauses) |>> fun (r,(a,b)) -> TopUnion(r,a,b)) d
let top_nominal d = (range ((skip_keyword SpecNominal >>. many forall_var .>> skip_op "=") .>>. root_type {root_type_defaults with allow_term=true}) |>> fun (r,(a,b)) -> TopNominal(r,a,b)) d
I must be going crazy. How did I miss this? Doesn't this mean that it is possible to make an union or a nominal with no name?
Let me run it just to make sure.
union =
| some: a
| None
Yeah, shit, this is valid syntax in Spiral currently. I need to fix this.
2:20pm.
let top_union d =
let clauses d =
let bar = bar (col d)
(optional bar >>. sepBy1 (root_type root_type_defaults) bar) d
((range (tuple3 (skip_keyword SpecUnion >>. read_type_var) (many forall_var .>> skip_op "=") clauses))
|>> fun (r,(n,a,b)) -> TopUnion(r,n,a,b)) d
let top_nominal d =
(range (tuple3 (skip_keyword SpecNominal >>. read_type_var) (many forall_var .>> skip_op "=") (root_type {root_type_defaults with allow_term=true}))
|>> fun (r,(n,a,b)) -> TopNominal(r,n,a,b)) d
This is much better.
type [<ReferenceEquality>] TopStatement =
| TopAnd of Range * TopStatement
| TopInl of Range * (Range * VarString) * RawExpr * is_top_down: bool
| TopRecInl of Range * (Range * VarString) * RawExpr * is_top_down: bool
| TopUnion of Range * (Range * VarString) * TypeVar list * RawTExpr list
| TopNominal of Range * (Range * VarString) * TypeVar list * RawTExpr
| TopPrototype of Range * (Range * VarString) * TypeVar list * RawTExpr
| TopType of Range * (Range * VarString) * TypeVar list * RawTExpr
| TopInstance of Range * (Range * VarString) * (Range * VarString) * TypeVar list * RawExpr
Agh, none of these had fucking ranges!!!
2:20pm. Well, it is not a big deal. I am just going to have to do some cleaning up for what will come ahead.
Now I need to do a lot of adjusting in bundle
.
2:40pm. Let me try running it. I got rid of the mock typechecker file as it aws getting in the way.
nominal tensor el dim = `(tensor_init `el `dim ``el ``dim)
Ah, it might be good to adjust the syntax highlighting for these variables.
Let me deal with that in the parser.
let type_expr d = ((read_small_var' |>> RawTVar) <|> (rounds (fun d -> root_type {root_type_defaults with allow_term=true} d))) d
Yeah, this should be type var.
let type_expr d = ((read_type_var' |>> RawTVar) <|> (rounds (fun d -> root_type {root_type_defaults with allow_term=true} d))) d
Let me do it like this.
nominal tensor el dim = `(tensor_init `el `dim ``el ``dim)
You can't see it in the journal, but el
and dim
are green now rather than blue.
Great.
I got this out of the way.
Let me commit here."
"3pm. I am thinking.
Just a bit more...
3:05pm. I already feel like calling it a day, but let me do some more.
I have to do more.
Let me start work on the full typechecker. For now, I'll just assume infer
.
3:15pm.
let full infer state x =
let term x = infer state (Choice1Of2 x)
let ty x = infer state (Choice2Of2 x)
match x with
| BundleRecType a ->
a |> List.iter (function
| BundleNominal(_,_,_,a) -> ty a
| BundleUnion(_,_,_,a) -> List.iter ty a
)
| BundleRecTerm a ->
a |> List.iter (function
| BundleRecInl(_,_,a,true) -> term a
| BundleRecInl(_,_,_,false) -> ()
)
| BundleInl(_,_,a,true) -> term a
| BundleInl(_,_,_,false) -> ()
| BundlePrototype(_,_,_,a) | BundleType(_,_,_,a) -> ty a
| BundleInstance(_,_,_,_,a) -> term a
This is the start of it.
My biggest issue right now is that I just do not feel like doing anything more for the day.
I skipped breakfast, so that shortened my day by about 1.5 hours. If it was the usual pace, it would be nearly 5pm now and I'd be complaining then.
3:20pm. This is basically how effort I am capable of expending when my motivation is at a medium level. I did the memoization, did some cleaning up. I did a good bit for the day, met my goals, and I do not really feel like starting anything else even though there is time.
3:25pm. The reason why I keep going to bed late every day is because stopping at 9pm would not let me have enough play. If you think about it, out of 12h that one can reasonably be awake, 4h of work and the rest leaving for leasure is the ideal pace for living. For things like putting in 8h or more, you pretty much have to be a slave or particularly motivated to do whatever you are doing.
I can treat work as play to an extent, but games that are boring need changing.
...
I am done for the day here. I had enough. I programmer hard, and now I am going to play hard. Maybe if I feel like it, might do some more programming for the day later, but I doubt it. I won't force myself to chase inspiration.
I am going to crystalize the next step in my mind, and then do it tomorrow when my motivation is at its peak.
Today I did the memoization and it came very easily to me. Had I tried doing it yesterday when I was fatigued, I doubt that would have been the case. I do not like this. One day I'll have the Inspired Desire, and I'll be able to integrate my conscious goals with the rest of my system.
Right now, all I can do is reward myself for the work that I've done well."
Add files via upload
Stress is a term frequently utilized synonymously with negative life experiences or life occasions. Logical research on pressure and uneasiness offers different points of view on the issue.Within the past decade, there has been significant effort toward automatic recognition of human facial expression using computer vision.
This project will detect the stress level based on what emotion he is experiencing. The idea behind this project is that it may be used in the following areas:
- Used in basic stress detection:-
- For students in schools as well as universities
- For patients in hospitals
- For employees in an organisation
- For inmates in jail
- Used in Medical Examination
- In the quarantine period
The aim of this project is to capture human emotion in real time to detect stress which can help the concerned authorities to take quicker steps to improve mental health.
RESOURCED USED:
- OpenCV
- Dlib
- Imutils
- Dataset
- Loading FER Data-set
- Keras.preprocessing.image
- Keras.models
- Convolutional neural network
- Mini Xception Model
IMPLEMENTATION:
Step 1 – Fetching image from web camera Step 2 - Image preprocessing Step 3 - Emotion Recognition(happy, sad, scared, disgust, angry, neutral and surprised.) Step 4 – Eyeblink detection Step 5 – Eyebrow detection
IT WAS A GOD DAMN FUCKKING COMMA... A FUCKING COMMA HAS DRIVEN ME CRAZY FOR A WEEK
"3:35pm. What I feel like doing now is reading LNs. Just forget about my responsibilities. Maybe I'll just go to bed earlier today? Who knows. My habits seem to be changing. Or am I changing them myself?
It is just, for the things I want to do, I want to actually have that feeling. Programming is a constant trip into darkness. When you make a few steps, it start surrounding you and the flame of desire gets suppressed.
4:50pm. Ok, let me finish the thing I am reading and I'll do a bit more. I got just a little bit of interest for doing some refactoring. I've realized that checking unbound vars and infer can be put into their own module. That is what I am going to do.
There is a lot of crap in Typechecker.fs
, but I just need two functions (and some types) and I am gold.
4:55pm. Let me do just a bit more.
Part of the reason why I was so uncomfortable with starting is because the module is a mess. But if I can clean it up just a tad, I should be able to stoke my desire a little.
Right now everything feels coupled, but that is not true - infer
is actually quite self contained.
5pm.
let validate_bound_vars (top_env : Env) term ty x =
Let me rename the template for calcing unbound vars. Rather than throw an exception this one just returns an array of them. That is the errors related to them.
5:05pm. Good, really good. Though I've mentioned that the typechecker is only 80% complete, I can reasonably make the claim that the stuff in Infer.fs
is between 95-100% done. It is almost done. Later, I'll just be adding extra constraints and code for linking variables together for the sake of editor support. But those are just extras.
It is like having one big area, and having a mess on one side of it. All that I've done is put a fence around the garbage heap and now things feel a lot cleaner.
5:10pm. Now I can think more clearly.
The Infer
module is 100% done effectively. And to complete the typechecker, all I have to do is take care of the top level - those BundleTop
statements.
I already have code for doing half of them. All I have to do is take care of regular inl and mutually recursive blocks of them. And I am not sure whether I handled mutually recursive types properly either.
At any rate, half seems like a decent estimate and what I have now is 70 LOC.
5:15pm. Now that I've though this, I can visualize the path twoards finishing the typechecker a lot more clearly. If not finish it, I should be able to make a big dent tomorrow.
The work I've done on editor support in the past week did not really register in my mind as making progress towards finishing the TC, but now I can see it. The gap has definitely narrowed. I should be able to move to testing before the month is over.
5:20pm. I feel completely fine finishing the day with this.
Yeah, the way I behaved today was just fine. It should be fine to trust myself a bit more. It is fine to not work if you do not feel like it. I do not have to be like a cop watching over myself. I won't ever let myself fall to indulgence. And I will trust myself to maintain a balance."
uhh video links are now fixed aswell
yea fuck you too msg link command i hate you
20: Black Jack
One rainy gloomy evening when all modules hid in the nearby cafes to drink hot energetic cocktails, the Hexadecimal virus decided to fly over the Mainframe to look for a Great Idea. And she has found one!
Why not make her own Codeforces, with blackjack and other really cool stuff? Many people will surely be willing to visit this splendid shrine of high culture.
In Mainframe a standard pack of 52 cards is used to play blackjack. The pack contains cards of 13 values: 2, 3, 4, 5, 6, 7, 8, 9, 10, jacks, queens, kings and aces. Each value also exists in one of four suits: hearts, diamonds, clubs and spades. Also, each card earns some value in points assigned to it: cards with value from two to ten earn from 2 to 10 points, correspondingly. An ace can either earn 1 or 11, whatever the player wishes. The picture cards (king, queen and jack) earn 10 points. The number of points a card earns does not depend on the suit. The rules of the game are very simple. The player gets two cards, if the sum of points of those cards equals n, then the player wins, otherwise the player loses.
The player has already got the first card, it's the queen of spades. To evaluate chances for victory, you should determine how many ways there are to get the second card so that the sum of points exactly equals n.
Input Format
The only line contains n (1 n 21) the required sum of points. If the input value is outside this range, print Invalid Input
Output Format
Print the numbers of ways to get the second card in the required way if the first card is the queen of spades TEST CASE 1
INPUT 12 OUTPUT 4
more minor changes
-
Added albedo because SE calculates equilibrium temperature based on greenhouse and albeto - otherwise, SE generates albedo of a random value. In US2 there's an option to edit albedo so it's useful here too.
-
Added lum and Teff printing to all stars. For some reason this was missing from every star except the main one.
-
Removed "interior": I did the following test to see if Classifier is necessary:
interior{ breakdown... } or composition{ breakdown... } or interior{ composition{ breakdown... } } // like it was before
Only when "composition" is used directly, SE auto-detects helium for ice-giants vs terras and water for aquarias vs terras. I decided to left the Classifier however, because some objects get ridiculously deep oceans and stars aren't identified well, even with this composition part sorted out.
- Added a quick function to estimate water depth based on roughness and liquid level. If user wants ice caps and more complicated stuff though, manual edits are still needed...
A note about roughness - only objects auto-generated by US2 seem to have the default value of 21 in BumpHeight (a result of US2's ElevationToRadiusRatio). But this value can be modified from within US2 (and should because it affects terrain), and in the built-in Solar System simulations objects also have different values. Mars for example has 30~ BumpHeight because of Olympus Mons.
- Resurrected obliquity - obliquity is really only wrong for objects orbiting binaries, and objects orbiting really close (like Mercury). In the case of mercury, I think it's because the wobble of the sun isn't accounted for in our converter... But when testing built-in Solar System simulations (and also my sims), most obliquity values are less than 3 degrees error. While this is not ideal and I think relates to inclination being wonky, it's not too bad considering that obliquity changes over time due to axial precession anyway.
Obliquity is also 100% wrong for collisional products - I haven't been able to figure out how to related the "white" axis with the "blue" axis. But those objects are rare unless that's how you tend to make objects...
More ever, inclination, ascendingNode, argOfPericenter, and meanAnomaly are all wrong too, some with larger errors then obliquity (even when built-in US2 systems are tested). So if obliquity should be removed, maybe they should too until the math is worked out?
I haven't noticed values of -9.25596e+61 in obliquity, can you give me an example? The main object of a simulation (like Sun) does have obliquity of "6.95182e-310" which is ~0, but I'm not sure how to fix it...
Bloody feet update (#53109)
Componentized the bloody feet feature.
- Hardsuits and other feet-covering clothing can now get bloody feet as well and spread gunk around.
- Bare feet can now get bloody as well and spread gunk around.
- Shoes/feet won't get bloody if something is covering them.
- Improved blood spreading behaviour. Previously, magic numbers were used in the blood pick up and drop off process. Now, when you step in blood, you and the floor share the blood volume. When you step on a non-bloody tile, you give away half of your shoe blood to the tile, and so on. This means the total blood volume always stays constant when moving around. * Blood doesn't appear out of thin air, nor get flushed to bluespace.
- Lowered footprint minimum opacity. Because it looks better, imo.
- Improved footprint exit/enter dirs.
- Improved footprint examine.
- Removed code for cult magic where a spell can suck up blood on your shoes. I'm pretty sure this code didn't work anyway. Implementing that for this new system would require a new signal and I just don't think it's worth it.
How can this game make you spend 20 hours on fucking spaceman footprints
Hardsuits will become "fully bloody" by just stepping in blood. This is a limitation of the current forensics system, as that is what is used to determine if an item is bloody or not. I'm aware of this but I don't think it fits to fix that in this PR.
cl add: Footprints and bloody shoes major update. Hardsuits and bare feet can now get bloody as well. Improved blood spreading behaviour. fix: Shoes will no longer get bloody while wearing something that covers them. /cl
Updating: 8/26/2020 11:00:00 PM
- Added: Bilingual baby name finder (https://mixedname.com/)
- Added: What you should study (https://mco.dev/what-you-should-study/)
- Added: Robots I Love (https://www.charlieharrington.com/robots-i-love/)
- Added: The Five Pillars Of Wealth Building - Darius Foroux (https://dariusforoux.com/five-pillars-of-wealth-building/)
- Added: Why walking meetings boost creativity 60% - Greg Raiz (https://gregraiz.com/increase-your-creativity-60/)
- Added: The Joy of Things being Things - The Space Under the Window (Andrew Plotkin, 1997) - Half Mermaid Productions (https://halfmermaid.co/the-joy-of-things-being-things-the-space-under-the-window-andrew-plotkin-1997)
- Added: How to not give a fuck (http://blog.jonathancai.com/fuck/)
Generation took: 00:05:37.1634906 Maintenance update - cleaning up homepage and feed