1,859,775 events recorded by gharchive.org of which 1,859,775 were push events containing 2,967,579 commit messages that amount to 227,603,805 characters filtered with words.py@e23d022007... to these 40 messages:
Fixes broken ass area on Helios tation (#440)
-
Fixes Helios
-
fuck you turbine
-
MACHINERY/wish_granter
makes podpeople call parent (#65362)
About The Pull Request
kinda fucked up that it doesnt. Also while checking this PR I noticed other species also don't, kinda screwed up world we live in... Why It's Good For The Game
Parent's spec_life is what checks if you have nobreath, and in which case it will remove all your oxygen damage and, if in crit, give you brute damage instead. Not having this makes you basically not take damage while in crit, which I think shouldn't be the case. Changelog
cl fix: Podpeople now take self-respiration into account when taking damage from critical condition, like most other species. /cl
Contractor Expansion 2 (#12311)
-
weh!
-
fuck you linter
-
very important
-
Update modular_skyrat/modules/contractor/code/datums/midround/event.dm
Co-authored-by: GoldenAlpharex 58045821+GoldenAlpharex@users.noreply.github.com
- Update modular_skyrat/modules/contractor/code/datums/midround/outfit.dm
Co-authored-by: GoldenAlpharex 58045821+GoldenAlpharex@users.noreply.github.com
-
requested changes
-
also this
-
requested + cleanup
Co-authored-by: GoldenAlpharex 58045821+GoldenAlpharex@users.noreply.github.com
Add files via upload
The diary is the best way to note down your day to day activity so that in future you may be able to have look at your achievement and happy moments. Diaries can be of two type personal diary and work diary (professional diary).Personal diary is to be kept secret one where as private diary can be shared with organization to which you are abounded. Personal Diary application will allow you to have your personal diary and Professional diary in the same case but with different privacy menu and allow you to note down your memories in your cell phones which is much secured than traditional way i.e. book .User must write the diary on daily basis for that proper scheduling in this Application we are focusing on the same with help of reminders and notifications. When it comes to write diary we thought about writing text but it is not the efficient way or we can express our thoughts in more colorful way though colors different. Android application is the way to make the life easy and convenient and to make your smart phone smarter this application will help and keeping memories of your memorable moments and to watch that moment will give and different filling as a person. This diary will be an audiovisual diary and you may enjoy your joyful moments in future whenever you want. Personal Diary will change the current scenario from old way to the digital in writing diaries. Some jobs involve field duty and to take note about your work and it needs to be shared with your organization. This application allows you to keep the work related records. Diary will be helpful for the student as well as to the professionals also to take the notes about their life and that is the important one.
drm: Handle dim for udfps
-
Apparently, los fod impl is better than udfps cuz it has onShow/HideFodView hook, which allows us to toggle dimlayer seamlessly.
Since udfps only partially supports the former one, we'd better kill dim in kernel. This is kinda a hack but it works well, bringing perfect fod experience back to us.
Co-authored-by: Art_Chen Chenxy0201@qq.com Signed-off-by: alk3pInjection webmaster@raspii.tech Change-Id: I80bfd508dacac5db89f4fff0283529c256fb30ce
Trait List Reorganization + Fixy, 2.0
The diff looks like a lot, but: All YW Additions have been moved to neutral_ch.dm given YW refused to follow sanity policies of putting stuff in _yw files, and we're seemingly keeping these.
All BASE VOREStation files (negative, positive, neutral).dm have been synced with upstream, and any changes are appropriately labeled with CHOMPEdits and WHY they're edited, for future coders.
Traits have been renamed to make for easier grouping. Specifically: Pain Intolerant -> Pain Intolerance High Pain Intolerance -> Pain Intolerance, Major Haemophilia (Organics Only) -> Haemophilia (2x bloodloss rate, 2 points) Haemophilia (YW Added) -> Haemophilia, Major (This one was 3x bloodloss rate for 3 points) Big mouth -> Mouth, Big (Yes, it reads weird, but makes it easier to see the traits in the list.) Giant mouth -> Mouth, Giant (Yes, it reads weird, but makes it easier to see the traits in the list.) Low/High Pressure Resistance -> Pressure Resistance, Low (or High) Extreme Radiation Resistance -> Radiation Resistance, Major. (Standardizes names.) High blood volume -> Blood Volume, High Very high blood volume -> Blood Volume, Very High
Multiple traits had description notes added to explain what they MECHANICALLY do. We're a server with more action than upstream, our traits need to be mechanically clear. Species will be receiving a pass to give their description/readme info a mechanical summary later on.
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!
HOLY FUCKING SHIT, IT WORKS
WOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Makes it obvious how to run mongo-hacker
I haven't used mongo-hacker for a few years, so I forgot how to run it. For whatever reason I assumed that it runs as it's own shell app.
Reading the README, it wasn't obvious to me.
I spent about 15 mins trying to figure it out, going into ~/.nvm/versions/node/v17.2.0/lib/node_modules/mongo-hacker and trying to run the js files with node haha.
I thought maybe because it hasn't been updated since 2019 (around the time of Mongo 3.4 apparently, and now we're on Mongo 5) that it was probably old and broken.
I was getting print() not defined, and _isWindows not defined etc. i tried hacking the JS and adding in const print = console.log; and
const _isWindows = () => false;etc hahaha Then finally I checked the make file and noticed it updates .mongorc then I looked at .mongorc etc and realized it probably runs inside
mongo`
I think 2 lines would save many people the trouble of wondering how to run it.
add something extremely funny
you will pee yourself laughing. im bored and waiting for my friend to come to my house so i did this
I'm fucking stupid like what the hell did I do why didn't i want that the fuck xD
Added new Rush cards
From "Deck Modification Pack - Galaxy of Fate!!":
- Ewekai Grounmouton
- Ewekai Pyrowool
- Ewekai Nightmutton
- Magical Sheep Girl Meeeg-Chan
- Protector of the Throne
- Griffore
- Ozone Layer
- Transamu Ephyrai
- Great Cosmonarch
- Ewekai Planeau
- Packrat
- Rapid Carriearth
- Crusher Drone
- Executie Fermi
- Ground Cerberus
- Meet and Greed
- Ewekai - Grudges from the Grave
- Crisis at the Sacred Tower From "Go Rush Deck - Galactica Arrive":
- Universe Dea
- Silver Seyfert
- Meteorhino
- Vortex Shooter
- Giant Bulge
- Orbit Skater
- Interstellime
- Universtorm From "Go Rush Deck - Jointech Attack":
- Elephound
- Cliptera
- Tamabot
- Tribute Lock The "Yu-Gi-Oh! SEVENS My Road Academy Volume 1" promo:
- Strong Boy Sevens Road The "Yu-Gi-Oh! SEVENS Luke! Explosive Supremacy Legend!! Volume 3" promo:
- Void Strike Dragon Zerogaigias
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.
First upload - two bugs
There are two bugs still left in this game. One lets you get infinite health, the other causes an IL and breaks the game. One of these is worth fixing.
I would love to add some little die rolling animations and such later. Maybe flesh it out a little more or add more to the start of the game before you are sent into the future. Maybe do a little Metroid thing where you lose your stats and kit when flung into the future.
Hope you enjoy playing, if anyone actually finds this repo. I put way more effort into this than I should have.
Update architecture to "SFNNv4". Update network to nn-6877cd24400e.nnue.
Architecture:
The diagram of the "SFNNv4" architecture: https://user-images.githubusercontent.com/8037982/153455685-cbe3a038-e158-4481-844d-9d5fccf5c33a.png
The most important architectural changes are the following:
- 1024x2 [activated] neurons are pairwise, elementwise multiplied (not quite pairwise due to implementation details, see diagram), which introduces a non-linearity that exhibits similar benefits to previously tested sigmoid activation (quantmoid4), while being slightly faster.
- The following layer has therefore 2x less inputs, which we compensate by having 2 more outputs. It is possible that reducing the number of outputs might be beneficial (as we had it as low as 8 before). The layer is now 1024->16.
- The 16 outputs are split into 15 and 1. The 1-wide output is added to the network output (after some necessary scaling due to quantization differences). The 15-wide is activated and follows the usual path through a set of linear layers. The additional 1-wide output is at least neutral, but has shown a slightly positive trend in training compared to networks without it (all 16 outputs through the usual path), and allows possibly an additional stage of lazy evaluation to be introduced in the future.
Additionally, the inference code was rewritten and no longer uses a recursive implementation. This was necessitated by the splitting of the 16-wide intermediate result into two, which was impossible to do with the old implementation with ugly hacks. This is hopefully overall for the better.
First session:
The first session was training a network from scratch (random initialization). The exact trainer used was slightly different (older) from the one used in the second session, but it should not have a measurable effect. The purpose of this session is to establish a strong network base for the second session. Small deviations in strength do not harm the learnability in the second session.
The training was done using the following command:
python3 train.py
/home/sopel/nnue/nnue-pytorch-training/data/nodes5000pv2_UHO.binpack
/home/sopel/nnue/nnue-pytorch-training/data/nodes5000pv2_UHO.binpack
--gpus "$3,"
--threads 4
--num-workers 4
--batch-size 16384
--progress_bar_refresh_rate 20
--random-fen-skipping 3
--features=HalfKAv2_hm^
--lambda=1.0
--gamma=0.992
--lr=8.75e-4
--max_epochs=400
--default_root_dir ../nnue-pytorch-training/experiment_$1/run_$2
Every 20th net was saved and its playing strength measured against some baseline at 25k nodes per move with pure NNUE evaluation (modified binary). The exact setup is not important as long as it's consistent. The purpose is to sift good candidates from bad ones.
The dataset can be found https://drive.google.com/file/d/1UQdZN_LWQ265spwTBwDKo0t1WjSJKvWY/view
Second session:
The second training session was done starting from the best network (as determined by strength testing) from the first session. It is important that it's resumed from a .pt model and NOT a .ckpt model. The conversion can be performed directly using serialize.py
The LR schedule was modified to use gamma=0.995 instead of gamma=0.992 and LR=4.375e-4 instead of LR=8.75e-4 to flatten the LR curve and allow for longer training. The training was then running for 800 epochs instead of 400 (though it's possibly mostly noise after around epoch 600).
The training was done using the following command:
The training was done using the following command:
python3 train.py
/data/sopel/nnue/nnue-pytorch-training/data/T60T70wIsRightFarseerT60T74T75T76.binpack
/data/sopel/nnue/nnue-pytorch-training/data/T60T70wIsRightFarseerT60T74T75T76.binpack
--gpus "$3,"
--threads 4
--num-workers 4
--batch-size 16384
--progress_bar_refresh_rate 20
--random-fen-skipping 3
--features=HalfKAv2_hm^
--lambda=1.0
--gamma=0.995
--lr=4.375e-4
--max_epochs=800
--resume-from-model /data/sopel/nnue/nnue-pytorch-training/data/exp295/nn-epoch399.pt
--default_root_dir ../nnue-pytorch-training/experiment_$1/run_$run_id
In particular note that we now use lambda=1.0 instead of lambda=0.8 (previous nets), because tests show that WDL-skipping introduced by vondele performs better with lambda=1.0. Nets were being saved every 20th epoch. In total 16 runs were made with these settings and the best nets chosen according to playing strength at 25k nodes per move with pure NNUE evaluation - these are the 4 nets that have been put on fishtest.
The dataset can be found either at ftp://ftp.chessdb.cn/pub/sopel/data_sf/T60T70wIsRightFarseerT60T74T75T76.binpack in its entirety (download might be painfully slow because hosted in China) or can be assembled in the following way:
Get the https://github.com/official-stockfish/Stockfish/blob/5640ad48ae5881223b868362c1cbeb042947f7b4/script/interleave_binpacks.py script. Download T60T70wIsRightFarseer.binpack https://drive.google.com/file/d/1_sQoWBl31WAxNXma2v45004CIVltytP8/view Download farseerT74.binpack http://trainingdata.farseer.org/T74-May13-End.7z Download farseerT75.binpack http://trainingdata.farseer.org/T75-June3rd-End.7z Download farseerT76.binpack http://trainingdata.farseer.org/T76-Nov10th-End.7z Run python3 interleave_binpacks.py T60T70wIsRightFarseer.binpack farseerT74.binpack farseerT75.binpack farseerT76.binpack T60T70wIsRightFarseerT60T74T75T76.binpack
Tests:
STC: https://tests.stockfishchess.org/tests/view/6203fb85d71106ed12a407b7 LLR: 2.94 (-2.94,2.94) <0.00,2.50> Total: 16952 W: 4775 L: 4521 D: 7656 Ptnml(0-2): 133, 1818, 4318, 2076, 131
LTC: https://tests.stockfishchess.org/tests/view/62041e68d71106ed12a40e85 LLR: 2.94 (-2.94,2.94) <0.50,3.00> Total: 14944 W: 4138 L: 3907 D: 6899 Ptnml(0-2): 21, 1499, 4202, 1728, 22
closes official-stockfish/Stockfish#3927
Bench: 4919707
Spanish translation overhaul + Addition of es-ES alternative
In its current state, the Spanish translations for Duckstation are a mess of different dialects, multiple translations for the same terms, mistranslations or excessively literal translations, and typos.
It's a shame, because you could feel that the initial translations were done with care, but were muddled with future revisions.
This commit tries to solve all of these and also change the initial decision of the first translator to have an "universal" "neutral" Spanish, as time has proven it's not possible without a dedicated translator who actually wants to have one Spanish language for all Spanish-speakers across the globe.
I'm not going to be that one, so the next option would be to duplicate the Spanish translations into two: one for the Spanish-speaking American people (called "Latin American Spanish", "español de Hispanoamérica", code es-419") and one for the European Spanish speakers (called "Spanish (Spain)", "español de España", code es-ES).
This distinction is used in multiple software applications that managed to have translators for different languages, and should also funnel any future Latin American Spanish and European Spanish translators to the corresponding file.
I have tried to follow as many existing terms and constructions as possible, restoring and/or rewording any phrasal constructions that were disunified by the multiple translators.
Since I have a limited experience with Latin American Spanish, this commit should be sent as a draft for additional revisions. I'm open to stick to having a single Spanish language, but it has to be done RIGHT.
This is an overview of changes across the board:
- Added missing translations for QT and Android builds.
- Unified translations between those.
- Updated the QT file with the latest string values.
- Massive removal of Title Uppercasing inherited from English in menu strings (the rules set by the Royal Academy of the Spanish Language, or RAE, limit the areas where Title Uppercasing is considered correct in Spanish. Menu names and window header texts are not within those areas).
- Unified the treatment of users in the Latin American version to formal "ustedeo". This treatment could be modified with additional input.
- Removed any gendering assumptions from any string directed towards the user (Are you sure...?, changed ¿Está/s seguro...? with ¿Seguro que...?)
- Naturalization rewrites.
- Typo corrections.
- Gender corrections over definitive terms.
- Adding missing NBSPs after required mathemathical characters or units.
- Mass replacement of double/single quotes with angled quotes (the ones approved for Spanish).
- Quoted non-Spanish, non-proper noun English words as dictated by RAE.
- Removal of unwanted hyphens to join words (Auto-detectar with Detección automática, post-procesamiento with posprocesamiento). In Spanish, hyphens tend to separate, rather than join.
- Revision of the compound forms, unified depending on Latin American Spanish or European Spanish.
- Lowercased the first word of a text between parenthesis (Spanish rules dictate that they should be considered a continuation of the phrase, and thus, they should start with lowercase unless it's a proper noun or a word that must be uppercased) and corrected the positions between periods and parentheses.
- Unified the accentuation rules for the adverb solo/sólo and the demostrative pronouns (este/ese/aquel) by removing all accents in European Spanish (following the RAE's 2010 suggestions) or keeping/adding them for Latin American Spanish (the 2010 rule ended up being a suggestion because while Spain has mostly deprecated those accents, it appears that the Latin American countries have not). To discuss?
- Tweaked the key shortcuts for the QT menu to minimize duplicates.
- Terms unified (this list doesn't represent the entirety of the changes):
- Failed to (Fallo al/Error al): Fallo al
- Hardcore Mode (Modo Hardcore/Modo Difícil): «hardcore» mode (Foreign non-proper nouns should be quoted, RetroAchievements does not have an official Spanish translation, so the term should be kept in English)
- Enable/Disable (habilitado/deshabilitado/activado/desactivado/activo/inactivo): habilitado/deshabilitado
- host (host/anfitrión/sistema): sistema, TO BE DETERMINED AND UNIFIED
- Signed (numbers; firmados): (números) con signo
- scan (verb and noun; escanear): buscar/búsqueda
- Clear (something, like bindings or codes; despejar, limpiar): borrar/quitar
- requirement (of a system, requisito/requerimento): requisito
- input (of a controller, control): entrada
- Threaded X (hilo de X): X multihilo
- Frame Pacing (frame pacing): duración de fotogramas
- XX-bit (XX-bit): XX bits (proper form)
- Widescreen (screens, widescreen hacks; pantalla ancha, pantalla panorámica): pantalla panorámica
- Antialiasing (anti-aliasing): Antialiasing (considered a proper noun by NVidia, doesn't need that hyphen)
- hash: «hash» (could be discussed as "sumas de verificación", like on Dolphin)
- Focus Loss (perder el foco): ir/entrar en segundo plano
- toggle (verb for hotkeys, activar): alternar (as the key alternates between enabling and disabling the function, while "activate" might sound like it's just the enable part)
- Rewind (function; retrocediendo, retrocedimiento): rebobinado (to discuss on LATAM Spanish)
- shader (shader/sombreado): sombreador
- resume (resumir): reanudar, continuar (resumir is a false friend)
- Check (verb; chequear/revisar/comprobar): chequear (LATAM Spanish), comprobar (European Spanish)
- Add (something; añadir/agregar): agregar (LATAM Spanish, to discuss) or añadir (European Spanish)
- Enter/Input (ingrese, inserte): ingresar (LATAM Spanish) or introducir (European Spanish)
- mouse (device; mouse/ratón): mouse (LATAM Spanish), ratón (European Spanish)
- Auto-Detect (Auto-detectar): Detección automática
- Controller (control): mando (for European Spanish only)
- run (a game, the emulator; correr): ejecutar, funcionar (for European Spanish only)
Replace dialog remembers the last path it opened from honestly this was bothering me a lot, hopefully it helps someone else sleep at night too
Disable knife gem install in kitchen tests
This causes horrible issues.
We are installing knife in a TK virt and can't really build it and install it as a test (hacking up appbundler to do this would largely invalidate the test since we wouldn't be testing customer behavior) and as such it needs to be installed from rubygems. That means installing knife-17, which pulls down chef-17 which currently has a dep on diff-lcs 1.3.x which conflicts with 1.5.x which throws the errors around the binstubs conflicting (which may or may not be a rubygems bug, I investigated that a bit and couldn't determine why that is happening since the 3rd line has the magic rubygems comment). We can't just use "--force" as an option since that'll ignore deps and stuff as well which is precisely the kinds of things that we're trying to catch. So for now this test is more pain that it is worth.
Signed-off-by: Lamont Granquist lamont@scriptkiddie.org
Reland: "free up dispatch key space (in C++)" (#74963)
Summary: Pull Request resolved: pytorch/pytorch#74963
This is a re-land of D35192346 (https://github.com/pytorch/pytorch/commit/9872a06d77582e91e834103db75f774ca75f7fff) and D35192317 (https://github.com/pytorch/pytorch/commit/a9216cde6cc57f94586ea71a75a35aaabee720ff), which together are a diff that changes the internal representation of DispatchKeySet
in pytorch core to free up the number of dispatch keys that we have available. See a more detailed description of the design in the original PR: pytorch/pytorch#69633.
The original PR broke Milan workflows, which use a pytorch mobile build, and manifested as a memory corruption bug inside of liboacrmerged.so
.
Background: Existing Mobile Optimization Pytorch mobile builds have an existing optimization (here https://github.com/pytorch/pytorch/blob/cc23725e89713138aa1c81ce5fb4a8dbcd440ccf/c10/core/DispatchKey.h#L382 and here https://github.com/pytorch/pytorch/blob/cc23725e89713138aa1c81ce5fb4a8dbcd440ccf/aten/src/ATen/core/dispatch/OperatorEntry.h#L214), which works as follows:
Every operator in pytorch has a "dispatch table" of function pointers, corresponding to all of the (up to 64) different kernels that we might dispatch to when we run an operator in pytorch (autograd, cpu, cuda, complex number support, etc).
In mobile builds, the size of that table is shrunk from 64 to 8 to save a bunch of space, because mobile doesn't end up using the functionality associated with most dispatch keys.
The dispatcher also has a notion of "fallback kernels", which are kernels that you can register to a particular dispatch key, but should be able to work for "any operator". The array of fallback kernels is defined here: https://github.com/pytorch/pytorch/blob/cc23725e89713138aa1c81ce5fb4a8dbcd440ccf/aten/src/ATen/core/dispatch/Dispatcher.h#L294.
The mobile-optimization currently does not extend to this array (it wouldn't be that useful anyway because there is only one array of fallback kernels globally - vs. there is a separate dispatch table of function pointers per operator). So the per-operator tables on mobile are size 8, while the fallback table is size 64.
The Bug This PR actually makes it difficult to enable that optimization separately for the per-operator arrays vs. the fallback array, and incidentally shrunk the size of the fallback array from 64 to 8 for mobile (that happened on this line: https://github.com/pytorch/pytorch/pull/69633/files#diff-f735cd7aa68f15b624100cbc4bb3b5ea76ffc7c9d3bec3b0ccabaa09609e5319R294).
That isn't a problem by itself (since mobile doesn't actually use any of the fallbacks that can no longer be stored). However, pytorch core will still register all of those fallback kernels on startup in mobile builds, even if they aren't used. When we tried to register one of those fallbacks on startup, it would try to dump the kernel somewhere in memory past the bounds of the (now smaller) array inside of the Dispatcher
object, backendFallbackKernels_
.
Why didn't this problem show up in OSS CI? Why didn't it break other internal mobile workflows aside from Milan?
Ideally, this failure would show up as part of the OSS signal on GitHub, since we already have mobile OSS builds. Given that it was another memory corruption issue that only affected Milan (subset of mobile), I'm not sure what's specific about Milan's builds that caused it only to manifest there. dreiss I wonder if there's another flavor of mobile builds we could run in OSS CI that could potentially help catch this?
The debugging experience was pretty difficult
Debugging the Milan-specific failure was made difficult by the following:
(1) lack of CI
- the original Milan failure didn't surface on my original diff, because the Milan job(s) that failed weren't triggered to run on pytorch changes. There's probably a balance to strike here, since those jobs will only be useful if they aren't flaky, and if they can produce reliable failure logs for debugging.
(2) It's difficult to get a repro.
- my work laptop doesn't have the right specs to run the Milan development workflow (not enough disk space)
- There is an existing OnDemand workflow for Milan, but it appears to be relatively new, and after a bunch of help from MarcioPorto, we ran into issues forwarding the log output from Milan tests on the emulator back to the terminal (see the original discussion here: https://fb.workplace.com/groups/OnDemandFRL/permalink/1424937774645433/)
(3) Lack of stack-traces.
- Most Milan failures didn't include actionable stack traces. phding generously helped me debug by running my suggested patches locally, and reporting back if there were any failures. The failing test didn't include a stack trace though (just the line where the crash appeared), so I ended up making some educated guesses about what the issue was based on the area of the crash. ghstack-source-id: 152688542
Test Plan: Confirmed with phding that the broken Milan workflow from the previous version of this diff is now passing.
Reviewed By: phding, albanD
Differential Revision: D35222806
fbshipit-source-id: 0ad115a0f768bc8ea5d4c203b2990254c7092d30 (cherry picked from commit 002b91966f11fd55ab3fa3801b636fa39a6dd12c)
IPs are options now so failing to fetch one doesn't fuck you over
Create What Must I Do to be Saved?
After carefully looking at Statements of Faith on church websites and asking around, I've noticed that the Church worldwide is not together on this most fundamental and most important doctrine. Generalizations are made, things are left out or added, and there's a tendency to confuse salvation with personal righteousness or sanctification. These things ought not to be, because salvation doctrine is explicit and clear in the Bible as is the fact that salvation is not dependent on our will to keep from sin. After we are saved, we have a new nature that urges us to not sin and we have power to not sin in a way that we did not have before we were born again, given a new nature and saved.
Fix make depend
After splitting OBJFILES into two variables this broke the SRCFILES variable which breaks make depend. As I put this in I'll explain how the black magic of make depend works:
First of all the lines:
OBJFILES= dbg.o util.o mkiocccentry.o iocccsize.o fnamchk.o txzchk.o jauthchk.o jinfochk.o \
json.o jstrencode.o jstrdecode.o rule_count.o location.o sanity.o \
utf8_test.o jint.o jint.test.o jfloat.o jfloat.test.o verge.o
SPECIAL_OBJ= jparse.o jparse.tab.o utf8_posix_map.o
define object files that are generated by compiling the .c files. Next the lines:
SRCFILES= $(patsubst %.o,%.c,$(OBJFILES))
SRCFILES+= $(patsubst %.o,%.c,$(SPECIAL_OBJ))
Create and append to the variable SRCFILES the .c files that are used to create the object files (or more specifically it replaces all files in the OBJFILES and SPECIAL_OBJ variables to be their .c counterparts).
Then the rule depend which looks like:
depend:
@LINE="`grep -n '^### DO NOT CHANGE' Makefile|awk -F : '{print $$1}'`"; \
if [ "$$LINE" = "" ]; then \
echo "Make depend aborted, tag not found in Makefile."; \
exit; \
fi; \
mv -f Makefile Makefile.orig;head -n $$LINE Makefile.orig > Makefile; \
echo "Generating dependencies."; \
${CC} ${CFLAGS} -MM ${SRCFILES} >> Makefile
@echo "Make depend completed.";
looks for the line number for the line that starts with '### DO NOT CHANGE' which is actually the final part of the Makefile (and is important to have as we don't want to touch anything above it) which in full looks like:
### DO NOT CHANGE MANUALLY BEYOND THIS LINE
If it does not find it it is an error and the make depend is aborted. Else it makes a backup of the Makefile (Makefile.orig which is in .gitignore) and then it prints the entire Makefile (from the backup file) up to and including the make depend tag. From this point it has a Makefile to work from. Yes awk might be overkill for this. Anyway to continue explaining how this works:
Next it runs the compiler with the -MM option which is like -M (see below) but it does not include header files that are in system header directories nor those that are included directly or indirectly from files within those header files. What -M does is it generates make dependency rules which means the line:
${CC} ${CFLAGS} -MM ${SRCFILES} >> Makefile
generates make dependency rules for all the files in SRCFILES which if you recall is a list of the .c files based on the .o files. These rules are appended to the Makefile which as you recall consists of everything up and including the make depend tag.
This means that when make depend is run the Makefile now has proper dependencies generated for all the object files which means that if e.g. you modify a header file which is a dependency for five object files then those five object files will be recompiled upon `make'.
Therefore if OBJFILES and SPECIAL_OBJ are ever split into yet another variable a line after
SRCFILES+= $(patsubst %.o,%.c,$(SPECIAL_OBJ))
will have to be created in the same form but instead of SPECIAL_OBJ it will be whatever the new variable is.
Additionally I have run make depend after making this fix.
To the more astute reader there are two possible problems here to do with remembering to do some things. First if a new .c file is added to the repo this has to be added to the OBJFILES variable (with extension .o instead of .c). Second is after adding a header file (that's not a system header file) one has to remember to run make depend. These however are technicalities that cannot be dealt with.
fuck you and your browsers and your fucking imports and this fucking language
" 11:40am. I slept heavily tonight. It wasn't necessarily nightmares, but the dreams were like my brain was trying to push forward through the fatigue. Doing the tutorials builds up a lot of stress for me during the day that the brain digest over the night.
Ray-tracing for Doom mod. It is a thing now.
11:45am. I'll skip the morning session. Who is going to start now.
12:40pm. Done with breakfast. I'll chill a bit and do the chores.
1:45pm. Done with chores. It is time to start. Where from?
Let me start by watching the 10m mastering levels and histogram video.
Then I'll watch some of the Substance in Fashion design. I won't necessarily follow all this along by hand. I feel like I've gotten a lot already from those starter tutorials. I'll decide whether I want to practice or just watch as I go along.
1:55pm. I do want to do the radial pattern like I said yesterday, but I have too much on my plate right now to think about it. Let me clear out the foundational videos for Painter and then I will dedicate myself to studying Designer.
https://substance3d.adobe.com/tutorials/courses/Mastering-Levels-Histogram/youtube-p9wcmJBFyGA Mastering Levels & Histogram
If you're not sure what happens when adjusting levels, if you don't know what the histogram bar graph actually means or if you want to understand the difference between Levels and Histogram Scan, this video is for you. We go in-depth and explain what a Histogram graph is and how you can read and understand it. We then dive into the settings of a Levels operation, explaining you the difference between Levels In and Levels Out, what they do and when to use them. Finally, you'll learn how Levels compares to Histogram operations like Histogram Scan, Shift, Select and Range, which can be found in Substance Painter and Designer.
Let me start with this.
Oh, there is even a little quiz.
I see that they are recommending the mastering Blending modes video next. Ok, I'll go to that after I finish this one instead of the fashion video. This knowledge will be useful for me in CSP as well.
https://youtu.be/p9wcmJBFyGA?t=534
This is pretty useful. They are just alternative to the gradient tool.
https://youtu.be/p9wcmJBFyGA?t=538
This is exactly what I need to create a distortion map for the radial gradient. But I also want it to go negative past the middle. For that I could use histogram range to move into the negative from the middle. I'll have to figure out how to do that, but I should be able to manage it somehow.
2:25pm. https://substance3d.adobe.com/tutorials/courses/Mastering-Blending-Modes/youtube-GAMAEFDG400
Let me go for Blending modes next. It seems that Painter and Designer have a focus on height maps. That could be useful.
https://youtu.be/GAMAEFDG400?t=20
It occured to me yesterday, but it seems that I should be using Blending modes instead of math operations in Designer to do thing like change the range.
https://youtu.be/GAMAEFDG400?t=44
If you look for information on Blending modes, you'll find a lot of it, but it is often not very applicable to material creation.
These tutorials are so good. These guys did a 10/10 job of it.
https://youtu.be/fvmBCavPDLY?t=77
Hmmm, this is interesting.
https://youtu.be/fvmBCavPDLY?t=224
It is really great how they just tell me what the operations are good for. I wouldn't have figured this out myself.
https://substance3d.adobe.com/tutorials/courses/Mastering-Blending-Modes/youtube-sL_GmeNfEAg
Here is a tutorial on applying them in Painter. It seems they aren't even going to bother with color dodges and burns.
https://youtu.be/sL_GmeNfEAg?t=106
Hmmm, I did not know you could set it up so there is displacement. I'd really want to figure out how to turn that on.
https://youtu.be/sL_GmeNfEAg?t=667
I need to keep this issue in mind with min and max in painter.
https://youtu.be/sL_GmeNfEAg?t=787
Being able to make the transitions grungy will be a really grat addition to my arsenal. Up to now my only idea for how to do them would have been to use a distortion map, which I can't really do in Painter. But this way is really good as well and I do not have to get fancy.
https://substance3d.adobe.com/tutorials/courses/Mastering-Blending-Modes/youtube-wtSlntZnUZE
The next are the blending modes in Designer.
3:55pm. Had to take a break. Let me resume.
4:10pm. I've played around a bit and I don't see a way to go into negative values which I'd need for my ideas to work. Hmmm...
I guess I could use two directional warps with masks. Even though that would be more complicated it would work.
4:40pm. Done studying blending modes. That taught me a bit. Now what is next?
4:45pm. https://substance3d.adobe.com/tutorials/courses/Substance-in-Fashion-Design/youtube-YiQFFGC84OE Substance In Fashion Design
Let me watch this. I'll have to make clothing for my chars sometimes. Having them wear various kinds of logos will open mechandising opportunities.
4:50pm. The reason why AddSub is useful is because it allows me to add noise as if it were centered. The same goes for overlay I would guess. It is not a bad idea at all when all you have are values in the [0,1] range.
4:55pm. Let pause the video. I want to try using curve to draw using bevels in Blender. I've never tried it and am interested in how it would work.
5:05pm. Ok, let me get back on track.
I've satisfied my curiosity.
5:10pm. Let me skip the Alchemist parts.
https://substance3d.adobe.com/tutorials/courses/Substance-in-Fashion-Design/youtube-SnkigO2Nwcs
This one is a designer tutorial.
5:25pm. Had to take a break.
https://substance3d.adobe.com/tutorials/courses/Substance-in-Fashion-Design/youtube-6TrnIINs0UQ
Let me just skip the Marvelous Designer parts. They are not relevant to me right now.
5:45pm. Enough this is pretty boring. Let me move on to the tree barks.
https://substance3d.adobe.com/tutorials/courses/Tree-Barks-with-Nikola-Damjanov/youtube-DXX1fqcrVrk Tree Barks With Nikola Damjanov
This is mostly an Alchemist tutorial, but there is some Designer stuff in here as well. I've no idea why it is tagged as pointer, but it will do.
Let me start with the introduction.
5:45pm. I'll skip the non Ds parts.
https://youtu.be/kl4zD4krV2E?t=250
Agh, I do not get any of this and I am not that interested. Let me just skip to the parts I am which is him working on the procedural texture from scratch in Designer.
https://substance3d.adobe.com/tutorials/courses/Tree-Barks-with-Nikola-Damjanov/youtube-G4Hy7Ijzz4Y
Let me go through this.
https://youtu.be/G4Hy7Ijzz4Y?t=94
I do not feel like downloading this right now. Let me just watch the videos. I am bored enough as it is.
https://youtu.be/G4Hy7Ijzz4Y?t=321
This is more up my alley. Watching those procedural generation videos in Houdini does give me something to contrast the process with. If I did not have designer, I could do this using 3d objects in Houdini and bake it.
https://youtu.be/G4Hy7Ijzz4Y?t=783
Let me stop this here. While this is interesting.
https://substance3d.adobe.com/tutorials/courses/Using-Substance-in-Architecture-Visualizations/youtube-u74QVwBpHWk Using Substance In Architecture Visualizations
Let me go through the big tutorials.
https://youtu.be/G9wbK1NKwbo?t=274
Is this overlapping on the right side? I think it is.
6:40pm. I am at my limit here with tutorials. It is that thing where I thought they would last weeks, but it turns out I was done in a day.
7:20pm. No, it is too difficult to do the wood pattern I have in mind in Designer. I'd have to drop down to that node based language to get what I want. The atomic nodes are not enough for this kind of task.
The node based language seems to be similar to Houdini's VOPs. But doing this is too complicated for me to bother with. It turns an art task into a programming one. So what I could do it half an hour would suddenly take days. I'll just do the basic pattern in CSP, and touch it up in Painter.
I am actually not sure how I would do some of the aspects programatically.
7:45pm. Done with lunch.
Right now the fatigue is really hitting me. It is time to call it a day.
I feel that I've learned a decent amount today thanks to those blending modes and level tutorials. The rest of the tutorials do not seem that important.
By far the biggest gain was understanding what AddSub and Overlay nodes are useful for. The ability to turn faded borders into something grungy is a huge gain.
7:55pm. Nope, although I'll look at the other tutorials in due time, it seems that the basic ones are what I needed the most.
Right now I feel like I am in a really good shape. I guess a few days really is all one needs to grasp Painter at a basic level. I am going to start serious texturing work tomorrow and keep at it until the desk is finished.
It won't be too hard. All the pieces are present. I just need to apply myself and they will go where they need to be."
ALSA: hda/realtek: Add alc256-samsung-headphone fixup
This fixes the near-silence of the headphone jack on the ALC256-based Samsung Galaxy Book Flex Alpha (NP730QCJ). The magic verbs were found through trial and error, using known ALC298 hacks as inspiration. The fixup is auto-enabled only when the NP730QCJ is detected. It can be manually enabled using model=alc256-samsung-headphone.
Signed-off-by: Matt Kramer mccleetus@gmail.com Link: https://lore.kernel.org/r/3168355.aeNJFYEL58@linus Signed-off-by: Takashi Iwai tiwai@suse.de
minor #5139 Disable UX-Turbo (Lustmored)
This PR was merged into the 4.x branch.
Disable UX-Turbo
In all my projects with EasyAdmin I am sharing Stimulus controllers between EasyAdmin and frontend (I need them sometimes and it's just simpler). Since enabling Turbo on some projects I need to overwrite EasyAdmin layout just to disable it.
Currently EA is very unfriendly towards Turbo - there are JavaScripts in body, DOMContentLoaded listeners and so on. Refactoring everything to be turbo-compatible would be titanic effort with little benefit (it's not really needed in CRUD dashboards in my opinion), while adding this single attribute will make life easier for probably more consumers than just myself :)
735b2397 Disable UX-Turbo
avoid using @sync_add
on remotecalls (#44671)
- avoid using
@sync_add
on remotecalls
It seems like @sync_add adds the Futures to a queue (Channel) for @sync, which in turn calls wait() for all the futures synchronously. Not only that is slightly detrimental for network operations (latencies add up), but in case of Distributed the call to wait() may actually cause some compilation on remote processes, which is also wait()ed for. In result, some operations took a great amount of "serial" processing time if executed on many workers at once.
For me, this closes #44645.
The major change can be illustrated as follows: First add some workers:
using Distributed
addprocs(10)
and then trigger something that, for example, causes package imports on the workers:
using SomeTinyPackage
In my case (importing UnicodePlots on 10 workers), this improves the loading time over 10 workers from ~11s to ~5.5s.
This is a far bigger issue when worker count gets high. The time of the
processing on each worker is usually around 0.3s, so triggering this problem
even on a relatively small cluster (64 workers) causes a really annoying delay,
and running @everywhere
for the first time on reasonable clusters (I tested
with 1024 workers, see #44645) usually takes more than 5 minutes. Which sucks.
Anyway, on 64 workers this reduces the "first import" time from ~30s to ~6s, and on 1024 workers this seems to reduce the time from over 5 minutes (I didn't bother to measure that precisely now, sorry) to ~11s.
Related issues:
- Probably fixes #39291.
- #42156 is a kinda complementary -- it removes the most painful source of slowness (the 0.3s precompilation on the workers), but the fact that the wait()ing is serial remains a problem if the network latencies are high.
May help with #38931
Co-authored-by: Valentin Churavy vchuravy@users.noreply.github.com
mm, oom: pagefault_out_of_memory: don't force global OOM for dying tasks
commit 0b28179a6138a5edd9d82ad2687c05b3773c387b upstream.
Patch series "memcg: prohibit unconditional exceeding the limit of dying tasks", v3.
Memory cgroup charging allows killed or exiting tasks to exceed the hard limit. It can be misused and allowed to trigger global OOM from inside a memcg-limited container. On the other hand if memcg fails allocation, called from inside #PF handler it triggers global OOM from inside pagefault_out_of_memory().
To prevent these problems this patchset: (a) removes execution of out_of_memory() from pagefault_out_of_memory(), becasue nobody can explain why it is necessary. (b) allow memcg to fail allocation of dying/killed tasks.
This patch (of 3):
Any allocation failure during the #PF path will return with VM_FAULT_OOM which in turn results in pagefault_out_of_memory which in turn executes out_out_memory() and can kill a random task.
An allocation might fail when the current task is the oom victim and there are no memory reserves left. The OOM killer is already handled at the page allocator level for the global OOM and at the charging level for the memcg one. Both have much more information about the scope of allocation/charge request. This means that either the OOM killer has been invoked properly and didn't lead to the allocation success or it has been skipped because it couldn't have been invoked. In both cases triggering it from here is pointless and even harmful.
It makes much more sense to let the killed task die rather than to wake up an eternally hungry oom-killer and send him to choose a fatter victim for breakfast.
Link: https://lkml.kernel.org/r/0828a149-786e-7c06-b70a-52d086818ea3@virtuozzo.com Signed-off-by: Vasily Averin vvs@virtuozzo.com Suggested-by: Michal Hocko mhocko@suse.com Acked-by: Michal Hocko mhocko@suse.com Cc: Johannes Weiner hannes@cmpxchg.org Cc: Mel Gorman mgorman@techsingularity.net Cc: Roman Gushchin guro@fb.com Cc: Shakeel Butt shakeelb@google.com Cc: Tetsuo Handa penguin-kernel@i-love.sakura.ne.jp Cc: Uladzislau Rezki urezki@gmail.com Cc: Vladimir Davydov vdavydov.dev@gmail.com Cc: Vlastimil Babka vbabka@suse.cz Cc: stable@vger.kernel.org Signed-off-by: Andrew Morton akpm@linux-foundation.org Signed-off-by: Linus Torvalds torvalds@linux-foundation.org Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org
Let me tell you a fun story, no?
So I decided that I'll -for once- test what I added before i push it, crazy I know
Thing is, I made a file called commands.py
to test commands the was
confused why from voltage.ext import commands
didn't have the shit it
was supposed to have.
There goes my evening, oh well.
Updated to HDRP. Skybox, fog, lighting changes
Turns out that with nice graphics the infinite staircase illsuion sort of breaks down meaning we should probably just stick to non illusiony shit. Either that or we have it look very different when entering fucko illusion puzzle area but that would have to be done outside of game jam time.
Yuki bot 1.0x Software As a Simulation
Yukibot is a artificial intelligence girlfriend simulator that can help you through tough times and provide emotional support. The Yukibot software can help you by providing a virtual shoulder to cry on, giving advice, and even helping you get over your ex. Yukibot is always there for you, 24/7. So if you're feeling down, don't hesitate to reach out to Yukibot for a little bit of comfort and support
Created Text For URL [www.express.co.uk/news/science/1591165/archaeology-mystery-ancient-curse-tablet-hebrew-name-god]
Message against the war, in Russian and English
🇷🇺 Русским гражданам
Мы, участники Laminas, родились и живем в разных странах. У многих из нас есть друзья, родственники и коллеги как в России, так и в Украине. Некоторые из нас родились в России. Некоторые из нас живут в России. У некоторых бабушки и дедушки сражались с фашистами во Второй мировой войне. Здесь никто не поддерживает фашизм.
У одного из нас есть украинская родственница, которая спаслась из дома вместе с сыном. Поезд задержался из-за бомбежки на дороге впереди. У нас есть друзья, которые прячутся в бомбоубежищах. Мы с тревогой ждем весточки от них после воздушных налетов, которые беспорядочно наносят удары и попадают по больницам, школам, детским садам и домам. Мы не берем это из каких-либо СМИ. Мы наблюдаем это напрямую.
Вы доверяете нам достаточно, чтоб использовать наши программы, и мы просим вас довериться нам вновь. Мы нуждаемся в помощи. Выходите и протестуйте против этой бесполезной войны. Остановите кровопролитие. Скажите "Нет войне!"
🇺🇸 To Citizens of Russia
We at Laminas come from all over the world. Many of us have friends, family and colleagues in both Russia and Ukraine. Some of us were born in Russia. Some of us currently live in Russia. Some have grandparents who fought Nazis in World War II. Nobody here supports fascism.
One team member has a Ukrainian relative who fled her home with her son. The train was delayed due to bombing on the road ahead. We have friends who are hiding in bomb shelters. We anxiously follow up on them after the air raids, which indiscriminately fire at hospitals, schools, kindergartens and houses. Were not taking this from any media. These are our actual experiences.
You trust us enough to use our software. We ask that you trust us to say the truth on this. We need your help. Go out and protest this unnecessary war. Stop the bloodshed. Say "stop the war!"
Signed-off-by: Michał Bundyra contact@webimpress.com
Try to silently fall back to a local monarch (#12825)
This is a crazy idea Dustin and I had.
we can't repro this at will. But we kinda have an idea of where the deref is. We don't know if the small patch (throw, and try again) will fix it. We're sure that the "just fall back to an isolated monarch" will work. I'd almost rather take a build testing the small patch first, to see if that works
This might seem crazy in 1.12, isolated monarch. In 1.13, "small patch". In 1.14, we can wait and see
I can write more details in the morning. It's 5pm here so if we want this today, here it is.
@dhowett double check my velocity flag logic here. Should be always true for Release, and off for Dev, Preview.
- closes #12774
Add CodingFantasy's CSS coding interactive games (#5490)
- Add "Knights of the Flexbox table" game
Welcome to the Knights of the Flexbox table. A game where you can help Sir Frederic Flexbox and his friends to uncover the treasures hidden in the Tailwind CSS dungeons. You can navigate the knight through the dungeon by changing his position within the dungeon using Flexbox and Tailwind CSS.
- Add "Flex Box Adventure" game
Once upon a time, there was a King Arthur. He ruled his kingdom fair and square. But Arthur had one problem. He was a very naive person. So one sunny day, three alchemist brothers offered Arthur to exchange all his Gold Coins for coins made of a more valuable new metal that they had invented - Bit Coins.
Arthur believed them and gave them all his gold. The brothers took the gold and promised to give the bit coins back to Arthur in seven days.
Seven days passed. The brothers have not turned up. Arthur realized he had been scammed. He is angry and intends to take revenge on them. Let's help him do it with our weapon – CSS Flex Box!
We made this game for You
-
You often stumble and try to figure out which combination of Flex Box properties makes the browser do what you want it to do.
-
You want to create complex web layouts without constantly looking at the web page after every Cmd/Ctrl+S press in the code editor.
-
You have tried to learn Flex Box with video tutorials and articles but still don't fully understand how some parts of it work.
4*. Or, if you are a master of CSS Flex Box, we have something interesting and for you too (read further).
Have you found yourself there? Then you definitely want to learn or improve your Flex Box skills. So we have good news for you, really good news...
Learn Flex Box by Playing Game No more boring videos, tutorials and courses. Learn Flex Box in a completely new, fun, effective and revolutionary way. By playing Flex Box coding game!
- Add "Grid Attack" coding game
In an ancient Elvish prophecy, it was said that one day a man would be born with an incredible power that predicts the future – "Marketi Predictori." And another will come to take this power. But the years went by and nothing happened. Until one day, a little elf was born. He was named Luke.
From an early age, he surprised his parents and his sister Rey by guessing the price of apples at the farmer's market before they even reached it. Every year his power rose and his predictions became more and more accurate. But there was one thing Luke could not predict. The coming of the demon Valcorian. It was the one from the prophecy that was to come and take Luke's power. One day Valcorian and his army attacked the town where Luke had lived and kidnapped him to make a ritual of stealing his power.
Go on a dangerous quest with Luke's sister Rey and find her brother. Defeat Valcorian and all his demons using a secret weapon – CSS Grid.
We made this game for You?
-
You often stumble and try to figure out which combination of Grid properties makes the browser do what you want it to do.
-
You are scared by the number of properties a CSS Grid has, and you feel uncomfortable when you need to create a grid layout.
-
You want to create complex web layouts using Grid, but without constantly looking at the web page after every "Cmd/Ctrl+S" press in the code editor.
-
You have tried to learn CSS Grid with video tutorials and articles but still don't fully understand how some parts of it work.
-
You use a Flex Box where Grid is required because you don't feel confident in using it.
Have you found yourself there? Then you definitely want to learn or improve your Grid skills. So we have good news for you, really good news...
Learn Grid by Playing CSS Game No more boring videos, courses and articles. Learn Grid in a revolutionary new, fun, and effective way. By playing a Grid coding game!
Disable meta device tests.
After discussion with Can Balioglu, we have concluded that pytorch/pytorch#53682 , while clever, is more trouble than it is worth. The main problem is that whenever someone adds support for new meta tensors, they then get dozens of new test case failures, because tests that were previously halted by lack of support for an operator on meta tensors, now have gotten further and hit some logic which expects to be able to, e.g., pull out a real value from a tensor (which clearly doesn't work). This is very annoying and time consuming! Most of these tests aren't written with meta device in mind, and it's not a good use of time to try to make them more generic.
The plan on record is to switch meta testing to OpInfo, but that patch will take some time to prepare for now I want to stem the bleeding. I don't think we're at high risk for regressions here because meta tensors mostly share logic with their regular brethren.
Signed-off-by: Edward Z. Yang <ezyangfb.com>
Pull Request resolved: pytorch/pytorch#74468
Approved by: https://github.com/mruberry
I_love_you,a_little, a_lot,_passionately...not_at_all
Who remembers back to their time in the schoolyard, when girls would take a flower and tear its petals, saying each of the following phrases each time a petal was torn:
I love you a little a lot passionately madly not at all When the last petal was torn there were cries of excitement, dreams, surging thoughts and emotions.
Your goal in this kata is to determine which phrase the girls would say for a flower of a given number of petals, where nb_petals > 0
Action button refactor/rework: Enhanced Dragging (#65180)
About The Pull Request
I noticed a lot of strange and un-intuitive behavior in action buttons, and got stung by the bloat bug. Damn it hug #58027 I'll do my best to explain what I've changed and why, might get a bit long. If you want a better idea, read the commits. Most of em are pretty solid, if long.
Whelp. Here we go. How do action buttons currently work
All action buttons are draggable, to any place on the screen. They're held in an actions list on the player's mob. Their location in this list determines their position on the top of the screen. If one is dragged away from the top, its position in the list is "saved". This looks really bad. If two buttons are dragged over each other, their positions swap. (inside the actions list too) If a button is shift clicked, it is brought back to the position it started at. If the action collapse button that you likely just mentally edit out is alt clicked, it resets the position of all action buttons on the screen. If an action is ctrl clicked, it is "locked". This prevents any future position changes, and also enables a saving feature. With this saving feature, locked button positions persist between rounds. So your first o2 canister will always start where you saved it, etc. Actions and buttons are a one to one link. While there is functionality to share action buttons between two players, this means showing the same object to both. So one player can move a button on another's screen. Horrendous. This also makes code that modifies properties of the screen object itself very clunky. Why is this bad
A: None knew pretty much any of this information. It is actually documented, just in a horribly formatted screen tip on the collapse button, you know the one we all mentally delete from the hud. B: None of this is intuitive. Dragging buttons makes the hud look much worse, and you get no feedback that you even can drag them. Depressing C: We use actions to make new options clear to the player. This means players can have a lot of action buttons on the hud. This gets cluttery D: The collapse button is useless. It lets you clear your screen if someone like me fucks up and gives you 2000 actions, but outside of that it just hides all information from you. You never want to see none of your action buttons, just a filtered list of them. E: On a technical level, they're quite messy, and not fully functionally complete. This is depressing. What I've done
Assuming the above to be true, how do we fix them? Well first I'm going to go over everything I changed, including links to major commits. I'll then describe the finished product, and why I made the decisions I did.
Oh and I've moved some of the more niche or technical discussion to dropdowns. Hopefully this makes finding the major functional changes easier
Adds helper procs for turning screen_loc strings into more manageable arrays. This doesn't fully support all of the screen_loc spec, but it's enough for what I'm doing. (f54865f)
Uses these helper procs to improve existing code (6273b93)
Fixes an issue with tooltip code itself. If you tried to hold down a mouse button while dragging onto a tooltip enabled object, it would silently fail. The js made assumptions about the order args came in, which broke when buttons were held down (e0e42f6)
Adds a signal linked to /client/Click(). Surprised we didn't have this before honestly (c491a4a)
Makes /client/MouseDrag() return parent. If we don't do this, any overrides of MouseDrag will never actually be called (2190b2a) Refactors how action buttons work under the hood (53ccce2) Basically, rather then generating one button per action, we generate one button per viewer
Starts to change button behavior, more cleanup
Changes the mouse cursor when an action button is dragged. Hopefully this makes moving things feel less like an accident, and makes you doing it more clear
Removes the moved and locked vars. This will be more relevant later, but for now:
Moved exists as a sort of budget "We've been dragged" variable. We can handle this more cleanly, and the movable type doesn't care about it
Locked is a very old variable that is also not something that the movable type "owns". It's more an action button thing that's been moved down. It exists so an action can be locked in place, and in that locking, be treated as a "saved location" (21e20fc)
Because I've nuked move, we don't need to directly set our button's position. We can use the default_button_position var instead. This is quite handy.
Please ignore position_action, I will explain that later (83e265e)
Removes the buttons locked pref
It was another obscure part of action buttons, basically do buttons start "locked" or not. See previous discussion of locked (b58b1bd)
Major rework starts here
Alright. Sorry for this, this is where me not commiting regularly starts to suck. I'll do my best though.
Rather then figuring out an action button's position via a combination of the moved and ordered vars, we use a separate location var to store one of a few defines. This makes life later much easier.
Adds tooltip support for dragging action buttons. The way the tooltip just froze in place when dragging really bugged me, and lead to some nasty visual artifacts. This is a bit messy because the drag procs are horrible, but it's workable
Dropping a button on another button will no longer swap their positions Behavior instead depends on the target button.
If it's a part of a group (A concept I will explain later) the dragged button is simply inserted before it in the group's list.
If it's floating on the general hud, we instead position the dragged button to its right. There's extra logic here to ensure buttons will never overflow the screen, but I'll get into that later.
Alright. That's most of the refactoring. Time for the larger behavior changes.
Adds a button palette. This is a separate dropdown that renders underneath buttons.
image
The idea is to allow for a conceptual separation between "important" buttons and the ones that end up cluttering the screen.
You can click on the dropdown to open it, then any later clicks that don't involve actions in some way will autoclose it.
My goal is to come up with an alternative for the action button that just acted as a way to hide all buttons on screen. Not convinced it saw much use.
As a side effect of removing that, I've moved its tooltip stuff to the palette. I've properly formatted it, so hopefully it's easier to read then the jumble that we used to have.
(You can alt click the palette button to reset all button positions)
Oh and the palette can scroll, since as you'll see later it has a limited size. image
Moving on from that, I've added what amounts to action landing buttons. These allow buttons to rejoin groups, or be positioned at the end of a line of buttons. image
They've got a 32x32 hitbox, and only show up when dragging. Hopefully this makes the system more clear just by dragging an action.
Oh and I've changed how button position updating works. The old system of calling update_action_buttons on mob every time an action button changes position is gone, mostly because I've setup more robust grouping. Will discuss when I get to huds
(0d1e93f) Adds the backbone behind action button position changes (94133bd)
Moves hud defines to the global folder, safer this way (7260117)
Adds color changing to the palette button, giving some heads up for buttons being inserted into the palette automatically image image Ensures a landing button is always shown, even if it needs to break the max row rule Makes palettes auto contract if they have no buttons inside them Prevents palettes from being opened if they have no buttons inside them (f9417f3) How it looks 2022-02-26.02-30-10.mp4 Why It's Good For The Game
Players have more control over the clutter on their screen. Buttons are available, but not in the way, Since any player move of a button saves it, any lack of clarity in the way buttons work will be forced out by buttons not just resetting when a new game starts. We don't overlap any existing screen elements, unless the upper button list gets really long. The code is much less crummy (I think, may have made it worse it's hard for me to judge my own work)
If it ends up not being as usable as I'd like, I'll rip out the existing changes and just implement the qol and backend stuff. I think it's worth doing though. Changelog
cl add: Expanded heavily on action buttons add: Adds an action button dropdown that sits just under the normal list in the top left. You can drag new buttons onto it to insert them. Click on it to show its contents, do what you want to do, then click again anywhere to contract it. Alt click it to reset all button positions add: Action buttons will now remember their position between rounds. So if you really like your flashlight right next to your player for some reason, we support that now add: When you start to drag an action button, docking ports will appear in places that it can be inserted into. (Outside of just floating somewhere on your screen of course) del: Removed action button locking, and the associated preference. I'm reasonably sure literally none uses this, but if you do hit me up qol: Dragging an action button will now give you an outline of its size around your cursor fix: You can no longer cause the screen to expand by putting an action button on the edge of widescreen, and then resizing to standard. refactor: Refactors action and button code significantly. lots of little things. /cl
Use non-blocking log writer (#6470)
This will utilize a separate thread to write out the spans and events without while letting the main computation to proceed with its business. Additionally, we are buffering the output by lines, thus reducing the frequency of syscalls that can occur when the subscriber is writing out parts of the message.
This should mitigate concerns of enabling debug logging as its impact on
performance should now be minimal (putting an event structure onto a
MPSC queue.) There are still costs associated with logging everything
however. Most notably formatting and construction of the
tracing_core::ValueSet
s still occur on the caller side, so if
constructing those is expensive, the logging might remain expensive.
An example of code sketchy like that (although silly) could be:
debug!(message = { std::time::sleep(Duration::from_secs(1)); "hello" })
or for a less silly example:
debug!("{}", my_vector.iter().map(|...| {
do_expensive_stuff()
}).collect::<String>())
These should be considered a bug (alas one that tracing
does not have
any tooling to detect, sadly.)
I opted adding a new crate dedicated to observability utilities. From my experience using things like prometheus will eventually result in a variety of utilities being written, so this crate eventually would likely expand in scope...
Fixes near/nearcore#6072 (though I haven't made any actual measurements as to what the improvement really is)
Fixes conveyor runtime (#65788)
Conveyor would runtime whenever it is right clicked with an item
Fixes #64595 (Runtime on conveyor for right clicking)
fixes a runtime with conveyor where right clicking it with any item would cause a runtime
Mothblocks rant from the issue report below, you've been warned:
Because right-clicking in BYOND is horse-shit. It pipes it all through the normal Click and only tells you it's a right-click through a flag. This means that on anything that isn't prepared, right-clicking is the same as left-clicking, which is terrible UX that only exists in SS13.
Nothing should return ..() from attackby_secondary, because the default is the legacy behavior of making right-click pass as left-click (which I want to kill ASAP, once nothing uses the stupid flags anymore).
Remove else return ..(), and make this whole thing do return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN.