2,521,806 events, 1,266,071 push events, 1,998,315 commit messages, 145,321,289 characters
Post Op
Here you see the fucked repo sleeping soundly after it's emergency surgery. It had a terrible pain in the ass, making it unable to perform the duties expected of it. Luckily we were able to save most of the ass, and it is expected to make a full recovery.
WIP Part 2 : Gone with Wind32 Titlebar
- Maximize button is only visible when not already maximized
- Restore button is only visibile when Window is maximized
- WindowRootGrid is now called WindowRoot
- Added a WindowRoot view model
- Added a Window State Enum for Minimized, Maximized and Other
Please see my prior check-in for the first push towards the effort to create a lookless Window where the Win32 border and Titlebar are never used, but all features they would provide still exist. Other than cleanup and my normal addiction to refactoring, most of the work is complete for this feature.
With what I have now, there will be some confusion when it comes to a UIElements child/children/Content etc. For example, the WindowRoot inherits from the UWP LayoutTransformControl that actually inherits from Grid. The LayoutTransformControl has a member called Child. When I inherit from LayoutTransformControl I set the Child with another Grid that has two rows. One row is in fact the Titlebar and the other is the clients content (what we normally think of as the Window.Content. I place the client content into the second row by providing a property called Content. So, when you look at the inheritence path, the LayoutTransformControl has Grid.Children that it provides access to via its single LayoutTransformControl.Child. I inherit from this control and provide the WindowRoot.Content property. I am not sure which is more confusing, my explanation of this or the implementation of it.
The TitleBar control had four event handlers that were dead code that I removed.
In Program.cs I updated the InitializeServices method to change the scope of several injected services to be Transients because that scope causes much less concerns about lifetime and even though my example is simple, I didn't want it to be copied and pasted into the wild as a bunch of singletons.
Until this check-in, the Titlebar was part of the MainPage (was once called the SettingsPage). However, I pushed that logic up closer to the actual Window itself because I do not want a page to have to concern itself with the Window's titlebar.
On a final random check-in note, I never like the fact that XAML files need to provide a default parameter-less constructor to please the Visual Studio designer. When using nullable, it causes a real pain because the existence of that constructor means that you have to protect those properties by null checking them or disable the related analyzer warnings. Even though WinUI doesn't work with a designer right now, I figured I would code this as if it does.
Realize that curses and lambdas do not work together and that all of this was a waste of effort. Fuck my life. Time to rewrite the whole thing in urwid
Movement recursion works
Paint your household pets blue and mutilate baby foxes in thanks! The movement recursion works at last! (also how unity determines what order start function gets called in is a fucking mystery)
ruining all the images by resizing them and making them fuzzy and bad!
- yeah I know I'm just gonna need to redownload all of these images once I find an appropriate solution (aka figuring out how to make the increased sprite size work for the layout and not the other way around)
- but yeah these party sprites look realllllllllyyyy bad but there are already several that look terrible so might as well make everything look terrible until I can be so frustrated I have to fix it
- also really need to find out how to resize things without making them terrible because they look so bad and I hate myself for being so bad at everything
sched/core: Fix ttwu() race
Paul reported rcutorture occasionally hitting a NULL deref:
sched_ttwu_pending() ttwu_do_wakeup() check_preempt_curr() := check_preempt_wakeup() find_matching_se() is_same_group() if (se->cfs_rq == pse->cfs_rq) <-- BOOM
Debugging showed that this only appears to happen when we take the new code-path from commit:
2ebb17717550 ("sched/core: Offload wakee task activation if it the wakee is descheduling")
and only when @cpu == smp_processor_id(). Something which should not be possible, because p->on_cpu can only be true for remote tasks. Similarly, without the new code-path from commit:
c6e7bd7afaeb ("sched/core: Optimize ttwu() spinning on p->on_cpu")
this would've unconditionally hit:
smp_cond_load_acquire(&p->on_cpu, !VAL);
and if: 'cpu == smp_processor_id() && p->on_cpu' is possible, this would result in an instant live-lock (with IRQs disabled), something that hasn't been reported.
The NULL deref can be explained however if the task_cpu(p) load at the beginning of try_to_wake_up() returns an old value, and this old value happens to be smp_processor_id(). Further assume that the p->on_cpu load accurately returns 1, it really is still running, just not here.
Then, when we enqueue the task locally, we can crash in exactly the observed manner because p->se.cfs_rq != rq->cfs_rq, because p's cfs_rq is from the wrong CPU, therefore we'll iterate into the non-existant parents and NULL deref.
The closest semi-plausible scenario I've managed to contrive is somewhat elaborate (then again, actual reproduction takes many CPU hours of rcutorture, so it can't be anything obvious):
X->cpu = 1
rq(1)->curr = X
CPU0 CPU1 CPU2
// switch away from X
LOCK rq(1)->lock
smp_mb__after_spinlock
dequeue_task(X)
X->on_rq = 9
switch_to(Z)
X->on_cpu = 0
UNLOCK rq(1)->lock
// migrate X to cpu 0
LOCK rq(1)->lock
dequeue_task(X)
set_task_cpu(X, 0)
X->cpu = 0
UNLOCK rq(1)->lock
LOCK rq(0)->lock
enqueue_task(X)
X->on_rq = 1
UNLOCK rq(0)->lock
// switch to X
LOCK rq(0)->lock
smp_mb__after_spinlock
switch_to(X)
X->on_cpu = 1
UNLOCK rq(0)->lock
// X goes sleep
X->state = TASK_UNINTERRUPTIBLE
smp_mb(); // wake X
ttwu()
LOCK X->pi_lock
smp_mb__after_spinlock
if (p->state)
cpu = X->cpu; // =? 1
smp_rmb()
// X calls schedule()
LOCK rq(0)->lock
smp_mb__after_spinlock
dequeue_task(X)
X->on_rq = 0
if (p->on_rq)
smp_rmb();
if (p->on_cpu && ttwu_queue_wakelist(..)) [*]
smp_cond_load_acquire(&p->on_cpu, !VAL)
cpu = select_task_rq(X, X->wake_cpu, ...)
if (X->cpu != cpu)
switch_to(Y)
X->on_cpu = 0
UNLOCK rq(0)->lock
However I'm having trouble convincing myself that's actually possible on x86_64 -- after all, every LOCK implies an smp_mb() there, so if ttwu observes ->state != RUNNING, it must also observe ->cpu != 1.
(Most of the previous ttwu() races were found on very large PowerPC)
Nevertheless, this fully explains the observed failure case.
Fix it by ordering the task_cpu(p) load after the p->on_cpu load, which is easy since nothing actually uses @cpu before this.
Fixes: c6e7bd7afaeb ("sched/core: Optimize ttwu() spinning on p->on_cpu") Reported-by: Paul E. McKenney paulmck@kernel.org Tested-by: Paul E. McKenney paulmck@kernel.org Signed-off-by: Peter Zijlstra (Intel) peterz@infradead.org Signed-off-by: Ingo Molnar mingo@kernel.org Link: https://lkml.kernel.org/r/20200622125649.GC576871@hirez.programming.kicks-ass.net
Statistical Learning with Sparsity: the Lasso and Generalizations. Job Application for Preclinical Biomarker Statistician (6 Month Contract) at Denali Therapeutics. Infotree Service Inc Associate Scientist-(CE, HPLC, JMP, statistical and analytical ) | SmartRecruiters. Infotree Service Inc Study Lead Statistician – Centralized Statistical Monitoring (CSM) | SmartRecruiters. MSML2020 - Mathematical and Scientific Machine Learning Conference | Center for Statistics and Machine Learning. Senior Biostatistician - Blueprint Medicines - Career Page. Job Application for VP, Head of Biostatistics (Roivant) at Roivant Sciences. Maths and Statistics Tutor - Study Group - Career Page. Ugly code is buggy code « Statistical Modeling, Causal Inference, and Social Science. Premier Research Careers - Director, Biostatistics (US Based).
oh, that's a baseball! (#14)
- [READY] Disarm Rework: Shove that Dickhead (#42958)
The War on Stun Based Combat Phase II About The Pull Request
A massive change in gameplay that affects more than just disarm. Hopefully in an interesting way. There's two parts to this, part 1 is that disarm's functionality has been entirely stripped out and replaced with essentially a new purpose: Shoving. Shoving is the new action that occurs when clicking on people while in the disarm intent. Shoving someone pushes them one tile away from you. If there is otherwise nothing blocking them, they are slowed down very slightly for 3 seconds. If you shove someone again while they are slowed, it knocks ranged weapons out of their active hand. I'm not sure about this part and may buff or remove it depending on how it works in practice. If the blocking tile has a table on it, they're pushed onto it knocking them over for 3 seconds. If it has another human on it, it knocks them both over, the collateral victim for 1 second instead of 3. If the tile is otherwise blocked besides them, it knocks them down for 3 seconds. All knockdowns cause you to drop items, and do not stun at all and can be immediately crawled away from. However, once knocked down, if you are shoved again it paralyzes for 4 seconds. This is the same length as the old disarm push. It cannot be chained or extended, shoving them again while they're paralyzed does not extend the length of the paralyze. Once it ends, the person will be up and moving. Now you might be thinking, why would I want to shove someone unless they're against a wall? Here's part 2: Moving into someone in a hostile intent no longer pushes them. They'll stay where they are and your movement is blocked. If you want to get someone out of the way, you need to shove them. Why It's Good For The Game
Changes a previously RNG based mechanic that was basically just spammed until you got that lucky "I win" roll into a positioning based utility that has a point to use in many situations. Livens up simple melee combat and makes fighting in confined areas more lively and unpredictable. Introduces some new epic gamer strats, I've been playing around and it's pretty fun. Also why not try something really crazy and see what happens? If it's shit it can be reverted :^) Changelog
Special thanks to whoneedsspace, the inventor of the singlecap, for deshitcodifying this hard.
cl add: Disarm has been reworked, instead of an rng based system instead it pushes people away from you. If their movement is blocked it knocks them over. Shoving someone twice quickly will knock ranged weapons out of their hands. del: Moving into humans while in a hostile intent no longer pushes them. tweak: Passive grabs need to be resisted out of while on the ground, and can't be directly crawled out of /cl
- [READY] Disarm Rework: Shove that Dickhead
Co-authored-by: Rob Bailey actioninja@gmail.com Co-authored-by: yogstation13-bot jahostagat@thraml.com
Merge 4.14.189 into ten-rebase
Changes in 4.14.189: (133 commits) Linux 4.14.189 rxrpc: Fix trace string libceph: don't omit recovery_deletes in target_copy() x86/cpu: Move x86_cache_bits settings sched/fair: handle case of task_h_load() returning 0 arm64: ptrace: Override SPSR.SS when single-stepping is enabled thermal/drivers/cpufreq_cooling: Fix wrong frequency converted from power misc: atmel-ssc: lock with mutex instead of spinlock dmaengine: fsl-edma: Fix NULL pointer exception in fsl_edma_tx_handler intel_th: pci: Add Emmitsburg PCH support intel_th: pci: Add Tiger Lake PCH-H support intel_th: pci: Add Jasper Lake CPU support hwmon: (emc2103) fix unable to change fan pwm1_enable attribute MIPS: Fix build for LTS kernel caused by backporting lpj adjustment timer: Fix wheel index calculation on last level uio_pdrv_genirq: fix use without device tree and no interrupt Input: i8042 - add Lenovo XiaoXin Air 12 to i8042 nomux list mei: bus: don't clean driver pointer Revert "zram: convert remaining CLASS_ATTR() to CLASS_ATTR_RO()" fuse: Fix parameter for FS_IOC_{GET,SET}FLAGS virtio: virtio_console: add missing MODULE_DEVICE_TABLE() for rproc serial USB: serial: option: add Quectel EG95 LTE modem USB: serial: option: add GosunCn GM500 series USB: serial: ch341: add new Product ID for CH340 USB: serial: cypress_m8: enable Simply Automated UPB PIM USB: serial: iuu_phoenix: fix memory corruption usb: gadget: function: fix missing spinlock in f_uac1_legacy usb: chipidea: core: add wakeup support for extcon usb: dwc2: Fix shutdown callback in platform USB: c67x00: fix use after free in c67x00_giveback_urb ALSA: usb-audio: Fix race against the error recovery URB submission ALSA: line6: Perform sanity check for each URB creation HID: magicmouse: do not set up autorepeat mtd: rawnand: oxnas: Release all devices in the remove() path mtd: rawnand: oxnas: Unregister all devices on error mtd: rawnand: oxnas: Keep track of registered devices mtd: rawnand: brcmnand: fix CS0 layout perf stat: Zero all the 'ena' and 'run' array slot stats for interval mode copy_xstate_to_kernel: Fix typo which caused GDB regression ARM: dts: socfpga: Align L2 cache-controller nodename with dtschema Revert "thermal: mediatek: fix register index error" staging: comedi: verify array index is correct before using it usb: gadget: udc: atmel: fix uninitialized read in debug printk spi: spi-sun6i: sun6i_spi_transfer_one(): fix setting of clock rate arm64: dts: meson: add missing gxl rng clock phy: sun4i-usb: fix dereference of pointer phy0 before it is null checked iio:health:afe4404 Fix timestamp alignment and prevent data leak. ACPI: video: Use native backlight on Acer TravelMate 5735Z ACPI: video: Use native backlight on Acer Aspire 5783z mmc: sdhci: do not enable card detect interrupt for gpio cd type doc: dt: bindings: usb: dwc3: Update entries for disabling SS instances in park mode Revert "usb/xhci-plat: Set PM runtime as active on resume" Revert "usb/ehci-platform: Set PM runtime as active on resume" Revert "usb/ohci-platform: Fix a warning when hibernating" of: of_mdio: Correct loop scanning logic net: dsa: bcm_sf2: Fix node reference count spi: fix initial SPI_SR value in spi-fsl-dspi spi: spi-fsl-dspi: Fix lockup if device is shutdown during SPI transfer iio:health:afe4403 Fix timestamp alignment and prevent data leak. iio:pressure:ms5611 Fix buffer element alignment iio: pressure: zpa2326: handle pm_runtime_get_sync failure iio: mma8452: Add missed iio_device_unregister() call in mma8452_probe() iio: magnetometer: ak8974: Fix runtime PM imbalance on error iio:humidity:hdc100x Fix alignment and data leak issues iio:magnetometer:ak8974: Fix alignment and data leak issues arm64/alternatives: don't patch up internal branches iio:pressure:ms5611 Fix buffer element alignment iio: pressure: zpa2326: handle pm_runtime_get_sync failure iio: mma8452: Add missed iio_device_unregister() call in mma8452_probe() iio: magnetometer: ak8974: Fix runtime PM imbalance on error iio:humidity:hdc100x Fix alignment and data leak issues iio:magnetometer:ak8974: Fix alignment and data leak issues arm64/alternatives: don't patch up internal branches arm64: alternative: Use true and false for boolean values i2c: eg20t: Load module automatically if ID matches gfs2: read-only mounts should grab the sd_freeze_gl glock tpm_tis: extra chip->ops check on error path in tpm_tis_core_init arm64/alternatives: use subsections for replacement sequences drm/exynos: fix ref count leak in mic_pre_enable cgroup: Fix sock_cgroup_data on big-endian. cgroup: fix cgroup_sk_alloc() for sk_clone_lock() tcp: md5: do not send silly options in SYNCOOKIES tcp: make sure listeners don't initialize congestion-control state net_sched: fix a memory leak in atm_tc_init() tcp: md5: allow changing MD5 keys in all socket states tcp: md5: refine tcp_md5_do_add()/tcp_md5_hash_key() barriers tcp: md5: add missing memory barriers in tcp_md5_do_add()/tcp_md5_hash_key() net: usb: qmi_wwan: add support for Quectel EG95 LTE modem net: Added pointer check for dst->ops->neigh_lookup in dst_neigh_lookup_skb llc: make sure applications use ARPHRD_ETHER l2tp: remove skb_dst_set() from l2tp_xmit_skb() ipv4: fill fl4_icmp{type,code} in ping_v4_sendmsg genetlink: remove genl_bind s390/mm: fix huge pte soft dirty copying ARC: elf: use right ELF_ARCH ARC: entry: fix potential EFA clobber when TIF_SYSCALL_TRACE dm: use noio when sending kobject event drm/radeon: fix double free btrfs: fix fatal extent_buffer readahead vs releasepage race Revert "ath9k: Fix general protection fault in ath9k_hif_usb_rx_cb" KVM: x86: Mark CR4.TSD as being possibly owned by the guest KVM: x86: Inject #GP if guest attempts to toggle CR4.LA57 in 64-bit mode KVM: x86: bit 8 of non-leaf PDPEs is not reserved KVM: arm64: Stop clobbering x0 for HVC_SOFT_RESTART KVM: arm64: Fix definition of PAGE_HYP_DEVICE ALSA: usb-audio: add quirk for MacroSilicon MS2109 ALSA: hda - let hs_mic be picked ahead of hp_mic ALSA: opl3: fix infoleak in opl3 mlxsw: spectrum_router: Remove inappropriate usage of WARN_ON() net: macb: mark device wake capable when "magic-packet" property present bnxt_en: fix NULL dereference in case SR-IOV configuration fails nbd: Fix memory leak in nbd_add_socket arm64: kgdb: Fix single-step exception handling oops ALSA: compress: fix partial_drain completion state smsc95xx: avoid memory leak in smsc95xx_bind smsc95xx: check return value of smsc95xx_reset net: cxgb4: fix return error value in t4_prep_fw x86/entry: Increase entry_stack size to a full page nvme-rdma: assign completion vector correctly scsi: mptscsih: Fix read sense data size ARM: imx6: add missing put_device() call in imx6q_suspend_init() cifs: update ctime and mtime during truncate s390/kasan: fix early pgm check handler execution ixgbe: protect ring accesses with READ- and WRITE_ONCE spi: spidev: fix a potential use-after-free in spidev_release() spi: spidev: fix a race between spidev_release and spidev_remove gpu: host1x: Detach driver on unregister ARM: dts: omap4-droid4: Fix spi configuration and increase rate spi: spi-fsl-dspi: Fix external abort on interrupt in resume or exit paths spi: spi-fsl-dspi: use IRQF_SHARED mode to request IRQ spi: spi-fsl-dspi: Fix lockup if device is removed during SPI transfer spi: spi-fsl-dspi: Adding shutdown hook KVM: s390: reduce number of IO pins to 1
Signed-off-by: CryllicBuster273 cryllicbuster273@pixelexperience.org
"12:35pm. Done with breakfast. Ok me, remember the powerlust and resume. I'll have plenty of time to slack when the agents are training. Until then, I need to burn with the desire.
Leave the stray thoughts aside, and move like a shot arrow.
12:40pm. Just as I have talked about, I'll start by refactoring the tokenizer.
...Ok, I've redesigned the whole thing to remove the expected, message distinction from the error type.
let process_error (line, ers : (Range * TokenizerError) list) : (string * VSCRange) [] =
Now let me redesign this.
First I will change the Range
to VSCRange
.
let process_error (line, ers : (Range * TokenizerError) list) : (string * VSCRange) [] =
let ers = ers |> List.mapi (fun i (r,x) -> let i = line + i in x, ({line=i; character=r.from}, {line=i; character=r.nearTo}))
Ah, wait I was wrong. That function line processes error on a single line. That makes things even easier.
1:05pm.
let process_error (k,v) =
let expecteds, messages = v |> Array.partition (fun x -> Char.IsLower(x,0))
let ex () = match expecteds with [|x|] -> sprintf "Expected: %s" x | x -> sprintf "Expected one of: %s" (String.concat ", " x)
let f l = String.concat "\n" l
if Array.isEmpty expecteds then f messages, k
elif Array.isEmpty messages then ex (), k
else f (Array.append [|ex (); ""; "Other error messages:"|] messages), k
let process_errors (line, ers : (Range * TokenizerError) list []) : (string * VSCRange) [] =
ers |> Array.mapi (fun i l ->
let i = line + i
l |> List.toArray |> Array.map (fun (r,x) -> x, ({line=i; character=r.from}, {line=i; character=r.nearTo}))
)
|> Array.concat
|> Array.groupBy snd
|> Array.map ((fun (k,v) -> k, Array.map fst v) >> process_error)
Let me do it like this.
This is a nice stable way of doing it. I'll be able to reuse process_error
for the parser.
let messages, expecteds = v |> Array.partition (fun x -> Char.IsUpper(x,0))
Let me make this the condition.
1:15pm.
let show_block_parsing_error line (l : (Config.VSCRange * ParserErrors) list) =
List.toArray l |> Array.groupBy fst
|> Array.map (fun ((a,b),v) -> Tokenize.process_error (({a with line=line+a.line}, {b with line=line+b.line}), Array.map (snd >> show_parser_error) v))
It came out quite simple as expected.
let show_block_parsing_error line (l : (Config.VSCRange * ParserErrors) list) =
l |> List.groupBy fst
|> List.map (fun ((a,b),v) ->
let k = {a with line=line+a.line}, {b with line=line+b.line}
let v = List.toArray v |> Array.map (snd >> show_parser_error)
Tokenize.process_error (k, v)
)
Let me do it like this. It is a bit longer this way, but should be a tad more efficient and readable.
1:30pm. Unlike say type errors, parser error will be relatively localized, so there won't be much inefficiency from traversing the whole block and converting them every time like this. I'll be able to bear with it.
Ok, now...I think I have everything I need. At this point, I am ready to just try it out.
Let me do it. It is the long awaited first step. After the debugging session, some the sematic highlighting using parsing pass. Once I have that, I'll be complete.
Let me take a short break here."
Fuck you
Whoever made this value so high deserves to be fucking lynched.
Do not try to execute a record if there is nothing already recorded.
All this work, is dedicated to Zoi, for thirty years a gorgeous companion and mother of our four kids as Zoi means life here actually.
She was born a day like this, when the humans touched the moon, but a day like this, it was also the first whole day i remember crystal clear in my life (20 July of 1974). I remember walking with my mother coming from my beloved grand parents. My father had to go to the army that same day, because there was a war. I remember an extraordinary bright night sky, though the moon was new.