there were a lot of events recorded by gharchive.org of which 2,411,105 were push events containing 3,682,684 commit messages that amount to 287,013,483 characters filtered with words.py@e23d022007... to these 60 messages:
Small VoxPrimalis Fixes (#18944)
-
fuck you i don't need to give you a fucking summary
-
fixes
[MODULAR] Fixes All Known Modular Persistence (NIF) Saving Issues (#19096)
-
Fuck
-
Holy shit
[MIRROR] Abductor scientist self-retrieve failure/runtime fix [MDB IGNORE] (#19179)
- 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. /🆑
- Abductor scientist self-retrieve failure/runtime fix
Co-authored-by: Rhials Datguy33456@gmail.com
add torch.autograd._set_view_replay_enabled, use in aot autograd (#92588)
tldr; this should fix some minor perf regressions that were caused by adding more as_strided() calls in aot autograd.
This PR adds a new context manager, torch.autograd._set_view_replay_enabled()
.
Context: AOT Autograd has special handling for "outputs that alias graph intermediates". E.g. given this function:
def f(x):
y = torch.mul(x, 2)
out = y.view(-1)
return out
AOT Autograd will do the following:
def fn_to_compile(x):
y = torch.mul(x, 2)
out = y.view(-1)
# return the graph intermediate
return y, out
compiled_fn = compile(fn_to_compile)
def wrapper(x):
y, out = compiled_fn(x)
# regenerate the alias of the graph intermediate
return out._view_func(y)
What's annoying is that out._view_func()
will result in a .as_strided
call, because out
is an ordinary runtime tensor. This (likely?) caused a perf regression, because when running the backward, out as_strided_backward()
is slower than our view_backward()
.
In this PR, I added some TLS for instructing autograd to do view replay instead of as_strided, even when given a normal tensor. I'm definitely interested in thoughts from autograd folks (cc @albanD @soulitzer). A few points that I want to bring up:
(1) One reason that this API seems generally useful to me is because of the case where you torch.compile()
a function, and you pass in two inputs that alias each other, and mutate one of the inputs. Autograd is forced to add a bunch of as_strided() calls into the graph when this happens, but this would give users an escape hatch for better compiled perf in this situation
(2) To be fair, AOT Autograd probably won't need this TLS in the long term. There's a better (more complicated) solution, where AOT Autograd manually precomputes the view chain off of graph intermediates during tracing, and re-applies them at runtime. This is kind of complicated though and feels lower priority to implement immediately.
(3) Given all of that I made the API private, but lmk what you all think.
This is a followup of pytorch/pytorch#92255.
Pull Request resolved: pytorch/pytorch#92588 Approved by: https://github.com/ezyang, https://github.com/albanD
End of chapter 7. My life is becoming cloudy. Got called into work when they said i could have a day off. i spend 50 minutes in rush hour traffic and when i get there, there is no work. literally went home in 3 hours when it is normally an 8 hour shift. waste of everyones time honestly. 5 red bull (sugar free) deep right now and i want this done. heart failure before resitting the year
PMC and Whiteout stuff (#1966)
As a preword, I came up with every change in this PR and coded them in the span of 10 hours, so some things may be iffy.
PMCs and Whiteout may be good, but they're a bit outdated, this modernizes multiple loadout aspects, enables antag vendors for admin-spawn, and does some balance changes to certain portions(specifically chem ERT).
Individual changes, numbered, will go over each in why its good, may have forgotten one or two things.
- Buffs whiteout flamer with blue flame damage, belt-linked magharn, and pyro underbarrel extinguisher
- Adds a synthetic repair kit(medkit), with synth repair tools, gives it to whiteout.
- Adds breaching charges and swaps crowbars to tactical in whiteout loadouts
- Gives whiteout PMC sniper goggles(thermals)
- Gives whiteout medic the required gear to actually repair a downed member of the team, and just a lot of synth heals.
- Gives whiteout leader a pyro extinguisher.
- Gives whiteout weapons default attachments.
- Adds an 'advanced' mini-flamer with the same stats as UPP integrated UBF, gives it to NSG23 and random m41/2 attachie.
- Gives detainer PMCs a version of the corporate m41A MK2(goon gun), with attachies and adv flamer to replace flamethrower.
- Swaps chem PMC TL P90(name is too long) with an M41/2
- Gives normal PMC ERT roles a webbing vest with meds and miniextinguisher
- Gives PMC Surgeon the essentials required to act as a medic, swaps NSG with M39/2, gives them a normal but unique look.
- Whiteout and PMC SG powerpacks have 30k power by default, instead of 10k.
- Gives PMC guns more options for random attachments, and gives m41/2 its intended collapsible stock
- Gives PMC engi m39/2 instead of P90
- Removes flamer from potential PMC loadouts.
- Gives PMCs better CQC skill.
- Gives PMC TLs autoinjector pouches(which gives chem TL a second pouch in the first place)
- Detainer PMCs now have tac-sechuds, PMC TLs have sensorhuds.
- Enables antag vendor for PMC roles. (Look at file changes for the specific things, too long for pr desc)
Modernization and some needed loadout/balance changes(IMO). Per number:
- Whiteout flamer did worse damage than napalm, and was incredibly easy to lose.
- More heals for each member of the whiteout team, allows more self-sufficiency.
- Breach charges for tacticool breaches, crowbar doubles as a melee weapon in case the player doesn't know about synth punch
- Whiteout didn't have proper NVG, thermals allows them to do tacticooler breaches by lining up people wth breach charge.
- Whiteout medic didn't have a lot of heals at all, and didn't have a defib, so they weren't much of a medic.
- To extinguish the flames and lead charges, works like pyro underbarrel extinguisher, but handheld.
- Default tacticool attachment, already made whiteout subtypes for HEAP, why not give them good attachies with them too.
- Mini-flamer sucks, gives a better version for NSG and m41/2, same stats as the already existing UPP integrated UBF.
- Detainers had flamers which sucked, gives them corpo m41s which aren't as good as /2s, but have adv UBF for flames.
- P90 sucks, having default m41/2 fits with other leader type, also gives them a better gun than their underlings.
- Medkit but in a webbing, its my personal combat webbing load when I play so its good.
- PMC Surgeon was horrifically undergeared, they didn't even have a medhud, gives them basic gear similar to PMC med but with a beret to tell them apart.
- ERTs don't have spare batteries to get usually, more staying power in fights.
- More options for attachies to further make PMC weapons better, also gives m41/2 the m41 collapsible stock because it needed it.
- P90 sucks, support roles getting the m39/2 is cool.
- Flamer sucks to get as PMC, and adv. UBF as a potential m41/2 attachie makes a full-sized flamer useless too.
- PMCs could fireman carry, and multi-strip, but did it horrifically slow, gives them MP level CQC(master for spec, expert for TL)
- TL getting extra meds is neat, also chem TL had an empty pocket slot and no meds, thats bad.
- Sechud-thing for PMC detainers is useful(stops flashbang trolling for one), giving PMC TL a sensorhud to watch their team's status is also good.
- Makes doing event bases for PMCs much easier, too long to post the specific changes here but look at files for them.
I forgot to take screenshots but it all works. 👍 I spawned myself as every changed role and tested every individual change extensively.
🆑 add: PMCs are now able to use antag vendors. balance: Multiple loadout and skill changes to PMCs and Whiteout balance: Buffs whiteout flame damage to blue flame damage. fix: PMC Investigator Lead now appropriately spawns with a medical pouch in their pocket, instead of nothing. fix: Maximum skill preset now appropriately also has BE and intel skill, at maximum of course. fix: PMC Smartgunner now appropriately a VP78 to go along with their VP78 magazines fix: Whiteout now appropriately have night vision. fix: M41A/2 now appropriately comes equipped with a collapsible stock. spellcheck: PMC smartgun drum now has a seperate description and name from base SG to match its different appearance. /🆑
Holy FUCK temporary commit
Mixed between previous abno based spawning and new subsystem
Cleanup Commit
Removes a lot of previous code and paves the way for the subsystem method.
Major Commit
Apocalypse Bird drops it's loot and only spawns once. It'll not try to happen if there aren't enough birds, and if two are breached before the third arrives it'll take the third breaching to start the event, until the others are suppressed. Birds do not target people and are immortal while moving to the portal. If unable to reach it after 3 minutes they'll be forced in manually.
Tweaked Proc
Redundant Code Removal
Remembered I didn't need this
Enhanced Code
Moved an if-statement to a better place to more adequately solve the issue.
Test Commit
Does this solution work?
Global Abnormality Mob List
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 35135081+Mothblocks@users.noreply.github.com
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) /🆑
Chapter 8 done. Dont hate my life as much honestly but apparently 9 is really long ;). current song playing is dream on by aerosmith
[MIRROR] Rebuilds Luxury Shuttle (mostly), makes it emag-only [MDB IGNORE] (#19229)
- Rebuilds Luxury Shuttle (mostly), makes it emag-only (#72940)
Changes the really goofy old lux shuttle to a cooler layout with some additions to make it a luxury and not just "anti-poor-people protection + food"
Shuttle was made bigger to make it less cramped for the luxury class, pool was moved to its own room, added an arcade and a bar corner, has real lasers to shoot poors with (20c each shot), has fire extinguishers now Adds a new preopen variant of hardened shutters Adds a paywall pin subtype for the luxury shuttle, and a laser gun subtype
Made emag-only at a price of 10000 credits
The old luxury shuttle looked REALLY awful with its pool, was pretty cramped even in the luxury section and BARELY resembled a luxury.. This luxury shuttle provides luxuries such as a less poorly designed pool, more space for legs, arcade, to make it resemble a luxury unlike the old one
🆑 add: Luxury Shuttle is now bigger, and less ugly! Poor people still get it rough though... /🆑
- Rebuilds Luxury Shuttle (mostly), makes it emag-only
Co-authored-by: jimmyl 70376633+mc-oofert@users.noreply.github.com
Bro. It took me like 5 hours to fix the damn boss check. I hate my life.
Add files via upload
Hello Everyone!
After 3 months of challenging phase in bootcamp, I finally graduated from Hacktiv8 Full Time Data Science Program. With solid material every day and weekly project assignments that had to be completed with tight deadlines, but I really enjoyed it and was able to finish bootcamp well because this is my passion and career that I want to achieve. I've learned a lot about Python, Data Analytics, Machine Learning, Deep Learning, Natural Language Processing, Computer Vision, SQL, Web Scrapping, a little of full stack concept, and etc. Not only that, but I also learned about model deployment, which is a very important skill for a data scientist. Those thing are so challenging, and I'm excited to learn more about data science stuff.
As a final project of my bootcamp completion, me and my teammates : Aan Nurliyanah, Ropiudin, Fachmi Maris and Muhammad Fawwaz Dynoeputra makes an project called “Anminvesting” Mutual Fund Investment Recommendation system Based on Risk Profile Customer. Anminvesting a system utilized machine learning, and created a risk profiling for upcoming new investors that are interested in investing on Mutual Funds. From the risk profiles we recommend the best products that suit their needs. And new investors can see the high and low price forecasting from products for up to 4 weeks ahead based on the last 5 years datas.
Even though I have been able to complete the bootcamp very well, data science technology is developing very quickly every time, so I always have to learn new things to sharpen my knowledge of data science.
Fixes all antag datum moodlets being removed when any single antag datum is removed (#73305)
All antag datums operated under the antag_moodlet
mood category, which
is clearly an issue when you can (and commonly) have multiple antag
datums of different types on your mob.
New antag datums of different type will now no longer override older antag datum moodlets, now they will stack. This means traitor revolutionaries are the most zealous folk on the station.
This has a few potential oversights down the line:
- Someone adds an antag datum players can have duplicates of, and also has a moodlet associated
- Re-used moodlets in antag datums that can easily be stacked will be noticed
- Most solo antags used
focused
right now, but none can stack outside of admemes
But I don't think it's an issue for now.
Prevents a quick revolution from stripping you of your joy.
Fixes #67313
🆑 Melbert fix: Revolutionary Heretics and Cultists Traitors no longer lose all of their joy in life after being de-converted from their respective causes. /🆑
Document Silent Messages. (#5910)
Hey folks!
This is actually my 2022 hackweek project which I got to finish to completion. :)
During a message send request, if you include the new
SUPPRESS_NOTIFICATIONS
flag it will not broadcast any push/desktop
notifications but will still increment the relevant mention counters.
The intention is that you can get someone's attention but not feel like you could be distracting them. Like when you DM someone at 5am. I'm sure some bots can leverage this as well to avoid noise or something.
Also this should work for the webhook send request as well.
[Add a picture of the UI here]
If you're looking to leverage this as a non-bot, you can write @silent
as the very first thing in a message. Make sure your client is
up-to-date btw. Autocomplete a-la @everyone
is not planned. Eventually we may
put this in an "actual UI", for now this is where it lives. :)
Also sorry to all the users on Discord named silent who may have some textual conflict now. Forgive me!
Update base for Update on "[Profiler] Defer recording startup python events (take 2)"
This is my commandeer of pytorch/pytorch#82154 with a couple extra fixes.
The high level idea is that when we start profiling we see python frames which are currently executing, but we don't know what system TID created them. So instead we defer the TID assignment, and then during post processing we peer into the future and use the system TID of the next call on that Python TID.
As an aside, it turns out that CPython does some bookkeeping (https://github.com/python/cpython/blob/ee821dcd3961efc47262322848267fe398faa4e4/Include/cpython/pystate.h#L159-L165, thanks dzhulgakov for the pointer), but you'd have to do some extra work at runtime to know how to map their TID to ours so for now I'm going to stick to what I can glean from post processing alone.
As we start observing more threads it becomes more important to be principled about how we start up and shut down. (Since threads may die while the profiler is running.) #82154 had various troubles with segfaults that wound up being related to accessing Python thread pointers which were no longer alive. I've tweaked the startup and shutdown interaction with the CPython interpreter and it should be safer now.
Differential Revision: D42336292
[ghstack-poisoned]
[Profiler] Defer recording startup python events (take 2)
Pull Request resolved: pytorch/pytorch#91684
This is my commandeer of pytorch/pytorch#82154 with a couple extra fixes.
The high level idea is that when we start profiling we see python frames which are currently executing, but we don't know what system TID created them. So instead we defer the TID assignment, and then during post processing we peer into the future and use the system TID of the next call on that Python TID.
As an aside, it turns out that CPython does some bookkeeping (https://github.com/python/cpython/blob/ee821dcd3961efc47262322848267fe398faa4e4/Include/cpython/pystate.h#L159-L165, thanks @dzhulgakov for the pointer), but you'd have to do some extra work at runtime to know how to map their TID to ours so for now I'm going to stick to what I can glean from post processing alone.
As we start observing more threads it becomes more important to be principled about how we start up and shut down. (Since threads may die while the profiler is running.) #82154 had various troubles with segfaults that wound up being related to accessing Python thread pointers which were no longer alive. I've tweaked the startup and shutdown interaction with the CPython interpreter and it should be safer now. ghstack-source-id: 179750376
Differential Revision: D42336292
Speed up the roundstart significantly (#147)
- Resolves is_banned_from headaches and lag (Speeds up roundstart significantly) (#69376)
About The Pull Request
Just to be clear, when I refer to time here, I am not talking about cpu time. I'm talking about real time. This doesn't significantly reduce the amount of work we do, it just removes a lot of the waiting around we need to do for db calls to finish.
Adds queuing support to sql bans, so if an ongoing ban retrieval query is active any successive ban retrieval attempts will wait for the active query to finish
This uses the number/blocking_query_timeout config option, I hope it's still valid
This system will allow us to precache ban info, in parallel (or in batches) With this, we can avoid needing to setup all uses of is_banned_from to support parallelization or eat the cost of in-series database requests
Clients who join after initialize will now build a ban cache automatically
Those who join before init is done will be gathered by a batch query sent by a new subsystem, SSban_cache.
This means that any post initalize uses of is_banned_from are worst case by NATURE parallel (since the request is already sent, and we're just waiting for the response)
This saves a lot of headache for implementers (users) of the proc, and saves ~0.9 second from roundstart setup for each client (on /tg/station)
There's a lot of in series is_banned_from calls in there, and this nukes them. This should bring down roundstart join times significantly.
It's hard to say exactly how much, since some cases generate the ban cache at other times. At base tho, we save about 0.9 seconds of real time per client off doing this stuff in parallel. Why It's Good For The Game
When I use percentages I'm speaking about cost per player
I don't like how slow roundstart feels, this kills about 66% of that. the rest is a lot of misc things. About 11% (it's actually 16%) is general mob placing which is hard to optimize. 22% is manifest generation, most of which is GetFlatIcons which REALLY do not need to be holding up the main thread of execution.
An additional 1 second is constant cost from a db query we make to tell the server we exist, which can be made async to avoid holding the proc chain.
That's it. I'm bullying someone into working on the manifest issue, so that should just leave 16% of mob placing, which is really not that bad compared to what we have now. Changelog
cl code: The time between the round starting and the game like, actually starting has been reduced by 66% refactor: I've slightly changed how ban caches are generated, admins please let me know if anything goes fuckey server: I'm using the blocking_query_timeout config. Make sure it's up to date and all. /cl
-
manifest_inject() stuff
-
Fixes role banned players not being banned from roles that they are banned from (Option Two) (#69703)
I feex
- Saves on average 10 seconds from roundstart times (#71730)
When runlevels change mid work, subsystems running behind have their next_fire updated. It's offset by a sum of random numbers, so things don't bunch up, especially KEEPTIME SSs
The trouble is we have so many subsystems that get added at roundstart that this offset gets LARGE, like 10 seconds on average.
So instead of randomly offsetting, why not "fill" a set of time slots? Only 1 keeptime subsystem a tick, and 4 others. Then we just fill up those buckets and get to it (also don't offset things that are already processing)
I've talked to mso a bit about this. What he reccomended was sampling a random time withing a 2 second window. I'm not totally sure why, kinda waiting for him to tell me off, if he does I'll fix things up.
This pattern takes the max possible delay from 16 (76 * 5 / 20)) seconds to 0.7 (56 / 4 / 20) It obviously scales with subsystem count, but I like this scaling a bit better
I've applied the same pattern to the offsetting we do at the start of Loop(), for ticker subsystems. I am less confident in this, it does take last fire times from at worst 3.75 seconds (15 * 5 / 20) to a static 0.75 (15 / 20) As stated I'm less sure of this, hoping to get mso'd so I can clean things up
Makes roundstart snappier
🆑 code: Roundstart "starting" should be much snappier now /🆑
Co-authored-by: Kyle Spier-Swenson kyleshome@gmail.com
- fix missing macro
Co-authored-by: LemonInTheDark 58055496+LemonInTheDark@users.noreply.github.com Co-authored-by: Timberpoes silent_insomnia_pp@hotmail.co.uk Co-authored-by: Kyle Spier-Swenson kyleshome@gmail.com
Begin a sloppy implementation; need a way to get different lumens per light range
Try building a special illumination data structure that can represent what we need for lights. In future, consider moving away from a plain list of individual illuminations, and build up a specialized global data structure
Fix lumens overlay so that it does not add to the lighting cache; in the future, these should be unified anyways, and the light renderer should not have to depend on whether or not something was previously cached in just the right way
Add bitset for controlling whether to render lights and lumens overlay
Instead of bitset, rely on AppState in ZoneRenderer
Multiply in extra alpha so light opacity can be managed
Beef up the lumens border
Textured tintable lights
Rework soft lighting to use black-background lights; alpha had some wierd artifacts as near the edge had a sharp darkness
Go back to trying alpha-based; it is better using pegtop soft lighting (as is used in GIMP), but still gets a bit dark
Commit to premultiplied alpha for soft lighting; interpret extraAlpha as a light boost instead of a transparency effect
MULTIPLY blend is not used; recognize that SCREEN blend is really used for building up lights rather than composing layers; make sure we know whether we are using premultiplied or not
Stick to premultiplied images, but support others as well via color converters; performances is much better at ~50ms worst case
Tweak soft light for premultiplied usage; allow map to shine through by alpha compositing the soft light result back onto the map; no more use for boosting in soft lighting
Render lumens overlay on top of lights instead of the other way around; map lumens=50 and lumens=100 to match 1.11.5 dim and bright lights for predefined 5e torches
Settle on overlay for blending light layer onto map
Clip the final light overlay render rather than each individual light; this is a perf win for player view where lots of screen space does not need to be passed through a software blender
Create a new graphics context for the light overlay, which frees us from having to restore state; remove unused view and overlayOpacity parameters from renderLightOverlay
Remove doc for old parameter
Make darkness a separate type from normal lights
Some handy todo notes
Need to include darkness in the lumens map
Some lumens map clean up; working towards a world where we have one data structure to represent the actual lighting in a zone
Reenable darkness rendering; required us to be able to control both the light blending and overlaying behaviour for renderLightOverlay
Make a bunch of progress towards coalesced calculation of lit areas and drawable lights; BIG PROBLEM is performance, as there is no way to turn off these sometimes expensive calculations; Solutions include adding proper caching per light source, unioning of Path2D instead of Area, an allowance for on-demand calculation of the individual components of global illumination, and ultimately a bespoke data structure that can dynamically adjust as lighting changes are made
Rewrite getIllumination coalesence loop to use Path2D for lumens areas
Actually cache the results of getIllumination()
Clear up some names in the loop, and don't unnecessarily copy areas
Remove all the old lighting calculations in ZoneView in favour of the new stuff that obsoletes it
Now make sure we can support personal lights and daylight by actually building a per-view illumination structure
Now get rid of the new methods that are no longer used
Remove unused ZoneView.Illumination
Add a treatise on where to go from here
Rework lumens map into a list of lumens levels, where each level is not guaranteed to be disjoint; note that individual lights for a light source will in practice be disjoint, but once lights start overlapping that statement does not generally hold true
TEMP Implement an Illuminator data structure for speeding up lumens updates; still need to be able to produce drawable lights
Finish the first step of the illuminator. Has parity with stuff from before this change, but still needs personal and daylight support
TODO Notes galore
More TODOs
TEMP Begin accounting for sight magnifiers; the returned GlobalIllumination will now permit overlapping ranges in this case, and will rely on the handling of the lumens map to display them correctly; still need to make sure DrawableLights work (they won't because now they overlay, and it's not clear which one should win) and need to make ZoneRenderer actually look up the correct sights; will also need to merge results together when multiple tokens are in the view
Use the first token's sight type; sufficient for now, until we start merging results
Instead of caching on Sight, and instead of caching on View, cache on a special SightIlluminationKey that can have properties independent of any actual sight. E.g., by taking the maximum magnification
Calculate illumination keys in ZoneRenderer; only getExposedArea(PlayerView) and getVisibleArea(PlayerView) even rely on views anymore; thinking this means the illumination stuff can go into its own illumination model or something, but that is extra work that does not need to happen
Remove obsolete notes about SightTypes since we now use IlluminationKeys
Simplify lumens shade calculation understanding we don't yet have generality
Add todo note about empty lumens areas, esp for darkness
Add a second shade level easier magnification edge case testing
Fix which area we use for light in the presence of magnification; added todo note about how we need to fix drawable lights
For light hole punching, sort the ranges' areas by lumens and make sure the stronger ranges beats out the weaker ranges without overlap
Cleanup; removed already-actioned TODOs and unneeded methods
Keep track of which tokens have contributed to the lighting; use that when flushing a token to determine if vision needs to be recalculated; flush the illuminationCache in that case
Factor out large main loop of getAndCacheIllumination so it works on a single light token at a time
Stop caching illumination results, and instead keep illuminators around; allow remove LitAreas from illuminators
Fixup light invalidation to work even when adding a light source to a token and not just removing / modifying one
Track contributing tokens on a per-illuminator basis; otherwise we (of course) found that one illuminator would prevent additions to others
Add timer specifically for filling the lights during rendering
Clear the illuminators on ZoneView.flush(); future improvement is definitely to be as precise as possible in what information to throw away
Some todo notes on flushing
Add notes about caching in ZoneView and how it makes no sense
Clarify the isEmpty check and how we should do it and whether we even need it
Only grab lights and darknesses when actually needed
When rendering the lumens overlay, clip the original g as well as newG
More notes
Split Illuminator.getIllumination() into getVisibleArea(), getLumensLevels(), getLightAreas() and getDarknessAreas()
Rework ZoneView methods to use the new decomposed Illuminator methods; saves calculating things like drawable lights even when those don't need to be rendered; also is much easier to follow and eliminates GlobalIllumination
Slightly better naming
Handle case of token having no vision according to FogUtil
Add notes about per-view caching and the need for flushing
Make the remainder of ZoneView's caches per-view
This boils down to changing ZoneView.getVisibleArea(Token)
to ZoneView.getVisibleArea(Token, PlayerView)
, which
required updating several callers, mainly macro functions and FogUtil
. This method also had a thin wrapper
ZoneRenderer.getVisibleArea(Token)
which was hardly used and has been removed in favour of a direct call to
ZoneView.getVisibleArea(Token, PlayerView)
.
Now that ZoneView
can cache everything for multiple PlayerView
s at once, ZoneView.flush()
only needs to be called
in the situations now mentioned in its documentation. It does not need to be called when the current PlayerView
changes (thanks to the above changes), and is also no longer called when the map viewport changes. This greatly reduces
the amount of recalculation, and the sight-heavy sunless citadel map can now fluently switch views.
Fix flush(Token) to remove from the nested map instead of a type-incorrect removal from the top-level map (thanks for nothing Java)
Link to fields in doc comments instead of via plain names; remove references to old fields no longer with us RIP
Get rid of a bunch of obsolete TODOs
Do a real isEmpty check rather than checking for a zero center of the bounding box
Change FogUtil.calculateVisibility to not transformed its areas; otherwise we sometimes have to copy areas just to translate it afterwards
Add another debugging hot key for showing single lumens levels
Clip both the light buffer and the underlying buffer when rendering lights, for performance
Do lumens map hole punching in ZoneRenderer
START Begin moving Illuminator away from direct knowledge of lights and light sources, instead only caring about lumens and areas
Render lumens overlay overtop light and darkness; only retrieve drawable lights when lighting is enabled (performance); change bright light to not be entirely clear, but still draw a nearly transparent white
No longer require disjoint lumens levels; begin move toward a single Illumination result type
Calculate visible area from returned Illuminations
Expand on the nature of darkness in our new lighting system
Calculate drawable light areas based on the illumination
Remove genericness of Illuminator as we no longer rely on the user data to associate lit areas with the originating lights
Remove reliance on IlluminationKey in ZoneRenderer, recognizing the results will generally depend on the entire PlayerView
Factor out per-view token selection logic
Encapsulate tokenVisibleAreaCachePerView so we can use it more freely
Include personal lights and daylight in the results used for drawable lights
Do not include non-renderable daylight in contributed personal lights
Include personal light and daylight in the lumens map
Put both light and darkness into each lumens level; TODO Make sure we don't unnecessarily work with empty areas to our detriment
Only use the sight's multiplier for personal lights; don't use the illumination key's multiplier
Fix the sign of personal darkness
Cache per-view illuminations
Clean up LitAreaUserData to reflect its new nature
From ZoneView remove completed todos or todos that have not aged well
Disable antialiasing in light overlay; it's less important with textured lights, and is the cause of some gapping or even slight overlapping that then makes really bright rings
Cache personal lights per-IlluminationKey instead of required stashing per-PlayerView
Calculate and cache token visible areas per-IlluminationKey instead of per-PlayerView
Do not cache token's personal lights or visible areas according to IlluminationKey, but solely according to Token since they don't actually depend on it
Regroup fields for clarity
Non-lights changes to get rid of DARKNESS
ZR changes for lumens level
Fix multi-range light hole punching when mixnig darkness and light
Update ZR for BC changes
Fix to not magnify darkness
Improve performance of calculateVisibleArea(PlayerView) by using the Illumination
we already have
ZR changes now that light now longer has a getPaint()
ZR now uses tinted paint provided by LightSource
ZR changes for no more Operation enum
ZR changes for non-int getPaint
ZR spotlessApply
ZV spotlessApply
ZV changes for light changes
Render unlit areas as dark in the lumens overlay; opt for a simple linear interpolation from 0 to 100 for the lumens overlay shade, with >= 100 being almost transparent
Tweak shading
Disable redundant clipping for more conssitent frames
Remove use of old getLumensLevelsToShow()
Change daylight representation to zero lumens; do not include render daylight in the lumens overlay
Khorne Update
-
Added the stat gain on melee hit/kill 'Rampage' mechanics to more Khorne units; Juggernauts, Khorne Warptalons.
-
Standardized traits among Khorne units like Fear and Pain Immunity.
-
Added the Intimidation ability/weapon. This is primarily used for Khorne units that lack ranged weapons for reaction fire like Bloodletters, Juggernauts and Warptalons; drains TUs and Morale in a small AoE via paralytic terror.
People listen up don't stand so close, I got somethin that you all should know. Holy matrimony is not for me, I'd rather die alone in misery.
power: don't ever reboot to verity red
- We get it, shit's broken. We're flashing custom stuff, shit's bound to break. Don't pop this annoying screen up, we're not even using verity anyway.
Change-Id: Icd77b70ec1df9108a4ba9e7fd8cb9623b35b78db Signed-off-by: ImPrashantt prashant33968@gmail.com
Update models.py
Please read about django relationships at https://docs.djangoproject.com/en/4.1/topics/db/examples/
I also have a suggestion that would make the project a bit more interesting. Check the api at https://api.chucknorris.io/#! Let's add a CNJoke model where we store the user's preferred jokes. Here's my suggestion:
- create a CNJokes view; when the user enters the page, you retrieve a random joke from https://api.chucknorris.io/jokes/random and present it to the user; the user has the possibility to "like" the joke (by pressing a Like button on the page or something like that). This should submit a form and create a CNJoke instance for the user.
- create a LikedJokes view where the user can see the jokes they liked so far.
- to fetch the jokes from the api you can use the requests python library at https://pypi.org/project/requests/
Update events.yml
- link: /events/10-25-22
img: /assets/images/events/10_25_Web3_MOOC.jpeg
row-title: "Berkeley RDI Frontier Forum"
date: "2022-10-25"
formatted-date: "October 25"
start: "4:00 pm"
end: "5:00 pm"
title: "10-25-22 Avichal Garg - Entrepreneurship in Web3: Product"
img: /assets/images/events/10_25_Web3_MOOC.jpeg
location: In person @ Soda Hall
description: |
UC Berkeley's new Center for Responsible, Decentralized Intelligence (RDI)
is excited to announce this week's Frontier Forum: Entrepreneurship in Web3: Product,
with Avichal Garg.
speakers:
- name: Avichal Garg description: | Avichal Garg, Co-Founder/Partner at Electric Capital. Avichal is a successful entrepreneur with executive experience at Google and Facebook, which acquired his previous company. As an angel investor, Avichal has invested in 15 unicorns and 5 decacorns including Airtable, Boom Supersonic, Color Genomics, Cruise, Deel, Figma, Newfront Insurance, Notion, Nova Credit, Pulley, and others. He co-founded Electric Capital in 2018 and has grown it to one of the largest crypto venture firms globally. Electric is an investor in leading web3 protocols and companies such as Bitwise, Bitnomial, dYdX, Frax, Kraken, Magic Eden, NEAR, and Tokemak.
1.0 with summarized changes
- updated titles list
- fixed xp_bonus_dimension
- disabled buddycards card display
- life mending added to ender mending
- life mending added to grimoire incompats
- re enabled ender's markman
- Spartan Reach disabled and replaced with Dungeons Gear Reach Attribute (the tooltip looks the same so you should notice no difference in-game)
- Emerald Upgrade Kit is now just as expensive as Emerald Bow, requiring Emeraldite Shards
- Nerfed spirit orb drop rate from spawners
- Soul Enchanter requires 200 Magic to use
- Quality of Life changes for new players to avoid confusion:
- Removed the +0% sprinting speed bonus text when leveling up
- The "Too Hot to wear" message changed to mention pmmo skills
- fixed all the spartan weaponry throwables (throwing knife, tomahawk, javelin, boomerang) now working properly if you have the requirements.
- Villager Trade Changes
-
Librarian:
- Removed First Librarian Enchanted Book Trade
- Replaced Vanilla Lantern Trade with Brass Lantern
- Added Disenchantment Book to last librarian trade
-
Nitwits can be traded with; they sell you worthless junk which gets only slightly better each tier. They are a more reliable source of getting tin due to their tin can trade.
-
- 9 Amethyst Nuggets = 1 Gem
- overgrown caves in twilight forest
- Moved Wormhole Potion from Equipment to Potions
- Bulldozer Nerf
- SoLPotato unreachable thresholds fix & rework (Thanks to @Chkoupinator for this!)
- nerfed nether coin crate
- Removed Afterlight Ore from Mining Dim
- added lion to champions blacklist
- Add plague clouds to the champions blacklist
- Grace of the Creator disabled
- added tropicraft white chair recipe
- temp disabling greek fantasy potions
- blacklisted mossy ring and belt trinkets
- added Forgery mod. If you're familiar with this mod and have suggestions - please provide feedback!
Tramstation: Growing Pains (#72331)
Lots of QoL and structural changes in attempt to make the cool map even cooler.
🆑 MMMiracles add: Tramstation has received a substantial overhaul! Please consult your local tour guide and station maps for changes. /🆑
Changes (as of so far)
- The Tramstation tunnels have been extended 6 tiles each way, making that trek across the central rail a little more dangerous.
- No more mid-way safety net on the transit rails. You're either making it or you're jumping to the bottom floor to avoid the tram.
- The central rail apparently had a negative slowdown, meaning you actually WERE faster to just run the gauntlet because it literally made you faster. This has been reverted because I want you to get hit by a train.
- The side routes are now a bit more dangerous since you can get pushed off into the lower floor
- Fauna overhaul! Several locations including the transit tunnels have gotten some greenery to help liven up transit between sectors. Please do not rip up the AstroTurf it is very expensive in space.
- Handicap-accessible departments! Every major wing and departments with multiple floors has been given a 2x3 elevator segment for those among the crew who have been hit by the tram a few too many times. Handicap inaccessible staircases may or may not come after this (i hate the handicapped)
- Expanded Security wing! You know that lame hallway between interrogation and the courtroom access? Now its a whole holding wing fit with essentials to keep your inmates content while waiting for their due process (never ever).
- Reworked Bridge! Front row seats to the western tram dock as well as a furnished meeting room with various corporate memorabilia!
- The HoP's office has been moved to function more as an arrival gate for late joining crew! Scenic queue lines and an option to block off the lower dorm access if you really want to enforce the 'Papers, Please' roleplay you've always wanted out of your HoP experience.
- Combined the teleporter/gateway/eva access into one special external operations room. All you off-station needs in one convenient place!
- More multi-z integration! Several segments (mainly maintenance level transfers) have been given overhangs and better methods to move between levels. This is still being expanded upon as of current PR posting.
- The power/pipe access shafts have been changed to be more public-facing and now also act as another inbetween for maintenance-dwelling crew to shift between floors.
- Multi-z solars! Both solar wings have been extensively overhauled to include multi-z structuring and easily doubled the amount of roundstart panels on the map.
- Escape pod bay! Casually borrowing from a certain ship map, there is now a centralized location for all station escape pods on the floor below Arrivals. Honestly makes more sense thematically instead of having a bunch of scattered bays.
- MULEBOT integration! Each major department now has delivery drop-off points along with Cargo getting a minor restructuring to fit 4 MULEBOTs. Seedy side-tunnels and drop points have been added for departments that aren't normally accessible from upper maintenance so they can still properly deliver cargo if sent this way. I can't guarantee this won't end in MULEBOTs getting ran over by a tram because they're fickle beasts.
- Complete rework of the disposals/piping/wirenet! I literally ripped everything up and rebuilt it with (hopefully) better stability in mind. Disposals is now also set up in that it'll try to avoid going through departments unnecessarily if your package isn't marked for it.
- Cargo's mail room and trash room has been overhauled to be more easily accessed for cargo techs and for routing mail.
- The chef has access to the morgue's back door via the front maintenance hatch while Robotics can now access the same back door via their maintenance shaft.
- The chem lab's starting area has been expanded so chemists don't have to worry as much about digging if they don't have large projects.
[FIX] stock,purchase,mrp: accumulative security days
Usecase to reproduce:
- Set the warehouse as 3 steps receipt
- Put a security delay of 3 days for purchase
- Set a product with a vendor and 1 days as LT
- Replenish with the orderpoint
You expect to have a schedule date for tomorrow that contains all the product needed in the incoming 4 days.
Currenly the internal transfer from QC -> Stock is for tomorrow (ok). The transfer from Inpur -> QC is plan for 2 days in the past. (not ok) The PO date is plan for 5 days in the past. (not ok)
It happens because the system check at each stock.rule
application if
purchase is part of the route. If it's then it applies the security lead
time. It's a mistake because we should apply it only the first time.
To fix it we directly set it when the orderpoint run and not during
stock.move
creation.
However for MTO it's not that easy. We don't want to deliver too
early the customer. So we keep applying the delay during the
stock.move
creation but only when it goes under the warehouse stock
location.
Simplify with-google-analytics example (#43894)
- Make sure the linting passes by running
pnpm build && pnpm lint
- The "examples guidelines" are followed from our contributing doc
First of all thanks for this amazing project and all the help you provide with these examples.
It seems there is code duplication in this example. After some tests
locally seem to _document.js is not necessary for gtag
to work
properly.
I am aware of vercel/next.js#40645 and I would like to ask @dave-hay, @SukkaW and @ijjk to consider this is still necessary. If so why then not move all content of the scripts from _app to _document?
In any case, I am open to adding here some comments explaining what is the reason for this code duplication if necessary.
Changes that come from vercel/next.js#43897
- The
event
hashChangeComplete should be removed since/home
and/home/#section
is not new pageview, but just reference to the same page.
If we go from /home to /home/#section (with a button click or a link for
example) this shouldn't trigger a new page visit on gtag
.
For this reason, I think we should revert the changes from vercel/next.js#36079. If there is a better argument of why this should stay I am also open to creating comments to clarify this on the example since I don't think should be the default behavior and not useful in most cases.
- The
id="gtag-init"
was added with no context to the example from vercel/next.js#29530
If there is a reason for this id in the script to existing I am open to adding a comment that clarifies this since in my experience is not necessary at all.
Edit: Batching with vercel/next.js#43897 as recommended by vercel/next.js#43897 (comment)
Co-authored-by: JJ Kasper jj@jjsweb.site
15 Mocking Symfony's Http Client Having the ability to mock objects in tests is super awesome, and kind of weird and complex all at the same time. If we have simple objects, like Dinosaur, we should avoid the extra lines of code and just instantiate a real Dinosaur for the test. After all, it's pretty easy to control the behavior of Dinosaur just by calling its real methods. No need for the mock weirdness.
But, for more complex objects, like HttpClient, using the real client... can be a headache. The general rule of thumb is to use mocks for complex objects like, services... but for simple objects, like models or entities, just use the real thing.
Looking back at Symfony's HTTP Client, we were able to mock both the client and the response to control its behavior. But, because needing to do this sort of thing is so common, Symfony's HTTP Client comes with some special classes that can do the mocking for us. It comes with two real classes specifically made for testing: MockHttpClient & MockResponse. Using PHPUnit's mock system is fine, but these exist to make our life even easier.
Check it out: instead of creating a mock for $mockResponse, instantiate a MockResponse() passing in json_encode() with an array to mimic GitHub's API response. Grab Maverick's issue below and paste that into the array. Since MockResponse is already configured, remove the $mockResponse bits below.
For the client, remove $mockHttpClient and below, instantiate a new MockHttpClient() passing in $mockResponse instead. Since we're not doing anything with $mockLogger, cut createMock(), remove the variable, and paste that as an argument to GithubService().
Wow, this is looking better already! But, let's see what happens when we run the tests:
./vendor/bin/phpunit And... Woah! All of the tests are passing!
But, the assertion count did go down to "16" because MockHttpClient and MockResponse do not actually perform any assertions, like how many times a method is called.
So... what's the actual benefit to using these mock classes? Why not just create our own via PHPUnit? Ha... Check out this diff of GithubService. We removed 11 lines of code by using the "built-in" mocks in just one test. Imagine how many lines of code we could remove by using them in all of our tests. Hm... I think that's exactly what we'll do next.
Fix operation synchronization (#3232)
- Fix operation synchronization
PBENCH-993
This is fairly large, but yet much smaller than it started out. This solves two problems in Pbench Server task scheduling:
- The default SQLAlchemy transaction model is to start a transaction on any SELECT and end it on any UPDATE or INSERT; this means there's no potential for atomic update. This impacts the management of all internal context, but serious problems have been observed with the "operation" and "state" of the datasets.
- I began the dataset with the concept of a "state", as the dataset progresses through upload, backup, unpack, index, and delete. I quickly discovered that this wasn't ideal, but had trouble backing off completely from the concept. When I added the DB-based "operation" to replace the old filesystem links, the relationship between "operation" and "state" became even messier.
The primary change here is to divorce the Sync
class entirely from general
metadata. (I originally set out to make Metadata
management atomic, and the
fan-out was enormous: I'll tackle that again later, but while important in the
long run, getting Sync
working is immediately critical.)
There is a new Operation
DB object associated with a Dataset
, and this is
entirely managed within the Sync
class. For visibility, Dataset.as_json
will collect associated rows just as it does for dataset.metalog
, but this
doesn't require any special transactional management. (It's a snapshot.)
I've completely removed the Dataset.state
column (and its associated "last
transition" timestamp). "State" is tracked and observed by the various Operation
rows created and managed by Sync
. This corresponds to the previous
dataset.statussub-object managed by the old
Sync: each named operation (
OperationNameenum) that's been associated to a dataset will have a row with
stateand
messagecolumns. The
statecan be advanced through
READY,
WORKING,
OK, and
FAILED, and a message can be associated with each row (on error via
Sync.erroror as part of transition via
Sync.update`).
While I was modifying the Dataset schema, I also removed the created
column;
it's really redundant with dataset.metalog.pbench.date
, and we'll need to
understand that for "non-Pbench-standard" tarballs we might not be able to get
this anyway. This wasn't quite as "easy" as I'd thought, because it meant that
I had to refactor date-range operations to work on uploaded
(perhaps they
should have been that way originally).
Sync.__init__
: Construct a sync object for a particular named operation.
Sync.next
: Return a list of datasets which have Operation
rows for the
sync component that are in READY
state.
Sync.update
: Change the state of the sync component's Operation
,
optionally add a message to that Operation
, and set a list of named
operations for that dataset to READY
.
Sync.error
: Change the state of the sync component's Operation
to FAILED
and record an explanatory message for the failure.
To avoid rippling massive SQLAlchemy transaction model changes across all our
code, I've added a second session factory in Database
with the most strict
integrity level, SERIALIZABLE
. (In fact, I think that "REPEATABLE READ"
would be enough, and slightly more efficient, but sqlite3 doesn't support that
and I don't think I want to trust the weaker model it does support.)
Only the Sync
class in sync.py
currently uses that alternate session
factory. To avoid conflicts and confusions with autoflush and autocommit and
other SQLAlchemy "help", I'm creating new sessions on-the-fly for each call
and retiring them after commit/rollback. Note that the idiom
with Database.maker.begin() as session:
constructs a new session with fresh
state, allows a sequence of session operations, and then implicitly tears down
the session after it commits on success or rolls back on an exception.
To avoid multiple SELECT
statements within our transaction, Sync.update
fetches all relevant rows in a single SELECT
, and then organizes them for
selective updates. This ensures we have no SELECT
following the update of any
proxy object, which confuses SQLAlchemy in normal configuration.
Sync.update
and Sync.error
will loop up to 10 times on commit failure to
re-try with fresh data. Note that I've observed the retry logic in dozens of
functional test runs; and while I wonder vaguely whether I should be concerned
with the constant 10, I rarely see more than one or two retries since I added
a small delay to minimize thrashing.
NOTE: Alembic schema changes for Operation table
After working with Pete get get alembic to successfully generate a revision file for my changes, we realized what a pain it would be to migrate (and test) an actual live database. We need to have a functional test framework to stand up an "old" functional DB, upgrade it to the latest revision, and then validate the correctness.
+71 New Nintendo Switch titles
Anuchard Behind the Frame: The Finest Scenery Bow to Blood: Last Captain Standing Capcom Fighting Collection Colors Live Cozy Grove Crash Bandicoot 4: It’s About Time Dadish Dadish 2 Dadish 3 Daily Dadish Devil May Cry Devil May Cry 2 Devil May Cry 3 Special Edition DOOM 64 DOOM Eternal DYSMANTLE Fallout Shelter FATAL FRAME: Maiden of Black Water FIFA 18 FIFA 20 Nintendo Switch Legacy Edition FIFA 21 Nintendo Switch Legacy Edition FIFA 23 Nintendo Switch Legacy Edition Figment Gang Beasts Horizon Chase Turbo Huntdown Just Dance 2017 Just Dance 2018 Just Dance 2019 Just Dance 2021 LEGO Brawls LEGO Bricktales LEGO Builder's Journey LEGO Marvel Super Heroes LEGRAND LEGACY: Tale of the Fatebounds Marooners MEGA MAN BATTLE & FIGHTERS Mega Man Battle Network Legacy Collection Vol. 1 Mega Man Battle Network Legacy Collection Vol. 2 Metroid Prime Remastered Moonlighter Moto Rush GT NAMCO MUSEUM New Tales from the Borderlands OKAMI HD ONE PIECE Pirate Warriors 3 Deluxe Edition ONE PIECE: PIRATE WARRIORS 4 ONE PIECE: Unlimited World Red Deluxe Edition OneShot: World Machine Edition PAC-MAN WORLD Re-PAC Panzer Dragoon: Remake Shantae Shantae and the Pirate's Curse Shantae and the Seven Sirens Shantae: Half-Genie Hero Shantae: Risky's Revenge - Director's Cut Sid Meier’s Civilization VI SmileBASIC 4 Street Fighter 30th Anniversary Collection Summer in Mara Super Fowlst Super Fowlst 2 Super Monkey Ball Banana Mania Super Monkey Ball: Banana Blitz HD Tales from the Borderlands The Outer Worlds Tools Up! Ultra Street Fighter® II: The Final Challengers Will You Snail? Yu-Gi-Oh! Master Duel
Life is one big road with lots of signs. So when you riding through the ruts, don't complicate your mind. Flee from hate, mischief and jealousy. Don't bury your thoughts, put your vision to reality. Wake Up and Live!
Linux-0.12 (January 15, 1992)
This was created from a re-packaged 0.12 tree
Major milestone! Over the christmas break, I implemented paging to disk, meaning that you could actually use gcc on a 2MB system. Some poor sod (Robert Blum) wanted to use Linux on such a system, and couldn't get the kernel to compile with anything less "bloated" than gcc.
[ Irony alert: this was back when gcc worked fine on a system with just 4MB. Gone are those days. Loong gone. ]
The task size was still limited to 63 tasks of at most 64MB each, but other than that we were actually getting usable.
Together with other improvements and fixes, 0.12 was actually a very nice kernel. It was by now clearly more usable than Minix, which caused us to think that a 1.0 release was imminent. The next kernel version was to be named 0.95, which turned out to be less than a stellar idea.
This was also the point where we changed the copyright license. See the attached original release notes.
Other changes:
-
Ted Ts'o continued on his rampage, and implemented BSD process control (ie ^Z) etc. This also introduced the process tree code, with pointers between parents and children, rather than iterating over the whole list of processes.
-
Ted also did SVR4-style "saved uid/gid" handling.
-
use the C preprocessor for assembly files, cleaning up a lot of duplicate definitions etc.
-
better boot loader diagnostics
-
boot sequence now can change the size of the text display. Who the hell is d88-man?
-
fix nasty race condition between "truncate" and file IO.
-
add support for shared libraries with the "uselib()" system call. This (together with the fact that we could share clean executable pages) cut down on memory usage a lot.
-
supplemental group support. Hey, what can I say? Unix users expected them.
-
symbolic link handling. This was the first real extension to the standard Minix disk layout, and was made possible by the fact that I had written my own "mkfs" and "fsck". Before that, we were still on crutches, in that a Linux system depended on a Minix installation for these fundamental system tools.
-
mkdir()/rmdir() isn't just for root, you know.. (Yes, seriously. Old-style UNIX used to limit them to root-only, since they were just special sequences of mknod's)
-
Virtual terminals by Peter MacDonald (who was to do the SLS distribution).
Before having X, this was a big deal. The fact that Linux had virtual terminals with a good vt100 emulation actually made Linux stand out even among some of the big commercial unixes. The Linux console was just so much more pleasant to use that it isn't even funny.
-
first implementation of "select()", virtual terminals, and pty's.
These too were originally done by Peter MacDonald, based on some patches that had been floating around for Minix for a long time (but were never accepted into Minix).
They didn't get accepted into Linux either, but the patches did end up inspiring me to re-do the select/pty parts in a way that was more palatable to me.
-
restartable system calls
This was needed for Ted's code to do ^Z
-
Math emulation! The code was a total crock, and didn't bother with such unnecessary niceties as getting rounding right (or, to be honest, even getting more than about 60 bits right), but let's face it: it was enough to get work done.
My math emulation was eventually to be entirely replaced by a much more complete, and much more precise implementation by Bill Metzenthen. But my original stupid implementation actually ended living on at least for a while in BSD - I ended up making it available to the BSD people who couldn't use Bill's much better implementation due to licensing reasons. I don't know whatever eventually happened to it.
-
support alignment check on i486+. Nobody seems to have ever used it, though.
Original release notes:
RELEASE NOTES FOR LINUX v0.12
This is file mostly contains info on changed features of Linux, and using old versions as a help-reference might be a good idea.
COPYRIGHT
The Linux copyright will change: I've had a couple of requests to make it compatible with the GNU copyleft, removing the "you may not distribute it for money" condition. I agree. I propose that the copyright be changed so that it confirms to GNU - pending approval of the persons who have helped write code. I assume this is going to be no problem for anybody: If you have grievances ("I wrote that code assuming the copyright would stay the same") mail me. Otherwise The GNU copyleft takes effect as of the first of February. If you do not know the gist of the GNU copyright - read it.
INSTALLATION
This is a SHORT install-note. The installation is very similar to 0.11, so read that (INSTALL-0.11) too. There are a couple of programs you will need to install linux: something that writes disk images (rawrite.exe or NU or...) and something that can create harddisk partitions (fdisk under xenix or older versions of dos, edpart.exe or something like that).
NOTE! Repartitioning your harddisk will destroy all data on it (well, not exactly, but if you know enough to get back the data you probably didn't need this warning). So be careful.
READ THIS THROUGH, THEN READ INSTALL-0.11, AND IF YOU ARE SURE YOU KNOW WHAT YOU ARE DOING, CONTINUE. OTHERWISE, PANIC. OR WRITE ME FOR EXPLANATIONS. OR DO ANYTHING BUT INSTALL LINUX - IT'S VERY SIMPLE, BUT IF YOU DON'T KNOW WHAT YOU ARE DOING YOU'LL PROBABLY BE SORRY. I'D RATHER ANSWER A FEW UNNECESSARY MAILS THAN GET MAIL SAYING "YOU KILLED MY HARDDISK, BASTARD. I'M GOING TO FIND YOU, AND YOU'LL BE SORRY WHEN I DO".
-
back up everything you have on your harddisk - linux-0.12 is still in beta and might do weird things. The only thing I guarantee is that it has worked fine on /my/ machine - for all I know it might eat your harddisk and spit it out in small pieces on any other hardware.
-
Test out the linux boot-disk with the root file system. If it doesn't work, check the hardware requirements, and mail me if you still think it should work. I might not be able to help you, but your bug-report would still be appreciated.
Test that linux can read your harddisk at least partly: run the fdisk program on the root-disk, and see if it barfs. If it tells you about any partitions at all, linux can successfully read at least part of your harddisk.
-
Make sure that you have a free /primary/ partition. There can be 4 primary partitions per drive: newer DOS fdisks seem to be able to create only 2 (one primary and one extended). In that case use some other partitioning software: edpart.exe etc. Linux fdisk currently only tells you the partition info - it doesn't write to the disk.
Remember to check how big your partition was, as that can be used to tell which device Linux thinks it is.
-
Boot up linux again, fdisk to make sure you now have the new partition, and use mkfs to make a filesystem on one of the partitions fdisk reports. Write "mkfs -c /dev/hdX nnn" where X is the device number reported by linux fdisk, and nnn is the size - also reported by fdisk. nnn is the size in /blocks/, ie kilobytes. You should be able to use the size info to determine which partition is represented by which device name.
-
Mount the new disk partition: "mount /dev/hdX /user". Copy over the root filesystem to the harddisk, eg like this:
# for i in bin dev etc usr tmp # do # cp +recursive /$i /user # done
You caanot use just "cp +recursive / /user", as that will result in a loop.
-
Sync the filesystem after you have played around enough, and reboot.
# sync <wait for it to sync> ctrl-alt-del
The folklore says you should do this three times before rebooting: once should be enough, but I admit I do it three times anyway :) THIS IS IMPORTANT! NEVER EVER FORGET TO SYNC BEFORE KILLING THE MACHINE.
-
Change the bootdisk to understand which partition it should use as a root filesystem. See INSTALL-0.11: it's still the word at offset 508 into the image. You should be up and running.
That's it. Go back and read the INSTALL-0.11
New features of 0.12, in order of appearance
(ie in the order you see them)
Linux now prints cute dots when loading
WoW. Run, don't walk, to see this :). Seriously, it should hopefully now load even on machines that never got off the ground before, but otherwise the loading hasn't changed. Implemented by drew.
Super-VGA detection for extended alphamun modes
I cannot guarantee it, I didn't write it, but it works great on a ET400 SVGA card. I'm addicted to the new look with 100x40 character editing, instead of a cramped 80x25. This only works on VGA-cards that support higher text-resolutions, and which are correctly identified. Implemented by d88-man.
Job Control.
Ok, everybody used to typing ^Z after they started a long command, and forgot to put it in the background - now it works on linux too. Bash knows the usualy job-control commands: bg, fg, jobs & kill. I hope there will be no nasty surprises. Job control was implemented by tytso@athena.mit.edu.
Virtual consoles on EGA/VGA screens.
You can select one of several consoles by pressing the left alt-key and a function key at the same time. Linux should report the number of virtual consoles available upon bootup. /dev/tty0 is now "the current" screen, /dev/tty1 is the main console, and /dev/tty2-8 can exist depending on your text-mode or card.
NOTE! Scrolling is noticeably much slower with virtual consoles on a EGA/VGA. The reason is that no longer does linux use all the screen memory as a long buffer, but crams in several consoles in it. I think it's worth it.
The virtual consoles also have some new screen-handling commands: they confirm even better to vt200 control codes than 0.11. Special graphic characters etc: you can well use them as terminals to VMS (although that's a shameful waste of resources).
pty's
Ok. I have to admit that I didn't get the hangup-code working correctly, but that should be easy to add. The general things are there.
select
I've never used it, so I cannot say how well it works. My minor testing seems to indicate that it works ok. vc's, pty's and select were implemented by pmacdona, although I hacked it heavily.
387-emulation.
It's not complete, but it works well enough to run those gcc2.0 compiled programs I tested (few). None of the "heavy" math-functions are implemented yet.
Symbolic links.
Try out a few "ln -s xx yy", and ls -l. Note that I think tar should be recompiled to know anout them, and probably some other programs too. The 0.12 rootimage-disk has most of the recompiled fileutilities.
Virtual memory.
In addition to the "mkfs" program, there is now a "mkswap" program on the root disk. The syntax is identical: "mkswap -c /dev/hdX nnn", and again: this writes over the partition, so be careful. Swapping can then be enabled by changing the word at offset 506 in the bootimage to the desired device. Use the same program as for setting the root file system (but change the 508 offset to 506 of course).
NOTE! This has been tested by Robert Blum, who has a 2M machine, and it allows you to run gcc without much memory. HOWEVER, I had to stop using it, as my diskspace was eaten up by the beta-gcc-2.0, so I'd like to hear that it still works: I've been totally unable to make a swap-partition for even rudimentary testing since about christmastime. Thus the new changes could possibly just have backfired on the VM, but I doubt it.
And that's it, I think.
Happy hacking.
Linus
Linux-0.01 (September 17, 1991)
This is the initial 0.01 kernel as found on various history sites.
Fun facts:
-
kernel/Makefile still calls it the FREAX kernel
-
this was in a more innocent age, when the only copyright notice is a single "(C) 1991 Linus Torvalds" in lib/string.h
-
the keyboard driver was still in all assembly language, with a hardcoded map for (7-bit) Finnish keyboards. At least I had converted the VT100 emulation from assembly to C. Too bad I didn't keep the really old code around for historical interest.
-
All the early kernels wanted a special version of gcc to compile: I had made extensions to gcc-1.40 to make it use the x86 string instructions for things like "memcpy()" using the "-mstring-insns" command line option.
-
Also, note that newer versions of gcc (which do have the inline intrisics, quite independently of my early -mstring-insns hack) will not accept the code: it needs a compiler that outputs old-style a.out format, and that accepts some of the strange inline assembly that I used.
-
In short: you really need some stone-age tools to actually compile this, if you actually want to. And if you actually want to run it too, you need to have some old hardware and most likely edit some of the hardcoded numbers too. The harddisk driver has two different hardcoded settings: my harddisk, and Lasu's harddisk.
Statistics:
It's 88 files with about ten thousand lines, written by yours truly except for the vsprintf routine which was co-written with Lars Wirzenius. Lasu wasn't as huge a fan of inline assembly as I was, thus the comment
"Wirzenius wrote this portably, Torvalds fucked it up :-)"
I think that comment pretty much sums it up ;)
Original release notes for 0.01 follow:
Notes for linux release 0.01
0. Contents of this directory
linux-0.01.tar.Z - sources to the kernel bash.Z - compressed bash binary if you want to test it update.Z - compressed update binary RELNOTES-0.01 - this file
1. Short intro
This is a free minix-like kernel for i386(+) based AT-machines. Full source is included, and this source has been used to produce a running kernel on two different machines. Currently there are no kernel binaries for public viewing, as they have to be recompiled for different machines. You need to compile it with gcc (I use 1.40, don't know if 1.37.1 will handle all asm-directives), after having changed the relevant configuration file(s).
As the version number (0.01) suggests this is not a mature product. Currently only a subset of AT-hardware is supported (hard-disk, screen, keyboard and serial lines), and some of the system calls are not yet fully implemented (notably mount/umount aren't even implemented). See comments or readme's in the code.
This version is also meant mostly for reading - ie if you are interested in how the system looks like currently. It will compile and produce a working kernel, and though I will help in any way I can to get it working on your machine (mail me), it isn't really supported. Changes are frequent, and the first "production" version will probably differ wildly from this pre-alpha-release.
Hardware needed for running linux: - 386 AT - VGA/EGA screen - AT-type harddisk controller (IDE is fine) - Finnish keyboard (oh, you can use a US keyboard, but not without some practise :-)
The Finnish keyboard is hard-wired, and as I don't have a US one I cannot change it without major problems. See kernel/keyboard.s for details. If anybody is willing to make an even partial port, I'd be grateful. Shouldn't be too hard, as it's tabledriven (it's assembler though, so ...)
Although linux is a complete kernel, and uses no code from minix or other sources, almost none of the support routines have yet been coded. Thus you currently need minix to bootstrap the system. It might be possible to use the free minix demo-disk to make a filesystem and run linux without having minix, but I don't know...
2. Copyrights etc
This kernel is (C) 1991 Linus Torvalds, but all or part of it may be redistributed provided you do the following:
- Full source must be available (and free), if not with the
distribution then at least on asking for it.
- Copyright notices must be intact. (In fact, if you distribute
only parts of it you may have to add copyrights, as there aren't
(C)'s in all files.) Small partial excerpts may be copied
without bothering with copyrights.
- You may not distibute this for a fee, not even "handling"
costs.
Mail me at "torvalds@kruuna.helsinki.fi" if you have any questions.
Sadly, a kernel by itself gets you nowhere. To get a working system you need a shell, compilers, a library etc. These are separate parts and may be under a stricter (or even looser) copyright. Most of the tools used with linux are GNU software and are under the GNU copyleft. These tools aren't in the distribution - ask me (or GNU) for more info.
3. Short technical overview of the kernel.
The linux kernel has been made under minix, and it was my original idea to make it binary compatible with minix. That was dropped, as the differences got bigger, but the system still resembles minix a great deal. Some of the key points are:
- Efficient use of the possibilities offered by the 386 chip.
Minix was written on a 8088, and later ported to other
machines - linux takes full advantage of the 386 (which is
nice if you /have/ a 386, but makes porting very difficult)
- No message passing, this is a more traditional approach to
unix. System calls are just that - calls. This might or might
not be faster, but it does mean we can dispense with some of
the problems with messages (message queues etc). Of course, we
also miss the nice features :-p.
- Multithreaded FS - a direct consequence of not using messages.
This makes the filesystem a bit (a lot) more complicated, but
much nicer. Coupled with a better scheduler, this means that
you can actually run several processes concurrently without
the performance hit induced by minix.
- Minimal task switching. This too is a consequence of not using
messages. We task switch only when we really want to switch
tasks - unlike minix which task-switches whatever you do. This
means we can more easily implement 387 support (indeed this is
already mostly implemented)
- Interrupts aren't hidden. Some people (among them Tanenbaum)
think interrupts are ugly and should be hidden. Not so IMHO.
Due to practical reasons interrupts must be mainly handled by
machine code, which is a pity, but they are a part of the code
like everything else. Especially device drivers are mostly
interrupt routines - see kernel/hd.c etc.
- There is no distinction between kernel/fs/mm, and they are all
linked into the same heap of code. This has it's good sides as
well as bad. The code isn't as modular as the minix code, but
on the other hand some things are simpler. The different parts
of the kernel are under different sub-directories in the
source tree, but when running everything happens in the same
data/code space.
The guiding line when implementing linux was: get it working fast. I wanted the kernel simple, yet powerful enough to run most unix software. The file system I couldn't do much about - it needed to be minix compatible for practical reasons, and the minix filesystem was simple enough as it was. The kernel and mm could be simplified, though:
- Just one data structure for tasks. "Real" unices have task
information in several places, I wanted everything in one
place.
- A very simple memory management algorithm, using both the
paging and segmentation capabilities of the i386. Currently
MM is just two files - memory.c and page.s, just a couple of
hundreds of lines of code.
These decisions seem to have worked out well - bugs were easy to spot, and things work.
4. The "kernel proper"
All the routines handling tasks are in the subdirectory "kernel". These include things like 'fork' and 'exit' as well as scheduling and minor system calls like 'getpid' etc. Here are also the handlers for most exceptions and traps (not page faults, they are in mm), and all low-level device drivers (get_hd_block, tty_write etc). Currently all faults lead to a exit with error code 11 (Segmentation fault), and the system seems to be relatively stable ("crashme" hasn't - yet).
5. Memory management
This is the simplest of all parts, and should need only little changes. It contains entry-points for some things that the rest of the kernel needs, but mostly copes on it's own, handling page faults as they happen. Indeed, the rest of the kernel usually doesn't actively allocate pages, and just writes into user space, letting mm handle any possible 'page-not-present' errors.
Memory is dealt with in two completely different ways - by paging and segmentation. First the 386 VM-space (4GB) is divided into a number of segments (currently 64 segments of 64Mb each), the first of which is the kernel memory segment, with the complete physical memory identity-mapped into it. All kernel functions live within this area.
Tasks are then given one segment each, to use as they wish. The paging mechanism sees to filling the segment with the appropriate pages, keeping track of any duplicate copies (created at a 'fork'), and making copies on any write. The rest of the system doesn't need to know about all this.
6. The file system
As already mentioned, the linux FS is the same as in minix. This makes crosscompiling from minix easy, and means you can mount a linux partition from minix (or the other way around as soon as I implement mount :-). This is only on the logical level though - the actual routines are very different.
NOTE! Minix-1.6.16 seems to have a new FS, with minor
modifications to the 1.5.10 I've been using. Linux
won't understand the new system.
The main difference is in the fact that minix has a single-threaded file-system and linux hasn't. Implementing a single-threaded FS is much easier as you don't need to worry about other processes allocating buffer blocks etc while you do something else. It also means that you lose some of the multiprocessing so important to unix.
There are a number of problems (deadlocks/raceconditions) that the linux kernel needed to address due to multi-threading. One way to inhibit race-conditions is to lock everything you need, but as this can lead to unnecessary blocking I decided never to lock any data structures (unless actually reading or writing to a physical device). This has the nice property that dead-locks cannot happen.
Sadly it has the not so nice property that race-conditions can happen almost everywhere. These are handled by double-checking allocations etc (see fs/buffer.c and fs/inode.c). Not letting the kernel schedule a task while it is in supervisor mode (standard unix practise), means that all kernel/fs/mm actions are atomic (not counting interrupts, and we are careful when writing those) if you don't call 'sleep', so that is one of the things we can count on.
7. Apologies :-)
This isn't yet the "mother of all operating systems", and anyone who hoped for that will have to wait for the first real release (1.0), and even then you might not want to change from minix. This is a source release for those that are interested in seeing what linux looks like, and it's not really supported yet. Anyone with questions or suggestions (even bug-reports if you decide to get it working on your system) is encouraged to mail me.
8. Getting it working
Most hardware dependancies will have to be compiled into the system, and there a number of defines in the file "include/linux/config.h" that you have to change to get a personalized kernel. Also you must uncomment the right "equ" in the file boot/boot.s, telling the bootup-routine what kind of device your A-floppy is. After that a simple "make" should make the file "Image", which you can copy to a floppy (cp Image /dev/PS0 is what I use with a 1.44Mb floppy). That's it.
Without any programs to run, though, the kernel cannot do anything. You should find binaries for 'update' and 'bash' at the same place you found this, which will have to be put into the '/bin' directory on the specified root-device (specified in config.h). Bash must be found under the name '/bin/sh', as that's what the kernel currently executes. Happy hacking.
Linus Torvalds "torvalds@kruuna.helsinki.fi"
Petersgatan 2 A 2
00140 Helsingfors 14
FINLAND
Linux-0.11 (December 8, 1991)
This was created from a re-packaged 0.11 tree.
Linux-0.11 has a few rather major improvements, but perhaps most notably, is the first kernel where some other people start making real contributions.
-
I fixed the buffer cache code, making it a lot more stable
-
demand-loading from disk. My comment proudly states:
Once more I can proudly say that linux stood up to being changed: it was less than 2 hours work to get demand-loading completely implemented.
This is a major milestone, since it makes the kernel much more powerful than Minix was at the time. I also share clean pages.
-
we still don't have an /sbin/init, but we now load /etc/rc at bootup, and the kernel will loop, spawning shells forever. That makes it easier to test things.
-
scaffolding for math emulation introduced.
-
Ted Ts'o shows up as a coder. Ted implements: o "#!" escape handling for executables o fixes for some file permission handling o "sticky" directory bit o first "malloc()/free()" implementation. (this one is horrible: the free needs the size for good performance, which will result in years of "free_s()" pains) o adds BSD-style setreuid/gid() handling o allows us to specify root device at image build time o cleanups of some of the uglier direct %fs-register accesses
-
Galen Hunt shows up as a coder: he's added code to handle different video card detection (whereas my original one just handled VGA, we now handle CGA, MGA, EGA and VGA)
-
The console can beep now: John T Kohl (who also does the tty KILL char handling)
-
we also now have German (Wolfgang Thiel) and French (Marc Corsini) keyboard maps. World Domination!
Btw, if you wonder what the "Urgel" comments are - I was still fairly Swedish-speaking, and "Urgel" is what I would these days write as "Ugh".
It's a sign of trouble or ugly code. The floppy driver in particular is clearly not something I'm very proud of ;).
[PATCH] Linux-0.95 (March 8, 1992)
This was the first kernel that got released under the GPL (0.12 had a time-lapse to make sure the people involved accepted the license change: nobody ever complained).
Because 0.12 had been so successful, this was supposed to be closer to 1.0. Yeah, right. 1.0 was eventually released almost exactly two years later..
The big change here is the first signs of a real VFS layer: while the only available filesystem is still the Minix-compatible one, the code is factored out, and the Minix-specific stuff is put in its own directory. You can clearly see how the thing is moving towards having multiple different filesystems.
The VFS changes also cause cleanups in various drivers, since we end up having more clear inode operation structure pointer handling.
Superblock handling is still minix-specific..
NOTE! We also have /bin/init finally. It still falls through to the old "run shells forever" case if no init can be found, but it's starting to look a whole more like real UNIX user-land now..
New developers: Ross Biro shows up, and does ptrace. He will later end up doing the first-generation networking code.
Other changes:
- UK and Danish keyboard maps (and the keyboard driver supported "Application mode" keys from vt100+)
- Make sure interrupts clear the 'D'irection flag
- Floppy driver gets track buffer, which speeds it up immensely. This was done based on patches by Lawrence Foard (entropy@wintermute.wpi.edu)
- Lots of buffer cache cleanups.
- support nonblocking pipe file descriptors
- recursive symlink support
- sys_swapon() means that we don't have to select the swap device at build (or boot) time ("Written 01/25/92 by Simmule Turner, heavily changed by Linus")
- start some generic timer work (ugh, but these first timers were horrible hardcoded things)
- ptrace for debugging
- console size query support with TIOC[G|S]WINSZ
- /dev/kmem ("by Damiano")
- rebooting (with ctrl-alt-del or sys_reboot()).
From the release notes:
New features of 0.95, in order of appearance
(ie in the order you see them)
Init/login
Yeah, thanks to poe (Peter Orbaeck (sp?)), linux now boots up like a real unix with a login-prompt. Login as root (no passwd), and change your /etc/passwd to your hearts delight (and add other logins in /etc/inittab etc).
Bash is even bigger
It's really a bummer to boot up from floppies: bash takes a long time to load. Bash is also now so big that I couldn't fit compress and tar onto the root-floppy: You'll probably want the old rootimage-0.12 just in order to get tar+compress onto your harddisk. If anybody has pointers to a simple shell that is freely distributable, it might be a good idea to use that for the root-diskette.
Especially with a small buffer-cache, things aren't fun. Don't worry: linux runs much better on a harddisk.
Virtual consoles on any (?) hardware.
You can select one of several consoles by pressing the left alt-key and a function key at the same time. Linux should report the number of virtual consoles available upon bootup. /dev/tty0 is now "the current" screen, /dev/tty1 is the main console, and /dev/tty2-8 can exist depending on your text-mode or card.
The virtual consoles also have some new screen-handling commands: they confirm even better to vt200 control codes than 0.11. Special graphic characters etc: you can well use them as terminals to VMS (although that's a shameful waste of resources), and the PF1-4 keys work somewhat in the application-key mode.
Symbolic links.
0.95 now allows symlinks to point to other symlinks etc (the maximum depth is a rather arbitrary 5 links). 0.12 didn't like more than one level of indirection.
Virtual memory.
VM under 0.95 should be better than under 0.12: no more lockups (as far as I have seen), and you can now swap to the filesystem as well as to a special partition. There are two programs to handle this: mkswap to set up a swap-file/partition and swapon to start up swapping.
mkswap needs either a partition or a file that already exists to make a swap-area. To make a swap-file, do this:
# dd bs=1024 count=NN if=/dev/hda of=swapfile
# mkswap swapfile NN
The first command just makes a file that is NN blocks long (initializing it from /dev/hda, but that could be anything). The second command then writes the necessary setup-info into the file. To start swapping, write
# swapon swapfile
NOTE! 'dd' isn't on the rootdisk: you have to install some things onto the harddisk before you can get up and running.
NOTE2! When linux runs totally out of virtual memory, things slow down dramatically. It tries to keep on running as long as it can, but at least it shouldn't lock up any more. ^C should work, although you might have to wait a while for it..
Faster floppies
Ok, you don't notice this much when booting up from a floppy: bash has grown, so it takes longer to load, and the optimizations work mostly with sequential accesses. When you start un-taring floppies to get the programs onto your harddisk, you'll notice that it's much faster now. That should be about the only use for floppies under a unix: nobody in their right mind uses floppies as filesystems.
Better FS-independence
Hopefully you'll never even notice this, but the filesystem has been partly rewritten to make it less minix-fs-specific. I haven't implemented all the VFS-patches I got, so it's still not ready, but it's getting there, slowly.
And that's it, I think.
Happy hacking.
Linus (torvalds@kruuna.helsinki.fi)
patch3....
Ok, I already announced it on the kernel mailing-list, but I might as well go all the way. I put out patch3 to 0.96a yesterday, and it's available on banjo in pub/Linux/Linus, and I'll upload it to the other normal ftp-sites tonight.
NOTE! Patch3 is (like patch2) more of a kernel-hacker patch: it's just in case you want to keep up with my kernel. It has some problems with some serial lines, and if you experience them, I'd like to know what type of chip you are running (and what linux reports on bootup). If you don't think patching the kernel is fun, you might as well forget this and wait for a real release (next month?).
Patch 3 contains:
- support for attaching and detaching processes under gdb (but you need a gdb that knows about this).
- 16550A support
- full core-dumping (again, you need a gdb that supports it)
- sockets have no problems with non-root binding etc
- /dev/zero implemented (mknod /dev/zero c 1 5)
None of the patches are very big (the whole patch is 17kB compressed, most of it attach/detach code), but they are all pretty useful.
The 16550A support means that with the appropriate chip you now should be able to use the serial ports at much higher speeds, but as mentioned, it seems to break on some machines.
The detaching isn't perfect yet (I noticed only after making the diffs that I had forgotten to do some cleanups), but it's not generally a problem (the code just forgets to give the process back to it's rightful father).
The patch is relative to the pl2 kernel, so you have to use the earlier patches first. This time, I've added the lib/itimer.c code.
16550A support was written by tdavis, the correct format of the core-dumps was written by eric (who also wrote the attach/detach code I used as an example when implementing it), /dev/zero was written by almesber. Nice to see good patches: I just did the socket-thing and rewrote the attaching to suit me.
Linus
[PATCH] Linux-0.97 (August 1, 1992)
Move <xxx.h> to <linux/xxxx.h>
Variable-sized buffer blocks and dynamic buffer cache allocation. The VM knows how to shrink it automatically!
Add support for "fast" interrupt handlers for serial lines.
Update copyrights to say 1992 too.
Remove broken VESA video card handling.
Separate out partition handling code ("genhd").
Make init unkillable.
Norwegian keyboard map.
Future Domain SCSI controller driver by Rik Faith.
Changes in 0.97:
-
The VESA-support was removed. I'd be happy to put it back once it works on all hardware. Instead of the VESA-code, I finally put in the automatic SVGA setup patches. See the top-level Makefile.
-
The IRQ code has solidified, and should work on all machines. Not all of the SCSI drivers use it yet, so I expect patches for that..
-
Serial interrupts are handled slightly differently, and performance should be up. I've sent out a few alpha-releases, and testing seems to indicate that's actually true this time. Reactions have ranged from "nice" to "wonderful" :-)
-
The buffer-cache and memory management code has been edited quite a bit. ps/free etc programs that reads kernel memory directly no longer work, and even a recompilation won't be enough. They actually need editing before they work.
The buffer-cache now grows and shrinks dynamically depending on how much free memory there is. Shift+PrintScreen will give some memory statistics. (Ctrl+PrSc gives task-info, ALT+PrSc gives current register values).
The mm code changes removed some race-conditions in the VM code, and I also tried to make the Out-of-swapspace error less severe (better thrashing-detection etc).
-
The super-block code has been cleaned up. Especially the extended fs needs to be edited a bit to take advantage of the new setup, and I expect Remy Card will have a patch out eventually.
-
include-files have been moved around some more: there are still some names that clash with the standard headers, but not many.
-
Unswappable processes implemented: by default only 'init' is unswappable. This is a bit safer in low-memory conditions, as at least init won't die due to low memory. I also made killing init impossible: if init doesn't recognize a signal, it simply won't get it. Some other changes ("while (1) fork();" won't kill the machine for non-root users etc)
-
The new SCSI drivers are in. These make the kernel noticeably bigger, but you can leave them out if you don't want them.
-
The floppy- and hd-drivers print out more debugging-info in case of errors: this might be irritating if you have hardware that works, but often gives soft-errors. On the other hand, some old debugging-info was removed - notably for user-level protection errors etc.
-
Various minor fixes. I haven't made cdiffs (and I haven't gotten any requests for them, so I probably never will), but they would be pretty big.
Things that I didn't have time for:
-
I wanted to rewrite the tty drivers to be more "streams-like" (ie not an actual streams-implementation, but some of the ideas from streams). I never got around to it: there was simply too much else to do.
-
I got a lot of patches, and some went in, others didn't. If you think your patch was important, please re-send it relative to the new version.
I'd like comments on the new system: performance / clarity of code etc. 0.97 should correct all known bugs (at least the ones I know about), but I guess that's just wishful thinking.
Note that the dynamic buffer-code also handles differently-sized buffers, but that the rest of the system (block device drivers, filesystem code etc) cannot yet take advantage of this - there is still some coding needed.
Linus
linux-0.96c.patch1 contains more changes than I originally envisioned: I changed the IRQ routines and the serial code to be easier and cleaner (and hopefully more efficient) and I thought that would be it. I was wrong.
I got several patches (and one bug-report) again, and while I haven't had time to check them all, some of them are in. Fixes:
-
Remy Cards correction to the out-of-space problem with the extended fs is here. Most people using the ext-fs might already have applied this patch, in which case you might have problems patching.
-
my ftruncate() fix is here. Again, if you already did the trivial patch by hand, you'll get errors when patching.
-
almesber's implementation of read-only filesystems is here (after editing by yours truly). The mount() system call now accepts a flags integer as well as a pointer to some arbitraty data in user space for some special mount() calls. The general flags allow (a) read-only mounting, (b) disabling of suid executables (c) disabling of device special files and (d) total disabling of executables on a per-filesystem basis. The filesystem specific mount() info isn't currently used by any fs, but can be used to specify additional information that depends on a special fs type (a password or similar would be possible..)
-
the rename() system call had a bug in that it allowed moving over a directory: I think the code to handle this was lost in the vfs editing, and although the GNU mv utility checked it, a malicious (or just unsuspecting) program can destroy the fs using this. Thanks for the bug-report: it was very easy to add once I saw the problem.
-
support for vesa-standard svga cards in setup.S. I'm unable to test this, but my svga card still works after the patch, so I left it in in the hope that it doesn't break for anybody else.
-
various minor editing by me, or minor patches sent in by others.
The full cdiff is almost 50kB compressed, so this is a bigger-than-usual patch. Hope there are no problems. People who are using the new SCSI drivers might have problems with my changes to the SCSI irq-setup changes, so be careful (actually using the original sources might be a good idea, and then upgrading again). I hope to get the new SCSI drivers into the kernel soon (definitely in time for 0.98).
I'd be interested to hear comments on serial line performance, bugs, features, etc. As usual, I'm hoping this release won't contain any new bugs while fixing all the old ones, but I guess that's likely to happen right after the first winter olympics in Hell.
Linus
[SQUASHED] core: Blacklist pixel system feature from Google Photos
We want to include the P21 experience flag to enable new features,
however it seems like Google Photos uses it to decide whether to use the
TPU tflite delegate. There doesn't seem to be any fallback so we need to
make sure the feature is not exposed to the app so that a normal
NNAPI/GPU delegate can be used instead.
Test: Google Photos editor with PIXEL_2021_EXPERIENCE feature in product
Signed-off-by: Kuba Wojciechowski <nullbytepl@gmail.com>
Change-Id: I51a02f8347324c7a85f3136b802dce4cc4556ac5
commit 67eb31b3bb43d06fcc7f6fdb2f92eb486451cae6 Author: kondors1995 normandija1945@gmail.com Date: Thu Jun 9 17:39:25 2022 +0530
Core: Extend Pixel experience Blacklist For Google Photos
Turns out having these brakes Original quality backups.
Since these indicate that the device is pixel 4 with in the turn brakes device spoofing as OG pixel
Change-Id: I336facff7b55552f094997ade337656461a0ea1d
commit 508a99cde60b73dc3f1e843d569bca31def35988 Author: ReallySnow reallysnow233@gmail.com Date: Fri Dec 31 16:40:23 2021 +0800
base: core: Blacklist Pixel 2017 and 2018 exclusive for Google Photos
* In this way can use PixelPropsUtils to simulate the Pixel XL prop
method to use the unlimited storage space of Google Photos
* Thanks nullbytepl for the idea
Change-Id: I92d472d319373d648365c8c63e301f1a915f8de9
commit aaf07f6ccc89c2747b97bc6dc2ee4cb7bd2c6727 Author: Akash Srivastava akashniki@gmail.com Date: Sat Aug 20 19:04:32 2022 +0700
core: Pixel experience Blacklist For Google Photos for Android 13
* See, in Android 13 pixel_experience_2022_midyear was added, which needs to be blacklisted aswell
Change-Id: Id36d12afeda3cf6b39d01a0dbe7e3e9058659b8e
commit 9d6e5749a988c9051b1d47c11bb02daa7b1b36fd Author: spezi77 spezi7713@gmx.net Date: Mon Jan 31 19:17:34 2022 +0100
core: Rework the ph0t0s features blacklist
* Moving the flags to an array feels more like a blacklist :P
* Converted the flags into fully qualified package names, while at it
Signed-off-by: spezi77 <spezi7713@gmx.net>
Change-Id: I4b9e925fc0b8c01204564e18b9e9ee4c7d31c123
commit d7201c0cff326a6374e29aa79c6ce18828f96dc6 Author: Joey Huab joey@evolution-x.org Date: Tue Feb 15 17:32:11 2022 +0900
core: Refactor Pixel features
* Magic Eraser is wonky and hard to
enable and all this mess isn't really worth
the trouble so just stick to the older setup.
* Default Pixel 5 spoof for Photos and only switch
to Pixel XL when spoof is toggled.
* We will try to bypass 2021 features and Raven
props for non-Pixel 2021 devices as apps usage
requires TPU.
* Remove P21 experience system feature check
Change-Id: Iffae2ac87ce5428daaf6711414b86212814db7f2
[PATCH] Linux-0.99.7 (March 13, 1993)
Nigel Gamble makes lp driver able to use interrupts.
The mmap() code is finally starting to really happen. In particular, this means that "verify_area()" is doing more - it can check the actual areas that have been mapped, rather than just blindly assume that the user can access anything in the first 3GB.
For now, the mmap code only does anonymous mappings and /dev/mem. Executables are still read into memory. But the infrastructure is there.
The VFS layer stops using names directly in user space - the race conditions were just too hard to handle. So pathnames are copied into kernel space before they are looked up.
Ext2fs (Remy Card) and xiafs (Frank Xia) are merged. Both are much faster filesystems using bitmaps rather than freelists, and can handle big disks and big files.
Ext2fs is based on extfs, while xiafs is a simpler straightforward extension of the old minixfs.
Xiafs obviously was eventually dropped.
[Original announcement below]
It has been two weeks since the last release, so it's high time you should once more enjoy the pleasures of patching up your kernel to a higher version number if you are into those kinds of perversions. Linux 0.99pl7 is available as both full source and diffs against pl6 on nic.funet.fi: pub/OS/Linux/PEOPLE/Linus, and it will probably show up on the other major sites within days.
As of pl7, I'm trying out a new format: both the full distribution and the diffs are now compressed with gzip as it is now available at most machines. Also, the diffs are no longer context diffs: they use the smaller unified diff format. At least the stock SunOS 'patch' binary seems not to understand them at all, but GNU patch has no problems, and unified diffs are a bit smaller (not that it matters much after gzip has done its deed on them).
As to the changes in pl7: they are many and varied, and hopefully all to the better (-"Dream on Linus" -"Shut up"). Short list follows, hope I haven't forgotten anything major.
- ext2fs is in: note that this is version 0.2c and that if you are currently using an older version there are some changes. Small filesystems (< 256MB) should reportedly be automatically converted, bigger filesystems need some assistance. Ext2fs written by Remy Card.
- xiafs is also in: again, the final version uses a slightly different layout to support exact file block counts, so if you use the xiafs, you should make sure you have the latest fs-tools. Xiafs written by Frank Xia.
- updated Ultrastor SCSI driver with scatter/gather by Scott Taylor. It should be much faster, as well as support the Ultrastor-34F.
- major changes in the memory manager. Yours truly got carried away, and finally cleaned up the mm layer due to pmacdona wanting mmap() on /dev/zero. This means that the IPC patches won't go in, and need updating. Krishna?
- more big changes: I rewrote most of the VFS filename-handling. Filenames are copied into kernel space before being used, which cleaned things up somewhat, as well as simplifying some race- condition handling. As a result, I was also able to easily expand the minix fs to cover the "linux" fs that some people have been using (same layout, but with 30-character names).
- updated the printer driver: Nigel Gamble. It is now able to use interrupts, although the default behaviour is still to poll.
- serial driver updates by tytso (but no SLIP yet)
- various minor patches for POSIX compliace: Bruce Evans, Rick Sladkey and me.
- other minor patches all over the place: scsi, tcpip etc.
All in all, the patches are almost half a megabyte even as unified diffs: getting the full sources might be easier than patching it all up.
As always, some of the patches are actually tested by me, some aren't (and just because I wrote some of them doesn't mean I actually tested them: I have no idea if mmap() works on /dev/zero, although it should). I have neither a printer nor an Ultrastor controller, and I haven't got the diskspace to test out the new filesystems, so I can only hope they work "as advertized". If you have problems, I want to hear about them, so keep the reports coming, and try to pinpoint the problem as well as you can ("when I do this it happens every time..").
Linus
Settings: Refactor and clean connectivity check preference
wow this was just horrible...
Made this preference way more maintainable and runtime effective:
- Declare the preference in xml instead of hardcoding - this makes it searchable, more maintainable and is also better runtime wise
- Use arrays instead of manually naming each URL
- Use an ArrayList to handle index <-> setting relationship more easily
- Use static imports instead of literal calls
- Actually handle cases of non availability
- There is absolutely no reason to handle OnResume here
- Get rid of useless functions
- Get rid of useless imports
- Move resources to the proper custom files so we don't confuse translators
- More, too lazy. Don't write shit code please. Thank you.
Change-Id: Idd3b95d851ec83b36005b7a52880932df7e5009e
Add files via upload
Kalyan bazar Satta online matka results app Kalyan Jodi Ank Panna Single Satta Matka Milan bazar Gali Disawar Result App entertainment
Please note that our app is only for entertainment purpose. No Real money involved in our app
Kalyan Bazar Satta Matka - Online Matka Play App is Online Kalyan Bazar Satta Matka Play App Play online matka satta matka dpboss for Entertainment Purpose Only.
Online Matka Play App for Entertainment Purpose Only
Welcome To The World Of Dpboss Kalyan Bazar Satta Matka - Online Matka Play App , Here You Get Latest Information About Satta Matka Guessing, Satta Matka Kalyan And Much More.
Kalyan Bazar Satta Matka online RESULT:- Provides You Latest Satta Result, Today's Matka Result, Quickly Updated Satta Matka Etc. We Also Porvide You Free Matka Tips Today, Perfect Satta Matka Tips And Kalyan Matka Tips.
Kalyan Bazar dpboss Satta Matka , Is The Only Website That Provide You Perfect And Sure Guessing Of Kalyan Matka, Main Mumbai, Milan Day/Night Etc.
Kalyan dpboss Bazar Satta Matka - Online Matka Play App is a very fantastic application. For sports person. We providing the best and fast service to a sports person.
We providing fast results for all markets Like - Kalyan, Shridevi, Milan etc. We provide best Satta Matka Tips, Online Matka Result, Online Matka Play app for Kalyan, Live Matka Result, Kalyan Chart, Kalyan Panel Chart, Dpboss Online information.
We need consistent support to get going. If you have enjoyed this app and helpful for your life, do not forget to rate us on the play store. Please help us by spreading this app amongst your friends.
Declaration: All content provided by Kalyan Bazar satta Matka - Online Matka Play App. All information provided by Kalyan Bazar Matka - Online Matka Play App and this application does not relate to any illegal Business.
Note:- Please note that this app is only for sports persons. No Real Money Involved in this App.
New review for CPSC 310 by Andy Liang (#378)
The course consists of a full stack project (no DB) where the hardest part of the project is actually more algorithm related ish (building a query engine) than it is software construction in my opinion. The project itself ended up being very useless (especially if you have done one decent full stack personal project or have coop experience) since there is no code quality enforcement. This means you are free to write garbage code, as long as it works. I would advice to start early on the project though!
The conceptual portion taught in lecture is useful. However the project, nor any other part of the course, really forces you to try the design patterns that you have learned. :)
Difficulty: 3/5 Quality: 2/5 Andy Liang, Feb 05 2023, course taken during 2022W1
View YAML for new review
- author: Andy Liang authorLink: date: 2023-02-05 review: | The course consists of a full stack project (no DB) where the hardest part of the project is actually more algorithm related ish (building a query engine) than it is software construction in my opinion. The project itself ended up being very useless (especially if you have done one decent full stack personal project or have coop experience) since there is no code quality enforcement. This means you are free to write garbage code, as long as it works. I would advice to start early on the project though!The conceptual portion taught in lecture is useful. However the project, nor any other part of the course, really forces you to try the design patterns that you have learned. :) difficulty: 3 quality: 2 sessionTaken: 2022W1
GIFs
![dreamseeker_ZE6hyRdYet](https://user-images.githubusercontent.com/42397676/209779120-f7d76862-91e2-4366-a49d-e93366d96faf.gif) updated: Death no longer fully gibs (carbons) ![dreamseeker_8S8r6B6gMM](https://user-images.githubusercontent.com/42397676/209874302-2e24f581-ffda-42e7-9794-dbe0fff2ff5b.gif) Panic at seeing bad omen coupons ![dreamseeker_tykHbePTSS](https://user-images.githubusercontent.com/42397676/209887936-5d7f5edf-6fa2-41c7-8503-37432b49c7c0.gif) ![3](https://user-images.githubusercontent.com/42397676/209885388-90523f2c-531a-4928-96b2-c902552cbbbc.png)Screenshots & Videos
Put screenshots and videos here with an empty line between the screenshots and the `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.