there were a lot of events recorded by gharchive.org of which 2,186,021 were push events containing 3,363,963 commit messages that amount to 277,354,808 characters filtered with words.py@e23d022007... to these 41 messages:
medical loadouts
Keep in mind these are just on spawn. I still suggest providing medical crates so experienced medics can pick and choose.
added 2x 250ml bags of saline - saline is required to clear IV obstructions otherwise I wouldnt bother. (our normal loadout actually lack this as its new) added 8x 250ml transfusion bags - because the idea of a medic who is waiting on more supplies needing to ask GI to donate blood is kinda neat.
increased count of King LTs to 5 - Always nice to have as many of these as possible in a mass cas doubled AAT kit count to 10 - AAT kits are single use items unless we change the settings. increased chest seal count to 10 - 2 is a little rough. 10 may be overkill. Either way Im thinking of the new medics here. increased TXA count to 8 - TXA is handy when you have multiple wounded. increased norepinephrine count to 8 - To make up for slightly decreased epinephrine counts.
reduced morphine count by 4 - morphine is more dangerous in KAT. Hope making it more scarce will discourage ODs reduced painkiller count by 2 - Leaving 2 for total of 20 uses which is more than our normal sessions. 40 is still overkill and a waste of space. reduced carbonate count by 2 - Same logic as painkillers. reduced epinephrine count to 4 - Mainly to prevent abusing it for a stamina boost. Provided more norepinephrine to fill the role without the cheese factor.
Fixes asset caching (#69852) (#193)
The asset was being loaded, seeing that fully_generated is false, so it attempts to rebuild. The rebuilding clears the existing file cache, and fucks us.
Life is pain.
Co-authored-by: LemonInTheDark [email protected]
It Came From Outer Spess: Adds midround changelings, delivered by an absolutely disgusting changeling meteor (#73018)
Adds a new dynamic midround opportunity and random event - Space Changeling.
2023-01-28.13-20-32.mp4
If you are fortunate enough to recieve this role, you will be stuffed into a changeling meteor and hurled at the side of the station. With no crew identities, no access, and no equipment, you'll have to rely on your free organic space suit and armblade to infiltrate the station and get settled.
With no disguises to fall back on, the midround changeling experience may lead to some very unfavorable situations. It's not unlikely that you'll be spotted making your way inside, or that someone will see the impact site and cause a panic. This role is not easy, but keep in mind that you also have nothing to lose in the event that you use Lesser Form/Headslug.
Aside from the starting circumstances, you have the same objectives and capabilities as a roundstart changeling. Getting inside of the station will be the hard part, but from there you can do what changelings do best and blend in.
A brief note on the free stuff you get:
You get the organic space suit and armblade for free. The space suit is absolutely vital, but I decided that the armblade should be given for free as well. It's necessary for breaking open windows or airlocks and getting access to the station, since otherwise your options are limited to arrivals/departures. Having to pay a 2 point tax to avoid walking naked into the main hallways of the station and getting gibbed is lame, and with the added difficulty of the role I think it's fair.
Also, this is my 100th PR here! :)
Adds midround changelings in a WAY COOLER way than just making a random crew/new arrival a changeling.
Lets people experience Hardmode Changeling, and test the adaptability and flexibility of the most versatile antagonist even harder than before. Losing the option to bypass the whole shape-shifter thing by disguising as your crew identity presents a welcome change to the formula.
Adds a teensy bit more midround variety, so we stop getting Nightmare At The Thirty Minute Mark every round.
🆑 Rhials add: Midround changeling spawn event. add: Changeling meteor. It has a present for you. /🆑
fix(DB/Locale): deDE fix request items texts #02 (#14615)
Process of translation: only original sources of deDE texts by researching multiple sources, reverse translation by searching for related quest items/NPCs and using these names to reconstruct a proper translation.
This fixes the terms
Coldtooth-Mine (Eisbeißermine), Doomhammer (Schicksalshammer), Fizzle (Zischel), Fizzledowser (Rutenwünschels), Fizzlebub (Zischelbub), Burning Blade (Brennende Klinge), Ashenvale (Eschental), Bloodscalp/s/stamm (Blutskalpe, Blutskalpstamm), Darkspeartrolle/Darkspears/Darkspearstamm (Dunkelspeere, Dunkelspeertrolle, -stamm), Moonglade (Mondlichtung), Starblaze (Sternenschauer), Shadowglen (Laubschattental), Darrowshire (Darroheim), Booty Bay (Beutebucht), Ratchet (Ratschet), Dizzywig (Flunkerblick), Hearthglen (Herdweiler), Chillwindspitze (Zugwindspitze), Stormrage (Sturmgrimm), Stormpike (Sturmlanze/n), Ironforge (Eisenschmiede), Thunderhorn (Donnerhörner), Steamboil (Kesseldampf), Twilight-Hammer, -klan (Schattenhammer/Schattenhammerklan), Fathom-Kern (Tiefenkern), Blackfathom Deeps (Tiefschwarze Grotte), Blackrock-* (Schwarzfels-*), Hawkwind (Falkenwind), Feathermoon (Mondfeder), Moonrage (Mondzorn), Firemane (Feuermähne), Searingblade (Sengende Klinge), Ragefireabgrund (Flammenschlund), Ironbands Areal (Eisenbands Lager), Zandalar (Zandalari), Southshore (Süderstade)
for quest progress/request text entries for the deDE localisation with proper casus/declension (these are not proper translated names of locations/NPCs that have been left over by Blizzard since their language localisations in TBC in 2006 and onward).
Added missing progress/request text entries for 308, 311, 417, 1644, 1787, 5059, 5060, 5721, 6004, 6023, 6025, 6187, 8042, 8043, 8044, 8046, 8047, 8048, 8050-8079, 8102, 8107, 8108, 8111, 8112, 8113, 8117, 8118, 8142, 8143, 8147, 8183-8195, 8238, 8239, 8240, 8243, 8246, 8860, 9594, 9692, 9707, 10414, 10415, 10919, 11451. (A lot of them are Zandalari/Zul'Gurub related quests.)
Replaced post-Cataclysm progress/request text entries for 933, 935, 6387, 7383.
Fixed a wrong $R with plain text at progress/request text for 9147.
Added missing female gender equivalent to 6391.
(There are probably more changes in the file that aren't further explained here as it was hard to keep track of everything. If you think I made a mistake or have questions please contact me directly.)
- Fixing a lot in the quest_request_items_locale table.
- Fixing some of the tasks in azerothcore/azerothcore-wotlk#14244 Referring to my other two bug reports from CC Github:
- chromiecraft/chromiecraft#4697
- chromiecraft/chromiecraft#4745
- Read the text on top.
- Not tested.
All of the changes are to reward texts of quests, can be tested by completing quests or simply reviewing the changed file.
- [ ]
- [ ]
When a PR is ready to be tested, it will be marked as [WAITING TO BE TESTED].
You can help by testing PRs and writing your feedback here on the PR's page on GitHub. Follow the instructions here:
http://www.azerothcore.org/wiki/How-to-test-a-PR
REMEMBER: when testing a PR that changes something generic (i.e. a part of code that handles more than one specific thing), the tester should not only check that the PR does its job (e.g. fixing spell XXX) but especially check that the PR does not cause any regression (i.e. introducing new bugs).
For example: if a PR fixes spell X by changing a part of code that handles spells X, Y, and Z, we should not only test X, but we should test Y and Z as well.
[MIRROR] STAY IN THE LIGHT: Adds terrify Nightmare spell, terrified status effect, and a reason to mind the shadows [MDB IGNORE] (#18775)
- STAY IN THE LIGHT: Adds terrify Nightmare spell, terrified status effect, and a reason to mind the shadows (#72282)
Adds the Terrify spell, and its associated status effect, Terrified. This new spell is given to antagonist nightmares, as a part of their brain. The spell only works in those surrounded by darkness, and will apply the Terrified status effect if successful. Upon being Terrified, victims will passively gain Terror Buildup if they remain in the dark. As buildup increases, so do the negative effects, including tunnel vision, panic attacks, dizziness, and more.
There are two primary methods for mitigating terror buildup. The first is moving into the light, which will reverse the passive terror buildup and eventually make it go away. The other method is by getting a hug from a friendly hand, which will reduce buildup significantly.
Getting a hug from an UNfriendly hand (a nightmare, for instance) will cause the victim to freak out and be briefly knocked down. This can be spammed on targets who are caught alone in the dark, keeping them in an unfavorable position (sideways) and adding to the victim's terror buildup considerably. Escape into the light as soon as possible, or you'll be pushed to MAXIMUM TERROR BUILDUP.
To what end? Heart failure. Past the soft terror cap (which limits how much passively generated terror you can make) exists the hard terror cap. Bypassing that threshold will cause a stress induced heart attack and knock you unconscious (embarrassing!)
- STAY IN THE LIGHT: Adds terrify Nightmare spell, terrified status effect, and a reason to mind the shadows
Co-authored-by: Rhials [email protected] Co-authored-by: GoldenAlpharex [email protected]
[FIX] website: redirect to case insensitive URL if not exact match
Before this commit, if a link to a page was not correct because of a case mismatch, it would simply land on a 404 page. While it's correct, as URL are case sensitive, it leads to a few bad UX flow at the admin/editor level:
- Create a link in your page (on a text or a button eg), type an URL which does not exists (to create it after) like /Page
- Click on the link/button you just made, you are redirected to /Page which display a 404 with the "Create page" option (correct)
- When you click on that button, it will actually create a page with /page URL, leading to a mismatch between the URL you created and the page URL. Your link/button will still lead to a 404 URL as it points to /Page.
Since it's just a fallback when an exact URL match is not found, it should not break anything and should not have bad impact at any level (seo/speed etc). Indeed:
- It's done through a 302 redirect
_serve_page()
is already a fallback case, so it will only make thewebsite.redirect
and 404 cases a bit slower due to the extra search query.
The only possible scenario seems to be if the user (mind the uppercase):
- Created a /Page page
- Created a redirect from /page to /another-page
In this case, /page won't land on /another-page but on /Page. This flow seems unlikely and is not actually wrong either way. At least, it certainly is less important than ensuring a case insensitive fallback.
Finally, note that another solution would have been to either:
- Force page URL to lower case.
-> This is not stable friendly, people might be relying on this to
create pages with different casing:
/Batman-VII-The-Dark-Knight-Whatevers
, while not recommended, doesn't sounds idiot. On top of not being stable friendly, we probably want to keep offering this possibility - Redirect all URLs to lowercase endpoints. -> This is obviously not stable and not Odoo's jobs. It should be something decided by the sysadmin and done at nginx (etc) level.
task-3110294 opw-3104030
closes odoo/odoo#111531
X-original-commit: 8f24aba86faf2639109b56887781b0daaf60be98 Signed-off-by: Quentin Smetz (qsm) [email protected]
[MIRROR] Basic Mobs Now Actually Have A Deathgasp [MDB IGNORE] (#19002)
Basic Mobs Now Actually Have A Deathgasp (#72950)
Pretty obviously an oversight since we only checked for simple_animal for this, but should also factor in the fact that we could now be a basic mob.
Actually I tested it on Sybil just now and deathgasps just never worked. We were setting death_message for... I guess when they die? It's just fucked but it works on my local now. blurgh
Ported simple animals that are now basic mobs were able to deathgasp this time last year. Silly that they aren't able to do that now.
🆑 fix: Basic Mobs are now able to deathgasp. /🆑
Let me know if the new variable name for the string is cringe, I just settled on that since it mirrored the type of check we run in select_message_type().
Co-authored-by: san7890 [email protected]
Fixes some runtime spam from lazyloading/map templates (#73037)
Ensures we don't try and rebuild loading turfs midload
Turf refs persist through destroy, so when we changeturf earlier to get our turf reservation, we insert our space turfs into the rebuild queue, and then end up here where we can be rebuilt randomly, midload, with uninit'd turfs
Avoids starting atmos machine processing until init
This avoids some runtimes with null gasmixtures
There's still trouble with atmos and template loading, pipes start
processing before their pipelines exist, so we just kinda get fucked.
Need to look into this more deeply, it involves pulling this stuff off
on_construct
and setup_template_machinery
and throwing it in maybe
late init, which I don't really relish but will just have to do
eventually.
Reduces runtime spam
2 New Positive Quirks! (#72912)
I added a few quirks to a downstream that I feel fit well with tg so here they are.
First up is Poster Boy, a quirk that gives you three mood altering posters, similar to the traitor objective to hang up demoralizing posters. You spawn with a box that has one poster that will uplift the entire crews spirits and 2 that are unique to your department. Captain counts for security and assistants get only neutral posters. Finally, with a crayon or spraycan, if you are any antagonist you can make your poster into one of the ones from the traitor objective.
example of quirk posters Costs 4.
Finally, the characterful Throwing Arm quirk, which lets you throw objects further (but not harder) and means you will never miss shots into the disposals bin. Costs 7.
previously i had a food subscription quirk here as well but i pulled it out and plan to re-add it as a separate PR in march, where it will now give you ingredients to cook a meal with occasionally.
Positive quirk variety is good and fun, I think that these positive quirks are reasonable ones that offer unique things that the current positive quirks do not. Poster boy gives people a reason to run around and claim wall real estate for their department and hopefully can build more solidarity in departments, the hidden antag feature probably has uses but is just for styling on people. Throwing arm offers a fun character trait that probably can have some slight uses and encourages the use of throwing weapons and tools more. Also it is good to have a way to never miss the disposals bin. It's so embarrassing.
🆑 add: Poster boy and Throwing arm positive quirks. imageadd: added posters for poster boy quirk /🆑
External Organ Rework: new bodypart_overlay system (#72734)
Bodypart overlays are now drawn by the new /datum/bodypart_overlay datum.
External organs no longer draw anything and instead add a special /datum/bodypart_overlay/mutant to the bodypart, which draws everything
Makes it way easier to add custom overlays to limbs, since the whole system is now modularized and external organs are just one implementation of it
I haven't moved anything but external organs to this new system, I'll move eyes, bodymarkings, hair, lipstick etc to this later
New pipeline is as follows:
- External organ added to limb
- External organ adds /datum/bodypart_overlay/mutant to limb to bodypart_overlays
- Limb updates its icon, looks for all /datum/bodypart_overlay in bodypart_overlays
- Very cool new overlay on your limb!
closes #71820
🆑 refactor: External organs have been near-completely refactored. admin: Admin-spawned external organs will load with a random icon and color fix: fixes angel wings not working for non-humans (it was so fucking broken) fix: fixes external organs being invisible if they werent initialized with a human /🆑
External organs are cool but are pretty limited in some ways. Making stuff like synthetic organs is kinda fucked. I tried and it was dogshit. Now you can just give an icon state and icon and you're good (using /datum/bodypart_accessory/simple)
Stuff like eyes, cat ears and hair seem like good choices for extorgans, but don't quite work for it because their icons work a lot differently. This solves for it completely since any organ (or object or whatever) can add it's own icon to a bodypart.
Want to add an iron plate to someones head? Go ahead. Want a heart to stick out of someones chest? No problem.
Co-authored-by: Mothblocks [email protected]
Changes the hypno flash to work on unconscious people (#73025)
The hypno flash is a really fun and flavourful item that is both strong while allowing for gimmicks. However, personally, I've always been a bit confused as to what counted for hypnosis, until looking into the specifics. I also know that I'm probably not alone in this, because various people have told me over the years that sleep doesn't work, while it definitely does. This PR hopes to change this by somewhat buffing the hypno flash, by making unconsciousness work for hypnosis.
Unconsciousness looks very similar to sleep, and in a lot of cases it is really just the same effect... except for hypnosis, where there is no effect on unconscious people. Personally, I don't think this is the best UX and it limits the options there are for hypnotising people, which is a shame, as I think it's very interesting. This may or may not be too strong (think using the hypno flash with the micro-laser), but I still think this is preferable to only working with sleep specifically or hypnosis, might warrant a TC up if people otherwise agree with the change. Also, just to note, unconsciousness is also still separate from crit. This does not let you hypnotise people for free because they're in crit.
Abductor scientist self-retrieve failure/runtime fix (#73172)
Since the abductor outfit/implant would load before the abductor ship (and it's teleport pad) when first generating a team, a runtime would occur when trying to link the pad to the implant. Another would occur every time you attempted to retrieve yourself (as the linked pad would be null), preventing recall and completely neutering an abductor team's most important maneuver.
Now, using the implant will perform the linking process again if no linked pad is found, and provides the owner with a warning if (by some great calamity) they genuinely have no pad to teleport back to. This solves the issue of the implant sometimes not linking to a pad properly on initialize, and makes them way less prone to breaking.
Apparently this has been broken for a while, presumably since the abductor ship was made into a lazyloading template.
The funny silly grey men get to torture the poor hapless crew once again.
🆑 fix: abductor scientist's retrieval implants will now properly recall the owner, and inform them upon recall failure. /🆑
Refactors Suicide Verb + Basic Mobs (actually all (most) living mobs) Can Now Suicide (#72919)
On the tin. There was a lot of needless copy-paste and a lot of single-letter vars and weird indentation and... well just all of it was at least eight years old. So, I decided to "abstract" as much as I could of it out instead of piling onto the big copypaste clusterfuck for implementing basic mob suicide.
Fixes #72903
Having more procs that can be easily repeatably called to the same results is much better than having to transplant the same exact three lines everywhere. It's also a good first step to further in-depth behavior by allowing sub-type overrides of certain procs (which is quite nice). Just feels more extensible overall for the next guy who wants to add funny suicide behavior whenever they might come around.
There's probably a few better ways to do what I did, but I wrote code comments explaining why I did what I did. I think there's a few ways to make it more agnostic, but I think that'll be another can of worms that will bloat out an already quite large PR. Let's just get the framework set.
(this refactor should also make it quite easy to unit test suicide actions 👀)
🆑 fix: All Mobs (including Basic mobs) are now able to suicide. (warning: some exclusions remain) /🆑
Refactors crew records (#72725)
I have attempted or otherwise started this project at least 4 times. I am sick of it being on my calendar. The code needs it. I need it.
- This makes crew records a proper datum rather than assigning properties record.fields.
- General, medical, and security records are merged.
- Did some slight refactoring here and there for things that looked obvious.
- Wanted states are now defined (and you can suspect someone through sechud)
- pAI (unrelated but annoying) had some poorly named exported types that i made more specific
- Job icons are moved back to the JS side (I wanted to get icons for initial rank without passing trim)
previews
Editable fields & security console
Medical records
Look and feel of the more current version
TGUI'd some of the worst UIs in the game. Creating new records is made much simpler. Manifest_inject is made readable. Probably bug fixes
🆑 refactor: Crew records have been refactored. refactor: Medical records -> TGUI refactor: Security records -> TGUI refactor: Warrants console -> TGUI qol: Players are now alerted when their fines are paid off. qol: Cleaned up sec hud examination text. qol: Adding and deleting crimes is easier. qol: Writing crimes in the console sets players to arrest. qol: You can now mark someone as a suspect through sec hud. /🆑
Co-authored-by: MrMelbert [email protected]
Admins can now choose where fish go (#73109)
I've pigeonholed myself as the fish guy now. It seems like someone made events easier to add admin controls for so I thought I'd add some to the event I most recently touched.
Instead of letting the RNG choose admins can now direct a circle of carp to converge upon a specific location, or even a trail of specific locations if they want the carp to just sort of swim in a circle around the space station (although the ones on the far side of the station from the starting point will travel all the way through it to get there). This also works with magicarp. They don't really move fast enough for you to use this to punish a specific person but you can use it to annoy a specific location full of people.
Plausibly there's no reason the code wouldn't work for a specified atom instead of a turf (as long as it sticks to one z level) but I couldn't think of an elegant way of selecting that whereas "use my current ghost location" is very intuitive, so I didn't add one.
Plausibly this permits admins do more fun things.
🆑 admin: Admins can direct where carp (or magicarp) are interested in going when manually triggering the event /🆑
lol muzzle flash wasnt safed, hate my life
added player muzzleflash
TGUI disposals (#2153)
converted disposals to TGUI
TESTING MY USE OF GITLENS
also fuck nanoui
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the <details>
tags.
🆑 ui: converted disposals to tgui /🆑
Co-authored-by: Stan_Albatross [email protected]
BACKPORT: signal: add pidfd_send_signal() syscall
The kill() syscall operates on process identifiers (pid). After a process has exited its pid can be reused by another process. If a caller sends a signal to a reused pid it will end up signaling the wrong process. This issue has often surfaced and there has been a push to address this problem [1].
This patch uses file descriptors (fd) from proc/ as stable handles on struct pid. Even if a pid is recycled the handle will not change. The fd can be used to send signals to the process it refers to. Thus, the new syscall pidfd_send_signal() is introduced to solve this problem. Instead of pids it operates on process fds (pidfd).
/* prototype and argument /* long pidfd_send_signal(int pidfd, int sig, siginfo_t *info, unsigned int flags);
/* syscall number 424 */ The syscall number was chosen to be 424 to align with Arnd's rework in his y2038 to minimize merge conflicts (cf. [25]).
In addition to the pidfd and signal argument it takes an additional siginfo_t and flags argument. If the siginfo_t argument is NULL then pidfd_send_signal() is equivalent to kill(, ). If it is not NULL pidfd_send_signal() is equivalent to rt_sigqueueinfo(). The flags argument is added to allow for future extensions of this syscall. It currently needs to be passed as 0. Failing to do so will cause EINVAL.
/* pidfd_send_signal() replaces multiple pid-based syscalls */ The pidfd_send_signal() syscall currently takes on the job of rt_sigqueueinfo(2) and parts of the functionality of kill(2), Namely, when a positive pid is passed to kill(2). It will however be possible to also replace tgkill(2) and rt_tgsigqueueinfo(2) if this syscall is extended.
/* sending signals to threads (tid) and process groups (pgid) */ Specifically, the pidfd_send_signal() syscall does currently not operate on process groups or threads. This is left for future extensions. In order to extend the syscall to allow sending signal to threads and process groups appropriately named flags (e.g. PIDFD_TYPE_PGID, and PIDFD_TYPE_TID) should be added. This implies that the flags argument will determine what is signaled and not the file descriptor itself. Put in other words, grouping in this api is a property of the flags argument not a property of the file descriptor (cf. [13]). Clarification for this has been requested by Eric (cf. [19]). When appropriate extensions through the flags argument are added then pidfd_send_signal() can additionally replace the part of kill(2) which operates on process groups as well as the tgkill(2) and rt_tgsigqueueinfo(2) syscalls. How such an extension could be implemented has been very roughly sketched in [14], [15], and [16]. However, this should not be taken as a commitment to a particular implementation. There might be better ways to do it. Right now this is intentionally left out to keep this patchset as simple as possible (cf. [4]).
/* naming */ The syscall had various names throughout iterations of this patchset:
- procfd_signal()
- procfd_send_signal()
- taskfd_send_signal() In the last round of reviews it was pointed out that given that if the flags argument decides the scope of the signal instead of different types of fds it might make sense to either settle for "procfd_" or "pidfd_" as prefix. The community was willing to accept either (cf. [17] and [18]). Given that one developer expressed strong preference for the "pidfd_" prefix (cf. [13]) and with other developers less opinionated about the name we should settle for "pidfd_" to avoid further bikeshedding.
The "_send_signal" suffix was chosen to reflect the fact that the syscall takes on the job of multiple syscalls. It is therefore intentional that the name is not reminiscent of neither kill(2) nor rt_sigqueueinfo(2). Not the fomer because it might imply that pidfd_send_signal() is a replacement for kill(2), and not the latter because it is a hassle to remember the correct spelling - especially for non-native speakers - and because it is not descriptive enough of what the syscall actually does. The name "pidfd_send_signal" makes it very clear that its job is to send signals.
/* zombies */ Zombies can be signaled just as any other process. No special error will be reported since a zombie state is an unreliable state (cf. [3]). However, this can be added as an extension through the @flags argument if the need ever arises.
/* cross-namespace signals */ The patch currently enforces that the signaler and signalee either are in the same pid namespace or that the signaler's pid namespace is an ancestor of the signalee's pid namespace. This is done for the sake of simplicity and because it is unclear to what values certain members of struct siginfo_t would need to be set to (cf. [5], [6]).
/* compat syscalls */ It became clear that we would like to avoid adding compat syscalls (cf. [7]). The compat syscall handling is now done in kernel/signal.c itself by adding __copy_siginfo_from_user_generic() which lets us avoid compat syscalls (cf. [8]). It should be noted that the addition of __copy_siginfo_from_user_any() is caused by a bug in the original implementation of rt_sigqueueinfo(2) (cf. 12). With upcoming rework for syscall handling things might improve significantly (cf. [11]) and __copy_siginfo_from_user_any() will not gain any additional callers.
/* testing */ This patch was tested on x64 and x86.
/* userspace usage */ An asciinema recording for the basic functionality can be found under [9]. With this patch a process can be killed via:
#define _GNU_SOURCE #include <errno.h> #include <fcntl.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <sys/syscall.h> #include <sys/types.h> #include <unistd.h>
static inline int do_pidfd_send_signal(int pidfd, int sig, siginfo_t *info, unsigned int flags) { #ifdef __NR_pidfd_send_signal return syscall(__NR_pidfd_send_signal, pidfd, sig, info, flags); #else return -ENOSYS; #endif }
int main(int argc, char *argv[]) { int fd, ret, saved_errno, sig;
if (argc < 3)
exit(EXIT_FAILURE);
fd = open(argv[1], O_DIRECTORY | O_CLOEXEC);
if (fd < 0) {
printf("%s - Failed to open \"%s\"\n", strerror(errno), argv[1]);
exit(EXIT_FAILURE);
}
sig = atoi(argv[2]);
printf("Sending signal %d to process %s\n", sig, argv[1]);
ret = do_pidfd_send_signal(fd, sig, NULL, 0);
saved_errno = errno;
close(fd);
errno = saved_errno;
if (ret < 0) {
printf("%s - Failed to send signal %d to process %s\n",
strerror(errno), sig, argv[1]);
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
/* Q&A
- Given that it seems the same questions get asked again by people who are
- late to the party it makes sense to add a Q&A section to the commit
- message so it's hopefully easier to avoid duplicate threads.
- For the sake of progress please consider these arguments settled unless
- there is a new point that desperately needs to be addressed. Please make
- sure to check the links to the threads in this commit message whether
- this has not already been covered. */ Q-01: (Florian Weimer [20], Andrew Morton [21]) What happens when the target process has exited? A-01: Sending the signal will fail with ESRCH (cf. [22]).
Q-02: (Andrew Morton [21]) Is the task_struct pinned by the fd? A-02: No. A reference to struct pid is kept. struct pid - as far as I understand - was created exactly for the reason to not require to pin struct task_struct (cf. [22]).
Q-03: (Andrew Morton [21]) Does the entire procfs directory remain visible? Just one entry within it? A-03: The same thing that happens right now when you hold a file descriptor to /proc/ open (cf. [22]).
Q-04: (Andrew Morton [21]) Does the pid remain reserved? A-04: No. This patchset guarantees a stable handle not that pids are not recycled (cf. [22]).
Q-05: (Andrew Morton [21]) Do attempts to signal that fd return errors? A-05: See {Q,A}-01.
Q-06: (Andrew Morton [22]) Is there a cleaner way of obtaining the fd? Another syscall perhaps. A-06: Userspace can already trivially retrieve file descriptors from procfs so this is something that we will need to support anyway. Hence, there's no immediate need to add another syscalls just to make pidfd_send_signal() not dependent on the presence of procfs. However, adding a syscalls to get such file descriptors is planned for a future patchset (cf. [22]).
Q-07: (Andrew Morton [21] and others) This fd-for-a-process sounds like a handy thing and people may well think up other uses for it in the future, probably unrelated to signals. Are the code and the interface designed to permit such future applications? A-07: Yes (cf. [22]).
Q-08: (Andrew Morton [21] and others) Now I think about it, why a new syscall? This thing is looking rather like an ioctl? A-08: This has been extensively discussed. It was agreed that a syscall is preferred for a variety or reasons. Here are just a few taken from prior threads. Syscalls are safer than ioctl()s especially when signaling to fds. Processes are a core kernel concept so a syscall seems more appropriate. The layout of the syscall with its four arguments would require the addition of a custom struct for the ioctl() thereby causing at least the same amount or even more complexity for userspace than a simple syscall. The new syscall will replace multiple other pid-based syscalls (see description above). The file-descriptors-for-processes concept introduced with this syscall will be extended with other syscalls in the future. See also [22], [23] and various other threads already linked in here.
Q-09: (Florian Weimer [24]) What happens if you use the new interface with an O_PATH descriptor? A-09: pidfds opened as O_PATH fds cannot be used to send signals to a process (cf. [2]). Signaling processes through pidfds is the equivalent of writing to a file. Thus, this is not an operation that operates "purely at the file descriptor level" as required by the open(2) manpage. See also [4].
/* References */ [1]: https://lore.kernel.org/lkml/[email protected]/ [2]: https://lore.kernel.org/lkml/[email protected]/ [3]: https://lore.kernel.org/lkml/[email protected]/ [4]: https://lore.kernel.org/lkml/[email protected]/ [5]: https://lore.kernel.org/lkml/[email protected]/ [6]: https://lore.kernel.org/lkml/[email protected]/ [7]: https://lore.kernel.org/lkml/[email protected]/ [8]: https://lore.kernel.org/lkml/[email protected]/ [9]: https://asciinema.org/a/IQjuCHew6bnq1cr78yuMv16cy [11]: https://lore.kernel.org/lkml/[email protected]/ [12]: https://lore.kernel.org/lkml/[email protected]/ [13]: https://lore.kernel.org/lkml/[email protected]/ [14]: https://lore.kernel.org/lkml/[email protected]/ [15]: https://lore.kernel.org/lkml/[email protected]/ [16]: https://lore.kernel.org/lkml/[email protected]/ [17]: https://lore.kernel.org/lkml/CAGXu5jL8PciZAXvOvCeCU3wKUEB_dU-O3q0tDw4uB_ojMvDEew@mail.gmail.com/ [18]: https://lore.kernel.org/lkml/[email protected]/ [19]: https://lore.kernel.org/lkml/[email protected]/ [20]: https://lore.kernel.org/lkml/[email protected]/ [21]: https://lore.kernel.org/lkml/[email protected]/ [22]: https://lore.kernel.org/lkml/[email protected]/ [23]: https://lwn.net/Articles/773459/ [24]: https://lore.kernel.org/lkml/[email protected]/ [25]: https://lore.kernel.org/lkml/CAK8P3a0ej9NcJM8wXNPbcGUyOUZYX+VLoDFdbenW3s3114oQZw@mail.gmail.com/
Cc: "Eric W. Biederman" [email protected] Cc: Jann Horn [email protected] Cc: Andy Lutomirsky [email protected] Cc: Andrew Morton [email protected] Cc: Oleg Nesterov [email protected] Cc: Al Viro [email protected] Cc: Florian Weimer [email protected] Signed-off-by: Christian Brauner [email protected] Reviewed-by: Tycho Andersen [email protected] Reviewed-by: Kees Cook [email protected] Reviewed-by: David Howells [email protected] Acked-by: Arnd Bergmann [email protected] Acked-by: Thomas Gleixner [email protected] Acked-by: Serge Hallyn [email protected] Acked-by: Aleksa Sarai [email protected]
(cherry picked from commit 3eb39f47934f9d5a3027fe00d906a45fe3a15fad)
Conflicts: arch/x86/entry/syscalls/syscall_32.tbl - trivial manual merge arch/x86/entry/syscalls/syscall_64.tbl - trivial manual merge include/linux/proc_fs.h - trivial manual merge include/linux/syscalls.h - trivial manual merge include/uapi/asm-generic/unistd.h - trivial manual merge kernel/signal.c - struct kernel_siginfo does not exist in 4.14 kernel/sys_ni.c - cond_syscall is used instead of COND_SYSCALL arch/x86/entry/syscalls/syscall_32.tbl arch/x86/entry/syscalls/syscall_64.tbl
(1. manual merges because of 4.14 differences 2. change prepare_kill_siginfo() to use struct siginfo instead of kernel_siginfo 3. use copy_from_user() instead of copy_siginfo_from_user() in copy_siginfo_from_user_any() 4. replaced COND_SYSCALL with cond_syscall 5. Removed __ia32_sys_pidfd_send_signal in arch/x86/entry/syscalls/syscall_32.tbl. 6. Replaced __x64_sys_pidfd_send_signal with sys_pidfd_send_signal in arch/x86/entry/syscalls/syscall_64.tbl.)
Bug: 135608568 Test: test program using syscall(__NR_pidfd_send_signal,..) to send SIGKILL Change-Id: I34da11c63ac8cafb0353d9af24c820cef519ec27 Signed-off-by: Suren Baghdasaryan [email protected] Signed-off-by: electimon [email protected]
(hopefully) webedits a grammatical correction into headbite's kill message (#2537)
when someone dies to headbite it displays as
Urr Mot'herr has died to executed by headbite at the Containers from Elder Lurker (GIT-222)
hopefully with this simple one line webedit it should instead be
Urr Mot'herr has died to headbite execution at the Containers from Elder Lurker (GIT-222)
god fucking knows if this is the right line
uhm it reads better
Screenshots & Videos
github
🆑 spellcheck: 'executed by headbite' to 'headbite execution' when listing someone dying to a headbite in deadchat /🆑
Adds Ludicrously In-Depth Black Market to Recquisitions. (#2014)
VASTLY enhances the Black Market. Black market items are obtainable by deconstructing a supply computer and pulsing the circuit board. If you're knowledgeable in engineering enough.
Added a whole new category for black market items and thoroughly enhanced the possible contraband items to order. Guns, drugs, and worse are plentiful in stock...
Various valuable, rare, or otherwise interesting items now have a 'black market value' that allows them to be sent down the ASRS elevator in exchange for black market points to order various things with. Anything that's 'rare' is probably worth something. Added a scanner to the black market to let them detect said points.
Added DIALOGUE to the black market.
FIxed some construction wirecutter steps needing a screwdriver for some reason.
Changed up Req's mapping to add a hidden storage room.
slightly changed human remains' description
Added the maintenance jack, can be found in the black market for now.
Improved supply shuttle code somewhat.
VASTLY enhances the Black Market. Black market items are obtainable by deconstructing a supply computer and pulsing the circuit board. If you're knowledgeable in engineering enough.
Black Market is comically underused, by comically enhancing it like this it will freshen shipside roleplay and create new and interesting scenarios for MPs, req, and bystanders to interact with.
Added a whole new category for black market items and thoroughly enhanced the possible contraband items to order. Guns, drugs, and worse are plentiful in stock...
The contraband needs to be actually meaningful to the players for it to have any impact. The list of loot has been curated so that players will be intrigued, but will not be able to abuse it for too-stronger-than-usual gear without blatant drawbacks.
Various valuable, rare, or otherwise interesting items now have a 'black market value' that allows them to be sent down the ASRS elevator in exchange for black market points to order various things with. Added a scanner to the black market to let them detect said points.
This means CTs could go on scavenger hunts through the ship, evading curious MPs to sift through maintenance and various hidey holes scanning everything.
Added DIALOGUE to the black market.
Finally, we have dialogue in CM! The very first human NPC. We're ignoring WO because nobody likes WO.
FIxed some construction wirecutter steps needing a screwdriver for some reason.
Necessary in this PR to avoid stupid confusion when deconstructing the computers.
Changed up Req's mapping to add a hidden storage room.
To let CTs hide their goodies so they won't be in open sight. NOT DONE YET!
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the <details>
tags.
🆑 add: VASTLY enhances the Black Market. Black market items are obtainable by deconstructing a supply computer and pulsing the circuit board. If you're knowledgeable in engineering enough. add: Added a whole new category for black market items and thoroughly enhanced the possible contraband items to order. Guns, drugs, and worse are plentiful in stock... add: Various valuable, rare, or otherwise interesting items now have a 'black market value' that allows them to be sent down the ASRS elevator in exchange for black market points to order various things with. Anything that's 'rare' is probably worth something. Added a scanner to the black market to let them detect said points. add: Added DIALOGUE to the black market. fix: FIxed some construction wirecutter steps needing a screwdriver for some reason. spellcheck: slightly changed human remains' description add: Added the maintenance jack, can be found in the black market for now. code: Improved supply shuttle code somewhat. /🆑
Co-authored-by: harryob [email protected] Co-authored-by: XSlayer300 [email protected] Co-authored-by: Segrain [email protected] Co-authored-by: Zonespace [email protected]
Removes skull balaclava and skull facepaint from loadout, places them hidden on the Almayer. (#2526)
This removes the skull balaclavas and the facepaints from the loadout menu and instead places them in 2 places hidden around the Almayer. The reason I have done this is that they are almost exclusively used by people who who are referencing a character- usually Ghost from MW2 (either version) or the characters from COD Ghosts. See below for more details.
This is an OOC meme item that doesn't fit the tone of CM, particularly because we already have an item with a skull on it in case you want to use it: Armor! They wrote things on armor in the movie, including a skull!
Instead, we have these types of people, running a skull 'clava in every round even as command or medical characters. This is a modern 'operator' look, not a Space 'Nam-esque look and not an Aliens look. If you want something that'd remind you of Space 'nam, just look at the classic 'born to kill' helmet. Now, look at these CALL OF DUTY CHARACTERS THAT THIS ITEM REFERENCES!
This is goofy as hell and kind of an outlier among the customization options since it is very clearly a reference to COD. Look at its description:
"The face of your nightmares. Heed the call of duty as the ghost in the night with this metal 'clava. Additionally protects against the cold. Now in black!"
You'd get laughed off a real marine base for wearing this, let alone wearing one on an op. We don't need more people running this every round, and this gives them something to fight over between eachother- if you want to larp as Simon 'Ghost' Riley from hit video game COD MW2 (either version) then you'll have to hunt it down.
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the <details>
tags.
🆑 del: Removed skull balaclavas and skull facepaint from the loadout options maptweak: adds a single skull facepaint and balaclava, each hidden in their own locations on the Almayer. /🆑
mm: vmscan: fix extreme overreclaim and swap floods
During proactive reclaim, we sometimes observe severe overreclaim, with several thousand times more pages reclaimed than requested.
This trace was obtained from shrink_lruvec() during such an instance:
prio:0 anon_cost:1141521 file_cost:7767
nr_reclaimed:4387406 nr_to_reclaim:1047 (or_factor:4190)
nr=[7161123 345 578 1111]
While he reclaimer requested 4M, vmscan reclaimed close to 16G, most of it by swapping. These requests take over a minute, during which the write() to memory.reclaim is unkillably stuck inside the kernel.
Digging into the source, this is caused by the proportional reclaim bailout logic. This code tries to resolve a fundamental conflict: to reclaim roughly what was requested, while also aging all LRUs fairly and in accordance to their size, swappiness, refault rates etc. The way it attempts fairness is that once the reclaim goal has been reached, it stops scanning the LRUs with the smaller remaining scan targets, and adjusts the remainder of the bigger LRUs according to how much of the smaller LRUs was scanned. It then finishes scanning that remainder regardless of the reclaim goal.
This works fine if priority levels are low and the LRU lists are comparable in size. However, in this instance, the cgroup that is targeted by proactive reclaim has almost no files left - they've already been squeezed out by proactive reclaim earlier - and the remaining anon pages are hot. Anon rotations cause the priority level to drop to 0, which results in reclaim targeting all of anon (a lot) and all of file (almost nothing). By the time reclaim decides to bail, it has scanned most or all of the file target, and therefor must also scan most or all of the enormous anon target. This target is thousands of times larger than the reclaim goal, thus causing the overreclaim.
The bailout code hasn't changed in years, why is this failing now? The most likely explanations are two other recent changes in anon reclaim:
-
Before the series starting with commit 5df741963d52 ("mm: fix LRU balancing effect of new transparent huge pages"), the VM was overall relatively reluctant to swap at all, even if swap was configured. This means the LRU balancing code didn't come into play as often as it does now, and mostly in high pressure situations where pronounced swap activity wouldn't be as surprising.
-
For historic reasons, shrink_lruvec() loops on the scan targets of all LRU lists except the active anon one, meaning it would bail if the only remaining pages to scan were active anon - even if there were a lot of them.
Before the series starting with commit ccc5dc67340c ("mm/vmscan: make active/inactive ratio as 1:1 for anon lru"), most anon pages would live on the active LRU; the inactive one would contain only a handful of preselected reclaim candidates. After the series, anon gets aged similarly to file, and the inactive list is the default for new anon pages as well, making it often the much bigger list.
As a result, the VM is now more likely to actually finish large anon targets than before.
Change the code such that only one SWAP_CLUSTER_MAX-sized nudge toward the larger LRU lists is made before bailing out on a met reclaim goal.
This fixes the extreme overreclaim problem.
Fairness is more subtle and harder to evaluate. No obvious misbehavior was observed on the test workload, in any case. Conceptually, fairness should primarily be a cumulative effect from regular, lower priority scans. Once the VM is in trouble and needs to escalate scan targets to make forward progress, fairness needs to take a backseat. This is also acknowledged by the myriad exceptions in get_scan_count(). This patch makes fairness decrease gradually, as it keeps fairness work static over increasing priority levels with growing scan targets. This should make more sense - although we may have to re-visit the exact values.
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Johannes Weiner [email protected] Reviewed-by: Rik van Riel [email protected] Acked-by: Mel Gorman [email protected] Cc: Hugh Dickins [email protected] Cc: Joonsoo Kim [email protected] Cc: [email protected] Signed-off-by: Andrew Morton [email protected] Signed-off-by: Alexander Winkowski [email protected]
Add a post about my first car
To be honest, this post really needs review, but I don't have time for that. A friend of mine is buying his first car and I want to share my experience.
This is everything I can give right now, hope it's good enough.
HTMLMediaElement's related error have now the initial message if it exists
I was very shamefully not aware that MediaError
s as emitted by
HTMLMediaElement could have a message
property describing the actual
problem.
For my defense, this was not always the case for MediaErrors (I found some w3c and chrome links to prove it!). Yet it apparently is since 2017, so my defense is still pretty weak.
Relying on those could definitely have saved us many hours of debugging over the years, where we were trying to find which segment of which type provoked a MEDIA_ERR_DECODE and why.
Anyway, I prefer not to think to much about it, here it is, and now it's
available: the corresponding error message will actually be the message
of the corresponding RxPlayer
's MediaError
's message (yes, both the
native browser error and the RxPlayer supplementary layer have the
exact same name, and no, it cannot be a source of confusion at all, why
would you say that?).
Implement SymBool (#92149)
We have known for a while that we should in principle support SymBool as a separate concept from SymInt and SymFloat ( in particular, every distinct numeric type should get its own API). However, recent work with unbacked SymInts in, e.g., pytorch/pytorch#90985 have made this a priority to implement. The essential problem is that our logic for computing the contiguity of tensors performs branches on the passed in input sizes, and this causes us to require guards when constructing tensors from unbacked SymInts. Morally, this should not be a big deal because, we only really care about the regular (non-channels-last) contiguity of the tensor, which should be guaranteed since most people aren't calling empty_strided
on the tensor, however, because we store a bool (not a SymBool, prior to this PR it doesn't exist) on TensorImpl, we are forced to immediately compute these values, even if the value ends up not being used at all. In particular, even when a user allocates a contiguous tensor, we still must compute channels-last contiguity (as some contiguous tensors are also channels-last contiguous, but others are not.)
This PR implements SymBool, and makes TensorImpl use SymBool to store the contiguity information in ExtraMeta. There are a number of knock on effects, which I now discuss below.
- I introduce a new C++ type SymBool, analogous to SymInt and SymFloat. This type supports logical and, logical or and logical negation. I support the bitwise operations on this class (but not the conventional logic operators) to make it clear that logical operations on SymBool are NOT short-circuiting. I also, for now, do NOT support implicit conversion of SymBool to bool (creating a guard in this case). This does matter too much in practice, as in this PR I did not modify the equality operations (e.g.,
==
on SymInt) to return SymBool, so all preexisting implicit guards did not need to be changed. I also introduced symbolic comparison functionssym_eq
, etc. on SymInt to make it possible to create SymBool. The current implementation of comparison functions makes it unfortunately easy to accidentally introduce guards when you do not mean to (as boths0 == s1
ands0.sym_eq(s1)
are valid spellings of equality operation); in the short term, I intend to prevent excess guarding in this situation by unit testing; in the long term making the equality operators return SymBool is probably the correct fix. I modify TensorImpl to store SymBool for theThis appears to cause performance problems, so I am leaving this to an update PR.is_contiguous
fields and friends onExtraMeta
. In practice, this essentially meant reverting most of the changes from pytorch/pytorch#85936 . In particular, the fields on ExtraMeta are no longer strongly typed; at the time I was particularly concerned about the giant lambda I was using as the setter getting a desynchronized argument order, but now that I have individual setters for each field the only "big list" of boolean arguments is in the constructor of ExtraMeta, which seems like an acceptable risk. The semantics of TensorImpl are now that we guard only when you actually attempt to access the contiguity of the tensor via, e.g.,is_contiguous
. By in large, the contiguity calculation in the implementations now needs to be duplicated (as the boolean version can short circuit, but the SymBool version cannot); you should carefully review the duplicate new implementations. I typically use theidentity
template to disambiguate which version of the function I need, and rely on overloading to allow for implementation sharing. The changes to thecompute_
functions are particularly interesting; for most of the functions, I preserved their original non-symbolic implementation, and then introduce a new symbolic implementation that is branch-less (making use of our new SymBool operations). However,compute_non_overlapping_and_dense
is special, see next bullet.- (Update: the Python side pieces for this are still in this PR, but they are not wired up until later PRs.) While the contiguity calculations are relatively easy to write in a branch-free way,
compute_non_overlapping_and_dense
is not: it involves a sort on the strides. While in principle we can still make it go through by using a data oblivious sorting network, this seems like too much complication for a field that is likely never used (because typically, it will be obvious that a tensor is non overlapping and dense, because the tensor is contiguous.) So we take a different approach: instead of trying to trace through the logic computation of non-overlapping and dense, we instead introduce a new opaque operator IsNonOverlappingAndDenseIndicator which represents all of the compute that would have been done here. This function returns an integer 0 ifis_non_overlapping_and_dense
would have returnedFalse
, and an integer 1 otherwise, for technical reasons (Sympy does not easily allow defining custom functions that return booleans). The function itself only knows how to evaluate itself if all of its arguments are integers; otherwise it is left unevaluated. This means we can always guard on it (assize_hint
will always be able to evaluate through it), but otherwise its insides are left a black box. We typically do NOT expect this custom function to show up in actual boolean expressions, because we will typically shortcut it due to the tensor being contiguous. It's possible we should apply this treatment to all of the othercompute_
operations, more investigation necessary. As a technical note, because this operator takes a pair of a list of SymInts, we need to support convertingArrayRef<SymNode>
to Python, and I also unpack the pair of lists into a single list because I don't know if Sympy operations can actually validly take lists of Sympy expressions as inputs. See for example_make_node_sizes_strides
- On the Python side, we also introduce a SymBool class, and update SymNode to track bool as a valid pytype. There is some subtlety here: bool is a subclass of int, so one has to be careful about
isinstance
checks (in fact, in most cases I replacedisinstance(x, int)
withtype(x) is int
for expressly this reason.) Additionally, unlike, C++, I do NOT define bitwise inverse on SymBool, because it does not do the correct thing when run on booleans, e.g.,~True
is-2
. (For that matter, they don't do the right thing in C++ either, but at least in principle the compiler can warn you about it with-Wbool-operation
, and so the rule is simple in C++; only use logical operations if the types are statically known to be SymBool). Alas, logical negation is not overrideable, so we have to introducesym_not
which must be used in place ofnot
whenever a SymBool can turn up. To avoid confusion with__not__
which may imply thatoperators.__not__
might be acceptable to use (it isn't), our magic method is called__sym_not__
. The other bitwise operators&
and|
do the right thing with booleans and are acceptable to use. - There is some annoyance working with booleans in Sympy. Unlike int and float, booleans live in their own algebra and they support less operations than regular numbers. In particular,
sympy.expand
does not work on them. To get around this, I introducesafe_expand
which only calls expand on operations which are known to be expandable.
TODO: this PR appears to greatly regress performance of symbolic reasoning. In particular, python test/functorch/test_aotdispatch.py -k max_pool2d
performs really poorly with these changes. Need to investigate.
Signed-off-by: Edward Z. Yang [email protected] Pull Request resolved: pytorch/pytorch#92149 Approved by: https://github.com/albanD, https://github.com/Skylion007
The Chronicles of Narnia
Four kids Peter,Susan,Edmond and Lucy travel through a wardrobe to the land of Narnia. Narnia is a fantasy world of magic with mythical beasts and talking animals.While exploring the land of narnia Lucy found Mr.Tumnus the two legged stag ,and she followed it, down a narrow path .She and Mr.Tumnus became friends and he offered a cup of coffee to Lucy in his small hut.It was time for Lucy to return to her family and so she bid good bye to Mr.Tumnus and while leaving Mr.Tumnus told that it is quite difficult to find the route back as it was already dark.He told her to see the trees while returning back and said that the first tree with two digits number will help her find the way and the way to go back to her home is the sum of digits of the tree and that numbered way will lead her to the tree next to the wardrobe where she can find the others.Lucy was already confused, so pls help her in finding the route to her home....
Add files via upload
Hi there!😎 I am writing to express my interest in the role at African Leadership Group. As a 32-year-old Ruby on Rails developer, I am confident that I have the skills and experience needed to make a valuable contribution to your team.
I am also a friendly and outgoing individual, who is always eager to collaborate with others and find new ways to bring my ideas to life. I believe that my positive attitude, combined with my technical expertise, would make me a great fit for the role.
Reading about the vision and mission of African Leadership Group and ALX has inspired me and I am excited to be a part of the team that is working towards developing the skills for the fourth industrial revolution and helping Africa compete in the digital world. The fact that ALX has signed an agreement to acquire Silicon Valley based Holberton Inc. is evidence of its commitment to providing the best technology education and talent to the world.
I am especially interested in the role as it will allow me to be directly involved in the student's journey, assist the team in tracking copyright violations, and help design and implement automations. My great communication skills, ability to manage projects independently, and experience with tools like Slack, Google Drive, Git and GitHub would allow me to thrive in this role.
My passion for humanity, desire to create lasting impact, and ability to think big, combined with my disciplined approach, make me a strong candidate for this role. I also enjoy educating others
Gen 8 Battle Factory: Remove Darmanitan-Galar's Choice Band set (#9354)
- Gen 8 Battle Factory: Remove Band set from Ubers Darmanitan-Galar
Credentials: https://cdn.discordapp.com/attachments/1042959218208157696/1067534457160089731/image.png (i am "lost wind's elegy")
Darm-G's firepower is just fine with scarf; there aren't many (if any?) relevant 1hkos or 2hkos you miss out on compared to band. The only one I can think of is missing out on the OHKO vs Sp. Def Necrozma Dusk Mane, and nobody's leaving their NDM in anyway + you probably have like 12 other things to deal with it.
Without scarf, however, you miss out on really good source of offensive checking and revenge killing potential. Scarf outspeeds huge threats like non scarf Yveltal, Eternatus, Calyrex-Shadow, etc.
What sparks had to say about band darm in proper SS Ubers: sparks — Today at 1:53 PM not really but with band building needs to be more focused cos the speed over the 90s and etern etc is insane with scarf
sparks — Today at 1:54 PM while with band you're very much focused on "how to take out ndm and capitalize while not being weak to ho"
As a secondary factor, it would make Ubers in BF a lot better. Currently you have to not only win the coinflip of what move Darm clicks but also the coinflip of what item it is. Both of these are more or less up to random chance.
- Update data/mods/gen8/factory-sets.json
Co-authored-by: Kris Johnson [email protected]
Make frog send events about itself
which means we can now see it's own errors in itself
So the first part of all this is the events.
The way that works is that it's a GenServer
, so basically at the start
of the thing you start_link
, do the thing, and at the end of it you
finalize/send/cleanup (which stops that instance)
Then there's the recording itself
for regular old http requests it's rather trivial
we just override the call
function of the endpoint, and then we wrap
the call to it's parent with a try rescue
block which also lets us
easily catch errors and shove them in the event that we just started.
We also shove the pid of the event into the connection so that we can
access it from any other functions down the line (e.g. the bit where we
set the action in the routing pipeline once we already know what's gonna
be handling this)
The websocket stuff is more ... interesting
There's not really a way to wrap a function that would do the thing, so
we have to resort to more fun ways of doing
luckily for us the Phoenix LiveView framework does wrap some of the
processing stuff before it hits our code in their own
:telemetry.span
s, so we can hook into the :start
and :stop
events
of those. Also because for whatever reason the same code is triggered
during a regular http request, we need to ignore those (we do this by
looking at the transport_pid in the socket, which is null if we're not
connected to a websocket)
Now we then create our event when we get a :start
event from :telemetry
and finalize/send/cleanup the event when we get a :stop
. We assume
that each socket (based on the id) can only have one thing running at a
time (which is a fair assumption given that it's a GenServer and it can
only handle one incomming message/data transformation at a time, so
things shouldn't interact), we then shove the event pid in a hash based
on the socket id and retreive it at the end.
however errors might happen and the result of that is that 1) we won't
get a :stop
event, and 2) we can't just wrap the execution in a try.
Luckily for us, elixir provides a way to monitor a process and we can
find out if it got killed and why. So that is what we do: we monitor the
socket.root_pid (which is the thing that dies if you trigger an error in
your application code) when we get a message that this process has been
killed, we fetch the socked id tied to said pid (we have a map for this
in our GenServer), and thus we get the event, and thus we can shove the
error into the event, and then finalize/send/cleanup the event.
Then there's the sketchy part about monitoring the queries. So it's
pretty easy to hook into the [:appname, :repo, :query]
events,
annoyingly they lack any useful context, so the matching of the queries
to actual events is a bit of a leap of faith. Essentially, when we
create our event, we setup a monitor for the :query
events, and pass
it the event pid in the options. We then shove the query into that event
(and hope that it's actually coming from that event), and then before
sending the event we stop monitoring the :query
events. I am
absolutely certain that this won't actually work properly when the
application is being hit by parallel requests that happen at the
"sameish" time and both sockets are processed in parallel. However it' s
probably good enough for the initial version.
Alternatives would be to force the user call a different function whenever they want to query it that would wrap the query in a context that contains the socket.id/event_pid, which would let us to definitely assign it to the propper event, however this approach feels ugly both from an api perspective (you now have to remember to call this other function and pass it this argument) and from implementation perspective (you have to write those funcitons somewhere).
oh my god big push. managed to get pyDELFI working from dataloading to validation on one environment. specified the exact configuration in setup.cfg. Lots of ugly hacky code and even uglier documentation, but it works
Fixed the sucky part that ryan screwed up isaiahs part and I am so sorry. Isaiah if you see this, this is a formal apology for the harm I have done to the singleLetter mode on Risaiah.com. I truly apologize. I hope you are proud of my small contribution. Love, Ryan Merrick
"9:20am. Today morning I need to take a bath. First, any mail? Nope.
https://github.com/enso-org/enso
Import any library from Enso, Java, JavaScript, R, or Python, and use functions, callbacks, and data types without any wrappers. Enso uses GraalVM to compile them to the same instruction set with a unified memory model.
This is pretty impressive.
During the night I started wondering about whether it is some C++ abomination, but I see they use Rust and Scala primarily. This would be a good place to work. The repo has 6.2k stars.
9:25am. Not that I am going to get any of this. It feels like I have the skills, but that I am cursed at the same time.
UPMEM and Tenstorrent which should be really interested in a language like Spiral are treating me like shit on the side of a road. That place I applied to yesterday would no doubt be asking me to work on some lowly paid C++ abomination of a compiler even if they don't just toss my resume into the trash outright.
This is incredibly painful.
I just wanted to get stronger through the pursuit of the Singularity. But instead all I am getting is harassment. Remember that shit 2.5k/month offer that I got from a person whose name I said I would not mention. What was that if not harassment? Just what kind of career future would studying a language like Julia have? It would have been a complete waste of time.
In a better world, there would be companies offering chips to consumers. And they would be interested in my language. And people like 'that' guy would have offered me a fair salary of at least 5k a month. And he wouldn't start the negotiation off by emotionally whipsawing me with an initial 25k month offer. After he did that I completely lost sight of my plan. I actually completely forgot in the later correspondences that I thought he was lowballing me. That is how much I was insulted when he didn't go from 25k to something like 3-4. I was crazy!
If I had webdev skills in the worst case I could freelance for cheap.
9:30am. I can't imagine anyone who ever matters being impressed by my abilities. Branimir said he was, Kit Eason said as much in the F# thread. But what is the point of them being impressed? I need people who would give me paid work to be impressed. The people who are tossing my resume in the trash are the ones that matter.
Forget that shit tier Tenstorrent chip. The hardware will be here in 2023,2024,2025,2026 and so on...
9:35am. I am being unfair to B, as he did say he would send some paid work my way. I do owe him even if nothing more comes from this. His advice and demo pushed me on the correct path, which is webdev. It always has been that. I'll take my gains, and cut my losses and focus on the money and recognition from here on out. I should have done this over 20 years ago instead of going to high school. But it is never too late to cut a loss.
9:40am. I think that a full year of studying web technologies would be enough to completely transform my hopeless situation.
9:45am. If I hook something in 2023, so be it. There were a lot of layoffs from big companies so the competition is harder than usual. But otherwise, my goal for this year should be to build myself up to where I can take pro work easily.
A lot of programming projects take a long time, but a lot of them don't either. Those kind of webdev projects I can freelance for. This kind of work is something I am guessing Branimir will send my way anyway.
9:50am. Let me read some manga first. Rebuild World, Game of Champions and Neto Chara are out.
I will take a bath after that. Then I am going to start studying the SAFE stack examples.
10:05am. Stop reading HN. Read that manga and take a bath. Then study the example from yesterday more.
I have to admit, the pace of emails is a lot slower than I thought it would be. It is really taking the companies a while to get back to me, even if they are rejects.
11:45am. Done with the bath. It is breakfast time. If I do not get anytihng by the end of the week, I'll play further cards. I'll ask on /g/ for advice.
12:15pm. Let me do the chores. I want the easy life for a while. Heaven's Key? Nobody cares about it. That single patron is not enough to support me.
It is painful, isn't it? Living without power. Everything you speak, everything you write are just meaningless phrases and words.
3:05pm. I had to do work around the house. Phew. I only now finished putting away the wood in the shed.
3:10pm. Finished the apple. Let me go back to studying the example.
F# excels at building efficient, scalable and robust web solutions. Web programming is based around receiving a single HTTP request and replying with a result, which maps very well to a stateless, functional approach.
3:15pm. https://learn.microsoft.com/en-us/dotnet/fsharp/scenarios/web-development
3:45pm. Let me finally start. I've had to take a break.
I am go this route. If Kristof gives me motivation to contribute to OSS, I'll do that. But otherwise, if I am just contiburing by resolving random issues, that is not much a plan for me. Instead what I should do is study web dev in all its forms.
https://safe-stack.github.io/docs/learning/
There are lot of examples here.
But I do not really understand how all this is put together. It still feels like a mashup. I do not understand that backend, and the front end at the bigger level.
If I can get good at understanding web development in general, not just in F#, but in C# and Typescript as well, then I will be ready to go pro. I'll do a bit of freelancing to confirm my skills, and then 'fortify' my resume. Everybody wants exp up front. I could have done that right now, but I do not want the stress of going into battle uprepared. Representing myself as an ultra senior Googler is too much, but a year or two at some startup would be a great resume booster. Really, it is a pity it has come to this, but I have no choice.
Knowing ZeroMQ, Rx, and Hopac is not enough. I need to good knowledge of web libraries and frameworks as well. After I have that - then I will be ready.
In addition to .NET and JS, I should study Python as well.
https://www.youtube.com/results?search_query=webdev+f%23
I need something to motivate me. I do not know where to start studying. I kind of want something with Stable Diffusion, but how could I connect my F# app to a Python one?
The SAFE stack is overwhelming to start things off. Just what do I need to be a competent webdev?
https://www.youtube.com/watch?v=CeMq9Fg-HME Introduction to F# web programming with WebSharper by Adam Granicz
https://youtu.be/CeMq9Fg-HME?t=263
This is pretty awesome.
https://www.compositional-it.com/news-blog/calling-python-from-f-with-fable/
We're hiring software developers. Let me apply here.
You're someone who is looking to work alongside our existing UK-based team and are eligible to work in the UK. You're happy to work fully remotely but meet periodically in London.
I'll try applying here. I should be eligible since Croatia is in the EU.
At least two or three years of professional software development experience, but if you have more, that’s also of course fine!
What the hell. Let me apply anyway.
Salary range between £30k and £60k depending on experience
If I do not get this job, I won't be particularly regretful. Let me give it a shot.
Updated: From 1 July 2018 Croatians will no longer be subject to restrictions on their access to the UK labour market. Use this guidance if you are a Croatian national and want to apply for permission to work in the UK or if you are employing a Croatian national.
Yep, I do not need a visa.
4:10pm. I sent them the resume in the message.
https://www.compositional-it.com/news-blog/calling-python-from-f-with-fable/
For those who aren't familiar, Fable is a tool that takes F# and compiles it to other languages. Up until recently that only included Javascript. This is how we write our client-side app code at CIT - Fable is the 'F' in SAFE Stack!
With the latest release, target languages have been expanded to include Python, Rust and Dart!
I hadn't known about this! This is pretty cool. How does it work?
I did have a quick explore of the REPL after seeing the tweet announcing the alpha, but my eye was really caught by a comment underneath asking if it would be possible to import Python libraries to F#, and the answer that it should work just the same as JS.
Hmmm....
4:10pm. Forget this for now.
Let me go to the websharper tutorial.
https://youtu.be/CeMq9Fg-HME?t=379
This setup part is the most confusing part of the whole thing for me. It is impossible to understand.
https://www.youtube.com/results?search_query=programming+freelance+jobs
There is so much of this shit here.
https://youtu.be/Vc5-h0obYkk?t=14 The Hard Truth about Upwork: 5 Things I Wish I knew before starting Freelancing
Shiiit....700k?
https://youtu.be/Vc5-h0obYkk?t=47
There is a misconception from new freelancer than to land your first job is to bid the lowest rate.
https://youtu.be/Vc5-h0obYkk?t=77
Great portfolios win jobs.
https://youtu.be/Vc5-h0obYkk?t=109
I wanted to work with them because they both have amazing portfolios.
4:35pm. https://youtu.be/Otr3Up8wRn0 How to ACTUALLY Get an Entry Level Programming Job
https://youtu.be/Otr3Up8wRn0?t=352
Create a portfolio
Yeah, this is what I need. I need a portfolio.
https://youtu.be/Otr3Up8wRn0?t=513
This is not bad advice. You know all that stuff in my resume. Why don't I do them on the web? Yeah, sure it would be a lot of work, but it would teach me all the necessary skills.
Why not make a simple online poker site? Something like that with F#.
It is far better than reading tutorials at random.
Something simple, and not too fancy. How about playing Leduc against a CFR trained agent?
4:50pm. I really had plans for a Staged Programming In Spiral youtube videos.
I did a lot of ML over the years, but a lot of it is buried in the Github commits.
So why not make apps that I can show to other people. I can show my RL stuff for sure. I can make SD related sites.
But making a website that can host SD would be expensive. I can only afford gradient notebooks due to how cheap they are. Hosting SD...
5pm. Let me go simple. Right now I can't host SD even on my own computer as it is so hungry.
https://fsharp.org/guides/web/#books
There is too much stuff here.
5:05pm. I could study books and examples for 3 months and not learn anything. But consider this:
Suppose I just want a Leduc CFR Poker web app:
- I'll have to implement both the frontend and the backend from scratch.
- I'll have to handle user registration and database access on my own.
- I'll want to do some charting based on that data.
You know that GVGAI port that I did. It would look great on my portfolio if I could just show it as an app, though it is a bit extreme.
5:05pm. Oh right. Also, looking forward, if I am doing things in Python, I'll finally have to figure out once and for all how to do good IPC communication. Doing it over the network card would be fine. I just need to figure out how.
Fable now compiles to Python so it should be fine.
5:10pm. Web apps aren't that different from ordinary ones. I just need to overcome my fear.
Saying I want to study some framework or the other is the wrong idea. I should think of an app - and then do a web version of it. A few projects like that, and I'll actually have the option of freelancing. Just having Spiral on my resume is not that great.
5:15pm. There is something I should absolutely figure out during this study session. How do I make a paid web service? How do I make something I could charge other people.
If I could have those, I could promote them through Youtube videos.
5:40pm. Done with lunch.
https://www.youtube.com/watch?v=RyRo8eVsrlU STOP Learning These Programming Languages (for Beginners)
https://www.youtube.com/watch?v=Q0prVO3DCtU 2022 Backend Developer Roadmap | Begin your journey as a backend developer.
Let me watch these two, and I will call it a day. Now that I've established a goal, I can make my way forward with it.
https://youtu.be/RyRo8eVsrlU?t=243
Avoid Swift and Kotlin.
5:45pm. Shit video recommending JS and Python, while saying to avoid C# because it is hard to set up. Let me watch the other one.
https://youtu.be/Q0prVO3DCtU?t=343
I already know all this basic shit.
https://youtu.be/Q0prVO3DCtU?t=429
Actually, this is good advice, to know the difference between batteries and no-batteries frameworks.
https://youtu.be/Q0prVO3DCtU?t=475
Yeah, this is...I need both. Forget being backend or frontend. Focus on making webapps wholesale. That is the way to go.
That is the thing I got wrong all this while. The thing I will be doing here, last in the order is the thing I should have done first.
Making a webapp, setting a database for it, hosting it up on the cloud...
That is a great tutorial. Just running the samples gives me nothing.
https://youtu.be/Q0prVO3DCtU?t=525
I wonder if I could have done the Spiral language server using REST APIs?
https://youtu.be/Q0prVO3DCtU?t=551
Oh, this is on containers.
https://youtu.be/Q0prVO3DCtU?t=620
So Kubernetes is for deployment?
6:05pm. Ok, I get it. This was a good guide. I slowly start tomorrow. I'll start with...
https://safe-stack.github.io/docs/intro/
Well, I'll start with checking out the Saturn samples and the Elmish samples. I do not know what all these are for to be honest or how they fit in. But after that I'll try to use the SAFE stack. Personally, I like going at it bare bones, but maybe mixing it up and starting from the top is not a bad thing either.
It has been a long time since I tried branching out like this. It is a novel thing for me. By now I am familiar with desktop apps. But if I want to become a web guy, I should make web apps.
This is absolutely common sensical, but I've been missing it.
It is not about knowing HTML, CSS, or JS. Websites are not websites. I need to stop thinking about them like that. What I am working on are applications. I need to get rid of my naivete and go forward like this.
6:10pm. If I freelanced now, I could fail. I do not have the skills to be a webdev. But in truth, such skills are not hard to get. Compared to the average programmer, my foundational knowledge is incomparable.
All I need is a goal, through the pursuit the knowledge and the understanding that I need will come to me. I've forgotten about my pride, as deep RL wrecked me so hard. But I am supposed to be really good at programming.
Master webdev! For the rest of the year, I should be making web applications!
Once I do that, I'll have the portfolio that I need to land me anything!
Plus it will give me an excuse to try some of my latest RL ideas.
I need to look forward to it. I need to lock it in my mind and hone on to it.
7pm. I'll close here, but let me rant just a bit more. It has been a while since I've been inspired like this.
In 2020 I studied webdev sure, but it was very unfocued. My goal was vague, and I only wanted to get good at 'concurrency' whatever that meant for the sake of doing the editor support for Spiral. And I actually succeeded at this in the end.
But I felt tilted by ASP.NET, and had the impression that I never really understood it properly.
And now I know what was wrong! I never had a concrete goal for an app what I wanted to do.
So I've been focusing on the individual pieces of ASP.NET and so on, but missed the forest for the trees. I said it would take me a year, but when you have a concrete vision guiding you, things tend to go a lot quicker. I want to say, that I wasted the first 6 months of 2020, and in a way I did, but I also gained for it.
In February 2023, I will make up for not figuring out those web frameworks properly and make up for it by making some web apps.
I'll make this my focus. Hell, on .NET right now, making web apps is a better idea than desktop apps. With F# having hot reload now, my experience of developing frontends should be incomparable even to Python's Kivy. There is really not much reason to do a desktop app these days. Imagine if I were doing an UI in Python. Just what am I supposed to use? Gtk? That ancient piece of crap? Forget it!
I haven't dived into it properly, but my hunch is that F# should be really good for doing web dev right now. I guess I am going to be finding that out in the nearby future."
fine
fuck you bier
also removes the foldable pkm and the atgm from mujahideen alongside this is fixes some of the issues that were present in the city
Add files via upload
The above Scratch project is the "Escape the Island" Adventure Game. The purpose of this game is to escape the Sea before running before Elliot is eaten by Sharky. Sharky is the main villain who ate Elliot's diver friend, Ellie. Elliot can only escape (through the red line at the right of the screen) if he has enough Survival Resources (Food). Elliot must have 200 Resources to leave the sea and must avoid all the wild sea creatures. He will do all of this while monitoring his LIFE bar on the top right.
The user moves Elliot using the mouse pointer/arrow keys! I made this from scratch! All pun intended! Enjoy.
[MIRROR] Fixes critical plane masters improperly not being readded in show_to [MDB IGNORE] (#19060)
Fixes critical plane masters improperly not being readded in show_to (#72604)
Adds support for pulling z offset context from an atom's plane
This is needed to fix paper bins, since the object we plane set there isn't actually on a z level. Useful elsewhere too!
Fixes compiler errors that came from asserting that plane spokesmen had a plane var
Ensures lighting backdrops ALWAYS exist for each lighting plane.
They can't float becuase we can see more then one plane at once yaknow?
Fixes parallax going to shit if a mob moved zs without having a client
Issue lies with how is_outside_bounds just blocked any plane readding It's possible for a client to not be connected during z moves, so we need to account for them rejoining in show_to, instead of just blocking any of our edge cases.
Fixing this involved having parallax override blocks for show_plane and anything with the right critical flags ensuring mobs have JUST the right PMs and relays. It's duped logic but I'm unsure of how else to handle it and frankly this stuff is just kinda depressing. Might refactor later
show_to can be called twice successfully with no hide_from call.
Ensures no runtimes off the registers from this
Fixes #72543 Fixes lighting looking batshit on multiz. None reported this I cry into the night.
🆑 fix: Fixes parallax showing up ABOVE the game if you moved z levels while disconnected /🆑
Co-authored-by: LemonInTheDark [email protected] Co-authored-by: Time-Green [email protected]
Another wee commit for the end of 5. Just snapped the girl ive been seeing about today and she was with her family for dinner. Not ideal but they know i exist now so thats maybe a plus. No one will ever read this but if you do, hello, welcome to my github diary
This is that completed version, but when i found new bug after first try of debbuging i started thinking about why i hate myself that much that i programmed this thing :(
Move Go binaries to /usr/bin
(#287)
Issue aws-controllers-k8s/community#1640
TL;DR: Prow was mounting test-infra
code volume into $GOPATH
causing the deletion of kind
and controller-gen
binaries that are
installed in $GOPATH/bin
Yesterday, i embarked on a wild 7 hour journey to fix a bug that had
been causing prow jobs to fail with the error message "Kind not found".
The bug was introduced after a recent update that bumped the Go compiler
to 1.19
. I found the investigation to this bug to be both interesting
and frustrating, so i wanted to share some key takeways with the
community:
The patch that introduced Go 1.19
also modified a go get
command
into a go install
command (because of this deprecation notice:
https://go.dev/doc/go-get-install-deprecation), which technically should
not have caused any issues. I tried restarting the e2e jobs in various
repositories to figure out whether the error was only related to one
controller or code-generator only, but all the repositories that execute
e2e tests were affected.
First, i started suspecting that thee go install
command was not
working properly or had not been used correctly. I experiemented with it
locally, using various combinations of GOPATH
and GOBIN
, however, i
learned that the Go compiler is sophisticated enough to always put
downloaded binaries under GOBIN
or GOPATH/bin
. I then wondered if
the PATH
variable didn't include the GOBIN
path, which is supposed
to contain the kind
and controller-gen
binaries. I spent some time
reading the Dockerfiles and testing scripts, but they all set GOPATH
and always included a GOBIN
in the PATH
variable.
I also suspected that the issue may be related to the containers, but experimentations with "Go containers" and environement variables manipulation did not yield any results. I also tried building minimal DOckerfiles to try to reproduce the issue, but that also did not give any clues.
At this point, I suspected the container image it self. I build an image
locally and ran a shell inside it, but everythin g looked fine. THe
kind
and controller-gen
binaries were present and the PATH
and
GOPATH
variables were properly set. I then suspect that we may have a
corrupted published image in ECR, but pulling the image and running the
same commands revealed that the image was fine.
I then took a break from experimenting with Go/Docker/Envvars and tried
to spin some prowjobs with v0.0.10
and v0.0.9
(the last two versions
that were still using Go 1.17) of the integration tests image. This
confirmed that the issue was only with v0.0.11
.
So, I decided to investigate further and logged in the Prow production
cluster. My first attempt was to restart a job and try to "exec bash" in
it, but the jobs failed to quickly for that to be possible. I then ran
a custom prow job (with v0.0.11
integration image tag) but with a
sleep 10000
command. When looking inside, there were no kind
or
controller-gen
binaries, i searched the entire file system, they were
nowhere to be found, grep, find, name it all.. nada. I then execute a
go install sigs.k8s.io/[email protected]"
, and bam, it worked, the binary
was here again. The same thing happened with controller-gen. So for now
we know that we ship images with all the necessary binaries and when a
prow job starts, they disapear...
To isolate the problem further, i created a ProwJob
resource and
copied the Pod
(spawned by Prow) spec and metadata into a different
file. Running the same commands used previously proved that indeed
something is wrong with the pod spec, causing the binaries to disapear.
And when a file disppears it reminds me of my college years, where i
epically failed to use symbolic links, which is a bit similar (at least
from a UX point) to volume mounts in the Docker world.
So, i decided to check the volume mounts, and to my not-surprise, I found this:
- mountPath: /home/prow/go
name: code
Yes... Prow is mounting the test-infra source code into GOPATH
(/home/prow/go
in prow jobs) ! Which is the parent directory of
GOBIN
where we install the binaries. And it all makes sense now.
Mounting code into this directory overrides the existing volume and
deletes everything existing in GOPATH
including the binaries we
installed before.
The Dockerfile was missing the mv
commands that puts kind
and
controller-gen
in /usr/bin
. To fix this issue, I added the missing
mv
command to the docker file and published and new integration
image v0.0.12
.
Anyways, investigating the source of the volume mount led me to the Prow
presets configurations. Presets are a set of configurations (volume
mounts, environement variables, etc...) that are used for jobs with
specific labels in their metadata. I tried to play with this in our Prow
cluster, but quickly stoped when it was a bit risky and could break
other components too. While digging into test-infra
pod-util package i
learned that the code volume is not coming from our defined presets and
is a default preset coming from Prow it self - the /home/prow/go
value
is harded-coded in prow/pod-utils/decorate/podspec.go#L54
. I'm not
sure whether we can override this value.
Anyways, for now, i'm just gonna implement a quick fix that moves the
binaries to /usr/bin
instead of leaving them inside GOBIN
. Ideally
we should either choose a new directory go GOPATH
that is different
from $HOME/go
or find a solution that will let the code and our
binaries coexist in the same place. Either of them requires a lot of
changes and can agressively break some our prow components/scripts.
@jljaco is currently workng on creating a staging cluster, which will provide us a safe environementto test and experiment with new configurations. This will allow us to try out new changes without having to woryy about potentially impacting the production environement.
Signed-off-by: Amine Hilaly [email protected]
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
hash-object: use fsck for object checks
Since c879daa237 (Make hash-object more robust against malformed objects, 2011-02-05), we've done some rudimentary checks against objects we're about to write by running them through our usual parsers for trees, commits, and tags.
These parsers catch some problems, but they are not nearly as careful as the fsck functions (which make sense; the parsers are designed to be fast and forgiving, bailing only when the input is unintelligible). We are better off doing the more thorough fsck checks when writing objects. Doing so at write time is much better than writing garbage only to find out later (after building more history atop it!) that fsck complains about it, or hosts with transfer.fsckObjects reject it.
This is obviously going to be a user-visible behavior change, and the test changes earlier in this series show the scope of the impact. But I'd argue that this is OK:
-
the documentation for hash-object is already vague about which checks we might do, saying that --literally will allow "any garbage[...] which might not otherwise pass standard object parsing or git-fsck checks". So we are already covered under the documented behavior.
-
users don't generally run hash-object anyway. There are a lot of spots in the tests that needed to be updated because creating garbage objects is something that Git's tests disproportionately do.
-
it's hard to imagine anyone thinking the new behavior is worse. Any object we reject would be a potential problem down the road for the user. And if they really want to create garbage, --literally is already the escape hatch they need.
Note that the change here is actually in index_mem(), which handles the HASH_FORMAT_CHECK flag passed by hash-object. That flag is also used by "git-replace --edit" to sanity-check the result. Covering that with more thorough checks likewise seems like a good thing.
Besides being more thorough, there are a few other bonuses:
-
we get rid of some questionable stack allocations of object structs. These don't seem to currently cause any problems in practice, but they subtly violate some of the assumptions made by the rest of the code (e.g., the "struct commit" we put on the stack and zero-initialize will not have a proper index from alloc_comit_index().
-
likewise, those parsed object structs are the source of some small memory leaks
-
the resulting messages are much better. For example:
[before] $ echo 'tree 123' | git hash-object -t commit --stdin error: bogus commit object 0000000000000000000000000000000000000000 fatal: corrupt commit
[after] $ echo 'tree 123' | git.compile hash-object -t commit --stdin error: object fails fsck: badTreeSha1: invalid 'tree' line format - bad sha1 fatal: refusing to create malformed object
Signed-off-by: Jeff King [email protected] Signed-off-by: Junio C Hamano [email protected]
lots of shit just to add environmental variables
- redid menus to get around microsofts stupid fucking limit.
- settings is now its own menu.
- restart explorer, file types, sfc, and hidden files moved to a new sub menu under tools.
- added environmental variables in the new "scripts & tools" submenu so you can edit your path easily.
- clicking the "system" option in settings now brings you to about instead of display.
- each time you click regedit it now opens a new window to make multitasking and editing easier.
this is DAHOMEY bitch!!! we clown in this muthafucka better take yo sensitive ass back to GHANA