pp

Alior Bank transforme l’expérience bancaire pour ses clients grâce à une application IBM pour iPad tirant parti de l'analytique

lior Banque annonce aujourd’hui avoir choisi l’application IBM MobileFirst sur iOS pour apporter une transformation fondamentale à la façon dont les clients en Pologne interagissent avec leur banque. A l’aide d’un iPad, les professionnels des services bancaires pourront fournir une expérience plus dynamique et personnalisée aux clients en tirant avantage de la puissance de l’analyse prédictive, et ce de façon sécurisée, facile, rapide et disponible 24h/24.




pp

A l’approche des fêtes, l’application IBM Watson « Trend App » dévoile les produits les plus tendances

IBM (NYSE : IBM) annonce aujourd'hui le lancement de l’application « IBM Watson Trend App », qui offre aux consommateurs une nouvelle façon de décoder les principales tendances de la saison et également de prédire les produits les plus en vogue avant qu'ils ne soient vendus. L'application est disponible via téléchargement gratuit sur l’App Store d’Apple.




pp

Apple et IBM annoncent plus de 100 apps MobileFirst pour iOS !

Apple et IBM annoncent plus de 100 apps MobileFirst pour iOS !




pp

IBM & Ponemon Institute: Cost of a Data Breach Dropped 5 Percent in Australia in 2017 Study

Today IBM announced the Australian results of the global 2017 Ponemon Cost of Data Breach report.




pp

IBM to deliver essential business and operational support systems for NBN Co

IBM Australia (NYSE: IBM) has been awarded a multimillion dollar contract with NBN Co Limited to implement and manage the core business and operational support systems required to operate Australia’s National Broadband Network (NBN).




pp

UBank Unveils RoboChat, Australia's First Virtual Assistant for Home Loan Applications Integrated with IBM Watson

One of Australia’s leading digital banks taps cognitive technology to simplify the home loan application process with innovative virtual assistan




pp

Happy Village Kids

Machine Elf 16 – Creator of Worlds | Trey Ratcliff & Sam Wave “Creator of Worlds” explores chaos and order and creation from nothing. The actual work is a high resolution physical installation about 75 inches across and is embedded in a wall, running in a continuous loop forever. Here’s a photo of what the […]




pp

Happy monks in Cambodia

Daily Photo – Happy monks in Cambodia Most of the monks I saw in Cambodia were not really doing monk-like things. I expected to see lots of meditating or chanting or something. Most of the time, they were just goofing, playing games, smoking, and just acting like pretty much everyone else! Happy monks in Cambodia […]




pp

Zoo and Aquarium Association Uses IBM Technology to Support Endangered Species Programme

Zoo and Aquarium Association Uses IBM Technology to Support Endangered Species Programme




pp

WorkCoverSA develops new systems to support employers and injured workers with the help of IBM and Cúram Software

IBM (NYSE: IBM) and Cúram Software announced today the successful implementation of a number of software solutions for WorkCoverSA to support their business. WorkCover selected IBM Global Business Services to implement the Cúram for Workers' Compensation Solution, a comprehensive and proven claims management solution that manages and automates the complete claim lifecycle from injury to outcome, as part of a comprehensive modernisation of their IT systems.



  • Services and solutions

pp

IBM study finds majority of Australian shoppers “apathetic” towards retailers, hungry for multi-channel innovation

An IBM (NYSE: IBM) study of 26,000 consumers from 14 countries -- including almost 2,000 Australians.-- found that over 60% of Australian consumers identify themselves as “apathetic” in their choice of primary retailer – almost double those who see themselves as advocates of a particular retailer. As such Australian retailers have a significant opportunity to capture shopper loyalty, but they need to capitalise on existing investments in multi-channel and accelerate customer engagement across all channels, including mobile devices and social media platforms in order to win in this globally competitive sector.



  • Services and solutions

pp

In Appreciation: The LumoPro LP180 [2013-2020]



The LumoPro LP180 is no more.

You could make a strong case that the LP180 was the best manual hot shoe flash ever produced — and maybe that ever will be produced. It was a beast of a flash, with a fluid user interface and features designed specifically for off-camera lighting photographers. Now, it's the last of a bygone era.

Why did it have to die? What made it so good? And what will replace it as the flash of choice for discerning-but-frugal off-camera shooters?

Read more »




pp

INPEX selects IBM to manage operation critical apps in Australia

INPEX selects IBM to manage operation critical apps in Australia




pp

IBM Customer Experience Index Shows Aussie Retailers Missing Omni-Channel Opportunity

IBM, (NYSE: IBM) today announced the findings of its 2016 Global Customer Experience Index (CEI) Study, which showed that Australia is above the global average when it comes to providing a good shopping experience for consumers, with a CEI rating of 43 percent compared with 40 percent globally. The results provided a snapshot of the Australian retail sector, revealing that some businesses are still struggling to provide a seamless cross-channel experience, personalisation and convenience for customers.




pp

IBM appoints David La Rose as the new Managing Director, IBM Australia and New Zealand

IBM (NYSE: IBM) today announced the appointment of David La Rose as Managing Director of IBM Australia and New Zealand (A/NZ). He replaces Kerry Purcell, who will return to a senior leadership role in IBM Japan.




pp

IBM appoints Professor Iven Mareels as new Lab Director of IBM Research-Australia

IBM (NYSE: IBM) today announced the appointment of Professor Iven Mareels as Lab Director of IBM Research-Australia.




pp

IBM Appoints Katrina Troughton as Managing Director of IBM Australia and New Zealand

IBM Appoints Katrina Troughton as Managing Director of IBM Australia and New Zealand





pp

Analysis and applications: The mathematical work of Elias Stein

Just a short note that the memorial article “Analysis and applications: The mathematical work of Elias Stein” has just been published in the Bulletin of the American Mathematical Society.  This article was a collective effort led by Charlie Fefferman, Alex Ionescu, Steve Wainger and myself to describe the various mathematical contributions of Elias Stein, who […]




pp

Relaxing Victorians: Casual Wear From Unseen to Seen to Seen by Only a Few ~ Wrappers & Peignoirs & Dressing Gowns to Morning Dresses & Tea Gowns to Lingerie from Gail Carriger


One of the things the Victorian era saw, Fashionable Reader, was an exploration of that liminal space through casual around the house wear.

Wrapper 1855  The Metropolitan Museum of Art

Here we have the wrapper that was only meant to be seen by family.

Dressing Gown  early 1870s The Metropolitan Museum of Art


Dressing Gown  1875  The Kyoto Costume Institute

 Dressing gowns, banyans and wrappers are often quilted all or in part.

Wrapper early 1860s  The Metropolitan Museum of Art

One of the signs of a wrapper is that the waist is designed to be loose or tied tight. Often they split up the front, like a carriage dress or a robe so they can be pulled over a nightgown or underpinnings, like a dressing down but slightly more tailored. Still NOT designed to be worn over a corset.


Peignoir 1860-1865  The Metropolitan Museum of Art

Peignoir  1880s  The Metropolitan Museum of Art

 Peignoir seems to be a catch all term.

Morning Dress  1860  The Metropolitan Museum of Art

Morning dresses were initially gowns for the breakfast table that did not require a corset.They're characterize by a looser top lots of details in the neck and sleeves.

Morning Dress  1872-1873  The Metropolitan Museum of Art

One of the things we see evolving (and limits being tested) after the 1950s through the 1900s is the idea of what was not meant to be seen (undergarments and nightgowns) to what was initially only meant to be seen by family or lovers (wrappers & peignoirs) to receiving casual around house guests at breakfast (morning dresses) to I'm comfortable at home and I want to show my wealth with yet another space & occasion specific outfit (the tea gown).

Tea Gown  late 1870s  The Los Angeles County Museum of Art

Tea gowns were an evolution of the morning gown.

Tea Gown  1875  The Metropolitan Museum of Art

Tea Gown  1875-1880  The Metropolitan Museum of Art

1Harpers Bazar New York Sat June 13 1891 Dressing Gowns Nightshirts

This evolution is coupled with the rise of the middle class, the sexual revolution (including contraception and woman's suffrage) and various other factors.

Bed Jacket  1885  The Metropolitan Museum of Art

Dressing Jacket  1885-1890  The Metropolitan Museum of Art

 We see a culmination in this towards the turn of the century in the popularity of (and wide-scale use of the word) negligées and lingerie sets, which specifically implies an article of clothing that is sexual in its nature for it is meant to be seen by a lover.

Negligée  1880  The Metropolitan Museum of Art

This kind of clothing, prior to the first sexual revolution, would not have been acceptable for a fashion house to make, let alone a fashionable lady to purchase.

Negligée Callot Soeurs, 1898-1900s The Metropolitan Museum of Art


Lingerie Set  1880s  The Metropolitan Museum of Art

There was also head wear that was designed to be worn exclusively around the house, but that's a whole other story...

House Cap 1900  The Metropolitan Museum of Art

For Primrose!

Boudoir Cap 1895 The Metropolitan Museum of Art

nightgown 1894  The Metropolitan Museum of Art

Dressing Gown  1897-1899  The Metropolitan Museum of Art


Retro Rack is also on facebook where I post additional images and fashion thoughts.

You can shop my recommendations via the following lists:
Steampunk, Retro Jewelry, Makeup, Retro Clothes, Lifestyle


Product links on this blog are usually to Amazon using my associate code. At no additional cost to you this means I get a slight kick back if you make a purchase. Thank you! This allows me to continue to produce this blog without sponsors.




pp

Look, Sir, A New Droid Depot App

Pilot your droids from Star Wars: Galaxy’s Edge or create your own virtual models.




pp

Happy Valentine

Happy Valentine!

40代初のバレンタインです。
今年もチョコレート頂きました!
有り難うございます????

さらに今日は嬉しい連絡が二つありました。
二つともまだ言えないんですが

でもめちゃくちゃhappyなこと!
自分への褒美としてお寿司を頼みました。
諦めなければ叶うんだ。
信じていれば叶うんだ。
そう強く思えた。
時期が来たらお話ししますね!
今年は大きな変化の年にします。

皆さんと一緒に
素晴らしい景色が見れたら嬉しいです!
いつも変わらぬご声援
本当に有り難うございます。






エッセイ『歩~僕の足はありますか?』発売中

こちらから↓

https://www.shufu.co.jp/bookmook/detail/978-4-391-15356-9/





pp

Happy 6th Birthday, Wrigs!


Today Wrigley turned 6 years old! I can't believe he's lived with me for over 5.5 years. He's such a wonderful, joyful pup. Happy birthday, Wrigley Beans.




pp

Ken and Robin Talk About Stuff: Killer Pupples

In the latest episode of their chainsaw-handed podcast, Ken and Robin talk comedic horror games, OSS graphic design, Guy Maddin, and sky amoeba UFOs.



  • Ken and Robin Talk About Stuff

pp

Ken and Robin Talk About Stuff: The Toppling is the Point

In the latest episode of their feathery but unruffled podcast, Ken and Robin talk history spoilers, political pigeons, Sarah Bernhardt, and the Dark Watchers.



  • Ken and Robin Talk About Stuff

pp

Sun Yang appeals to Swiss court over doping ban

Three-time Olympic champion Sun Yang has lodged an appeal an appeal to the Swiss federal court in an attempt to overturn his eight-year doping ban.




pp

Happy Star Wars Day!

Posted by: icon_uk

An old, old, OLD and very silly post from our earlier incarnation back in Livejournal days!



May the Fourth Be With You! )



comments




pp

Jessica Jones has a heart to heart moment with her kidnapper daughter

Posted by: brerrabbit

Read more... )



comments



  • char: purple girl/kara killgrave
  • creator: filipe andrade
  • title: jessica jones
  • creator: kelly thompson
  • char: jewel/jessica jones

pp

Apple Mango Smoothie: Raw Food Recipe



Apple Mango Smoothie
serves 1 ~ $2.10 per serving

ingredients

  • 1 apple, washed (peeled if not organic) ($.60)
  • 1 cup mango,chunks, fresh or frozen ($1.00)
  • 1 banana, sliced and frozen
  • 1 handful kale leaves ($.50)
  • 1/2 teaspoon cinnamon
  • 1/4 teaspoon nutmeg
  • 1 cup ice
  • water for blending (more or less depending on how thick you like it)

This is just a super simple way to enjoy some of the apples that are in season right now! Blend all ingredients in a high powered blender until very smooth and enjoy!


nutritional information
calories: 230
fat: 4 gr
carbs:47 gr
protein: 6 gr




pp

Red Pepper Pasta: Raw Food Recipe




Red Pepper Pasta
serves 2 ~ $2.80 per serving


  • 1 red bell pepper, thinly sliced ($.70)
  • 1 yellow or orange bell pepper, thinly sliced ($.70)
  • 1 cup mushrooms, sliced ($1.50)
  • 1 cup black or kalamata olives ($1.50)
  • 1/2 cup thinly sliced onion ($.20)
  • 1/4 cup olive oil ($.20)
  • 2 tablespoons lemon juice ($.40)
  • 2 tablespoons apple cider vinegar ($.20)
  • 2 tablespoons maple syrup or agave (optional, for those who like a touch of sweet) ($.20)
  • 1 tablespoon onion powder
  • 1 teaspoon freshly minced garlic
  • 1 teaspoon dried basil (or 1 tablespoon fresh, chopped)
  • 1 teaspoon dried oregano 
  • 1 teaspoon salt (or to taste)
  • 1/2 teaspoon pepper (or to taste)
  • 1-2 medium sized zucchini, spiralized 

This is so easy and so good. Prepare it up to a day in advance and them the vegetables marinate and soften.

Prepare the red and yellow bell pepper, mushrooms, olives, and onion and place in a medium sized bowl. In a small bowl, whisk together the olive oil, vinegar, syrup, onion powder, garlic, basil, oregano, salt, and pepper. Pour over the prepared vegetables. Allow to marinate for at least a half hour, but it can marinate as long as a day.

When ready to eat, simply pour the marinated veggies and marinade over a portion of spiralized zucchini noodles and toss.


 

nutritional information:
calories: 389
fat: 23 gr
carbs: 35 gr
protein: 11 gr



I use my spirilizer as much as any kitchen tool I have (except my VitaMix, of course!!). The Paderno brand one I have can be found on Amazon HERE, or in most stores that sell kitchen supplies.













pp

Pumpkin Apple Spice Smoothie Bowl ~ Raw Food Recipe





Every year I dread the end of summer, but then fall comes and I think, "No, this is my favorite time of year!" Fall is apples, and pumpkins, and pea soup, and cider mills, and wineries, and music, and being cozy. 



  


This smoothie bowl doesn't contain any actual pumpkin, but will convince you otherwise!Instead, I've used carrots, which are always available. It will get your day started in a delicious way and give you plenty of energy to enjoy whatever these glorious fall days bring your way!






ingredients
  • 1 cup carrots, cut into chunks
  • 1 banana, sliced and frozen
  • 1 cup almond milk 
  • 1 teaspoon cinnamon
  • 1/2 teaspoon ginger
  • 1/4 teaspoon allspice
  • pinch nutmeg
  • 1/2 cup chopped dates
  • 1/4 cup chopped pecans or other nuts
  • 1 cup chopped apples

directions
  1. In a high powered blender, puree the carrots, banana, and almond milk until very smooth.
  2. Add in the cinnamon, ginger, allspice, and nutmeg and pulse a few times to blend well.
  3. Pour into a bowl and add the chopped dates, pecans, and apples. A sprinkle of coconut flakes goes well, too!







nutritional information:       calories: 345       fat: 7 gr       carb: 51       pro: 6




pp

Pineapple Green Smoothie ~ Raw Food Vegan Smoothie Recipe



This raw and healthy pineapple party in your mouth is super simple and perfect for spring. Hawaiian pineapple season is April and May, even though they're available year round. Price and quality will be the best over the next few months so take advantage of this sweet abundance and enjoy this vegan treat for breakfast or an anytime snack.

Oh, and to make this extra thick and frosty, cube and freeze pineapple and any subsequent pineapple juice in ice cube trays. Store frozen cubes in plastic bags for ultra easy prep.



   



Pineapple Green Smoothie
serves 2 ~ $1.75 per serving

ingredients
  • 3 cups chopped romaine (or favorite green) ($1.00)
  • 1 cup cubed pineapple, frozen ($2.00)
  • 1 banana, sliced and frozen ($.20)
  • 2 tablespoons lemon juice (optional) ($.20)
  • 1 teaspoon vanilla ($.10)
  • 1 cup water
  • 10 ice cubes
  • stevia to taste (optional)
directions
  • In a high powered blender, puree the greens until liquefied and very smooth. 
  • Add the rest of the ingredients and puree until smooth.

nutritional information:      calories: 156      fat: 0 gr      carbs: 42 gr      protein: 3 gr



Speaking of pineapple ...

... this really cool little building was one of my favorite local landmarks. While on a bike ride the other day (hello warm weather!) I noticed the other day that it's gone! I'll miss it!! Maybe they got tired of me taking so many photos of it ... hmm.









pp

Happy International Women's Day

To the women from all over the world I'm privileged to know, and everybody who loves international women.

I have been saving up some articles for the occasion: here are two marvellous bios of trans lesbian elders.

Jan Morris. [Content note: the article is in the Guardian which takes a somewhat transphobic editorial stance, though this article is very positive towards trans women. However it does deadname Morris and includes a picture of her from back when she was presenting as male.]

Sandy Stone, a couple of years old from Vice but it came to my attention recently.

comments




pp

Happy things

Not a gratitude practice; I'm really bad at that. Just, in spite of all the awfulness on a global scale, on a personal level my cup runneth over right now.

My extremely wonderful job was made permanent. I had been assured this would happen, but I'm really pleased to have it confirmed.

We finally managed to catch (at least the first act of) one of the many performances currently being made available online in response to the pandemic: the National Theatre's utterly amazing Twelfth Night from 2017. Lots of people have recommended it, so thank you for inspiring me to actually watch. It's on YouTube until 7 pm tomorrow (Thursday), and it's so, so, so good. So many amazing actors, and the set is great, and the direction is great, and I'm in awe, basically. Hope to watch Act II this evening.

We also really loved Knives Out. From publicity it didn't seem like my kind of thing at all, don't care about semi-parodic murder mysteries about awful people, but I saw enough reviews to convince me to give it a try and it's amazing. The comedy is actually funny, and very much punching up.

I have been having some wonderful distanced conversations with people I care about. Phone date with ghoti_mhic_uait. Phone call with hatam_soferet. Video chat with rysmiel, which we hadn't managed to coordinate for ages because of time zones and demanding jobs. Video chat with doseybat, who has been one of my favourite people to talk to for nearly a quarter century, and every extension of that enormous conversation makes my life better. I sympathize with all the people who dislike spending all their leisure time as well as in many cases their work time in calls, but for me, a one-to-one conversation with a friend goes a long way to balance the awfulness of lockdown.

Talking of which, ambyr, who also feels positive towards phonecalls, really kindly agreed to phone me to teach me Mystic Vale. It's a really pretty deck building game I'd heard good things about, but I couldn't make any sense of the interface on Yucata. And now ambyr has explained it to me and I'm really enjoying it. Plus I got to talk to someone I like and had only previously interacted with on DW.

And I have a regular call set up with angelofthenorth, who lives the other side of the country so we always have too much geography even in normal times. She had the brilliant idea of reading through a book about the Old Testament aimed at Christian ministers in training, SCM Studyguide: The Old Testament, by John Holdsworth, which I'm finding really fascinating. Mostly the conversation with angelofthenorth, who brings the perspective of an experienced Christian preacher and mentor of ordinands, whereas I'm a random Jewish person who obviously has a very different approach to the Bible. The book itself is written in a somewhat annoying style, but the content is good.

angelofthenorth, along with my sister, got me back into playing Scrabble using the rather dreadful official app from Electronic Arts. I'm really enjoying being able to ping anagrams back and forth as a minor distraction during the day.

Another friend who is completely wonderful is ewt, who transcribed for me the tune of the Psalm we use for special occasion grace after meals. This is particularly awesome because it's really hard to find any record of the Anglo-Jewish tunes I'm used to. Everything is transmitted within communities and not documented anywhere, and the internet is full of American and Israeli and Chassidic tunes, and I can't teach my own tunes because I'm not musical enough.

The final thing making me happy right now is the disco tardigrade. I have always loved tardigrades, and fluorescence microscopy, and this is just such a lovely image. It's my new 'squee' icon (cos nobody really understood the 'methane on Mars' one), and also my new Zoom background. Turns out, Zoom backgrounds are set per device not per account, so when I tried to put it on my personal account, it ended up showing up on work Zoom calls too. Luckily it's not embarrassing and my equally geeky colleagues love it too. (But in case anyone could stand to learn from my experience, don't put a work-unsuitable background on your Zoom if you use the same physical machine for work and personal calls.)

comments




pp

Appliance hell

My washer and dryer failing me is a nightmare I don’t want to visit. You see, my current set came with the house 17 years ago, and were already 5 years old. The one set of appliances I’ve never bought is a washer and dryer–I’ve always purchased houses where they’d been left behind by the […]




pp

Leo Zovic: Zippers And Clj

So recently, I had to use zippers at work. Specifically, the Clojure implementation. There were some close-to-arbitrary transformations I needed to do with some close-to-arbitrary trees and it turned out that zippers were more efficient than the alternatives1.

Using them this way, combined with the general state of the world and my free time, finally tipped me into doing some more Common Lisp development. Before, I go any further, let me be clear about something.

I Like Clojure

Seriously.

Its logo is up top in the language bar, I was one of the inaugural members of the Toronto Clojure User Group, I recommend it as a first lisp you should learn, and have for about six years now. I'm also painfully aware of the shortcomings of Common Lisp, and make no excuses for them.

However.

  • I don't like the JVM. It's slow as balls, its' deployment options are less than ideal for my purposes, its' error system is at best useless, and Clojure without it is unlikely.
  • Clojurescript build incompatiblities are, if anything, worse2.
  • I don't like the underlying licensing decisions.

These are deep reasons to stay away. They're not the sort of thing I can paper over with a library or two. Fixing them would mean a superhuman amount of work poured into the underlying technical and social infrastructure, and I'm not into it. I wouldn't be into it even if the community was interested in heading that way, and near as I can tell, they're not particularly.

Whether or not I think you should learn Clojure as your first3 lisp, it definitely wasn't my first lisp. The more uniform, mostly-better-thought-out interface, lack of historical baggage and functional data structures are not enough to pull me all the way over.

It is enough for me to start plotting a smash-and-grab of as much of the stuff I like as I can carry. Which is exactly what clj represents. As of this writing, it defines and exports exactly four symbols: if-let, when-let, -> and ->>. This is a tiny beginning of the list, and I fully plan to put something more substantial together using cl-hamt, named-readtables, test-utils and possibly optima. Stay tuned to that repo if you're interested, but it's not the focus today.

cl-zipper

The thing that percipitated this thought was having used the Clojure Zipper implementation. So, obviously, this is something I want next time I need to manipulate trees in Common Lisp. The paper is here, and unless you have a terminal phobia of datastructures4, you should go read it. It's six pages, they're light, and one of them taken up by the intro and references.

The operations defined in the paper are left, right, up, down, insert_right, insert_left, insert_down and delete. There's a few conveniences defined for the Clojure version, and I've implemented some of my own stuff too. Lets go through the main file in almost-literate style.

First up, we have constructors.

(defstruct path
  (left) (path) (right))

(defstruct loc
  (node)
  (path)

  (fn-branch?)
  (fn-children)
  (fn-make-node))

;;;;;;;;;; Constructors
(defun zipper (branch? children make-node root)
  (make-loc
   :node root
   :fn-branch? branch? :fn-children children :fn-make-node make-node))

(defmethod make-zipper ((thing list))
  (zipper #'listp #'identity (lambda (node children) (declare (ignore node)) children) thing))

(defun make-node (zipper children)
  (funcall (loc-fn-make-node zipper) zipper children))

You can see influence from both clojure.zip and the paper here. I'm taking the lead from the paper by explicitly separating the path triple our from the loc definition. However, I'm not explicitly defining my own type tree the way that Huet does. Instead, I'm going to be dealing with assorted lisp trees. These could be implemented as lists, vectors, hashes, or any number of other formats. I'm going to implement a few type-distpatching built-ins, including the make-zipper list method above, but the basic zipper function just needs to take an interface as input in the form of branch?, children and make-node arguments. This is the same solution that the Clojure implementation went with, and I see no reason to go a different way. The only material difference is that theirs uses the Clojure metadata system, while I explicitly define slots in the loc structure.

Now that we can construct, we need to be able to select.

;;;;;;;;;; Selectors
(defun branch? (zipper) (funcall (loc-fn-branch? zipper) (loc-node zipper)))
(defun children (zipper)
  (funcall
   (loc-fn-children zipper)
   (loc-node zipper)))
(defun node (zipper) (loc-node zipper))
(defun path (zipper) (loc-path zipper))

(defun lefts (zipper)
  (when (loc-path zipper)
    (reverse (path-left (loc-path zipper)))))

(defun rights (zipper)
  (when (loc-path zipper)
    (path-right (loc-path zipper))))

The basic navigation is four functions; down, up, left and right

;;;;;;;;;; Navigation
;;;;;;;;;;;;;;; Basic navigation
(defun down (zipper)
  (when (children zipper)
    (let ((fresh (copy-loc zipper)))
      (setf (loc-node fresh) (first (children zipper))
	    (loc-path fresh)
	    (make-path
	     :left nil
	     :path (loc-path zipper)
	     :right (rest (children zipper))))
      fresh)))

(defun up (zipper)
  (when (path zipper)
    (let ((fresh (copy-loc zipper)))
      (setf (loc-node fresh)
	    (make-node
	     zipper (append
		     (reverse (path-left (path zipper)))
		     (cons (loc-node zipper)
			   (path-right (path zipper)))))
	    (loc-path fresh) (path-path (path zipper)))
      fresh)))

(defun left (zipper)
  (when (and (path zipper) (path-left (path zipper)))
    (let ((fresh (copy-loc zipper)))
      (setf (loc-node fresh) (first (path-left (path zipper)))
	    (loc-path fresh)
	    (make-path
	     :left (rest (path-left (path zipper)))
	     :path (path-path (path zipper))
	     :right (cons (loc-node zipper) (path-right (path zipper)))))
      fresh)))

(defun right (zipper)
  (when (and (path zipper) (path-right (path zipper)))
    (let ((fresh (copy-loc zipper)))
      (setf (loc-node fresh) (first (path-right (path zipper)))
	    (loc-path fresh)
	    (make-path
	     :left (cons (loc-node zipper) (path-left (path zipper)))
	     :path (path-path (path zipper))
	     :right (rest (path-right (path zipper)))))
      fresh)))

The main difference between this and the paper is that I've chosen nil as my Top representation, which lets me pull the trick of using when to check for the presence of a path, and its' non-Top-ness at the same time.

The bad news is that since Common Lisp doesn't have pervasive functional data structures, I have to explicitly copy locs while moving through a tree. The good news is that the copy is fairly light weight. Effectively, I'm copying out a set of 5 pointers, and could get that down to 3 by defining an intermediate struct.

Hm.

Which I probably should do. Note to self.

Out of those, we get three compound navigation functions. With more probably coming soon. Specifically, I found find useful for the work I did. It's easily externally definable, but would be even easier to bundle along. The ones I've already implemented are root, leftmost and rightmost.

;;;;;;;;;;;;;;; Compound navigation
(defun root (zipper)
  (if-let (z (while zipper #'up))
    (node z)))

(defun leftmost (zipper) (while zipper #'left))

(defun rightmost (zipper) (while zipper #'right))
Each of these involve an intermediate call to while. Which isn't a generic macro; it's a function defined in util.lisp
...
(defun until (zipper f)
  (let ((z zipper))
    (loop for next = (funcall f z) while next
       when next do (setf z next))
    z))
...
As you can see, all it does is repeatedly call a given function on a zipper and return the last non-nil loc result. That's loc, not node, so this doesn't run into the usual Common Lisp conflict of "Did you fail to find a thing, or find the element nil?".

That's the traversals done. Next up, we've got modification, without which this library is fairly useless. The basics are replace, delete and the insert/child twins.

;;;;;;;;;; Modification
(defun replace (zipper node)
  (let ((fresh (copy-loc zipper)))
    (setf (loc-node fresh) node)
    fresh))

(defun delete (zipper)
  (when (path zipper)
    (let ((fresh (copy-loc zipper))
	  (fresh-path (copy-path (loc-path zipper))))
      (cond ((rights zipper)
	     (setf (loc-node fresh) (pop (path-right fresh-path))
		   (loc-path fresh) fresh-path))
	    ((lefts zipper)
	     (setf (loc-node fresh) (pop (path-left fresh-path))
		   (loc-path fresh) fresh-path))
	    (t (setf (loc-path fresh) (path-path fresh-path))))
      fresh)))

(defun insert-child (zipper node)
  (replace
   zipper
   (make-node
    zipper
    (cond ((not (branch? zipper))
	   (list node (node zipper)))
	  ((children zipper)
	   (cons node (children zipper)))
	  (t (list node))))))

(defun append-child (zipper node)
  (replace
   zipper
   (make-node
    zipper
    (cond ((not (branch? zipper))
	   (list (node zipper) node))
	  ((children zipper)
	   (append (children zipper) (list node)))
	  (t (list node))))))

(defun insert-left (zipper node)
  (let ((fresh (copy-loc zipper))
	(fresh-path (copy-path (loc-path zipper))))
    (push node (path-left fresh-path))
    (setf (loc-path fresh) fresh-path)
    fresh))

(defun insert-right (zipper node)
  (let ((fresh (copy-loc zipper))
	(fresh-path (copy-path (loc-path zipper))))
    (push node (path-right fresh-path))
    (setf (loc-path fresh) fresh-path)
    fresh))

The paper defines an insert_down function. It fails on a Leaf node, and otherwise inserts a singleton branch at the given location. The insert/append child functions above also insert nodes at a lower level at the current loc. They give you a choice about whether to insert the new node as the leftmost or rightmost child, and additionally succeed on Leaf nodes by including the leaf value as a child of the new branch.

There are, thus far, three compound modification functions; edit, splice-left and splice-right.

(defun edit (zipper f &rest args)
  (replace zipper (apply f (node zipper) args)))

(defun splice-left (zipper node-list)
  (reduce #'insert-left node-list :initial-value zipper))

(defun splice-right (zipper node-list)
  (reduce #'insert-right (reverse node-list) :initial-value zipper))

edit takes a function instead of a new node, and replaces the node at loc with the result of running that function on the existing node. The splice-* twins are fairly self-explanatory; they're like insert-left/insert-right, but work on multiple nodes rather than single ones.

I haven't yet implemented next, prev and remove because these might relate to the different representation of the traversal end? state. The reason for this seems to be that next/prev/remove assume a depth-first traversal. The reason I'm being weasely here is that I haven't thought about it hard enough to be sure that the end? marker is really necessary. It also seems odd to privilege depth-first over breadth-first traversals; ideally, I think you'd want to be able to support either. Possibly interchangeably.

Minor Housekeeping

That wraps it up for this edition. My immediate intention is to do more work on the cl-zipper and clj libraries, as well as that game I mentioned last time. Ideally, I'd like to up my blogging output too. Probably not to the same volume as I had at my peak, but it was definitely helpful to keep some sort of written journal around for a while. The current state of the world is, hopefully, going to make it easy for me to get more programming time in. All things considered, I'd count that as a win.

  1. Although admittedly, it does require me to explain the concept of zippers to a few other people for maintenance purposes. So ironically, this adds complexity despite being much more technically elegant than other options.
  2. There's a reason that langnostic.js is a raw JS file, rather than compiled from clojurescript source, and that reason is like 90% that the compilation process is nontrivial to set up.
  3. "First", not "only". You can probably make educated guesses about which other ones I think you should learn.
  4. In which case, why are you here? This blog could kill you accidentally with an errant click or two. You should probably just go do something else.




pp

Mr. Cupps x Uncrate Vintage Keychain Collection




pp

Support your local body during the COVID-19 pandemic

Event cancellations at local bodies due to COVID-19 will reduce revenue, but not rent and other fixed expenses. Many local bodies already operate on extremely tight margins and struggle to pay their bills even during normal times. All members are encouraged to continue to financially support their local bodies, even if there are no events …

Continue reading





pp

Incident At Price Chopper

He’s standing in the dead middle of the meat section at Price Chopper screaming “HOW CAN THERE NOT BE ANY FUCKING STEAK?”  Someone comes out bearing chicken from behind the steel clad gates of the backroom where they cut meat and stage the cases. “Hey, you got any steak back there?” “Steak? No sir. None.” […]




pp

[spicy guest post] Pippa Park’s Favorite Korean Stew by Erin Yun

So pleased to welcome NYC author Erin Yun to the blog today. Her debut middle grade novel, Pippa Park Raises Her Game (Fabled Films Press, 2020), is a contemporary reimagining of the Dickens’s classic Great Expectations.     Life is full of great expectations for Korean American Pippa Park. It seems like everyone, from her … Continue reading [spicy guest post] Pippa Park’s Favorite Korean Stew by Erin Yun




pp

Making buildings higher and thus destroy their appearance

Terrible building on Tower Ro
Terrible example on Tower Road
Beautiful building on Tower Road
Villa Aurora on Tower Road
As a foreigner I sometimes wonder how it is possible that some buildings in, for instance, Sliema have had floors built-on in a completely different style than the existing house. On Tower Road there are several terrible examples. Before one start such development one must get permission from the authorities, I suppose that the authority in such case is MEPA. Either there are no rules in what way you can change a building’s appearance or, someone, apart from the owner and the developer, have had some odd interest in granting permission despite the rules. One can only hope that this destruction of buildings does not in the future affect Villa Aurora or the other lovely buildings on Tower Road that not yet have been in the hands of irresponsible developers and, if there are rules, civil servants with a private agenda. However, there are good examples of buildings where the developer has tried to build the extra floors in a style that are more consistent with the older part of the building






pp

Seven Sketches in Compositionality: An Invitation to Applied Category Theory

Seven Sketches in Compositionality: An Invitation to Applied Category Theory

2018 by Brendan Fong and David I. Spivak

Category theory is becoming a central hub for all of pure mathematics. It is unmatched in its ability to organize and layer abstractions, to find commonalities between structures of all sorts, and to facilitate communication between different mathematical communities. But it has also been branching out into science, informatics, and industry. We believe that it has the potential to be a major cohesive force in the world, building rigorous bridges between disparate worlds, both theoretical and practical. The motto at MIT is mens et manus, Latin for mind and hand. We believe that category theory—and pure math in general—has stayed in the realm of mind for too long; it is ripe to be brought to hand.
A very approachable but useful introduction to category theory. It avoids the Scylla and Charybdis of becoming incomprehensible after page 2 (as many academic texts do), and barely scratching the surface (as many popular texts do).




pp

Applied Category Theory - The Emerging Science of Compositionality

An enjoyable 25-minute introductory talk: YOW! Lambda Jam 2019 - Ken Scambler - Applied Category Theory (slides)

What do programming, quantum physics, chemistry, neuroscience, systems biology, natural language parsing, causality, network theory, game theory, dynamical systems and database theory have in common?

As functional programmers, we know how useful category theory can be for our work - or perhaps how abstruse and distant it can seem. What is less well known is that applying category theory to the real world is an exciting field of study that has really taken off in just the last few years. It turns out that we share something big with other fields and industries - we want to make big things out of little things without everything going to hell! The key is compositionality, the central idea of category theory.

Previously: Seven Sketches in Compositionality: An Invitation to Applied Category Theory.

(via Brian McKenna)




pp

Applications of Blockchain to Programming Language Theory

Let's talk about Blockchain. Goal is to use this forum topic to highlight its usefulness to programming language theory and practice. If you're familiar with existing research efforts, please share them here. In addition, feel free to generate ideas for how Blockchain could improve languages and developer productivity.

As one tasty example: Blockchain helps to formalize thinking about mutual knowledge and common knowledge, and potentially think about sharing intergalactic computing power through vast distributed computing fabrics. If we can design contracts in such a way that maximizes the usage of mutual knowledge while minimizing common knowledge to situations where you have to "prove your collateral", third-party transactions could eliminate a lot of back office burden. But, there might be benefits in other areas of computer science from such research, as well.

Some language researchers, like Mark S. Miller, have always dreamed of Agoric and the Decades-Long Quest for Secure Smart Contracts.

Some may also be aware that verification of smart contracts is an important research area, because of the notorious theft of purse via logic bug in an Ethereum smart contract.




pp

A reminder: How to stimulate the appetite of a medical leech

The 1996 Ig Nobel Prize for biology was awarded to Anders Barheim and Hogne Sandvik of the University of Bergen, Norway, for their tasty and tasteful report, “Effect of Ale, Garlic, and Soured Cream on the Appetite of Leeches.” Recently, Bradley Allff, writing in Atlas Obscura, looked at the role medical leeches sometimes play in medicine in the USA. […]




pp

Whoa – what happened

Hi guys,  I don’t know what happened to all of my recent messages, I am guessing that the Clouds were at their nasty work again – stealing!  So I am going to write more and you write me back ok? Well I just got back from one of my favorite little planets, planet Earth.  I […]




pp

Analog Gives Support To Digital

Oh man, this is great! It's perfect for... seeing texts the second they come in? Showing off your cell phone? Watching videos in a horrid orientation? Wait a minute, why is this useful again?

~NSHA