vi How to Prepare for the Trump RecessionThe global coronavirus... By robertreich.org Published On :: Tue, 31 Mar 2020 13:24:15 -0400 How to Prepare for the Trump RecessionThe global coronavirus pandemic has put our economy in free-fall.Even through Donald Trump’s reckless economic policies, like his pointless trade war with China or his deficit-busting tax cuts for his billionaire donors, the economy has somehow managed to keep chugging along — until now. All of the stock market gains from Trump’s time in office have been wiped out, and over the course of just over one week in March the Dow Jones Industrial Average experienced its five largest drops in history. Worse than a plummeting stock market, businesses and major industries have been forced to shutter their windows to help combat the rapid spread of the virus, putting hundreds of thousands of workers’ paychecks at risk. A recession is inevitable at this point. Here are 3 things we can do to prepare. Number one: We need to reform unemployment insurance so it reflects the needs of today’s economy. When it was first created in 1935, unemployment insurance was designed to help full-time workers weather downturns until they got their old jobs back. But there are fewer full-time jobs in today’s economy, and fewer people who are laid off get their old jobs back again. As a result, only 27% of unemployed workers receive benefits today, compared to 49% of workers in the 1950s. We need to expand unemployment coverage so that everyone is protected.Number two: We need to strengthen Temporary Assistance for Needy Families, also known as public assistance. Since its creation in 1996, the number of families receiving cash assistance has declined dramatically – and not because they’re doing well. Between 2006 and 2018, just 13% of families were lifted out of poverty, while the number of families receiving public assistance fell by 39%.Already weak, the program didn’t hold up well during the Great Recession. Funding doesn’t automatically expand during economic downturns – meaning the more families are in need, the less money there is to help them. The program also has strict work requirements, which can’t be fulfilled in a deep recession. Worse yet, many individuals in need have already exhausted their five years of lifetime eligibility for assistance. We need to reform the public assistance program so that more families in need are eligible. It should be easier to waive the strict work eligibility requirements during the economic downturn, and the lifetime five-year limit should be suspended.Number three: We need to protect the Supplemental Nutrition Assistance Program, also known as SNAP or food stamps. Unlike public assistance, SNAP responded well during the Great Recession. Its requirements are designed to expand during economic downturns or recessions. Waiving work requirements during the Great Recession made thousands of people in need eligible for the program who otherwise wouldn’t have been. Between December 2007 and December 2009, the number of SNAP participants rose by 45%. The program helped keep an estimated 3.8 million families out of poverty in 2009.But that might not be an option this time around, as SNAP has come under attack from the Trump administration, which is trying to enact a draconian rule change that would kick an estimated 700,000 of our most vulnerable citizens off of the program. Luckily, a judge blocked the rule from going into effect, but the administration is still fighting to enforce it — even in the middle of a global pandemic. We need to make sure SNAP’s flexibility and ability to respond to economic downturns is protected before the next recession hits.Stronger safety nets are not only good for individuals and families in need. They will also prevent the looming recession from becoming an even deeper and longer economic crisis. Full Article video videos trump trump economy
vi Trump’s COVID-19 Power Grab By robertreich.org Published On :: Mon, 06 Apr 2020 21:37:20 -0400 The utter chaos in America’s response to the pandemic – shortages of equipment to protect hospital... Full Article trump scandals bailout
vi Trump’s Failed Coronavirus ResponseThe Trump administration’s... By robertreich.org Published On :: Tue, 14 Apr 2020 15:11:52 -0400 Trump’s Failed Coronavirus ResponseThe Trump administration’s response to the coronavirus pandemic has been a deliberate disaster from the beginning. But don’t take my word for it – just look at the facts.Here’s the timeline: In 2018, he let the pandemic-preparedness office in the National Security Council simply dissolve, and followed up with budget cuts to HHS and CDC this year. That team’s job was to follow a pandemic playbook written after global leaders fumbled their response to Ebola in 2014. Trump was briefed on the playbook’s existence in his first year - had he listened, the government would’ve started getting equipment to doctors two months ago. The initial outbreak of the coronavirus began in Wuhan, China, in December, 2019. By mid-January, 2020, the White House had intelligence reports that warned of a likely pandemic.On January 18th, HHS Secretary Azar spoke with Trump to emphasize the threat of the virus just as US Diplomats were being evacuated from Wuhan. Two days later, the virus was confirmed in both the US and South Korea. That week, South Korean officials immediately drafted medical companies to develop test kits for mass production. The WHO declared a global health emergency. But Trump … did nothing.As Hubei Province went on lockdown, Trump, who loves any excuse to enact a racist travel ban, barred entry of any foreigners coming from China (it was hardly proactive) but took no additional steps to prepare for infection in the United States. He said, “We pretty much shut it down, coming in from China,” He didn’t ramp up production of test kits so we could begin isolating the virus.By February, the US had 14 confirmed cases but the CDC test kits proved faulty; there weren’t enough of them, and they were restricted to only people showing symptoms. The US pandemic response was already failing.Trump then began actively downplaying the crisis and baselessly predicting it would go away when the weather got warmer.Trump decided there was nothing to see here, and on February 24th, took time out of his day to remind us that the stock markets were soaring.A day later, CDC officials sounded the alarm that daily life could be severely disrupted. The window to get ahead of the virus by testing and containment was closing. Trump’s next move: He compared Coronavirus to the seasonal flu…and called the emerging crisis a hoax by the Democrats.With 100 cases in the US, Trump declined to call for a national emergency.Meanwhile, South Korea was now on its way to testing a quarter million people, while the US was testing 40 times slower. When a cruise ship containing Americans with coronavirus floated toward San Francisco, Trump said he didn’t want people coming off the ship to be tested because they’d make the numbers look bad.It wasn’t until the stock market reacted to the growing crisis and took a nosedive that Trump finally declared a national emergency.By this time, South Korea had been using an app for over a month that pulled government data to track cases and alert users to stay away from infected areas. Over the next weeks, as the virus began its exponential spread across the US, and Governors declared states of emergency, closing schools and workplaces and stopping the American economy in its tracks – Trump passed on every opportunity to get ahead of this crisis. Trump’s priority was never public health. It was about making the virus seem like less of a nuisance so that the “numbers” would “look good” for his reelection. Only when the stock market crashed did Trump finally begin to pay attention…and mostly to bailing out corporations in the form of a massive $500 billion slush fund, rather than to helping people. And then, with much of America finally and belatedly in lockdown, he said at a Fox News town hall that he would “love” to have the country “opened up, and just raring to go” by Easter.At every point, Trump has used this crisis to compliment himself.This is not leadership. This is the exact opposite of leadership. Full Article video videos coronavirus Trump trump coronavirus
vi Coronavirus and the Height of Corporate WelfareWith the... By robertreich.org Published On :: Tue, 21 Apr 2020 14:50:50 -0400 Coronavirus and the Height of Corporate WelfareWith the coronavirus pandemic wreaking havoc on the global economy, here’s how massive corporations are shafting the rest of us in order to secure billions of dollars of taxpayer-funded bailouts.The airline industry demanded a massive bailout of nearly $60 billion in taxpayer dollars, and ended up securing $50 billion – half in loans, half in direct grants that don’t need to be paid back. Airlines don’t deserve a cent. The five biggest U.S. airlines spent 96 percent of their free cash flow over the last decade buying back shares of their own stock to boost executive bonuses and please wealthy investors.United was so determined to get its windfall of taxpayer money that it threatened to fire workers if it didn’t get its way. Before the Senate bill passed, CEO Oscar Munoz wrote that “if Congress doesn’t act on sufficient government support by the end of March, our company will begin to…reduce our payroll….”Airlines could have renegotiated their debts with their lenders outside court, or file for Chapter 11 bankruptcy protection. They’ve reorganized under bankruptcy many times before. Either way, they’d keep flying.The hotel industry says it needs $150 billion. The industry says as many as 4 million workers could lose their jobs in the coming weeks if they don’t receive a bailout. Everyone from general managers to housekeepers will be affected. But don’t worry – the layoffs won’t reach the corporate level.Hotel chains don’t need a bailout. For years, they’ve been making record profits while underpaying their workers. Marriott, the largest hotel chain in the world, repurchased $2.3 billion of its own stock last year, while raking in nearly $4 billion in profits. Thankfully, Trump’s hotels and businesses, as well as any of his family members’ businesses, are barred from receiving anything from the $500 billion corporate bailout money. But the bill is full of loopholes that Trump can exploit to benefit himself and his hotels.Cruise ships also want to be bailed out, and Trump called them a “prime candidate” to receive a government handout. But they don’t deserve it either. The three cruise ship corporations controlling 75 percent of the entire global market are incorporated outside of the United States to avoid paying taxes.They’re floating tax shelters, paying an average U.S. tax rate of just 0.8 percent. Democrats secured key provisions stipulating that companies are only eligible for bailout money if they are incorporated in the United States and have a majority of U.S. employees, so the cruise ship industry likely won’t see a dime of relief funding. However, Trump has made it clear he still wants to help them.The justification I’ve heard about why all these corporations need to be bailed out is they’ll keep workers on their payrolls. But why should we believe big corporations will protect their workers right now? The $500 billion slush fund included in the Senate’s emergency relief package doesn’t require corporations to keep paying their workers and has dismally weak restrictions on stock buybacks and executive pay. Even if the bill did provide worker protections, what’s going to happen to these corporations’ subcontractors and gig workers? What about worker benefits, pensions and health care? How much of this bailout is going to end up in the pockets of executives and big investors?The record of Big Business isn’t comforting. Amazon, one of the richest corporations in the world, which paid almost no taxes last year, is only offering unpaid time off for workers who are sick and just two weeks paid leave for workers who test positive for the virus. Meanwhile, it demands its employees put in mandatory overtime.Oh, and these corporations made sure they and other companies with more than 500 employees were exempt from the requirement in the first House coronavirus bill that employers provide paid sick leave.And now, less than a month into statewide shelter-in-place orders and social distancing restrictions, Wall Streeters and corporate America’s chief executives are calling for supposedly “low-risk” groups to be sent back to work to restart the economy. They’re so concerned about protecting their bottom line that they’re willing to let people die to preserve their stock portfolios, all while they continue working from the safety and security of their own homes. It’s the most repugnant class warfare you can imagine.Here’s the bottom line: no mega-corporation deserves a cent of bailout money. For decades these companies and their billionaire executives have been dodging taxes, getting tax cuts, shafting workers, and bending the rules to enrich themselves. There’s no reason to trust them to do the right thing with billions of dollars in taxpayer money. Every penny we have needs to go to average Americans who desperately need income support and health care, and to hospitals that need life-saving equipment. It’s outrageous that the Senate bill gave corporations nearly four times as much money as hospitals on the front lines. Corporate welfare is bad enough in normal times. Now, in a national emergency, it’s morally repugnant. We must stop bailing out corporations. It’s time we bail out people. Full Article video videos coronavirus trump coronavirus corporate welfare corporate power
vi The Covid-19 Class Divide By robertreich.org Published On :: Mon, 27 Apr 2020 16:45:12 -0400 The pandemic is putting America’s deepening class divide into stark relief. Four classes are... Full Article
vi From Ukraine to Coronavirus: Trump’s Abuse of Power... By robertreich.org Published On :: Wed, 29 Apr 2020 15:22:00 -0400 From Ukraine to Coronavirus: Trump’s Abuse of Power ContinuesDonald Trump has spent a lifetime exploiting chaos for personal gain and blaming others for his losses. The pure madness in America’s response to the coronavirus pandemic – shortages of equipment to protect hospital workers, dwindling supplies of ventilators and critical medications, jaw-dropping confusion over how $2.2 trillion of aid in the recent coronavirus law will be distributed – has given him the perfect cover to hoard power and boost his chances of reelection.As the death toll continues to climb and states are left scrambling for protective gear and crucial resources, Trump is focused on only one thing: himself. He’s told governors to find life-saving equipment on their own, claiming the federal government is “not a shipping clerk” and subsequently forcing states and cities into a ruthless bidding war.Governors have been reduced to begging FEMA for supplies from the dwindling national stockpile, with vastly different results. While we haven’t seen what “formula” FEMA supposedly has for determining who gets what, reports suggest that Trump’s been promising things to governors who can get him on the phone. Our narcissist-in-chief has ordered FEMA to circumvent their own process and send supplies to states that are “appreciative”.Michigan and Colorado have received fractions of what they need while Oklahoma and Kentucky have gotten more than what they asked for. Colorado and Massachusetts have confirmed shipments only to have them held back by FEMA. Ron DeSantis, the Trump-aligned governor of Florida, refused to order a shelter-in-place mandate for weeks, but then received 100% of requested supplies within 3 days. New Jersey waited for two weeks. New York now has more cases than any other single country, but Trump barely lifted a finger for his hometown because Governor Andrew Cuomo is “complaining” about the catastrophic lack of ventilators in the city.A backchannel to the president is a shoe-in way to secure life-saving supplies. Personal flattery seems to be the most effective currency with Trump; the chain of command runs straight through his ego, and that’s what the response has been coordinated around.He claims that as president he has “total authority” over when to lift quarantine and social distancing guidelines, and threatens to adjourn Congress himself so as to push through political appointees without Senate confirmation.And throughout all of this, Trump has been determined to reject any attempt of independent oversight into his administration’s disastrous response. When he signed the $2 trillion emergency relief package into law, he said he wouldn’t agree to provisions in the bill for congressional oversight – meaning the wheeling-and-dealing will be done in secret. He has removed the inspector general leading the independent committee tasked with overseeing the implementation of the massive bill.He appointed one of his own White House lawyers, who helped defend him in his impeachment trial, to oversee the distribution of the $500 billion slush fund for corporations. That same day, he fired Inspector General Michael Atkinson – the inspector general who handed the whistleblower complaint to Congress that ultimately led to Trump’s impeachment.There should never have been any doubt that Trump would try to use this crisis to improve his odds of re-election.Stimulus checks going to the lowest-income earners were delayed because Trump demanded each one of them bear his name. As millions of the hardest-hit Americans scrambled to put food on the table and worried about the stack of bills piling up, Trump’s chief concern was himself. It doesn’t matter that this is a global pandemic. Abusing his power for personal gain is Trump’s MO.Just three and a half months ago, Trump was impeached on charges of abuse of power and obstructing investigations. Telling governors that they need to “be appreciative” in order to receive life-saving supplies for their constituents is the same kind of quid pro quo that Trump tried to extort from Ukraine, and his attempts to thwart independent oversight are the same as his obstruction of Congress.Trump called his impeachment a “hoax”. He initially called the coronavirus a “hoax”. But the real hoax is his commitment to America. In reality he will do anything – anything – to hold on to power. To Donald Trump, the coronavirus crisis is just another opportunity. Full Article video videos trump coronavirus Trump corruption
vi Visitors By thebrowndogblog.blogspot.com Published On :: Wed, 15 Dec 2010 20:18:00 +0000 Her daddy is out of town this week, so Miss Addison Mae is back in brown dog land! Unfortunately, the browns were not too excited at all to see her and Wrigley even HID! She is doing great, though, and I was happy to see her after a month of her being away. The first night I couldn't remember how I did everything with so many dogs, but now I'm back in the swing of things and everything is going smoothly. She leaves again on Friday, so I am enjoying our time together while it lasts.In other news, my neighbor is also a yoga student of mine and heard me talking about Maizy's work at the library (which she hasn't been doing since her tail amputation several months ago because it took her so long to heal from that surgery) and asked if she could stop by with her kids someday. I said sure and yesterday she stopped over with the kids who read to Maizy, petted Hannibal the cat, and were licked by Probert (who is crated in the living room until Addison's departure because they stress each other out). Maizy was ecstatic to have visitors who were paying attention to her and after only a half-hour visit, she spent the rest of the day in recovery sleeping. Some "nanny dog"! Hehe. Probert was less enthusiastic, but was very tolerant and observant. He is not so used to children, but I thought he did great. Only one growl when the kids were getting too crazy by his crate, but he is entitled to give warnings if he doesn't like something. Wrigley did not come visit because he would have steamrolled those poor children with his boisterous enthusiasm for all things. :DIn closing, here is an updated photo of all three browns. Do you know who is who? Full Article Addy Maizy pictures Probert Wrigley
vi Ken and Robin Talk About Stuff: Vigorous Deaccessioning Policy By robin-d-laws.blogspot.com Published On :: Fri, 17 Apr 2020 13:30:00 +0000 In the latest episode of their high-flying double-decker podcast, Ken and Robin talk making mind control fun to play, Nadar, the occult adventures of Bruce Lee & Jimi Hendrix, and the Rotodyne. Full Article
vi 2020 coronavirus pandemic in New York City By lj.rossia.org Published On :: Mon, 06 Apr 2020 00:45:17 GMT Странные данные по NYChttps://commons.wikimedia.org/wiki/Data:COVID-19_cases_in_New_York_City.tabтрупов, оказывается, не 300-400 в день, какобъявлялось, а всего 200 в день, то есть около половинымертвецов в NYC болели короной (или меньше; нормальнаясмертность в NYC 400-500 человек в день).Похоже, оно не растет даже, ну типа - ковидвыкашивает тех, кто и так на пороге смерти,а остальные могут особо не беспокоиться.Привет Comments Full Article covid
vi The Orville moves to Hulu for Season 3 By scifistorm.org Published On :: Sun, 21 Jul 2019 01:05:02 +0000 The Orville star and creator Seth MacFarlane dropped a bomb at San Diego Comic Con – the show will move off of Fox onto the Hulu streaming network for season 3. In a statement MacFarlane said, “The Orville has been a labor of love for me, and there are two companies which have supported that […] Full Article Television hulu orville
vi Каранік: Захворванне на COVID-19 зніжаецца ў некаторых раёнах Мінскай і Віцебскай абласцей By nn.by Published On :: Fri, 08 May 2020 16:40:51 GMT Full Article Грамадства
vi Мінздароўя збіраецца вызначыць, колькі беларусаў насамрэч перахварэлі на COVID-19 By nn.by Published On :: Fri, 08 May 2020 17:18:34 GMT Full Article Здароўе
vi Футбольны матч беларускага чэмпіянату перанесены. У аднаго з гульцоў падазрэнне на COVID-19 By nn.by Published On :: Sat, 09 May 2020 09:16:51 GMT Full Article Спорт
vi Беларускі нацыянальны строй эпохі Covid-19 ФОТАФАКТ By nn.by Published On :: Sat, 09 May 2020 09:24:10 GMT Full Article Грамадства
vi Running on empty: Coronavirus has changed the course for races big and small By www.espn.com Published On :: Tue, 5 May 2020 12:25:58 EST Don't expect a pack of running fanatics swarming to the finish line at road races this year. But that doesn't mean that participants don't have options. Full Article
vi Annual IOC Session meeting to be held via video By www.espn.com Published On :: Wed, 6 May 2020 17:41:15 EST The IOC Session -- an annual meeting of approximately 100 members -- will be held in July via a video conference rather than the originally scheduled gathering in Tokyo prior to the Summer Olympics. Full Article
vi Srazí krize covid-19 ceny nemovitostí v Česku? Lze to očekávat By www.idnes.cz Published On :: Wed, 22 Apr 2020 22:00:00 GMT Říká se, že po krizi spojené s onemocnění covid-19 se probudíme do jiného světa. Otázka je, zda to bude platit i pro realitní trh. Podle odborníků s největší pravděpodobností ano. Což platí jak pro prodejní ceny nemovitostí, tak pro ceny nájemního bydlení. Full Article Finance - Investování
vi Máte exekuce? Koronavirus je sice nakonec nezastaví, ale může vám pomoci By www.idnes.cz Published On :: Thu, 23 Apr 2020 22:00:00 GMT Sněmovna schválila návrh zákona o některých opatřeních ke zmírnění dopadů epidemie koronaviru. Jaké úlevy se dočkají dlužníci a jaké jsou podmínky pro zastavení exekuce, vysvětluje právník Adam Stawaritsch. Full Article Finance - Finanční rádce
vi KOMENTÁŘ: Jak čelit koronavirovému informačnímu přetížení By www.idnes.cz Published On :: Sun, 26 Apr 2020 22:00:00 GMT V době koronavirové pandemie nás bombardují ze všech stran nejrůznější informace. Informační přetížení je tak značné, že v mnohých lidech vyvolává strach a stres. Jak tomu čelit, komu věřit a jaké informace ignorovat, se v komentáři zamýšlí psycholog Jan Urban. Full Article Finance - Finanční rádce
vi Kouzlo pravidelných investic. Jak funguje složené úročení By www.idnes.cz Published On :: Sun, 03 May 2020 22:00:00 GMT Současná koronavirová krize otřásla finančními trhy, zlevněné akcie jsou příležitostí, jak zhodnotit investici. Jenomže kdy je správná chvíle investovat? Už se trhy odrazily ode dna, nebo přijde další propad? A jak snížit riziko špatného načasování? Nad tím se zamýšlí Michal Valentík, investiční analytik společnosti Broker Trust. Full Article Finance - Investování
vi KOMENTÁŘ: Co bude klíčové po dvou měsících s koronavirem By www.idnes.cz Published On :: Tue, 05 May 2020 22:00:00 GMT Do pracovních i osobních životů vstoupila pandemie, jakou nikdo nepamatuje. Krize, která nastává, se dotkne všech. Nad aktuální situací a tím, co nás letos čeká a co je klíčové pro rozhýbání ekonomiky, se v komentáři zamýšlí personalista Tomáš Surka. Full Article Finance - Práce a podnikání
vi Pojistit se kvůli covidu? Životní pojistky ani krytí marodění netáhnou By www.idnes.cz Published On :: Wed, 06 May 2020 22:00:00 GMT Mohlo by se zdát, že pojišťovny budou v koronavirové době zaznamenávat zvýšený zájem o sjednání životních pojistek. Zejména kvůli krytí rizika pracovní neschopnosti, což se vztahuje i na onemocnění infekcí covid-19. Praxe je ale zatím opačná. Full Article Finance - Pojištění
vi Pedagogové na home office. Jaká jsou pravidla a na co mají nárok By www.idnes.cz Published On :: Wed, 06 May 2020 22:00:00 GMT Práci z domova u zaměstnanců soukromých firem nelze jednostranně nařídit, vzniká jen na základě dohody obou stran. U pedagogických pracovníků a zaměstnanců škol však platí trochu jiná pravidla. Ve spolupráci s právníky Bořivojem Líbalem a Markem Polonim přinášíme odpovědi na nejčastější dotazy pedagogů. Full Article Finance - Finanční rádce
vi Александр Аузан: «Пандемия COVID‑19 — это плата за глобализацию» By trv-science.ru Published On :: Tue, 21 Apr 2020 05:30:08 +0000 Как меняется политическая повестка во время эпидемии? Сколько денег нужно на поддержку граждан и бизнеса? Какие активы падают, а какие, наоборот, растут? Ольга Орлова обсудила эти животрепещущие вопросы с экономистом Александром Аузаном в программе «Гамбургский счет» на Общественном телевидении России. Публикуем отредактированную расшифровку беседы. Full Article Главное Интервью Наука и общество #302 COVID-19 «Гамбургский счет» Александр Аузан Алексей Кудрин бюджет Владимир Путин глобализация Дмитрий Медведев интервью Китай коронавирус КПСС общество Ольга Орлова отношения пандемия правительство предложение промышленность социальное неравенство чума эпидемия
vi COVID-19: гонка вооружений By trv-science.ru Published On :: Tue, 05 May 2020 05:30:57 +0000 Каким образом вирус SARS-CoV-2 корректирует ошибки при транскрипции своего генома? Как эта способность связана с безуспешностью клинических испытаний ремдесивира? И можно ли считать эти испытания окончательно проваленными? На вопросы Юлии Черной отвечает Дмитрий Жарков, член-корр. РАН, директор Центра перспективных биомедицинских исследований НГУ, зав. лабораторией геномной и белковой инженерии Института химической биологии и фундаментальной медицины СО РАН. Full Article Главное Интервью Исследования #303 COVID-19 SARS-CoV-2 белок вирус SARS геном Дмитрий Жарков исследования клетка коронавирус лекарство мутации организм оценка результаты секвенирование транскрипция генома эволюция Юлия Черная
vi Deviled Avocados ~ Raw Food Recipe By rawon10.blogspot.com Published On :: Thu, 17 Mar 2016 15:13:00 +0000 Super easy, this raw food mouthgasm takes just minutes from start to delicious eating. Avocados are in season right now, too, and at great prices. I've seen them locally for as low as $.88 each. These were $1.25 at a small area grocery store. Full of the "good fat" ...... they're also filling and incredibly satisfying. Have this for an easy breakfast that will keep you fueled until mid-day, as a light lunch, or as an anytime snack. Here's the recipe. You are literally minutes away from avocado heaven. Deviled Avocadosserves 1 ~ $1.50 per servingingredients1 avocado, chopped ($1.25)1tablespoon finely chopped celery ($.05)1 tablespoon finely chopped onion ($.05)2 teaspoons mustard ($.05)2 teaspoons mayo (use something like Veganaise or make your own) ($.10)1/2 teaspoon salt1/2 teaspoon pepper1/2 teaspoon paprika Lettuce and optional tomato for servingdirectionsCoarsely chop the avocado, add the remaining ingredients, then stir gently until evenly incorporated. Store leftovers for up to a day or two in an air tight container. nutritional information: calories: 280 fat: 37 gr carbs: 15 gr protein: 3 gr Full Article
vi The naming of covids By liv.dreamwidth.org Published On :: Thu, 23 Apr 2020 11:43:16 GMT Normal life up to February or March 2020 was clearly the Before Times. (I like that better than calling it BC for 'before corona', because the latter seems slightly offensive to Christians, and Before Times is ironic but immediately transparent.)ironed_orchid pointed out that the period we're in now is clearly the Time of Isolation.So what are we going to call the post-Covid future? Maybe we'll never really be post-Covid, any more than we are post-flu or post-TB, but I am daring to hope for a time when it's not the dominant feature of everybody's lives. Anyone heard a term as memorable and fitting as Before Times and Time of Isolation? comments Full Article covid
vi CHESSBOVIK By radar.spacebar.org Published On :: Sun, 31 Mar 2019 21:49:51 -0400 Well, here we are on the eve of SIGBOVIK 2019. I'm in the midst of a long day of video-making for one of my projects, but I can get 2 for the price of 5 by posting now about four of my papers. This year I've been on a chess kick, which I think I've successfully gotten out of my system by writing all these (previous posts alluded to there being five, but one of them didn't really go anywhere and/or just became part of the other(s)). They are sort of intertwined: Survival in chessland is about how to stay alive if you are being a chesspiece to the death Color- and piece-blind chess is about, among other things, playing chess without being able to tell what the pieces are (only where they are) Elo World, a framework for benchmarking weak chess engines is about exploring the full spectrum of computer chess play CVE-2018-90017117 #KingMe is just a short joke, but based on a true story My last paper is on a different (maybe even weirder?) topic, and I'm putting together a video for it now, so I should be uploading that tomorrow some time. It's been a bit rough going, though, since I replaced my computer a few months ago and forgot that I hadn't actually set stuff up for this kind of work; I'm experiencing small problems like custom key commands aren't set, and bigger problems like audio drivers acting crazy. Looks like I will be able to finish with some vacation time, at least. Speaking of vacation, this month we also went to Belize, which was pretty cool. The highlight for me was swimming/scrambling 1km into a cave ("Actun Tunichil Muknal") to access an approximately 1000 year-old Mayan site where they performed human sacrifices; it's remarkable because almost all of the artifacts are still in situ, including a number of calcified human skeletons. Was pretty wild. I got some good running done, found some New Haven-style pizza (!?), and wrote papers about chess (?!). Full Article
vi My SIGBOVIK 2020 papers, lovingly aged one month By radar.spacebar.org Published On :: Thu, 30 Apr 2020 23:25:15 -0400 Well, April felt simultaneously short and long! I should have just posted these at the beginning of the month, my SIGBOVIK papers from 2020: Is this the longest chess game? is another needless chess paper, here trying to figure out the longest possible legal game. There are several rules that make sure games can't go on forever, and some surprisingly subtle details/ambiguity to those rules. The whole game is of course included in the paper (17697 moves), but I was far from being the largest waste of space in this year's proceedings, as one provocateur had a paper with 150 pages of citations. Mathieu made a 5-hour video of the chess game I computed for his companion blog post. What is the best game console? A market-based approach is a silly idea taken too far. It was a year in the making (mostly waiting) and didn't quite turn out the way I was expecting due to world events, but that's part of the "fun" I guess! Conditional Move For Shell Script Acceleration was another collaboration with Jim (mostly his doing, but I like to lather on an additional patina of absurdity). This month I have mostly been trying to keep sane and healthy during the shelter-in-place order. It's been harder than usual to find the energy to be creative, but I have had some spurts. I basically only leave the house to run (not going anywhere near other people). But I have been doing that pretty regularly, so between that and the prohibition against going out to bars and ice cream, I'd say I'm currently in the best I have been in ~6 years. Yesterday I claimed some course records for some Strava segments in my neighborhood! I also finished up Doom: Eternal, which was good but you pretty much already know what it's like and I'm playing Animal Crossing and haven't yet gotten sick of that. The timing for the release of that latter game couldn't have been more perfect, huh? Sometimes I need something with a little challenge, so I just started Nuclear Throne. I'm liking it but not sure if I have decided whether it's good enough to invest the time in to win (I almost always play games to the end but these randomized roguelikes demand a certain kind of potentially infinite investment. Like I never did beat the last boss in Wizard of Legend, and even in Dead Cells, which I loved, I had to settle for some modest personal criteria for "winning.") Any other recs? Could use a good Metroidvania perhaps? Full Article
vi Leo Zovic: Places, Peeps And Plagues By langnostic.inaimathi.ca Published On :: Sun, 26 Apr 2020 02:44:30 GMT (in-package #:cl-pestilence) ;; This is _not_ a simulation. It's just a game. And any resemblance ;; to any world, real or imaginary, is entirely coincidental. ;; You can copy/paste this post in its entirety into a Common Lisp ;; REPL and play around with it if you like. I'm documenting it where ;; possible, but it's just a small toy to poke at for the moment. ;; I've been thinking a lot about asymmetric multiplayer games and ;; <gestures wildly to world at large> all this. ;; I'm not actively _trying_ to model it accurately, but it's probably ;; obvious what's been consuming my thoughts lately. ;; Let's get right into this. I'll explain as I go, and tie a few things ;; together neatly at the end. I hope. Regardless, there will absolutely ;; be a repo sometime fairly soon. ;; A place can be tagged arbitrarily, and can contain occupants. ;; They also collect points. (defclass place () ((tags :initarg :tags :initform nil :accessor tags) (occupants :initarg :occupants :initform nil :accessor occupants) (points :initform 0 :accessor points))) (defun place? (thing) (eq (find-class 'place) (class-of thing))) (defun place (&key tags occupants) (make-instance 'place :tags tags :occupants occupants)) (defun gen-place () (let ((tag (pick '(:apartment-building :house :cottage :office-building :factory :store :cafe :lounge :theater)))) (place :tags (list tag)))) (defmethod details ((place place)) (format nil "====================~%~a {~{~a~}}~%~{ ~a~^~%~}~%" (first (tags place)) (rest (tags place)) (mapcar #'details (occupants place)))) (defmethod show ((place place)) (format nil "~20@a ~5a [~{~a~}]~%" (first (tags place)) (points place) (mapcar #'show (occupants place)))) ;; A peep goes places. ;; They have ;; - their daily routine (a list of places to visit) ;; - their todo (the part of their routine they still need to do; ;; they are currently at the first place in this list) ;; - their health (a number from 0 to 100) ;; - a list of plagues ;; Finally, they _also_ collect points. (defclass peep () ((routine :initarg :routine :initform (list) :accessor routine) (todo :initarg :todo :initform nil :accessor todo) (health :initarg :health :initform 100 :accessor health) (plagues :initform nil :accessor plagues) (points :initform 0 :accessor points))) (defun peep? (thing) (eq (find-class 'peep) (class-of thing))) (defun peep (&key places) (make-instance 'peep :routine places :todo places)) (defun health->string (health) (cond ((>= health 90) "@") ((>= health 80) "0") ((>= health 70) "O") ((>= health 50) "o") ((>= health 30) ":") ((>= health 1) ".") (t "☠"))) (defmethod details ((peep peep)) (format nil "[~a ~3d [~{ ~a~^ ->~}]]" (health->string (health peep)) (health peep) (mapcar (lambda (place) (first (tags place))) (routine peep)))) (defmethod show ((peep peep)) (health->string (health peep))) ;; A world is a list of places, occupied by peeps. The world we start ;; peeps in also determines their routine. (defun gen-world (&key (num-places 20) (num-peeps 100)) (let ((places (loop repeat num-places collect (gen-place)))) (loop repeat num-peeps do (let* ((routine (loop repeat 5 collect (pick places))) (peep (peep :places routine))) (push peep (occupants (first routine))))) places)) (defmethod details ((world list)) (format nil "~%~{~a~}~%" (mapcar #'details world))) (defmethod show ((world list)) (format nil "~%~{~a~}~%" (mapcar #'show world))) (defmethod all-peeps ((world list)) (loop for place in world append (all-peeps place))) (defmethod all-peeps ((place place)) (loop for o in (occupants place) if (peep? o) collect o)) ;; `tick!`ing a world means moving every peep through their routine once. ;; We `tick!` each peep, then `tick!` each place until all the peeps are ;; done. Then we reset their routines. ;; You can think of this as a turn in the game. (defmethod tick! ((world list)) (let ((peeps (all-peeps world))) (loop while peeps do (setf peeps (loop for p = (pop peeps) while p for res = (tick! p) if res collect res)) do (mapc #'tick! world) do (format t "~a" (show world))) (loop for p in (all-peeps world) do (setf (todo p) (routine p)))) world) ;; Don't worry about the details of how to `tick!` peeps or places yet. ;; Ok, here's where it gets a bit darker. Although we _did_ ;; foreshadow this in the definition of `peep`. And also in the title ;; of the accompanying blog post. ;; A plague is another living thing. ;; It has ;; - a host (a peep that it's infecting) ;; - a signature (a token representing its lineage and strain) ;; - health (how well it's doing inside its host) ;; - virulence (how likely it is to spread to another host) ;; - efficiency (how efficient they are at feeding) ;; - reproduce (a function that returns a new instance to push into a new host) ;; - and a strategy (a function, possibly closed, that takes ;; itself and its host peep and mutates) ;; Plagues do not collect points; they score differently. (defclass plague () ((host :initarg :host :initform nil :accessor host) (signature :initarg :host :initform "SIG" :accessor signature) (health :initarg :health :initform 10 :accessor health) (virulence :initarg :virulence :initform 10 :accessor virulence) (efficiency :initarg :efficiency :initform 0.2 :accessor efficiency) (reproduce :initarg :reproduce :initform #'plague :reader reproduce) (strategy :initarg :strategy :initform (lambda (plague peep) (feed! plague peep 30)) :reader strategy))) (defun plague () (make-instance 'plague)) ;; Plagues can `feed!` on peeps or plagues. To feed means to ;; take away some of the targets' health and add some to your own. (defmethod feed! ((self plague) (peep peep) (amount integer)) (decf (health peep) amount) (incf (health self) (* (efficiency self) amount))) (defmethod feed! ((self plague) (plague plague) (amount integer)) (decf (health plague) amount) (incf (health self) (* (efficiency self) amount))) ;; Plagues can also `infect!` peeps by `reproduce`ing into them. (defmethod infect! ((self plague) (peep peep)) (unless (infected-by? self peep) (let ((child (funcall (reproduce self)))) (setf (host child) peep) (push child (plagues peep))))) (defmethod infected-by? ((self plague) (peep peep)) (member (signature self) (mapcar #'signature (plagues peep)) :test #'string=)) ;; `tick!`ing a plague causes it to weaken and also carry out its strategy. ;; This models the background effect of the immune system of its host. (defmethod tick! ((plague plague)) (decf (health plague) 1) (funcall (strategy plague) plague (host plague)) plague) ;; `tick!`ing a peep means moving them to their next place, and also ;; `tick!`ing any plagues they may have contracted. Also, peeps are ;; resilient; they heal a small amount each time they tick (to a ;; maximum of 100). ;; If a peep dies, they no longer move. And their plagues probably ;; won't do well. Peeps like to go places. They score points for each ;; place they go to. (defun dead? (thing) (>= 0 (health thing))) (defmethod tick! ((peep peep)) (unless (dead? peep) (let ((location (pop (todo peep)))) (incf (points peep)) (setf (occupants location) (remove peep (occupants location))) (push peep (occupants (or (first (todo peep)) (first (routine peep))))) (setf (health peep) (min 100 (+ 5 (health peep)))) (mapc #'tick! (plagues peep)) (unless (empty? (todo peep)) peep)))) ;; `tick!`ing a place causes it to score for each `peep` present. And it causes ;; any `plague`s on present `peep`s to try to `infect!` other nearby peeps. ;; Places also lose points for each dead peep they contain. (defmethod tick! ((place place)) (incf (points place) (length (occupants place))) (loop for peep in (all-peeps place) if (dead? peep) do (decf (points place) 2) else do (loop for plague in (plagues peep) do (loop for victim in (remove peep (all-peeps place)) if (>= (virulence plague) (random 100)) do (infect! plague victim)))) place) ;; So, now we've got the basic framework of the game in place. There are three ;; players in this game: places, peeps and plagues. ;; A plague player automatically loses if they are completely cured, and ;; automatically wins if they manage to kill everyone. That's fairly simple. ;; A place player wins if they manage to cure the plague. They automatically ;; lose if all the peeps die. Also, fairly simple. ;; A peep player is trying to survive. If they manage to make it some numer ;; of turns before dying, then we have to score the game instead of declaring ;; an outright winner regardless of game state. ;; A peep player's score is the total number of points plus remaining health ;; on all of their peeps, minus the number of active plagues on said peeps. ;; A plague player's score is the total number of health of their plagues, ;; with a multiplier equal to the number of places fully infected by ;; their plague. ;; A place player's score is the total number of points in their places. (defun score (world) (list :peep (let ((score 0)) (loop for p in (all-peeps world) unless (dead? p) do (incf score (+ (health p) (points p))) do (decf score (length (plagues p)))) score) :place (let ((score 0)) (loop for p in world do (incf score (points p))) score) :plague (let ((score 0)) (loop for victim in (all-peeps world) do (loop for p in (plaguesvictim) do (incf score (max 0 (health p))))) (loop for target in world if (every (lambda (victim) (not (empty? (plagues victim)))) (all-peeps target)) do (setf score (* 2 score))) score))) ;; I think that's all I've got for now. This is definitely an idea I want ;; to run with. At the moment, it's just a tiny, in-repl proof-of-concept, ;; and not particularly fun, but I'm going to try developing it further with an ;; eye towards turning it into an actual web game playable from this site. ;; As always, I'll let you know how it goes. (defun pick (lst) (nth (random (length lst)) lst)) (defun empty? (lst) (null lst)) Full Article
vi Timofei Shatrov: Previewing images in and out of SLIME REPL By readevalprint.tumblr.com Published On :: Sun, 03 May 2020 10:40:15 GMT As any Common Lisp coder knows, a REPL is an incredibly useful tool. It can be used not just for development, but for running all sorts of tasks. Personally, I don't bother making my Lisp tools into executable scripts and just run them directly from SLIME. As such, any operation that requires leaving the REPL is quite inconvenient. For me, one such operation was viewing image files, for example in conjunction with my match-client:match tool. So lately I've been researching various methods to incorporate this functionality into the normal REPL workflow. Below, I present 3 methods that can be used to achieve this. Open in external program This one's easy. When you want to view a file, launch an external process with your favorite image viewer. On Windows a shell command consisting of the image filename would launch the associated application, on Linux it's necessary to provide the name of the image viewer. (defvar *image-app* nil) ;; set it to '("eog") or something (defun view-file-native (file) (let ((ns (uiop:native-namestring file))) (uiop:launch-program (if *image-app* (append *image-app* (list ns)) (uiop:escape-shell-token ns))))) Note that uiop:launch-program is used instead of uiop:run-program. The difference is that launch- is non-blocking - you can continue to work in your REPL while the image is displayed, whereas run- will not return until you close the image viewer. Also note that when the first argument to run/launch-program is a string, it is not escaped, so I have to do it manually. And if the first argument is a list, it must be a program and a list of its arguments, so merely using (list ns) wouldn’t work on Windows. Inline image in REPL The disadvantage of the previous method is that the external program might steal focus, appear on top of your REPL and disrupt your workflow. And it's well known that Emacs can do everything, including viewing images, so why not use that? In fact, SLIME has a plugin specifically for displaying images in REPL, slime-media. However it’s difficult to find any information on how to use it. Eventually I figured out that SWANK (SLIME’s CL backend) needs to send an event :write-image with appropriate arguments and slime-media's handler will display it right in the REPL. The easiest way is to just send the file path. The second argument is the resulting image's string value. If you copy-paste (sorry, "kill-yank") it in the repl, it would act just like if you typed this string. (swank::send-to-emacs '(:write-image "/path/to/test.png" "test")) You can even send raw image data using this method. I don't have anything on hand to generate raw image data so here's some code that reads from a file, converts it to a base64 string and sends it over SWANK. (with-open-file (in "/path/to/test.png" :direction :input :element-type '(unsigned-byte 8)) (let* ((arr (make-array (file-length in) :element-type '(unsigned-byte 8))) (b64 (progn (read-sequence arr in) (cl-base64:usb8-array-to-base64-string arr)))) (swank::send-to-emacs `(:write-image ((:data ,b64 :type swank-io-package::png)) "12345")))) Note that the first argument to :write-image must be a list with a single element, which is itself a plist containing :data and :type keys. :data must be a base64-encoded raw image data. :type must be a symbol in swank-io-package. It’s not exactly convenient, so if you’re going to use this functionality a helper function/macro might be necessary. Image in a SLIME popup buffer Inline images are not always convenient. They can’t be resized, and will take up as much space as is necessary to display them. Meanwhile EMACS itself has a built-in image viewer (image-mode) which can fit images to width or height of a buffer. And SLIME has a concept of a “popup buffer” which is for example used by macroexpander (C-c C-m) to display the result of a macro expansion in a separate window. Interestingly, slime-media.el defines an event :popup-buffer but it seems impossible to trigger it from SWANK. It is however a useful code reference for how to create the popup buffer in ELisp. This time we won’t bother with “events” and just straight up execute some ELisp code using swank::eval-in-emacs. However by default, this feature is disabled on Emacs-side, so you’ll have to set Emacs variable slime-enable-evaluate-in-emacs to t in order for this method to work. Also Emacs must be compiled with ImageMagick for the resizing functionality to work. Anyway, the code to view file in the popup buffer looks like this: (defun view-file-slime (file &key (bufname "*image-viewer*")) (let ((ns (namestring file))) (swank::eval-in-emacs `(progn (slime-with-popup-buffer (,bufname :connection t :package t) (insert-image (create-image ,ns)) (image-mode) (setf buffer-file-name ,ns) (not-modified) (image-toggle-display-image)) ;; try to resize the image after the buffer is displayed (with-current-buffer ,bufname (image-toggle-display-image)))))) )) Arriving to this solution has required reading image-mode’s source code to understand what exactly makes image-mode behave just like if the image file was opened in Emacs via C-x C-f. First off, image-mode can be a major and a minor mode - and the minor mode is not nearly as useful. slime-with-popup-buffer has a :mode keyword argument but it would cause image-mode to be set before the image is inserted, and it will be a minor mode in this case! Therefore (image-mode) must be called after insert-image. Next, the buffer must satisfy several conditions in order to get image data from the filename and not from the buffer itself. Technically it shouldn’t be necessary, but I couldn’t get auto resizing to work when data-p is true. So I set buffer-file-name to image’s filename and set not-modified flag on. Next, image-toggle-display-image is called to possibly resize the image according to image-mode settings. It's called outside of slime-with-popup-buffer for the following reason: the buffer might not yet be visible and have any specific dimensions assigned to it, and therefore resizing will do nothing. Here’s an example of how calling this function looks in Emacs. The position of the popup buffer depends on whether the original Emacs window is wide enough or not. I think it looks better when it’s divided vertically. Use M-x image-transform-fit-to-height or M-x image-transform-fit-to-width to set up the auto-resizing method (it gets remembered for future images). Unfortunately there’s no way to fit both height and width, at least with vanilla Emacs. I prefer fit-to-width because in case the image is too tall, it is possible to scroll the image vertically with M-PgDn and M-PgUp from the other buffer. Unlike other image-mode buffers, this buffer supports a shortcut q to close itself, as well as various SLIME shortcuts, for example C-c C-z to return to the REPL. That's it for now, hope you enjoyed this overview and if you happen to know a better way to display images in Emacs, I would be interested to hear about it. Full Article
vi Leo Zovic: Zippers And Clj By langnostic.inaimathi.ca Published On :: Fri, 08 May 2020 18:49:52 GMT 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 ClojureSeriously.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-zipperThe 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 HousekeepingThat 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. 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.↩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.↩"First", not "only". You can probably make educated guesses about which other ones I think you should learn.↩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.↩ Full Article
vi service By www.jessamyn.com Published On :: Tue, 27 Aug 2019 19:03:59 +0000 It was all I could do, when I was reading the Futel Party Line zine, to not just call up their operator and say “I want a free pay phone. In Randolph.” Because, hey, that would be cool. But realistically, someone would have to manage that project. And, if I am being honest, I am […] Full Article Uncategorized jessamyn me summer virgomol
vi Virgo Month of Leisure Success? By www.jessamyn.com Published On :: Sun, 06 Oct 2019 01:51:22 +0000 So hey I think I managed to break a leisure record this Virgo Month of Leisure! The bad news is that’s because I’ve been feeling borderline punk for a few months now. I always thought of myself as someone in pretty good shape, but every so often I just come down with… sinus nonsense, or […] Full Article Uncategorized jessamyn me virgo virgomol
vi Mr. Cupps x Uncrate Vintage Keychain Collection By uncrate.com Published On :: Fri, 08 May 2020 13:00:49 -0500 Full Article Everyday Carry
vi Triton DeepView 24-Seat Submarine By uncrate.com Published On :: Fri, 08 May 2020 15:30:00 -0500 Full Article Transportation
vi 00s movies - trivia 10 By fun-movie-trivia.blogspot.com Published On :: Sun, 16 Sep 2012 01:34:00 +0000 Full Article 00s Movies Action Bollywood Crime
vi 80s movies - trivia 9 By fun-movie-trivia.blogspot.com Published On :: Mon, 08 Jul 2013 12:12:00 +0000 Full Article 80s Movies Adventure Comedy Sci-Fi
vi Coronavirus policy By oto-usa.org Published On :: Thu, 12 Mar 2020 03:29:46 +0000 To all local bodies within U.S. Grand Lodge: For all official gatherings, please observe all guidance issued by the CDC, and by state or local health authorities, pertaining to sanitation, hygiene, and event attendance related to the new Coronavirus. Full Article Policy
vi Support your local body during the COVID-19 pandemic By oto-usa.org Published On :: Fri, 13 Mar 2020 00:18:48 +0000 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 Full Article Policy
vi the video game collector By www.marriedtothesea.com Published On :: Thu, 19 Sep 2019 04:00:00 EDT Today on Married To The Sea: the video game collectorThe Worst Things For Sale is Drew's blog. It updates every day. Subscribe to the Worst Things For Sale RSS! Full Article autogen_comic
vi the cabin review By www.marriedtothesea.com Published On :: Tue, 29 Oct 2019 04:00:00 EDT Today on Married To The Sea: the cabin reviewThe Worst Things For Sale is Drew's blog. It updates every day. Subscribe to the Worst Things For Sale RSS! Full Article autogen_comic
vi visa mastercard By www.marriedtothesea.com Published On :: Sun, 29 Dec 2019 04:00:00 EST Today on Married To The Sea: visa mastercardThe Worst Things For Sale is Drew's blog. It updates every day. Subscribe to the Worst Things For Sale RSS! Full Article autogen_comic
vi a toast david By www.marriedtothesea.com Published On :: Thu, 09 Jan 2020 04:00:00 EST Today on Married To The Sea: a toast davidThe Worst Things For Sale is Drew's blog. It updates every day. Subscribe to the Worst Things For Sale RSS! Full Article autogen_comic
vi SAN HOLO – THE FUTURE (FEAT. JAMES VINCENT MCMORROW) By feedproxy.google.com Published On :: Tue, 12 Sep 2017 14:05:18 +0000 musicisart magazine SAN HOLO – THE FUTURE (FEAT. JAMES VINCENT MCMORROW) Producer San Holo, AKA Sander van Dijck, creates ballad like electronic music that brings a listener on a journey full of emotion. San Holo is most known for his hit single ‘Light‘, which reached over 151 thousand likes on Soundcloud. SAN HOLO – THE LIGHT || San Holo’s latest single ‘The Future‘ features the smooth Irish vocals of […] The post SAN HOLO – THE FUTURE (FEAT. JAMES VINCENT MCMORROW) appeared first on musicisart magazine. Full Article 2017 Best Of Electronic Male Artists James Vincent McMorrow San Holo The Future
vi 10 Sure-fire Viral Marketing Tips That Will Get You Noticed By feedproxy.google.com Published On :: Tue, 08 Aug 2017 12:14:12 +0000 Viral marketing is different from conventional marketing in that it contains elements that are exceedingly attractive to the audience and compel those exposed to it ... The post 10 Sure-fire Viral Marketing Tips That Will Get You Noticed appeared first on Saleschase Stories. Full Article Marketing viral marketing
vi Top 6 Environmental B2B Marketing Ideas for Small Businesses By feedproxy.google.com Published On :: Thu, 17 Aug 2017 13:17:23 +0000 Today, most B2B clients are aware of environmental issues, and some of them actively look for environmentally friendly products and services. This trend is going ... The post Top 6 Environmental B2B Marketing Ideas for Small Businesses appeared first on Saleschase Stories. Full Article Marketing green marketing
vi [tasty review] United Tastes of America by Gabrielle Langholtz, Jenny Bowers, and DL Acken By jamarattigan.com Published On :: Tue, 21 Apr 2020 10:00:22 +0000 Feeling a little peckish? What’s your pleasure? If you’re craving something savory, perhaps we should zip on over to Illinois for some deep dish pizza and pierogies. Something a little more substantial? Well, we could feast on chicken fried steak in Oklahoma and bison burgers in Wyoming, before topping everything off with a platter … Continue reading [tasty review] United Tastes of America by Gabrielle Langholtz, Jenny Bowers, and DL Acken Full Article book reviews (all genres) cookbooks children's cookbooks children's nonfiction recipes
vi [review + recipe] On Wings of Words by Jennifer Berne and Becca Stadtlander By jamarattigan.com Published On :: Fri, 01 May 2020 10:00:06 +0000 Each bird, bee, blossom, butterfly — was a source of joy and wonder for young Emily Dickinson. In this beautiful new picture book biography, aptly illustrated with a butterfly motif, we witness her singular metamorphosis from a keenly observant child into one of the most original and innovative poets in American literature. On Wings … Continue reading [review + recipe] On Wings of Words by Jennifer Berne and Becca Stadtlander Full Article book reviews (all genres) poetry friday baking children's literature children's poetry coconut cake emily dickinson historic recipes illustration picture book biographies picture books
vi Mr. Gonzi's victory; was the contest necessary? By maltaobserver.blogspot.com Published On :: Sun, 26 Feb 2012 10:25:00 +0000 PM in Marsascala during his tour for supportIn todays The Times one can read that PM Lawrence Gonzi gained 96,5 per cent of the vote in the PN leadership contest. It gives The Observer a flashback from the sixties when Leonid Brezhnev gained 105 per cent of the vote in former Soviet Union. That is what can be called a good and fair election! To avoid any misunderstanding; of course yesterday's election can not be regarded otherwise than fair. But was it necessary? Even if Mr. Gonzi felt that he needed to have his leadership confirmed, the outcome of the vote is still not a true and fair view on the situation in The Nationalist Party since Mr. Gonzi was the only candidate. Say for instance that Mr. Debono had challenged Mr. Gonzi regarding the leadership (he has challenged him about almost everything else). Of course Mr. Gonzi would not have gained 96,5 per cent of the vote. That is as certain as it is that Mr. Debone would have lost such a debacle. Mr. Debono has previously tried very hard to commit political suicide and if he had challenged Mr. Gonzi regarding the leadership he would surely have succeeded. One can wonder if all this really was necessary. Mr. Gonzi is the undisputed leader of the Nationalist Party no matter what Mr. Debono tries to do. Even if there are a number of opponents to Mr. Gonzi in the party they are not as stupid as to challenge Mr. Gonzo in this political situation. They would, in that case, have gone down together with Mr. Debono. Full Article