You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
there were a lot of events recorded by gharchive.org of which 2,344,527 were push events containing 3,536,906 commit messages that amount to 291,492,839 characters filtered with words.py@e23d022007... to these 45 messages:
Gun kits don't need cable coil or tools, halved crafting time (#78419)
About The Pull Request
Crafting R&D guns from gun kits no longer requires tools or cable coil.
The decloner and energy crossbow still need reagents.
Halved R&D gun crafting time. 20->10 seconds.
Why It's Good For The Game
These changes were made a long, long while ago and honestly while I
understand gun kits I don't understand why it was made So. Annoying. To
make the fucking guns once you got everything ready. It makes it a total
annoyance. You spent 40 minutes getting all the tech for it, you
shouldn't have to also get tools and cables and wait 20 seconds standing
still.
Anyone who has played ingame like any time after that change can attest
how underused any R&D gun is now. X-ray laser guns still DESTROY blobs
but people don't even THINK about them because of the dumb annoying
recipe (alongside RnD being a pain now).
Simply put this just. Makes life easier for security officers. And
reduces tool dependency.
Changelog
🆑
qol: Crafting R&D guns from gun kits no longer requires tools or cable
coil. The decloner and energy crossbow still need reagents.
qol: Halved R&D gun crafting time. 20->10 seconds.
/🆑
Rounded supermatter delamination times to 5 seconds, restored old mood messages (#78335)
About The Pull Request
Makes the supermatter delaminate in 15 seconds instead of 13 and 5
seconds instead of 3 if a sliver has been taken from it, mainly to
please perfectionists (me and some others who commented on the PR) as
well as giving people at least a chance to escape delam round removal.
I don't like it when flavorful text is replaced by bland and
not-as-funny alternatives.
Also, how the hell is it gamey for staff to know the engineers are in
charge of the power?
It's honestly more gamey for them to know what a resonance cascade or
supermatter delamination is, so I'd say you've done the opposite of what
the goal was with the message changes on top of making them less fun in
general. I disapprove.
Oh, yeah, and the SM now reports the times correctly due to it reporting
them every 5 seconds, meaning people would only see the 10 second
announcement. Now there is going to be a 15 second announcement as well.
Why It's Good For The Game
Watering down messages to be bland is just, like, less fun, ya know?
I didn't see a single person in support of the message changes apart
from the PR author, everyone else was just complaining about them,
including myself.
Also, several people mentioned the fact it could just be 15 instead of
13 for a nice round number, including myself. I also made the sliver
delamination time 5 seconds instead of 3 seconds because you pretty much
can't get out in time, especially if the game is laggy. 3 - 5 people
being round removed because of one traitor objective with no chance to
escape it is just bad gameplay.
Oh, and, bugfix good, I suppose.
Changelog
🆑
balance: Supermatter now takes 15 seconds to delaminate normally and 5
if a sliver has been taken from it. Gives a little more time to escape
in the case of the sliver and also evens out the times to please
perfectionists.
fix: Supermatter now accurately reports it's detonation time.
spellcheck: Supermatter mood descriptions have been reverted back to
their old, more flavorful selves.
/🆑
New active items!
Dusty D6, Dusty D4, Dusty D100, D11, Blood Meridian, House of Leaves
New passive items:
Lil Ari, Faded Note, Fuck That Noise!, a whole bunch of new X10 Shitposts (which I don't really count as items since they're jokes sorta)
New Boss: Despair! (WIP)
New trinkets:
Blank White Card, YES!, Floppy Disk, Plastic Key
New pickup: Toy Chests!
New consumables: Zap, Misprinted Justice (finally!), Bank Error In Your Favor, Time Wizard, Quicklove, Starlight, Pale Box, Lucky Flower
New pill effects: Free Crack, Uppers!, Downers!, Psychedelics
New grid entity: Radioactive barrel! (WIP)
New enemy: Oozer (Ashpit)! Innies (Hoard) have been fixed!
xfs: reserve less log space when recovering log intent items
Wengang Wang reports that a customer's system was running a number of
truncate operations on a filesystem with a very small log. Contention
on the reserve heads lead to other threads stalling on smaller updates
(e.g. mtime updates) long enough to result in the node being rebooted
on account of the lack of responsivenes. The node failed to recover
because log recovery of an EFI became stuck waiting for a grant of
reserve space. From Wengang's report:
"For the file deletion, log bytes are reserved basing on
xfs_mount->tr_itruncate which is:
"You see it's a permanent log reservation with two log operations (two
transactions in rolling mode). After calculation (xlog_calc_unit_res()
adds space for various log headers), the final log space needed per
transaction changes from 175488 to 180208 bytes. So the total log
space needed is 360416 bytes (180208 * 2). [That quantity] of log space
(360416 bytes) needs to be reserved for both run time inode removing
(xfs_inactive_truncate()) and EFI recover (xfs_efi_item_recover())."
In other words, runtime pre-reserves 360K of space in anticipation of
running a chain of two transactions in which each transaction gets a
180K reservation.
Now that we've allocated the transaction, we delete the bmap mapping,
log an EFI to free the space, and roll the transaction as part of
finishing the deferops chain. Rolling creates a new xfs_trans which
shares its ticket with the old transaction. Next, xfs_trans_roll calls
__xfs_trans_commit with regrant == true, which calls xlog_cil_commit
with the same regrant parameter.
xlog_cil_commit calls xfs_log_ticket_regrant, which decrements t_cnt and
subtracts t_curr_res from the reservation and write heads.
If the filesystem is fresh and the first transaction only used (say)
20K, then t_curr_res will be 160K, and we give that much reservation
back to the reservation head. Or if the file is really fragmented and
the first transaction actually uses 170K, then t_curr_res will be 10K,
and that's what we give back to the reservation.
Having done that, we're now headed into the second transaction with an
EFI and 180K of reservation. Other threads apparently consumed all the
reservation for smaller transactions, such as timestamp updates.
Now let's say the first transaction gets written to disk and we crash
without ever completing the second transaction. Now we remount the fs,
log recovery finds the unfinished EFI, and calls xfs_efi_recover to
finish the EFI. However, xfs_efi_recover starts a new tr_itruncate
tranasction, which asks for 360K log reservation. This is a lot more
than the 180K that we had reserved at the time of the crash. If the
first EFI to be recovered is also pinning the tail of the log, we will
be unable to free any space in the log, and recovery livelocks.
Wengang confirmed this:
"Now we have the second transaction which has 180208 log bytes reserved
too. The second transaction is supposed to process intents including
extent freeing. With my hacking patch, I blocked the extent freeing 5
hours. So in that 5 hours, 180208 (NOT 360416) log bytes are reserved.
"With my test case, other transactions (update timestamps) then happen.
As my hacking patch pins the journal tail, those timestamp-updating
transactions finally use up (almost) all the left available log space
(in memory in on disk). And finally the on disk (and in memory)
available log space goes down near to 180208 bytes. Those 180208 bytes
are reserved by [the] second (extent-free) transaction [in the chain]."
Wengang and I noticed that EFI recovery starts a transaction, completes
one step of the chain, and commits the transaction without completing
any other steps of the chain. Those subsequent steps are completed by
xlog_finish_defer_ops, which allocates yet another transaction to
finish the rest of the chain. That transaction gets the same tr_logres
as the head transaction, but with tr_logcount = 1 to force regranting
with every roll to avoid livelocks.
In other words, we already figured this out in commit 929b92f64048d
("xfs: xfs_defer_capture should absorb remaining transaction
reservation"), but should have applied that logic to each intent item's
recovery function. For Wengang's case, the xfs_trans_alloc call in the
EFI recovery function should only be asking for a single transaction's
worth of log reservation -- 180K, not 360K.
Quoting Wengang again:
"With log recovery, during EFI recovery, we use tr_itruncate again to
reserve two transactions that needs 360416 log bytes. Reserving 360416
bytes fails [stalls] because we now only have about 180208 available.
"Actually during the EFI recover, we only need one transaction to free
the extents just like the 2nd transaction at RUNTIME. So it only needs
to reserve 180208 rather than 360416 bytes. We have (a bit) more than
180208 available log bytes on disk, so [if we decrease the reservation
to 180K] the reservation goes and the recovery [finishes]. That is to
say: we can fix the log recover part to fix the issue. We can introduce
a new xfs_trans_res xfs_mount->tr_ext_free
"and use tr_ext_free instead of tr_itruncate in EFI recover."
However, I don't think it quite makes sense to create an entirely new
transaction reservation type to handle single-stepping during log
recovery. Instead, we should copy the transaction reservation
information in the xfs_mount, change tr_logcount to 1, and pass that
into xfs_trans_alloc. We know this won't risk changing the min log size
computation since we always ask for a fraction of the reservation for
all known transaction types.
This looks like it's been lurking in the codebase since commit
3d3c8b5222b92, which changed the xfs_trans_reserve call in
xlog_recover_process_efi to use the tr_logcount in tr_itruncate.
That changed the EFI recovery transaction from making a
non-XFS_TRANS_PERM_LOG_RES request for one transaction's worth of log
space to a XFS_TRANS_PERM_LOG_RES request for two transactions worth.
Fixes: 3d3c8b5222b92 ("xfs: refactor xfs_trans_reserve() interface")
Complements: 929b92f64048d ("xfs: xfs_defer_capture should absorb remaining transaction reservation")
Suggested-by: Wengang Wang [email protected]
Cc: Srikanth C S [email protected]
[djwong: apply the same transformation to all log intent recovery]
Signed-off-by: Darrick J. Wong [email protected]
Reviewed-by: Dave Chinner [email protected]
Been listening to some of the albums in this playlist last night and today during this session. I've felt like I'm in a creative stagnation for music writing recently, so I'm trying to go back to older songs, and try out new stuff to get my ideas reset a little bit again. These first two bands are sick, I really like the both two albums this playlist starts with 🔥 (This is much heavier than what I listen to normally, but I think it's what I've been looking for maybe? looked up 'ambient metal' the other day, and found this and other gems, because of that. I think I looked up black metal/progressive black metal to find this one though hehe)
https://www.youtube.com/watch?v=rk_BTrL6rwI&list=PL9FMwl2Y6WAdiuvoMqGrVdktDPuFts51Q&index=1https://www.youtube.com/watch?v=BHDAKPW4lgk&list=PL9FMwl2Y6WAdiuvoMqGrVdktDPuFts51Q&index=2
I'm very surprised and sad about the departure of Salvatore from Thank You Scientist; just heard today he's leaving the band. Sounds like he heavily misses his family though, so I totally feel for him in his choice to do that. I'd rather him be honest like that and make that call, than to deal with not doing what he truly wants do/has to. I'm glad I found Thank You Scientist when I did, I hope they keep going, I'd love to see them live someday!
just so we all know: my family or friends of my family do not represent all of India or Indian culture, whatsoever, especially my overseas relatives. None of this has or ever will. It's always been about individual motivations. No one can own an entire country's history or culture, and anyone who attempted to say they were right about me because they are related to or of the same origins as me are just liars whom should not be trusted with financial or political boons of any kind, and such a thing should serve a valuable lesson to future organizations. That said, and I will address this elsewhere in detail, I do understand how some corporate and political leaders could not say "no" to some of the people involved, because you feared looking rascist. Anyway, I'm sure we can all agree had you found a way to say "no" behind closed doors months or years ago, this would have ended and would never have caused you as much trouble or pain. That said, it's been extremely validating to me and my reasons to keep distance from parts of my family. The largest lesson I learned is that I should protect my direct relatives - particularly my mother and father - from getting tied into these things again as it will be taken out of their control by their overseas relatives. I'm sorry for all the trouble they have caused you, particularly political and corporate leaders. I wish the best of luck to the upcoming negotiations and hope they go as smoothly as the recent ones this weekend.
Allows you to perform revival surgery on any mob which is organic or
looks humanoid.
This means yes: Corgis, Goliaths, Syndicate mobs not those because
they spawn human corpses and delete themselves.
No: Slimes, Ghosts, General Beepsky.
Splits revival surgery into a subtype used for "mobs" and a subtype for
"mobs with brains" as the former don't have any brains to damage.
Additionally by special request, Ian can now wear an eyepatch and will
automatically put one on if he is brought back from death.
Why It's Good For The Game
Currently you revive dead pets either by creating a magical reagent out
of holy water or by buying a mining item which also brainwashes them,
however reasonably our skilled medical team should be able to put a dog
back together and now can.
When you fuck up one of the stages of Tend Wounds on a kitten and stab
it to death with your scalpel, now you can fix it.
Expands the possibilities of vetinerary roleplay.
Changelog
🆑
add: Many kinds of mobs can now be brought back to life through revival
surgery.
add: Dogs can wear eyepatches.
/🆑
[MIRROR] Added the Hippocrates bust to medbay heirlooms [MDB IGNORE] (#23881)
Added the Hippocrates bust to medbay heirlooms (#78121)
About The Pull Request
Remade from #77961 because coders dont like bloat in prs
Added the Hippocrates bust to medbay heirlooms. Paramedics don't get
one.
You can now swear the Hippocratic oath with these busts! It'll give you
pacifism but nothing else. The process is reversible.
There's a very small chance that the Hippocrates bust was once wielded
by a certain German doctor. This chance is increased for coroner
heirlooms.
Why It's Good For The Game
Added the Hippocrates bust to medbay heirlooms. Paramedics don't get
one.
I got this idea and I just couldn't get it out of my head, it's too
funny. Paramedics don't get one because they're powergamers and laugh at
the Oath, and also it doesn't feel like a paramedic thing.
You can now swear the Hippocratic oath with these busts! It'll give
you pacifism but nothing else. The process is reversible.
This is just a little fun thing you can choose to do, i think it'd be
cute to see doctors swearing the oath in medbay. Plus it's reversible
which can be even funnier depending on the occassion.
There's a very small chance that the Hippocrates bust was once wielded
by a certain German doctor. This chance is increased for coroner
heirlooms.
We DO already have precedent for references with the entrenching tool
after all. The buff isn't all that special in reality, getting a medical
hud while in your hand is... basically irrelevant for the roles that
literally spawn with a med hud? It's just for accuracy and rule of
cool's sake.
Changelog
🆑
add: Added the Hippocrates bust to medbay heirlooms. Paramedics don't
get one.
add: You can now swear the Hippocratic oath with these busts! It'll give
you pacifism but nothing else. The process is reversible.
add: There's a very small chance that the Hippocrates bust was once
wielded by a certain German doctor. This chance is increased for coroner
heirlooms.
/🆑
suckie time has ended, use standard src/ file hierarchy.
pd: Since I plan to read a bit more about linux battery life and
improvements, I'm cleaning up a bit my enviroment. I realize that, on my
older projects, I don't remember much about the WIP
features/fixes/improvs I was working on at that time (mainly lack of
explicit and descriptive code [suckless habit]). I found myself very
comfy on a modular programing enviroment in my experience with
wallust. There was
good days, but even better are comming c:
When looking up an executable via the _which function, Git GUI
imitates the execlp() strategy where the environment variable PATH
is interpreted as a list of paths in which to search.
For historical reasons, stemming from the olden times when it was
uncommon to download a lot of files from the internet into the current
directory, empty elements in this list are treated as if the current
directory had been specified.
Nowadays, of course, this treatment is highly dangerous as the current
directory often contains files that have just been downloaded and not
yet been inspected by the user. Unix/Linux users are essentially
expected to be very, very careful to simply not add empty PATH
elements, i.e. not to make use of that feature.
On Windows, however, it is quite common for PATH to contain empty
elements by mistake, e.g. as an unintended left-over entry when an
application was installed from the Windows Store and then uninstalled
manually.
While it would probably make most sense to safe-guard not only Windows
users, it seems to be common practice to ignore these empty PATH
elements only on Windows, but not on other platforms.
Sadly, this practice is followed inconsistently between different
software projects, where projects with few, if any, Windows-based
contributors tend to be less consistent or even "blissful" about it.
Here is a non-exhaustive list:
Cygwin:
It specifically "eats" empty paths when converting path lists to
POSIX: https://github.com/cygwin/cygwin/commit/753702223c7d
I.e. it follows the common practice.
PowerShell:
It specifically ignores empty paths when searching the `PATH`.
The reason for this is apparently so self-evident that it is not
even mentioned here:
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment_variables#path-information
I.e. it follows the common practice.
CMD:
Oh my, CMD. Let's just forget about it, nobody in their right
(security) mind takes CMD as inspiration. It is so unsafe by
default that we even planned on dropping `Git CMD` from Git for
Windows altogether, and only walked back on that plan when we
found a super ugly hack, just to keep Git's users secure by
default:
https://github.com/git-for-windows/MINGW-packages/commit/82172388bb51
So CMD chooses to hide behind the battle cry "Works as
Designed!" that all too often leaves users vulnerable. CMD is
probably the most prominent project whose lead you want to avoid
following in matters of security.
Win32 API (CreateProcess())
Just like CMD, `CreateProcess()` adheres to the original design
of the path lookup in the name of backward compatibility (see
https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessw
for details):
If the file name does not contain a directory path, the
system searches for the executable file in the following
sequence:
1. The directory from which the application loaded.
2. The current directory for the parent process.
[...]
I.e. the Win32 API itself chooses backwards compatibility over
users' safety.
Git LFS:
There have been not one, not two, but three security advisories
about Git LFS executing executables from the current directory by
mistake. As part of one of them, a change was introduced to stop
treating empty `PATH` elements as equivalent to `.`:
https://github.com/git-lfs/git-lfs/commit/7cd7bb0a1f0d
I.e. it follows the common practice.
Go:
Go does not follow the common practice, and you can think about
that what you want:
https://github.com/golang/go/blob/go1.19.3/src/os/exec/lp_windows.go#L114-L135
https://github.com/golang/go/blob/go1.19.3/src/path/filepath/path_windows.go#L108-L137
Git Credential Manager:
It tries to imitate Git LFS, but unfortunately misses the empty
`PATH` element handling. As of time of writing, this is in the
process of being fixed:
https://github.com/GitCredentialManager/git-credential-manager/pull/968
It prevents an entire class of Remote Code Execution exploits via
Git GUI's `Clone` functionality.
Step 2: How well does it solve that problem?
Very well. It prevents the attack vector of luring an unsuspecting
victim into cloning an executable into the worktree root directory
that Git GUI immediately executes.
Step 3: What other security problems does it cause?
Maybe non-security problems: If a project (ab-)uses the unsafe
`PATH` lookup. That would not only be unsafe, though, but
fragile in the first place because it would break when running
in a subdirectory. Therefore I would consider this a scenario
not worth keeping working.
Step 4: What are the costs of this measure?
Almost nil, except for the time writing up this commit message
;-)
Step 5: Given the answers to steps two through four, is the security
measure worth the costs?
Yes. Keeping Git's users Secure By Default is worth it. It's a
tiny price to pay compared to the damages even a single
successful exploit can cost.
So let's follow that common practice in Git GUI, too.
I remember I coded the first few versions using "returns of dereferences" the beginning of this year the first week I created this repository
N' now I'm getting praised for that "ET technology" again
Personally I only see it as I broke my code myself trying to make it better b' it turned out it had been the thing n' since it's github so we can check on the original #.c/#.h files
updates packages/frameworks to have most supported frameworks specify which dependency version should reflect the overall framework version
updates packages/fs-detectors to allow framework detection that returns the full Framework record instead of just the slug
updates packages/next to return the detected Next.js version in the build result
updates packages/cli to leverage these changes so that vc build can add framework: { version: string; } to config.json output
The result is that Build Output API and supported frameworks will return their framework version in the build result of vc build when possible, which is used by the build container when creating the deployment. The dashboard later retrieves this value to display in richer deployment outputs.
With the related build container updates, we get to see Next.js version in the build output. You'll see this with BOA+Prebuilt or a normal deploy:
The Path to this PR
I went through all the supported frameworks and figured out how to best determine their versions. For most of them, we can check a known dependency's installed version number.
We can get most of the way only checking npm. For a handful, we'd have to support Go/Ruby/Rust/Whatever dependencies.
I started with a more complex method signature to allow for later expansion without changing the signature. It looked like this, in practice:
However, after checking all currently supported frameworks, I don't think this will end up being necessary. It also has the constraint that all dependencies have to be gathered and presented to the function even though it only needs to check for one or two. That's not a huge deal if we have them already where we need them, but we don't. We could use a variant here where this function does its own lookups, but this seemed unnecessary and would beg for duplication and small variances that could cause bugs.
Further, if we only look at package.json, we're going to either see a specific version of a version range. To be precise, we have to look at the installed version of the package. That means checking one of the various types of lockfiles that can exist or poking into node_modules.
If we poke into node_modules to detect the installed version, we introduce another point where Yarn 3 (default mode) will not be supported. If we read lockfiles, we have to potentially parse npm, pnpm, and yarn lockfiles.
If we use npm ls <package-name>, that also fails in Yarn 3 (default mode). We could accept that and go forward anyway, which would look like:
But it turns out there's a --json option! That's what I ended up using, for now.
We could explore the lockfile route more, but after some initial digging, it' non-trivial. There are 3 main lockfiles we'd want to check for (npm, pnpm, and yarn) and there are different lockfile versions that put necessary data in different places. I looked for existing tools that parse this, but I didn't find any. We could certainly go down this path, but the effort doesn't seem worth it when npm ls gets us really close.
Follow-up Versioning
Now that we know how to determine version per framework, we can vary configuration by version. In a future PR, we could allow a given value to vary by version number:
Replaces the sprite of the hivelord with a new one, in my continuing
quest to annihilate the old asteroid mob sprites.
A (never completed) asteroid mob resprite was actually my first PR, this
one is my 200th.
I am also planning on fucking with basic mob versions of these mobs some
time but the sprites can be atomised out.
In addition to replacing the old-ass MSPaint sprites, this PR also adds
a short death animation effect to the hivelord brood (from hivelords or
legions) which looks nicer than them just vanishing instantly upon
death.
[TEST-MERGE FIRST] Wound refactor number two: Full synthetic support (#78124)
About The Pull Request
Heavily refactors wounds AGAIN.
The primary thing this PR does is completely change how wounds are
generated and added - while the normal "hit a guy til they bleed" stuff
works about the same, asking for a specific type of wound, say, like how
vending machines try to apply a compound fracture sometimes, isnt going
to work if we ever get any non-organic wounds, which the previous
refactor allowed.
With this PR, however...
You can now ask for a specific type of wound via
get_corresponding_wound_type(), which takes wound types, a limb, wound
series, etc. and will try to give you a wound fitting those
specifications - but also, a wound that can be applied to a limb.
This will allow for a vending machine to apply a compound fracture to
a human, but a collapsed superstructure (assuming my synth wounds go in)
to a robot
There are now new "series types" and "wound specific types" that allow
us to designate what series are "mainline" and randomly generatable, and
what are "alternate types" and must be generated manually - you can see
the documentation in wounds.dm.
The behavior of limping and interaction delays has been abstracted to
datum/wound from bone wounds to allow just, general ease of development
Pregen data now allows for series-specific wound penalties. Example: You
could set a burn wound's series wound penalty to 40, which would make
wound progression in the burn category easier - but it would not make it
any easier to get a slashing wound. As it stands wound penalties are for
wounds globally
Scar files are now picked in a "priority" list, where the wound checks
to see if the limb has a biostate before moving down in said list.
Example: Wounds will check for flesh first, if it finds it - it will use
the flesh scar list. Failing that, they then check bone - if it uses
that, it will use the bone scar list. This allows for significantly more
modular scars that dont even need much proc editing when a new wound
type is added
Misc changes: most initial() usage has been replaced by singleton
datums, wound_type is now wound_types and thus wounds can accept
multiple wound types, wounds can now accept multiple tool behaviors for
treatment, wounds now have a picking weight so we can make certain
wounds rarer flatly,
This PR also allows for wounds to override lower severity wounds on
generation, allowing eswords to jump to avulsions - but in spirit of
refactoring, this has been disabled by default (see pregen data's
competition_mode var).
Why It's Good For The Game
Code quality is good!
Also, all the changes above allow wounds to be a MUCH more modular
system, which is one of its biggest problems right now - everything is
kinda hardcoded and static, making creative work within wounds harder to
do.
Changelog
🆑
refactor: Refactored wounds yet again
fix: Wounds are now picked from the most severe down again, meaning
eswords can jump to avulsions
fix: Scar descs are now properly applied
/🆑
Generally there should be nothing necessary to finish a level that requires any of:
straferunning;
extremely sensitive timing that could softlock you if you're on keyboard, lagging in multiplayer or have motor issues;
checking only for a sound cue that something has happened;
remembering how to distinguish two visually nearly identical areas; or
backtracking to a previous area on the map that you had previously been given no reason to revisit.
I haven't caught all of them by any stretch of the imagination but it's a start.
Also some regular minor fixes.
E1M9
Fixed some textures around the big blue-trimmed lift and removed an extraneous use line that triggered a faraway lift for no reason.
The red key bridge lowerable section is now textured differently from the rest of the bridge.
E3M5
Teleporter platform to get back up to the catwalk from the northeastern blood maze is now clearly marked as having a switch, as it is a mandatory progression rather than a secret.
E4M8
Got rid of some fake contrasts on the noodles at the start.
Added a radsuit for the northwest switch. While it is possible to avoid damage even without straferun, unless you've got a tic counter display and can time it to the damage interval this is basically RNG.
The water flat on top of the lowering wall in the east was very, very noticeable. The switch is now stepped on instead of hit. (Not too sure if the secret isn't too obscure now...)
Removed asymmetrical doortrak on the slime bridge on the southeastern piston switch.
The linedefs of said slime bridge pit are flipped so a deathmatch opponent trying to grab the berserk in there is not magically immune to rocket blasts. (see #996)
Realigned the four pistons by the gate to the starship. They also reveal moving parts when activated - not nearly as good as the crushers on the original DI, but better than nothing.
Made the southern walls use PLAT1 to make it more obvious that those walls will lower later (with the added bonus that they match the four pistons).
The southern light bronze area now has a strip to guide the player towards the switch in case they lose track of their direction while fighting monsters and forget to explore inside that area, as well as to better distinguish it from the southeast.
The gate threshold to the southern light bronze area now matches that of the pre-opened southeast.
There is now actually a threshold where you can tell where the starport ends and the ship begins.
The two light bronze areas are a bit too similar-looking. Added a few health boosts so the player can spot/be attacked by them and know this is an unexplored area.
Map11
The lift going down into the yellow key room requires a switch that is out of sight from the lift itself, which is not clearly marked as a lift to begin with. The only real way to realize what's going on if you don't already know about the lift is to locate the sound and immediately turn to investigate before the lift comes back up. I thought this was annoying when I first did my big overhaul of this map, but ultimately left the basic mechanism alone out of an abundance of caution; however, with the recent discussion of accessibility in the proposed changes to the documentation I'm revisiting this. That upper switch now lowers a wall to reveal the lift which is triggered by a walk line.
The lower far switch on that same lift was actually literally impossible to make on keyboard and no straferun (and no vanilla wallbounce exploit), even if I change it to a regular lift instead of fast. This is completely unacceptable for something necessary to progression (rather than an obscure secret). The lower switches are now permanent repeatable floor-lowerers, while the line crossing from the lift into the lower chamber is a permanent repeatable floor-raiser, with the line crossing into the lift from above being a simple lift line.
Retextured the stairs out of the water in the eastern branch so it's not an unreadable mess of criss-crossing grey lines.
Realigned the new skull switch texture in the skull room.
Map19
One of the stealth worms was stuck in a burning barrel.
Removed monster block flag on line 2083.
Unmerged and remerged a few identical sectors to better match the intended sound travel.
Flagged line 281 as a monster blocker. This allows the player to always be able to make the jump onto that bottom stair without being blocked by the octaminator.
That octaminator is now a pain bringer in easy mode. The far end of that platform path is well outside the maximum vertical autoaim range in vanilla, which means that to actually hit the octaminator without up/down aiming you'd have to be on one of the later platforms - i.e., confined to a relatively narrow area with no cover against an opponent that has seeker missiles. The best way to solve this is to charge towards the octaminator as fast and as soon as possible with the SSG, minigun, or ripsaw+prayer to RNGsus that you'll get a good painlock. This is not the kind of tactic the sort of person who needs to play on easy will think to do, or could do while also being ready to sidestep if the octaminator fires at the wrong time.
347 and 249 are now also monster blockers, and the worms in that slime pit have been moved to the platform just behind the combat slug since they're awakened early on and that's where you'll first encounter them anyway.
Replaced the teleport pad in the vertical platforming sequence with a lift, to minimize disorientation and going the wrong way. (In retrospect I probably could have just made the teleport destination face the pit you came in from, but the lift worked aesthetically better anyway.)
A good chunk of that entire platforming area has been moved 8 units to the west so that things would align with the flat grid.
Lines 307 and 309 are now also monster blockers. The worm that would be trapped between them is now moved further down the route and marked ambush.
Map20
Removed the useless, misleading skull switch texture on the bars at the start.
The door leading into the blue key arena needs no blue key; the door leading out needs a blue key. Both are marked with blue-light trim. Removed the blue lights on the first one.
The lowering wall leading to the teleporter now uses a pipe texture.
The door leading out of the giant quadruped arena now has a bright flickering light.
Yellow key is another case of effectively-randomly-mandatory damage. Added a path.
Same with the lava tunnel on the red key route.
Map25
The silver lift near the river and shack is now activated by SW1GSTON switch right on the wall at eye level, rather than counterintuitively and invisibly recessed into additional sectors.
The painlord ambush lift is now accessible after the encounter. A small health refill has been added there for easy and medium.
This adds a horrible hack to get pseudo working with glibc 2.38. We can't
drop _GNU_SOURCE to something like _DEFAULT_SOURCE since we need the defines
the gnu options bring in. That leaves using internal glibc defines to disable
the c23 versions of strtol/fscanf and friends. Which would break pseudo
build with 2.38 from running on hosts with older glibc.
We'll probably need to come up with something better but this gets glibc 2.38
and working and avoids autobuilder failures.
Signed-off-by: Richard Purdie [email protected]
(cherry picked from commit 596fb699d470d7779bfa694e04908929ffeabcf7)
Signed-off-by: Steve Sakoman [email protected]
aider: Add option for users to input a URL and fetch data from it.
Aider chat conversation:
USER: Add proper description and tags to the github repo
ASSISTANT: As an AI, I don't have the ability to directly interact with GitHub to add a description and tags to your repository. However, I can guide you on how to do it.
Adding a Description to Your Repository
Go to your GitHub repository.
Click on the "Edit" button near the repository name.
In the "Description" field, enter a brief summary of your project. For example, "A Streamlit web application for exploring and manipulating CSV datasets."
Click "Save".
Adding Tags (Topics) to Your Repository
Under your repository name, click the "Manage topics" link.
In the "Topics" field, enter topics that are relevant to your project. These could include "python", "streamlit", "data-visualization", "csv", "data-analysis", etc.
Press
^C KeyboardInterrupt
USER: Can I host this project in github
ASSISTANT: Yes, you can host the code for this project on GitHub. Here are the steps to do so:
Create a new repository on GitHub.
Go to your GitHub account.
Click on the '+' icon in the upper right corner and select 'New repository'.
Name your repository and provide a description.
Choose whether to make your repository public or private.
Initialize the repository with a README if you want.
Click 'Create repository'.
Push your local project to the GitHub repository.
Open Terminal or Command Prompt on your computer.
Navigate to the project directory.
Initialize the local directory as a Git repository:
git init
Add the files in your new local repository. This stages them for the first commit:
git add .
Commit the files that you've staged in your local repository:
git commit -m 'First commit'
In the Command prompt, add the URL for the remote repository where your local repository will be pushed:
git remote add origin remote repository URL
Push the changes in your local repository to GitHub:
git push -u origin master
Now your project is hosted on GitHub.
However, if you want to host the application itself (i.e., make it accessible as a web app), you'll need to use a platform like Heroku, AWS, or Google Cloud Platform. GitHub itself does not host web applications, it only hosts the code for projects.
USER: Can I use github pages to host streamlit apps
ASSISTANT: No, unfortunately, you cannot use GitHub Pages to host Streamlit apps. GitHub Pages is designed to host static websites, i.e., websites that consist of fixed content. Streamlit apps, on the other hand, are dynamic and require a server to run Python code, which GitHub Pages does not support.
To host a Streamlit app, you would need to use a service that supports running Python applications. Some popular options include:
Heroku: A platform as a service (PaaS) that enables developers to build, run, and operate applications entirely in the cloud. It supports Python and is free for small applications.
Streamlit Sharing: A platform provided by Streamlit itself for hosting Streamlit apps. It's free but currently in beta and requires an invitation.
AWS (Amazon Web Services): A secure cloud services platform, offering compute power, database storage, content delivery and other functionality. It's not free, but it's very flexible and powerful.
Google Cloud Platform: Similar to AWS, it provides a variety of cloud services on Google infrastructure. It's also not free, but offers a wide range of services and is quite flexible.
Remember, deploying a Streamlit app on these platforms usually involves providing a requirements.txt file that lists all of the Python libraries that your app needs to run, and possibly also providing some configuration files.
USER: What other features can I add to this streamlit app
ASSISTANT: There are many features you could add to your Streamlit app to enhance its functionality and user experience. Here are a few suggestions:
User Authentication: Implement a login system to control access to your app. This could be useful if you want to restrict access to certain users or track user activity.
Data Upload from URL: In addition to uploading files, allow users to input a URL from which the app can fetch and load data.
More Data Transformations: Add more options for users to manipulate the data. This could include more complex operations like normalization, standardization, encoding categorical variables, handling missing values, etc.
Machine Learning Models: Allow users to apply machine learning models to the data. You could provide a selection of pre-trained models for common tasks, or allow users to train their own models on the data.
Interactive Visualizations: Use libraries like Plotly or Bokeh to create interactive plots that users can zoom, pan, and hover to get more detailed information.
Real-time Data: If applicable, you could add functionality to handle real-time data streams.
Exporting Results: Allow users to export the results of their data analysis, either by downloading files or by sending the results to an email address.
User Feedback: Implement a system for users to provide feedback on the app, report issues, or request new features.
Remember, the features you choose to add should depend on the needs of your users and the purpose of your app. Always consider the user experience when adding new features.
USER: Data Upload from URL: In addition to uploading files, allow users to input a URL from which the app can fetch and
load data.
ASSISTANT: To implement the feature of data upload from a URL, we need to modify the translate_app.py file. We will add a new option for the user to input a URL, and then use the pandas.read_csv() function to fetch and load the data from the URL.
Here are the changes to make in the translate_app.py file: