strike

SPAM strikes back

Hormel Foods makes SPAM, and for generations, the company also created jobs for families in Austin, Minnesota. Today, the story of a labor strike that threatened to tear one small town apart. (This episode was made in collaboration with The Experiment podcast.) | Subscribe to our weekly newsletter here.

Learn more about sponsor message choices: podcastchoices.com/adchoices

NPR Privacy Policy




strike

Boeing Workers End Strike; Cash Flow Will Remain Negative Through 2025

Boeing’s [BA] machinists’ union members on Monday voted to end their 53-day strike that shut down production at the company’s commercial aircraft plants in the Pacific Northwest but the company […]




strike

Johnson Controls, Constellation Strike Solar Energy Pact

Constellation’s Offsite Renewables Plus (CORe+) retail power product, combined with Johnson Controls’ commitment to renewables, is supporting the development of two new Welcome Solar renewable energy facilities.




strike

United Auto Workers’ Strike Yields Win for “Just Transition”

In bringing electric vehicle battery plants under its national contract, the UAW took a major step toward transitioning away from fossil fuels in a way that protects workers' rights.




strike

[ K.154 (01/24) ] - Operating telecommunication facilities using lightning strikes data obtained from lightning location systems

Operating telecommunication facilities using lightning strikes data obtained from lightning location systems




strike

New York Times Tech Guild workers end strike, but negotiations will continue

The New York Times Tech Guild is ending a week-long strike that started one day before the U.S. presidential election and will return to work on Tuesday, it said in a post on X on Monday.

More than 600 tech workers of NYT, including software engineers, designers and product managers, had gone on a strike amid stalled contract negotiations over pay and job security, planning daily protests during the crucial election day period.

Negotiations between the guild and the publisher have not progressed since the strike began, the spokesperson for the New York Times said in an email response.

“We look forward to continuing to work with Tech Guild to reach a fair contract that takes into account that they are already among the highest paid individual contributors in the company,” the spokesperson said.

The Tech Guild has been in contract negotiations with NYT for more than two years.

“We clearly demonstrated how valuable our work is to The New York Times, especially on election night, and showed that we have the full support of subscribers and allies across the country going forward,” said Kathy Zhang, Tech Guild unit chair.

—Jaspreet Singh, Reuters




strike

Have we learned any lessons from the CrowdStrike outage?

By Charlie Macdonald, CTO at BPS Global Australia.

Three months ago, cybersecurity platform provider CrowdStrike released an update that caused 8.5 million Microsoft Windows PCs and servers to crash. The glitch had a ripple effect across industries and global supply chains – almost three-quarters of the world’s computers use a Microsoft’s Windows operating system.




strike

Boeing factory workers to vote on deal that could end seven-week strike

Boeing factory workers to vote on deal that could end seven-week strike




strike

Boeing to take weeks to resume production of planes after strike

Boeing to take weeks to resume production of planes after strike




strike

Aftermath of Israeli airstrikes in Beirut, displaced people seek shelter

Aftermath of Israeli airstrikes in Beirut, displaced people seek shelter




strike

NO COMMENT: Aftermath of Israeli airstrike on Al-Maghazi refugee camp that killed at least four

NO COMMENT: Aftermath of Israeli airstrike on Al-Maghazi refugee camp that killed at least four





strike

Boeing strike ends after workers vote to accept “life-changing” wage increase

Workers vow to restore Boeing's iconic legacy as costly strike ends.




strike

Why the Crowdstrike Outage is a Golden Opportunity for MSPs

Leverage the Crowdstrike outage to position your MSP as a business continuity expert. Use timely, relevant content from our extensive MSP library to attract new clients.

Source: Why the Crowdstrike Outage is a Golden Opportunity for MSPs - Technibble.com



  • MSP Content Marketing
  • MSP Marketing Strategy

strike

Gatwick Airport strikes ended when workers accepted 10.3% wage increase

Gatwick Airport Strikes Ended When Workers Accepted 10.3% Wage Increase

Creative Media News...




strike

Boeing layoffs weren't just a strike threat




strike

Will Google strike a deal with California news outlets to fund journalism?

California news publishers and Big Tech companies appear to be inching toward compromise on legislation requiring digital platforms to pay news outlets.




strike

First-pitch strikes critical for Gonzalez

Gio Gonzalez threw strikes on Thursday night – 78 to be exact, on 112 pitches — keying his one-hit work over eight dominant innings in the Nats’ 8-1 victory over the Reds. Gonzalez (2-1), the Nats’ starter most susceptible to wildness, had walked 11 in 20 innings, lasting no more than six innings in any of his previous four starts. But with the lead from the third inning on, Gonzalez was able to attack.




strike

Slog AM: Election Day Pretties, Boeing Machinists's Strike Ends, Cloned Blackfooted Ferret Gives Birth

Seattle's only news roundup. by Ashley Nerbovig

Ok weather to vote in! Should be a pretty nice day to stroll down to your nearest ballot box, with a high of 52 degrees and partly sunny, and a slight chance of rain after 2 p.m. 

So go vote! Don't let anything stop you. As Hannah said yesterday, you can still vote! I voted last year on the last possible day, and I hadn't registered yet at that point. I just jogged down to Lumen Field though and it was super easy to register, vote, and leave. Even if you're feeling left out because you're not in a swing state and the entirety of the country's future doesn't rest on your shoulders, the future of this state and city really does! Dropping some helpful links to make sure you have everything you need to make your voices heard. First, how to register to vote. Second, how to replace a lost ballot. Thirdly, ballot box locations. Finally, our handy cheat sheet for help filling out your ballot. 

Done your civic duty already? Well then sit back and enjoy the final hours of uncertainty at one of the many election night parties happening across the city tonight. The Stranger is throwing one at the Crocodile—it’s sold out, but we think it’s worth it to take your chances on standby tickets. There might be some no-shows, and we can squeeze you in. But if you don't wanna chance it, check out this list of parties you can attend from our sister publication Everout. Stranger reporters will be dotted around the city to bring you coverage of the election from various candidate election parties as well.

Speaking of voting: The Boeing machinists approved a contract last night ending their strike after 53 days, according to the Seattle Times. The latest contract, approved by 59% of membership, includes a 38% general wage increase over the next four years, which equates to 43% when you factor in raises on top of raises. The contract did not restore the pension that they lost in a contentious vote 10 years ago. Union president Jon Holden said the union should be proud of what they accomplished and that it was time to get back to building planes.

Alleged sex abuse in youth detention: An additional 176 people made allegations against Washington state for failing to protect them from sexual abuse while they were children at youth detention centers in the state, according to the Seattle Times. Combined with another lawsuit filed in September, that brings the total number of people claiming they were sexually abused in Washington's detention centers up to almost 400. Meanwhile, the Seattle Times Editorial Board continues to decry and complain about youth diversion programs meant to help kids avoid being sent into lock up.

Seattle Steel Pan Project Evicted: The Seattle Steel Pan Project, dedicated to teaching the art of steel plan music and performance, needs a new space to operate in after MLK FAME Community Center in the Central District evicted the group this week, according to an Instagram post from the project. In the post, the group accused MLK FAME of bowing to the demands of neighborhood "Karens" who complained about the groups weekly practice. I reached out to MLK FAME for a response, who did not immediately reply, but I'll update if they do. In the meantime, the project is asking everyone they know if they have any ideas where they can house their steel pan band. Their email address is steelpanproject@gmail.com. Here's a little taste of what they do:

Ok. Moving on. Let's talk about the presidential election: Let's be real, no one knows how this election will shake out. The polls are insanely tight in swing states. Dixville Notch, a tiny New Hampshire town that votes at midnight every year on Election Day, tallied up their six votes which resulted in a tie, with three votes for Vice President Kamala Harris, and three for former President Donald Trump. There is a very good chance we don't know the election result tonight, and maybe not for a couple days.

Battleground states prepare for certification fight: Given the resistance to certifying the vote in swing states in the last election cycle, many officials have already started to prepare to quash attempts by county officials to squabble over valid election results, according to Politico. Election officials fear if Trump loses, he won't just fade quietly into the night, and instead will mount another attempt to overturn election results.

Meanwhile, the two parties also are wrestling for control of congress. New York stands out as a battleground state for the House, as the congressional seats they lost in 2022 helped Republicans take the chamber back, according to Politico. Meanwhile in Texas, Democrats continue to try to take Senator Ted Cruz's seat, and while Cruz continues to lead, Representative Colin Allred is within spitting distance of him. But, it's wholly unpredictable who will control what in 2025.

But for some good news: One of my top five favorite creatures in the world continues to beat the odds. A cloned black-footed ferret mother in Virginia gave birth to two little baby ferrets in June, according to the Washington Post. Unclear why we're only hearing about it now. We should have rang the bells. If you don't know much about black-footed ferrets, you're really missing out. These little bandits scurry across our prairie lands, and has supposedly gone extinct twice, but they're resilient AF. Now with the cloning and the babies, we could continue to see this species soldier on. Ugh I love them so much, I've been obsessed with them ever since I lived in Montana. And I'm not a ferret girl, it's just they're little markings make them look like they have a tiny black Zorro mask across their smol faces. Here is a video of them being adorable:

I'm so excited about this cloning thing: Instead of a musical recommendation, another video about black footed ferrets.

 




strike

NEWS BRIEFS: Spokane workshops offer to help strike racist property records

Plus, the city shines a light on high crime areas; and Idaho issues another death warrant to a man whose execution failed Researchers with Eastern Washington University's Racial Covenants Project have released a detailed map of Spokane area properties that have racially restrictive covenants on their deed or title…




strike

Federal Judge Strikes Down Georgia Abortion Restrictions

A federal judge is permanently blocking Georgia’s 2019 “heartbeat" abortion law, finding that it violates the U.S. Constitution. U.S. District Judge Steve Jones ruled against the state Monday in a lawsuit filed by abortion providers and an advocacy group.




strike

spaceships on strike

North Continent Ribbon is a collection of linked short stories including an assassin with a crystal sword, a judge whose best friend is a book, and spaceships on strike. I wrote about the way the worldbuilding intertwines with eighteenth-century crime records for Mary Robinette Kowal's column My Favorite Bit, and the first story, Closer Than Your Kidneys, is available for free at Frivolous Comma.

You can find North Continent Ribbon at Neon Hemlock Press as a paperback or ebook, buy it from your favorite bookstore, or request it from your library.

[Link




strike

Strike Force Raptor makes more firearm arrests

AN ASSOCIATE of the Rebels Outlaw Motorcycle Gang and his girlfriend have been charged with firearms offences.





strike

The Hollywood strikes are over. Here’s when you could see your favorite stars and shows return

Missed your favorite actors? After nearly four months of striking, they’re coming back. Wednesday’s deal between striking actors and studios and streaming services won’t immediately restore filming to its full swing. That will take months. But the tentative agreement that both sides say include extraordinary provisions means that more than six months of labor strife in the film and television industries is drawing to a close. Soon, tens of thousands of entertainment sector workers could get back to work. And popular franchises like “Deadpool,” “Abbott Elementary” and “The Last of Us” will be a step closer to returning to screens.




strike

Crew Evacuated After Yacht Strikes Whale

[Updated] A yacht sailing from Bermuda was abandoned yesterday [May 18], and the crew were evacuated after striking a whale and sustaining damage to the hull. Skipper Joost Gehrels, doubted that the boat — called Outer Limits — could safety return to Bermuda and issued a MayDay to request immediate assistance. Bermuda Radio contacted vessels […]




strike

Stevenson: Boat Strikes Threatening Humpbacks

Photographs recently captured in the Challenger Banks area offer a stark reminder of the perils that whales can face in the ocean, with the whale spotted harbouring a slash across its back that whale researcher Andrew Stevenson said appears to have been caused by the prop of a small boat, lopping off its dorsal fin. Mr Stevenson […]




strike

Lightning Strikes Roof Of Southampton Church

Last night’s lightning storm appears to have damaged the Seventh-Day Adventist Church in Southampton, with the Church’s roof sustaining damage overnight. The Bermuda Fire & Rescue Service are presently on scene assessing the situation. Dr. Sydney Gibbons, the Church’s Pastor, confirmed that is no internal damage to the church and added that they are looking […]




strike

NSW nurses strike heaps wage pressure on Minns government - The Australian Financial Review

  1. NSW nurses strike heaps wage pressure on Minns government  The Australian Financial Review
  2. Hundreds of elective surgeries cancelled as 10,000 nurses and midwives walk off job in NSW  ABC News
  3. Nurses took to the streets after ‘insulting’ pay offer. Next stop, court  Sydney Morning Herald
  4. Almost 700 surgeries cancelled as 12,000 NSW nurses strike for better pay  9News




strike

TurtleWare: Dynamic Vars - The Empire Strikes Back

Table of Contents

  1. Thread Local storage exhausted
  2. The layer of indirection
  3. I can fix her
  4. Let's write some tests!
  5. Summary

Thread Local storage exhausted

In the last post I've described a technique to use dynamic variables by value instead of the name by utilizing the operator PROGV. Apparently it works fine on all Common Lisp implementations I've tried except from SBCL, where the number of thread local variables is by default limited to something below 4000. To add salt to the injury, these variables are not garbage collected.

Try the following code to crash into LDB:

(defun foo ()
  (loop for i from 0 below 4096 do
    (when (zerop (mod i 100))
      (print i))
    (progv (list (gensym)) (list 42)
      (values))))
(foo)

This renders our new technique not very practical given SBCL popularity. We need to either abandon the idea or come up with a workaround.

The layer of indirection

Luckily for us we've already introduced a layer of indirection. Operators to access dynamic variables are called DLET, DSET and DREF. This means, that it is enough to provide a kludge implementation for SBCL with minimal changes to the remaining code.

The old code works the same as previously except that instead of SYMBOL-VALUE we use the accessor DYNAMIC-VARIABLE-VALUE, and the old call to PROGV is now DYNAMIC-VARIABLE-PROGV. Moreover DYNAMIC-EFFECTIVE-SLOT used functions BOUNDP and MAKUNBOUND, so we replace these with DYNAMIC-VARIABLE-BOUND-P and DYNAMIC-VARIABLE-MAKUNBOUND. To abstract away things further we also introduce the constructor MAKE-DYNAMIC-VARIABLE

(defpackage "EU.TURTLEWARE.BLOG/DLET"
  (:local-nicknames ("MOP" #+closer-mop "C2MOP"
                           #+(and (not closer-mop) ecl) "MOP"
                           #+(and (not closer-mop) ccl) "CCL"
                           #+(and (not closer-mop) sbcl) "SB-MOP"))
  (:use "CL"))
(in-package "EU.TURTLEWARE.BLOG/DLET")

(eval-when (:compile-toplevel :execute :load-toplevel)
  (unless (member :bordeaux-threads *features*)
    (error "Please load BORDEAUX-THREADS."))
  (when (member :sbcl *features*)
    (unless (member :fake-progv-kludge *features*)
      (format t "~&;; Using FAKE-PROGV-KLUDGE for SBCL.~%")
      (push :fake-progv-kludge *features*))))

(defmacro dlet (bindings &body body)
  (flet ((pred (binding)
           (and (listp binding) (= 2 (length binding)))))
    (unless (every #'pred bindings)
      (error "DLET: bindings must be lists of two values.~%~
                Invalid bindings:~%~{ ~s~%~}" (remove-if #'pred bindings))))
  (loop for (var val) in bindings
        collect var into vars
        collect val into vals
        finally (return `(dynamic-variable-progv (list ,@vars) (list ,@vals)
                           ,@body))))

(defmacro dset (&rest pairs)
  `(setf ,@(loop for (var val) on pairs by #'cddr
                 collect `(dref ,var)
                 collect val)))

(defmacro dref (variable)
  `(dynamic-variable-value ,variable))

;;; ...

(defmethod mop:slot-boundp-using-class
    ((class standard-class)
     object
     (slotd dynamic-effective-slot))
  (dynamic-variable-bound-p (slot-dvar object slotd)))

(defmethod mop:slot-makunbound-using-class
    ((class standard-class)
     object
     (slotd dynamic-effective-slot))
  (dynamic-variable-makunbound (slot-dvar object slotd)))

With these in place we can change the portable implementation to conform.

#-fake-progv-kludge
(progn
  (defun make-dynamic-variable ()
    (gensym))

  (defun dynamic-variable-value (variable)
    (symbol-value variable))

  (defun (setf dynamic-variable-value) (value variable)
    (setf (symbol-value variable) value))

  (defun dynamic-variable-bound-p (variable)
    (boundp variable))

  (defun dynamic-variable-makunbound (variable)
    (makunbound variable))

  (defmacro dynamic-variable-progv (vars vals &body body)
    `(progv ,vars ,vals ,@body)))

I can fix her

The implementation for SBCL will mediate access to the dynamic variable value with a synchronized hash table with weak keys. The current process is the key of the hash table and the list of bindings is the value of the hash table. For compatibility between implementations the top level value of the symbol will be shared.

The variable +FAKE-UNBOUND+ is the marker that signifies, that the variable has no value. When the list of bindings is EQ to +CELL-UNBOUND+, then it means that we should use the global value. We add new bindings by pushing to it.

#+fake-progv-kludge
(progn
  (defvar +fake-unbound+ 'unbound)
  (defvar +cell-unbound+ '(no-binding))

  (defclass dynamic-variable ()
    ((tls-table
      :initform (make-hash-table :synchronized t :weakness :key)
      :reader dynamic-variable-tls-table)
     (top-value
      :initform +fake-unbound+
      :accessor dynamic-variable-top-value)))

  (defun make-dynamic-variable ()
    (make-instance 'dynamic-variable))

  (defun dynamic-variable-bindings (dvar)
    (let ((process (bt:current-thread))
          (tls-table (dynamic-variable-tls-table dvar)))
      (gethash process tls-table +cell-unbound+)))

  (defun (setf dynamic-variable-bindings) (value dvar)
    (let ((process (bt:current-thread))
          (tls-table (dynamic-variable-tls-table dvar)))
      (setf (gethash process tls-table +cell-unbound+) value))))

We define two readers for the variable value - one that simply reads the value, and the other that signals an error if the variable is unbound. Writer for its value either replaces the current binding, or if the value cell is unbound, then we modify the top-level symbol value. We use the value +FAKE-UNBOUND+ to check whether the variable is bound and to make it unbound.

#+fake-progv-kludge
(progn
  (defun %dynamic-variable-value (dvar)
    (let ((tls-binds (dynamic-variable-bindings dvar)))
      (if (eq tls-binds +cell-unbound+)
          (dynamic-variable-top-value dvar)
          (car tls-binds))))

  (defun dynamic-variable-value (dvar)
    (let ((tls-value (%dynamic-variable-value dvar)))
      (when (eq tls-value +fake-unbound+)
        (error 'unbound-variable :name "(unnamed)"))
      tls-value))

  (defun (setf dynamic-variable-value) (value dvar)
    (let ((tls-binds (dynamic-variable-bindings dvar)))
      (if (eq tls-binds +cell-unbound+)
          (setf (dynamic-variable-top-value dvar) value)
          (setf (car tls-binds) value))))

  (defun dynamic-variable-bound-p (dvar)
    (not (eq +fake-unbound+ (%dynamic-variable-value dvar))))

  (defun dynamic-variable-makunbound (dvar)
    (setf (dynamic-variable-value dvar) +fake-unbound+)))

Finally we define the operator to dynamically bind variables that behaves similar to PROGV. Note that we PUSH and POP from the thread-local hash table DYNAMIC-VARIABLE-BINDINGS, so no synchronization is necessary.

#+fake-progv-kludge
(defmacro dynamic-variable-progv (vars vals &body body)
  (let ((svars (gensym))
        (svals (gensym))
        (var (gensym))
        (val (gensym)))
    `(let ((,svars ,vars))
       (loop for ,svals = ,vals then (rest ,svals)
             for ,var in ,svars
             for ,val = (if ,svals (car ,svals) +fake-unbound+)
             do (push ,val (dynamic-variable-bindings ,var)))
       (unwind-protect (progn ,@body)
         (loop for ,var in ,svars
               do (pop (dynamic-variable-bindings ,var)))))))

Let's write some tests!

But of course, we are going to also write a test framework. It's short, I promise. As a bonus point the API is compatibile with fiveam, so it is possible to drop tests as is in the appropriate test suite.

(defvar *all-tests* '())

(defun run-tests ()
  (dolist (test (reverse *all-tests*))
    (format *debug-io* "Test ~a... " test)
    (handler-case (funcall test)
      (serious-condition (c)
        (format *debug-io* "Failed: ~a~%" c))
      (:no-error (&rest args)
        (declare (ignore args))
        (format *debug-io* "Passed.~%")))))

(defmacro test (name &body body)
  `(progn
     (pushnew ',name *all-tests*)
     (defun ,name () ,@body)))

(defmacro is (form)
  `(assert ,form))

(defmacro pass ())

(defmacro signals (condition form)
  `(is (block nil
         (handler-case ,form
           (,condition () (return t)))
         nil)))

(defmacro finishes (form)
  `(is (handler-case ,form
         (serious-condition (c)
           (declare (ignore c))
           nil)
         (:no-error (&rest args)
           (declare (ignore args))
           t))))

Now let's get to tests. First we'll test our metaclass:

(defclass dynamic-let.test-class ()
  ((slot1 :initarg :slot1 :dynamic nil :accessor slot1)
   (slot2 :initarg :slot2 :dynamic t   :accessor slot2)
   (slot3 :initarg :slot3              :accessor slot3))
  (:metaclass class-with-dynamic-slots))

(defparameter *dynamic-let.test-instance-1*
  (make-instance 'dynamic-let.test-class
                 :slot1 :a :slot2 :b :slot3 :c))

(defparameter *dynamic-let.test-instance-2*
  (make-instance 'dynamic-let.test-class
                 :slot1 :x :slot2 :y :slot3 :z))

(test dynamic-let.1
  (let ((o1 *dynamic-let.test-instance-1*)
        (o2 *dynamic-let.test-instance-2*))
    (with-slots (slot1 slot2 slot3) o1
      (is (eq :a slot1))
      (is (eq :b slot2))
      (is (eq :c slot3)))
    (with-slots (slot1 slot2 slot3) o2
      (is (eq :x slot1))
      (is (eq :y slot2))
      (is (eq :z slot3)))))

(test dynamic-let.2
  (let ((o1 *dynamic-let.test-instance-1*)
        (o2 *dynamic-let.test-instance-2*))
    (signals error (slot-dlet (((o1 'slot1) 1)) nil))
    (slot-dlet (((o1 'slot2) :k))
      (is (eq :k (slot-value o1 'slot2)))
      (is (eq :y (slot-value o2 'slot2))))))

(test dynamic-let.3
  (let ((o1 *dynamic-let.test-instance-1*)
        (exit nil)
        (fail nil))
    (flet ((make-runner (values)
             (lambda ()
               (slot-dlet (((o1 'slot2) :start))
                 (let ((value (slot2 o1)))
                   (unless (eq value :start)
                     (setf fail value)))
                 (loop until (eq exit t) do
                   (setf (slot2 o1) (elt values (random (length values))))
                   (let ((value (slot2 o1)))
                     (unless (member value values)
                       (setf fail value)
                       (setf exit t))))))))
      (let ((r1 (bt:make-thread (make-runner '(:k1 :k2))))
            (r2 (bt:make-thread (make-runner '(:k3 :k4))))
            (r3 (bt:make-thread (make-runner '(:k5 :k6)))))
        (sleep .1)
        (setf exit t)
        (map nil #'bt:join-thread (list r1 r2 r3))
        (is (eq (slot2 o1) :b))
        (is (null fail))))))

Then let's test the dynamic variable itself:

(test dynamic-let.4
  "Test basic dvar operators."
  (let ((dvar (make-dynamic-variable)))
    (is (eql 42 (dset dvar 42)))
    (is (eql 42 (dref dvar)))
    (ignore-errors
     (dlet ((dvar :x))
       (is (eql :x (dref dvar)))
       (error "foo")))
    (is (eql 42 (dref dvar)))))

(test dynamic-let.5
  "Test bound-p operator."
  (let ((dvar (make-dynamic-variable)))
    (is (not (dynamic-variable-bound-p dvar)))
    (dset dvar 15)
    (is (dynamic-variable-bound-p dvar))
    (dynamic-variable-makunbound dvar)
    (is (not (dynamic-variable-bound-p dvar)))))

(test dynamic-let.6
  "Test makunbound operator."
  (let ((dvar (make-dynamic-variable)))
    (dset dvar t)
    (is (dynamic-variable-bound-p dvar))
    (finishes (dynamic-variable-makunbound dvar))
    (is (not (dynamic-variable-bound-p dvar)))))

(test dynamic-let.7
  "Test locally bound-p operator."
  (let ((dvar (make-dynamic-variable)))
    (is (not (dynamic-variable-bound-p dvar)))
    (dlet ((dvar 15))
      (is (dynamic-variable-bound-p dvar)))
    (is (not (dynamic-variable-bound-p dvar)))))

(test dynamic-let.8
  "Test locally unbound-p operator."
  (let ((dvar (make-dynamic-variable)))
    (dset dvar t)
    (is (dynamic-variable-bound-p dvar))
    (dlet ((dvar nil))
      (is (dynamic-variable-bound-p dvar))
      (finishes (dynamic-variable-makunbound dvar))
      (is (not (dynamic-variable-bound-p dvar))))
    (is (dynamic-variable-bound-p dvar))))

(test dynamic-let.9
  "Stress test the implementation (see :FAKE-PROGV-KLUDGE)."
  (finishes                              ; at the same time
    (let ((dvars (loop repeat 4096 collect (make-dynamic-variable))))
      ;; ensure tls variable
      (loop for v in dvars do
        (dlet ((v 1))))
      (loop for i from 0 below 4096
            for r = (random 4096)
            for v1 in dvars
            for v2 = (elt dvars r) do
              (when (zerop (mod i 64))
                (pass))
              (dlet ((v1 42)
                     (v2 43))
                (values))))))

(test dynamic-let.0
  "Stress test the implementation (see :FAKE-PROGV-KLUDGE)."
  (finishes                             ; can be gc-ed
    (loop for i from 0 below 4096 do
      (when (zerop (mod i 64))
        (pass))
      (dlet (((make-dynamic-variable) 42))
        (values)))))

All that is left is to test both dynamic variable implementations:

BLOG/DLET> (lisp-implementation-type)
"ECL"
BLOG/DLET> (run-tests)
Test DYNAMIC-LET.1... Passed.
Test DYNAMIC-LET.2... Passed.
Test DYNAMIC-LET.3... Passed.
Test DYNAMIC-LET.4... Passed.
Test DYNAMIC-LET.5... Passed.
Test DYNAMIC-LET.6... Passed.
Test DYNAMIC-LET.7... Passed.
Test DYNAMIC-LET.8... Passed.
Test DYNAMIC-LET.9... Passed.
Test DYNAMIC-LET.0... Passed.
NIL

And with the kludge:

BLOG/DLET> (lisp-implementation-type)
"SBCL"
BLOG/DLET> (run-tests)
Test DYNAMIC-LET.1... Passed.
Test DYNAMIC-LET.2... Passed.
Test DYNAMIC-LET.3... Passed.
Test DYNAMIC-LET.4... Passed.
Test DYNAMIC-LET.5... Passed.
Test DYNAMIC-LET.6... Passed.
Test DYNAMIC-LET.7... Passed.
Test DYNAMIC-LET.8... Passed.
Test DYNAMIC-LET.9... Passed.
Test DYNAMIC-LET.0... Passed.
NIL

Summary

In this post we've made our implementation to work on SBCL even when there are more than a few thousand dynamic variables. We've also added a simple test suite that checks the basic behavior.

As it often happens, after achieving some goal we get greedy and achieve more. That's the case here as well. In the next (and the last) post in this series I'll explore the idea of adding truly thread-local variables without a shared global value. This will be useful for lazily creating context on threads that are outside of our control. We'll also generalize the implementation so it is possible to subclass and implement ones own flavor of a dynamic variable.




strike

Troll Dad Strikes When You Least Expect Him




strike

Israeli forces strike Oct. 7 attacker's cell in Gaza

The Israeli Defense Forces (IDF) said on Wednesday that it eliminated a militant cell member, Yasser Ghandi, in Gaza's Shejaiya area who allegedly participated in the October 7 attack in Israel that l...




strike

8 killed in Israeli airstrike in Lebanon

An airstrike by Israeli forces in southern Lebanon has led to the death of eight individuals, according to reports from the Lebanese state news agency NNA. "The National News Agency corresponden...




strike

The junior doctors' strikes may be over. But is trouble ahead?

The end of the pay dispute sounded too good to be true. And now some are wondering if it might be.




strike

Israeli strikes on north Lebanon and Gaza kill dozens, officials and rescuers say

At least 20 children are among the dead in attacks north of Beirut and in northern Gaza, officials rescuers and medics say.




strike

Houthis attack US warships after US strikes in Yemen

The navy destroyers were unharmed and repelled the attack, the Pentagon said.




strike

Israeli strikes in Mount Lebanon villages kill 23, ministry says

The strikes reportedly destroyed residential buildings where displaced families were living.




strike

News24 | US strikes targets to 'degrade the Iranian-backed groups' ability' in Syria

The US military has carried out strikes against targets in Syria in what the United States Central Command (CENTCOM) said was a response to recent attacks on US forces by "Iranian-aligned targets" in the country.




strike

News24 | Russian strike on Ukraine kills mother, newborn baby and two more children - minister

Ukraine has said that the toll from a Russian strike on the hometown of President Volodymyr Zelensky had risen to four people, identifying the dead as a mother and her three children, including a newborn.




strike

Toilet paper buying panic recommences as dockworkers strike

We are doing what we do best when something threatens the consumer supply chain: rushing to buy mountains of toilet paper. Experts say the dockworkers' strike won't result in shortages, but the panic-buying might so long as the panic-buying lasts.

"They cleaned out the toilet paper at my local Walmart in Virginia.

Read the rest

The post Toilet paper buying panic recommences as dockworkers strike appeared first on Boing Boing.




strike

Undercurrents: Episode 9 - Digital Subversion in Cyberspace, and Oleg Sentsov's Hunger Strike





strike

Boeing machinists agree to new contract, ending weeks-long strike

Tens of thousands of striking Boeing machinists voted Monday to ratify a new contract, ending their seven-week work stoppage.




strike

Ukraine blasts Russia with massive overnight drone strike

Ukraine launched a massive drone attack on Moscow overnight, the largest on the Russian capital since the Russian invasion more than two years ago, forcing three airports to divert traffic and causing casualties.




strike

Strong earthquakes strike Cuba, causing damage and landslides

A pair of strong earthquakes has struck off the southern coast of Cuba, inflicting damage and causing landslides.




strike

At least 56 people, including 20 children, killed in Israeli airstrikes in Lebanon and Gaza

Dozens of people were killed in Israeli military strikes on northern Lebanon and the Gaza strip, including as many as 20 children, authorities said.




strike

CENTCOM strikes Iran-backed militia targets in Syria after rockets launched at U.S. forces

The U.S. military conducted retaliatory airstrikes Tuesday in Syria, targeting facilities of Iran-backed militias following rockets launched at U.S. forces in the Middle Eastern country.




strike

Montana Supreme Court Strikes Down Tax-Credit Program for Private Schools

Montana's highest court has struck down a tuition tax-credit program which, as enacted by that state's legislature, allowed tuition scholarships to benefit students at private religious schools as well as secular schools.