ike

Flicks of the Week: Discover Hip Hop Like Chris...Wallace



'Fresh Dressed" premieres on Monday, October 13 at 10P/9C.



  • BET Star Cinema

ike

Flicks of the Week: Halle Berry Balls Like a Queen



It's nothing to be a 'black american' goddess!



  • BET Star Cinema


ike

Mike Tyson Says He’s Vaccinated, But Wasn’t Thrilled About Getting The Jab

He says he was “beaten into submission” over it.




ike

Warwick Win Mike Zimmerman Team Final

Warwick Workmen’s Club Two defeated Spanish Point Boat Club Two 3 – 1 to claim the Mike Zimmerman Team Challenge title. Captain Steven Bremar got Warwick off to a flying start when he defeated Point’s Billy Wotton sinking the pink ball to take the 1st game, 58 – 39. John Orr equalized for Spanish Point […]




ike

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 […]




ike

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 […]




ike

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 […]




ike

BUEI Films To Screen ‘The Bikeriders’

‘Films at BUEI’ will screen the 2023 crime drama ‘The Bikeriders’ on September 28th. A spokesperson said, “‘Films at BUEI’ continues at the Bermuda Underwater Exploration Institute [BUEI] with the screening of the 2023 Crime/Drama, ‘The Bikeriders’ on Saturday, September 28th at 7:30pm in our Tradewinds Auditorium [Wheelchair Accessible]. “‘The Bikeriders’ is an American period […]




ike

«Коммерсантъ»: IKEA продала свои последние активы в трех российских регионах



  • Бизнес / Торговля и услуги

ike

likely stories




ike

A Likely Story




ike

Apple Likely Planning to Release iOS 18.2 on December 9

Apple previously confirmed that iOS 18.2 will be released in December, and now a potential release date within the month has surfaced.


We believe that Apple is likely planning to release iOS 18.2 on Monday, December 9, based on a recent notice that British carrier EE provided to its customers. In the notice, EE said it will be discontinuing an iPhone feature known as "Wi-Fi calling on other supported iCloud-connected devices" on December 9. The feature enables users to make Wi-Fi calls on devices like the iPad and Mac, even when their iPhone is not nearby.

The second developer beta of iOS 18.2 last week came bundled with a new EE carrier settings version numbered 60.5.2, up from 59.5.1 on the first iOS 18.2 beta and iOS 18.1. The new carrier settings version removed the "Add Wi-Fi Calling For Other Devices" toggle from the Wi-Fi Calling section in the Settings app on iPhones used by EE customers, in line with the carrier announcing that it will stop offering the feature next month.

Most carrier setting updates are bundled with iOS updates, aside from ones with bug fixes, so EE has likely indirectly revealed that iOS 18.2 will be released on December 9. We are not absolutely certain about this date, but it is a very likely possibility.

iOS 18.2 being released on December 9 would not be very surprising. Apple already said the update was coming next month, many iOS updates are released on Mondays, and the second half of the month is pretty much ruled out due to the holiday season. Nevertheless, you can now mark your calendars a little more precisely.

iOS 18.2 includes additional Apple Intelligence features for iPhone 15 Pro models and all iPhone 16 models, including Genmoji, Image Playground, ChatGPT integration for Siri, and more. On all compatible iPhones, the update also adds a new Defaults section in the Settings app, an item location sharing feature in the Find My app, and more.

(Thanks, Harvey!)

Related Roundups: iOS 18, iPadOS 18
Related Forums: iOS 18, iPadOS 18

This article, "Apple Likely Planning to Release iOS 18.2 on December 9" first appeared on MacRumors.com

Discuss this article in our forums




ike

Apple Might Make Smart Home Products Like Cameras

Apple has considered building its own line of smart home accessories, reports Bloomberg's Mark Gurman. Apple could manufacture smart home cameras and other devices that would connect to its HomeKit smart home platform and that would tie in with a planned smart home "command center" that could come out as soon as next year.


As one example, Gurman suggests Apple could create an indoor security camera that could also be used as a baby monitor, which is in line with a report we heard from Apple analyst Ming-Chi Kuo yesterday.

Kuo claimed that Apple is designing a smart home camera that will be manufactured starting in 2026, with Apple planning to sell "tens of millions" of the devices over the long term. Kuo says that the cameras that Apple is working on will have wireless connectivity and deep integration with Apple Intelligence and Siri.

Gurman does not seem as sure that Apple will follow through on plans to create its own smart home products. He says that it's something Apple is "exploring" that could be prioritized should its upcoming smart home hub device turn out to be a success.

Apple would likely emphasize privacy with its smart home cameras, providing an alternative to cameras from companies like Amazon's Ring and Google's Nest. Ring has been derided for its privacy policies over the years, primarily because it had a "Request for Assistance" tool that allowed law enforcement officials to request video footage from Ring customers. Ring has provided police officers with Ring camera footage without notifying users, and reserves the right to do so in emergency situations. Google's Nest brand also says that it will provide police with smart home camera footage in emergency situations without a warrant.

Apple is known for having strong privacy protections, and it is possible that customers would trust a smart home camera from Apple more than a smart home camera from a company like Ring. Apple already designed a ‌HomeKit‌ protocol for cameras called HomeKit Secure Video, which is end-to-end encrypted.

Prior to coming out with any smart home accessories, Apple plans to release an iPad-like smart home display that will serve as a home hub. The smart home device, which is set to come out as soon as March 2025, will run apps and will control ‌HomeKit‌ and Matter-based accessories.


This article, "Apple Might Make Smart Home Products Like Cameras" first appeared on MacRumors.com

Discuss this article in our forums




ike

The mainstream media and the Democratic Party and the intelligence agencies and the tech monopolies are your enemies. Like fascists they are misleading you with propaganda so that you will obey.

The real threat is collusion. When journalists strike secret alliances with the very people they're supposed to be holding accountable, we are in deep trouble. Lies go unchallenged.  Democracy cannot function. And that's what we're watching right now. Continue reading




ike

Manga Review: THE SMALL-ANIMALLIKE LADY IS ADORED BY THE ICE PRINCE is on its way to melt hearts

The Small-Animallike Lady is Adored by the Ice Prince is a brand new romance manga from Yen Press. This first volume takes us to a familiar setting where there's a royal arranged marriage involved, and some frozen hearts are melted along the way!




ike

A Likely End Game to Hostility


The hard disk drive business has been a lousy place to compete for nearly twenty-five years.  It has been the graveyard of many competitors.  Twenty years ago, there were eighty disk drive manufacturers.  By the mid-90s, there were only fifteen.  By 2001, there were eight, and today it appears there are only four.  But the fact that we are at four competitors, especially the size of the leading competitors, means that the industry is likely to come out of its recurring bouts of overcapacity and hostility. 



As 2011 began, there were five hard disk drive manufacturers.  Western Digital led the market with a 31% market share, followed closely by Seagate with a 29% market share.  Hitachi enjoyed an 18% market share, while Samsung and Toshiba shared the remaining 22% of the market.  Recently, Western Digital agreed to purchase Hitachi.  This acquisition would bring Western Digital’s potential market share to 49%.  The top two of the remaining four competitors would then have a potential market share of 78%.  The top three would have more than 85% of the market. 



Hitachi was not just any other competitor in the market.  It had a well deserved reputation for being the most aggressive price discounter in the market.  Hitachi was the major reason that pricing stayed under pressure in the hard disk market.  Western Digital’s acquisition removed the major discounter.



In the past, acquisitions among the hard disk drive manufacturers brought somewhat better margins to the remaining players, but not as much market share as the acquisition would suggest.  The reason was customers rotating other strong suppliers into their relationships to maintain low prices.  With only four players left, and a dominant leader in the market, there is little purpose for the three followers to discount against Western Digital.  A discounter might pick up some temporary share in a market saturated with “last look” arrangements, but it might face a very aggressive pricing response by one or both of the remaining leaders in the market.  No, rather than discount, the economics for all the players would argue for firm industry pricing.  That is the most likely outcome of this acquisition.



Over the years, we have studied many industries in overcapacity.  Overcapacity produces a hostile market, where returns are low and price competition remains intense.  These kinds of markets end in one of two ways, either demand picks up and sops up the industry’s overcapacity, or the industry consolidates to the point where the top four competitors control 85% or more of the industry’s volume.  The remaining players then demur from competitive price discounts. The majority of industries see demand growth pull them out of hostile conditions.



There is one potential fly in this hard disk ointment.  Computer tablets and other portable devices don’t use hard disk drives.  Instead, they use NAND flash drives.  These are solid state drives.  They are more expensive than hard disks, have a much smaller form factor and are generally more reliable.  Samsung, Toshiba and SanDisk are the leaders in this market.  It could happen that Samsung and Toshiba, two of the four remaining hard disk drive suppliers, use low prices in the hard disk market to create customers for their more expensive flash drives.  It is more likely, however, that these two companies, who are distant followers in the hard disk market, would prefer to see higher prices for hard disks.  These higher prices on a competitive product would help some customers in the market transfer alliance to flash drives.



This acquisition should be a good deal for the remaining four hard disk players.  While some analysts have argued that the hard disk drive market will slowly die under the pressure of the growth in the applications of flash drives, industry observers still see an 8% per annum unit growth for this market over the next five years.  That unit growth should come with better margins for the remaining players.




ike

SLC-2L-12: Two-Light Bike for the Bucks

UODATE: The bike sold, quickly, for the full asking price to the first person who showed up. Which was cool. And even better, the guy was like, "Who did the pictures? They jumped out at me."

(Tiny speedlights FTW...)




Have you tried to buy a new bike lately? Or even a used bike?

The coronavirus pandemic has made them very tough to find. Between homebound people snapping them up and all of the various broken supply chains, most of the bike inventory — other than very pricey specialty bikes — has pretty much vanished.

Which means that if you have a functional bike in your garage that you don't need, it will likely never be worth more than it is right now.

My daughter Emily has an unneeded bike in the garage. It's a Trek 7100, which is decent hybrid. She rode it to middle school. But she's just graduated college and won't be bringing it to her new job.

But right now it should fetch a nice price in the Craigslist Bicycle Hunger Games. Especially if it is photographed and presented well.

So that's exactly what we are going to do today: photograph a bike with a basic two speedlight kit.Read more »




ike

‘Mystery mollusk’ found in the ocean’s midnight zone is unlike anything researchers have seen before




ike

24 Things, Many of Which Are Still Likely To Be Elephants or Bears, Especially Elephants; But Also It’s Vanishingly Unlikely There’ll Actually Be 24 of Them, or Even Close - Thing One. And Possibly Only.

Alt text: a stylish woman in a coat, who is emphatically neither an elephant nor a bear. Not everyone is.




ike

Ken and Robin Talk About Stuff: Not That My Players Would Do Anything Like That

In the latest episode of their quartz-festooned podcast, Ken and Robin talk TPKs, RCMP misconduct, crystals, and The Mandalorian.




ike

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




ike

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.




ike

Why Virat Kohli, Jasprit Bumrah were missing from Perth nets; India ramp up privacy amid Manchester United-like security - Hindustan Times

  1. Why Virat Kohli, Jasprit Bumrah were missing from Perth nets; India ramp up privacy amid Manchester United-like security  Hindustan Times
  2. Virat Kohli in focus: Intense net session begins for upcoming Test series against Australia  The Times of India
  3. Virat Kohli in Australia for BGT: A timeline  India Today
  4. Black veil of secrecy: India begin training in privacy in Perth  ESPNcricinfo
  5. India to play intra-squad warm-up match at WACA on Friday ahead of Australia Tests but BCCI denies public viewing  Hindustan Times




ike

hey man like water

Today on Married To The Sea: hey man like water


This RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see!




ike

im glad you like this r

Today on Married To The Sea: im glad you like this r


This RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see!







ike

Convert Old Junk Bikes Into Race-Ready Fixed Gear Bikes in No Time!

EIGHTINCH shows us how to fix up old bikes using a fairly basic conversion kit. You'll need:

  • Amelia wheels with tires & tubes
  • 16t cog
  • lockring
  • Courier cranks
  • A bottom bracket
  • A KMC chain

More videos for both seasoned and amateur bike enthusiasts here!




ike

Troll Dad Strikes When You Least Expect Him




ike

The Queen of England Wore a Bright Green Outfit So, Naturally, the Internet Treated It Like a Green Screen

Queen Elizabeth wore a neon green outfit to her 90th birthday party. What could go wrong? Oh right, the internet...




ike

11 Animals That Are Donald Trump's Look Alikes

Well...Can't ignore the resemblance




ike

Trump's 'Exploding Trees' Comment Has Memers Trolling Like Crazy

As wildfires continue to ravage the West Coast, President Trump has been quick to dismiss climate change as one of the root causes, stating that countries in Europe like Austria don't suffer from wildfires because Europeans live in "forest cities" that are "managed better" yet are "more explosive" than the trees in California.

We're not entirely sure what any of that means, and apparently neither do memers, so please enjoy the following memes about "forest cities" in Austria.




ike

Mike Fu’s Book Notes music playlist for his novel Masquerade

"Every song is a portal into the past, a chance to connect with countless mundane moments from before: where you were, what you felt, who you were with when you happened to be listening to the same thing."




ike

Dogecoin spikes ~20% after Donald Trump announced the creation of the Department of Government Efficiency or DOGE; Dogecoin is up 153% since Election Day

Dogecoin shot higher on Tuesday night, extending its postelection surge after President-elect Donald Trump formally announced the creation of the Department of Government Efficiency, which he referred to as "DOGE" in his statement. Tesla CEO Elon Musk and Vivek Ramaswamy, former Republican…




ike

Likely future German coalition divided on energy, climate

Germany's conservative CDU/CSU, led by Friedrich Merz, is expected to win the snap election on 23 February according to the latest polls but remains at odds on energy and climate policy with its most likely coalition partner: Olaf Scholz’s Social Democrats (SPD). Merz's Union is currently leading…




ike

Sweden’s social services likely to soon have more powers to tackle gang recruitment

The Swedish government has proposed to give social services a greater role in preventing young people from joining criminal gangs by changing the confidentiality rules between public services. Before the summer, the Swedish government presented a new Social Services Act, which, among other things,…




ike

How business owners can prepare for potential tariff hikes in 2025

President-elect Donald Trump has promised tariff hikes. Here's what experts say business owners should be doing now to prepare.




ike

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...




ike

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...




ike

Media executives say that some brands were preparing to advertise on X once again, as Elon Musk was likely to gain an influential Trump administration role




ike

16.3: Drop It Like It's Grawp

Woo hoo it's PotterCast time and it hasn't even been six months! This week, we are talking about what a TV series starring Arthur and Molly would look like, and pondering what you would or should do if you were to wake up as 11 year-old Harry with all seven books' knowledge in your head. Trippy. 

We are still going through all your amazing emails for guest hosting and will be reaching out to people soon! Please also welcome our new editor, Christine Peruski! It's her first time, y'all, and she did a great job!

~*~

This episode's sponsor is LootCrate! Use THIS LINK (http://multitude.productions/lootcrate) and the code POTTERCAST for a 15% discount on your first box!

Don't forget to follow us on @pottercast on Twitter and @pottercastpod on Instagram!

Join our patreon! patreon.com/pottercast - Now, you can also join our Discord community there!

You can also buy PotterCast-related merch at mischiefmerch.com!

This episode was produced by Christine Peruski and Melissa Anelli. Hosts Melissa Anelli, Frank Franco, and John Noe. PotterCast is (c) PotterCast 2005-2021.





ike

This Foot Locker Commercial Shows a Small Glimpse of What It Would Look Like if Everything Were Right in the World




ike

Here's Why You Like the Smell of Your Own Disgusting Farts, You Gross Weirdo. Seriously, See a Doctor

Everyone likes the smell of their own brand. 

You've probably heard that one before, when you were ripping a real stinker in the car and rolling the windows up because you're a sadist. 

via GIPHY

But why do you like torturing innocent bystanders of your disgusting gas? Honestly, being subjected to your farts should be considered torture. Liking your farts is akin to waterboarding. You're a war criminal. You and your farts should sit before an international tribunal. 

Yes, you. 

Anyway, this video explains why you're such a sicko. ASAP Science continues to do great work in under five minutes. 

via The Real Sporcle




ike

I would like to be paid like a plumber

Although they only existed for seven years and released just three albums, Nirvana were a band of immeasurable influence in the music world thanks in no small part to Smells Like Teen Spirit, a single track on Nevermind, their second album. It was this song that brought them out into the open, going on to sell millions





ike

F&S zien alleen nog maar fatbikes (NRC, do, 22-08-24)




ike

F&S zijn blij met hun fatbike (NRC, vr, 23-08-24)