as

Orange Banana Breakfast Salad: Raw Food Recipe




Orange Banana Breakfast Salad
serves 2 ~ $2.25 per serving


This salad is so simple and is delicious and super healthy for breakfast. It's the very beginning of citrus season so oranges are exceptionally tasty right now as well. 


ingedients
salad
  • 1 head romaine, chopped ($1.70)
  • 1 orange, peeled and sectioned ($.50)
  • 1 banana, sliced ($.30)
  • 2 tablespoons sliced onion

dressing
  • 2 oranges, peeled and sectioned ($1.00)
  • 2 tablespoons balsamic vinegar ($.20)
  • 2 tablespoons maple syrup (or two droppers stevia) ($.40)
  • 3 tablespoons tahini ($.40)
  • 1 teaspoon onion powder
  • 1 teaspoon garlic powder
  • 1 teaspoon salt
  • 1/2 teaspoon pepper
  • crushed red pepper flakes for the top

directions
  1. Prepare the salad ingredients.
  2. Place all the dressing ingredients except the crushed red pepper flakes into a blender and puree until very smooth. 
  3. Assemble the salad ingredients on plates or in bowls. Add the orange sections, banana slices, and onion to the top.
  4. Pour salad dressing over and add a sprinkle of black pepper or crushed red pepper flakes. I added both.

nutritional information:       calories: 256      fat: 15 gr      carbs: 33 gr      protein: 6 gr

    Did you ever run across something and fall in love for no apparent reason (this could describe my past dating life ... but I digress). This is a new antique shop find! I love shopping in antique shops for dishes and kitchen gadgets, but this fishy guy won me over!






    xoxo




    as

    Buckwheat Coco Puffs ~ Raw Food Breakfast Recipe


     
     
     
    4 servings ~ $.73 per serving

     
    I love soaked and dehydrated buckwheat groats. They get crisp and puffy and light, like the puffed rice  remember in chocolate Crunch bars. Maybe that's why I always associate them with chocolate! Anyway, this makes a great and fun breakfast that will give you energy and keep you full all morning.

    ingredients
    • 1 cup buckwheat groats, soaked ($.75)
    • 2 ripe bananas ($.30)
    • 3 tbsp coco or cacao powder ($.15)
    • 1/2 tsp vanilla ($.10)
    • 1/2 tsp salt1/2 cup almond milk ($.40)
     
     
     
     
     
     
    directions
    1. Rinse one cup buckwheat groats and then soak in about two cups water for 5-6 hours or overnight. Rinse the buckwheat groats well. There will be a gooey or gelatinous coating on the groats and and they will need to be rinsed several times. 
    2. Once rinsed, drain well and pat with a towel to remove most of the water.In a food processor with the S blade, add the banana, cocoa or cacao powder, vanilla and salt. 
    3. Process for a minute or two until very creamy. 
    4. Fold into the buckwheat groats. 
    5. Then spread the mixture in clusters about 1/4 inch thick on the teflex or plastic sheets in a dehydrator. Dehydrate for about 4 hours, then turn over and dehydrate for another 2-3 hours, until the clusters are dry but pliable. 
    6. They don't seem to get brittle dry, but stay a little bit pliable. 
    7. Break up into smaller clumps. These can then be stored in an airtight container at room temperature for 3-4 days. Serve with 1/2 cup almond milk. 





    nutritional information:      calories: 333       fat: 10 gr      carbs: 50 gr      protein: 7 gr
     
     




    as

    Raw Zucchini Chips: Super Easy Raw Food Recipe


    Zucchini chips are an awesome/tasty alternative to convention chips, which have few nutrients and are laden with fat and salt. Not only that, but before I was raw, I always overlooked zucchini as a "buy and make it in bulk" vegetable. But, when zucchini is plentiful, this is the perfect recipe to use them up.

     

    Zucchini season is best in mid summer, because it's a warm weather plant. Even so, zucchini can be found at most groceries through most of the year. Look for firm and glossy fruit with no marks or soft spots.


    Simply wash the zucchini and then slice thinly. A mandolin would be the best choice of tool, but I did just fine with a chef's knife. If you want your zucchini chips to have lighter edges, then peel then first then slice.



    Put the sliced zucchini in a lidded container and add the marinade. Shake well to coat.




    Spread out in a single layer on lined dehydrator sheets. Dehydrate at around 145 degrees Fahrenheit for about an hour, then reduce the temperature to 120 and dehydrate for another 12 hours or so. Overnight is a good way to time it. They're done when all the moisture has been removed. They should be pretty crispy and only a little chewy. The full recipe is below.


    Raw Zucchini Chips
    one large batch ~ $7.10


    ingredients
    • 8 cups thinly sliced zucchini rounds ($5.00)
    • 1/2 cup agave ($1.00)
    • 1/4 cup balsamic vinegar ($.40)
    • 1/4 olive oil ($.40)
    • 2 tablespoons dried oregano ($.05)
    • 2 tablespoons dried basil ($.05)
    • 2 tablespoons dried parsley ($.05)
    • 1 tablespoon garlic powder ($.05)
    • 1 tablespoon onion powder ($.05)
    • 1 teaspoon salt (or more to taste)
    • 1 teaspoon black pepper
    • 1 teaspoon crushed red pepper flakes ($.05) 
    directions
    • Slice the zucchini, pat dry if needed, and place in a large, lidded container. 
    • In a small bowl, whisk together the remaining ingredients.
    • Pour over the sliced zucchini, cover, and shake (or just stir) until zucchini is evenly coated. 
    • Spread the zucchini on lined dehydrator sheets and dry at 145 degrees for about an hour and then at 120 for about another 12 hours or overnight (dehydrating time can vary), until crispy. 
    • Store leftovers in an airtight container and pop into dehydrator for a few minutes to crisp them up again if necessary. 







    as

    Possibly the last days of normal life

    Good things: jack and I went to see the Troy exhibition at the British Museum. With a bit of time and energy left after that, we also visited the Aztec room. And then we went out for pancakes at my favourite spot. And it was generally lovely.

    Then we had a go at some tabletop roleplaying, with OSOs and their younger two. jack had put together a cut-down system, roughly D&D based but a lot lot lot less complex and fiddly. And a delightful little one-shot story about saving a baby giant turtle from a suspicious sea captain, set in an archipelago of islands on the back of giant turtles. jack really encouraged us to develop fun characters, and we're all excited to play more in this setting.

    I have plans for an exciting date with ghoti_mhic_uait next week, and I think after that no more travel for fun. Honestly I'm not sure about this week either. Maybe it isn't morally or safety-wise sensible to visit a huge tourist spot in the capital. I'm expecting several months of somewhere between boring and terrifying, and I'm not really impatient for that to start.

    ghoti_mhic_uait bought me and jack an annual membership of the British Museum for our birthdays. And it was a really good time to visit as members; the Troy exhibition, in its last weekend, was completely sold out for non-members, plus it was lovely to be able to go to the museum semi-spontaneously rather than having to plan for a particular time and buy tickets. I probably wouldn't have made a special trip or paid lots of money to see Troy, but when it was low pressure it was worthwhile.

    Basically what they've done is presented objects that represent the myth as told in Classical literature, so lots of vases and friezes and so on, arranged to recount the story of the fall of Troy. And then they have a gallery of Renaissance responses to the Trojan myth, and then a gallery of modern (ish) responses. Nice curation, lots of ideas about how the myth was interpreted through the culture of the time. And a marvellous collection of objects, the BM has really a lot of good blackfigure vases and beautiful neo-Classical objects. There is also quite a lot of commentary about how war is actually bad rather than epic, and thoughtful stuff about attitudes to women, and it's 2020 so we're no longer doing the ridiculous 'no homo' thing about Achilles and Patroclus.

    My favourites were this gorgeous little bowl with a really sweet picture of Eris:


    And a stunning pre-Raphaelite portrait of Clytemnestra immediately post-murder, which I couldn't photograph due to the lighting, and can't find an image of online.

    Then we went to have tea in the special members' room. The main advantage is that it's quieter than the main tea-room, as it isn't in a huge echoing hall. We reckoned we had enough time and energy left to look at one more thing, and Jack was excited to see the famous double-headed turquoise snake from the meso-American gallery. I fell slightly in love with this grumpy woman who shares the room with it:


    On the way we wandered past a staircase with some cool mosaics, the Wellcome gallery with has a Moai that they're in the process of returning to the Rapa Nui peoples they stole it from, and the gallery of indigenous North American stuff, much of which is again, stolen. Also the Enlightenment room, which I'm interested to go back to with more time, partly because it contains more stuff that the British Museum actually has a right to than a lot of the galleries!

    Dinner was pancakes and mango lambic beer at My Old Dutch in Holborn, which has been a tradition since I visited the BM with my friend MK and his then two-year-old.

    comments




    as

    Pleasure

    I am getting so angry about trying to deal with a viral pandemic by stopping people from enjoying themselves.

    I understand that people are scared and trying to claw back some control. I understand that some people are excluded from even infection-safe forms of fun, because of existing disabilities or because they have extra work at the moment rather than extra free time or because of poverty. But enjoying yourself isn't an infection risk and it isn't morally bad.

    If I choose to take my exercise by heading to an attractive area with nature and nice views, I'm not doing anyone any harm. There's no benefit to punishing myself by walking alongside a busy road through a suburban wasteland. If a family have fun together, have a kickabout or play fetch with their pets, that's at least as good and probably better than joylessly frogmarching the children and dog round the block.

    And even in normal times, I hate the assumption that exercise has to be grim and miserable to count as exercise. It's still exercise if you move your body in ways that bring you joy, if you play, if you take your exercise somewhere that uplifts you. I got annoyed with someone (who I basically quite like) on Twitter mocking people who never normally take exercise chafing at only being allowed to go out for exercise once a day. But plenty of people are deprived of movement by the pandemic even if they don't normally put on special clothes and gear and 'go for' a walk or run. Lots of us exercise by walking or cycling to do our errands or to see friends, or we exercise by dancing or climbing or whatever, and those things are still bloody exercise.

    If I go to the shop or make an online order for provisions, in order to be able to, you know, eat for the next however many weeks, I'm not doing any harm by buying treats as well as the most virtuously dull possible staples. Nobody's risk of illness is increased if I also buy something that curtain-twitching busybodies consider "exotic", or alcohol, or, shock horror, something containing ~sugar~.

    If I stop for a minute during my necessary excursions to admire the cherry blossom, I'm not doing any harm. I'm not increasing infection risk, I'm not suddenly invalidating the necessity of my trip. If I take a snack or a drink with me to enjoy outdoors instead of shut up in my home, so what?

    And even worse than people trying to police each other for having fun during a pandemic, is the actual literal police harassing or even arresting people for perfectly innocent, low risk activities that happen to be considered too enjoyable. legionseagle, a real life lawyer, says Everything currently coming back from the policing front has got me more scared than the virus itself, and I was pretty fucking terrified about the virus.. I'm scared that people are going to be intimidated and criminalized, and we all know who is preferentially targeted by the police, but I'm also scared that the police are a huge vector of infection. Which is worse: me taking a walk in a pleasant park while staying 2m away from everybody else, or the police, who regularly interact with all kinds of different people in the course of their jobs, getting into my social distancing space in order to reprimand me for being somewhere pretty rather than somewhere boring?

    Anyway, just let people harmlessly enjoy themselves, FFS.

    comments




    as

    Tasks Completed This Weekend

    Laundry. Built deer protection for my garden. Purchased materials for deer protection for my apple trees. Dishes. Mended one sweater and one pair of jeans. Reinforced neckline on another sweater in an attempt to have it fit better. Culled my wardrobe. Verified that garden deer protection withstands wind warning type winds.




    as

    Washer Collage

    Hi! I've been stuck inside for weeks, probably just like you. I go out running every day, dodging people, but otherwise it's lockdown-mode. Our washing machine promptly broke, so I had to replace that thing. It became a project, because (aside from the difficult but mostly uninteresting process of getting it onto the second floor) one of the things that contributed to the last one's failure was its not-very-stable footing, and I wanted to do this one well. The thing resides inside a nice (but probably unnecessary) tile basin, which poses a few problems: It would make it impossible to get to the bottom doors on the machine, and it makes it impossible to adjust the feet in situ for leveling purposes, and the basin is not at all flat. The weirdly-shaped surface meant that my CAD prospectus was not very useful, which is annoying because I like to measure like 200 times in CAD and then cut once.


    Figure 1. Click to zoom


    The other problem is that I didn't have the right wood for this, and although Home Depot claimed to be able to do a same-day shipment, they gave me the runaround for over a week (I still don't have it). It's understandable, but our piles of laundry were getting a bit dire, so I just had to make do with what I had. In figure 1(a) I sawed through these 6x6 timbers with a 3.5" saw, which took like an hour. Then I used the also-too-small table saw to mill that into the smaller size I actually wanted (figure 1(b)). Then, I painstakingly test fit the logs in the basin, and sawed/planed/chiseled/sanded them until they were sitting stably on that curved surface without wobble. This was a real pain. The best advice I have for doing this was to get the tile sopping wet, then place the wood there for a moment, and then see where the high spots are based on where the wood is wet. (It would work better with some dye or something, but I didn't want to ruin the tile, ugh.) At that point we have some logs that were nice and sturdy, but not necessarily level gravity-wise. My solution here was router-out cups for each of the washer's feet, which I could set the depth of so that the washer would be level without any adjustment. (This also has the nice advantage that the washer can't jump around more than a few millimeters!) This was accomplished by using a laser level for an accurate level, and then putting some objects of fixed height (here the feet from the old washer, which will be disassembled for its more exciting pieces) into each cup, and iteratively routing the depth until they all touch the laser line exactly (Figure 1(c)). All that work paid off, though, because when we finally dropped the washer into place, it was as level as a spirit level can possibly indicate (Figure 1(d)). No pictures of the install here because this is like in my bathroom and that seems weirdly intimate to put on the internet for some reason.

    SIGBOVIK is tomorrow, but this year there is no in-person event due to the shelter-in-place order! The proceedings is shaping up nicely though, and there is some "podcast" expected. I have a few silly papers in there, but I'll save those for tomorrow. No talks from me this year; the whole situation in the world has been sort of draining my creative energy, but hopefully I will start feeling good again soon.




    as

    Can I rise to the occasion?

    We started going to a personal trainer at the end of the summer, and it’s been really good–building strength, getting healthier. But the one thing that she badgered me about was bread. “You have to stop eating bread! Gluten is terrible for you. It’s what’s making your knees hurt. It’s causing inflammation in your finger […]




    as

    A slice of the past, preserved for the future

    Did one of the most difficult things I’ve ever done: I cut up my mother’s wedding dress. Now, Mom always *loathed* her wedding dress. Her mother talked her into a waltz length, ballerina-y dress, and she never enjoyed looking at her wedding pictures. She put it in her cedar chest and never looked at it. […]




    as

    Today’s comic was selfish




    as

    Wimpie Nortje: Database migration libraries for PostgreSQL.

    It may be tempting at the start of a new project to create the first database tables manually, or write SQL scripts that you run manually, especially when you first have to spend a significant amount of time on sifting through all the migration libraries and then some more to get it working properly.

    Going through this process did slow me down at the start of the project but I was determined to use a migration tool because hunting inexplicable bugs that only happen in production just to find out there is a definition mismatch between the production and development databases is not fun. Using such a tool also motivates you to write both the setup and teardown steps for each table while the current design is still fresh in your mind.

    At first I considered a standalone migration tool because I expect them to be very good at that single task. However, learning the idiosyncrasies of a new tool and trying to make it fit seamlessly into my development workflow seemed like more trouble than it is worth.

    I decided to stick with a Common Lisp library and found the following seven that work with PostgreSQL and/or Postmodern:

    I quickly discounted Crane and Mito because they are ORM (Object Relational Mapper) libraries which are way more complex than a dedicated migration library. Development on Crane have stalled some time ago and I don't feel it is mature enough for frictionless use yet. Mito declares itself as being in Alpha state; also not mature enough yet.

    I only stumbled onto cl-mgr and Orizuru-orm long after making my decision so I did not investigate them seriously. Orizuru-orm is in any case an ORM which I would have discounted because it is too complex for my needs. CL-mgr looks simple, which is a good thing. It is based on cl-dbi which makes it a good candidate if you foresee switching databases but even if I discovered it sooner I would have discounted it for the same reason as CL-migrations.

    CL-migrations looks very promising. It is a simple library focusing only on migrations. It uses clsql to interface with the database which bothered me because I already committed to using Postmodern and I try to avoid adding a lot of unused code to my projects. The positive side is that it interfaces to many different databases so it is a good candidate if you are not committed to using Postmodern. It is also a stable code base with no outstanding bug reports.

    The two projects I focused on was Postmodern-passenger-pigeon and Database-migrations because they both use Postmodern for a database interface.

    Postmodern-passenger-pigeon was in active development at the time and it seemed safer to use than Database-migrations because it can do dry runs, which is a very nice feature when you are upgrading your production database and face the possibility of losing data when things go awry. Unfortunately I could not get it working within a reasonable amount of time.

    I finally settled on Database-migrations. It is a small code base, focused on one task, it is mature and it uses Postmodern so it does not pull in a whole new database interface into my project. There are however some less positive issues.

    The first issue is a hindrance during development. Every time the migrations ASDF system (or the file containing it, as ASDF prefers that all systems be defined in a single file) is recompiled it adds all the defined migrations to the migrations list. Though each one will only be applied once to the DB it is still bothersome. One can then clear the list with (setf database-migrations::*migrations* nil) but then only newly modified migration files will be added. The solution then is to touch the .asd file after clearing the migrations list.

    The second negative point is quite dangerous. The downgrade function takes a target version as parameter, with a default target of 0. This means that if you execute downgrade without specifying a target version you delete your whole database.

    I am currently using Database-migrations and it works well for me. If for some reason I need to switch I will use cl-migrations.

    Using Database-migrations

    To address the danger of unintentionally deleting my database I created a wrapper function that does both upgrade and downgrade, and it requires a target version number.

    Another practical issue I discovered is that upgrades and downgrades happen in the same order as they are defined in the migration file. If you create two tables in a single file where table 2 depends on table 1 then you can not revert / downgrade because Database-migrations will attempt to delete table 1 before table 2. The solution here is to use the def-queries-migration macro (instead of def-query-migration) which defines multiple queries simultaneously . If you get overwhelmed by a single definition that defines multiple tables the other option is to stick with one migration definition per file.




    as

    Nicolas Hafner: Creative Block - May Kandria Update


    It's a new month, and that usually means I'm supposed to write a monthly update on the progress with Kandria. Thinking about that though made me feel very depressed because I realised that I hadn't really done anything at all for the game, all of April.

    I can blame however much I want of that on the quarantine and university stress, or whatever else, but it won't change the fact that there has not been much progress on any front. While I have been slacking a lot, it's not like I haven't been working at all - plenty of time has gone into Courier, after all.

    When I had this realisation yesterday, I tried my best to push myself to work on the game any way I could, but I failed to find anything that I could actually convince myself to do. That isn't to say that there aren't things to do; god forbid there's a tonne of things! Tuning combat, drawing animations, writing the UI, fixing dialogue, starting on enemy AI, optimising performance - just to name a few. And yet, despite the breadth and depth of things to do, there was absolutely nothing that looked appealing to me.

    This kind of feeling is nothing new to me. It's a creative block, and happens more often that I'd like to admit. It's also why I often don't like to start long running projects, because I'm afraid of a creative block that would ruin it. The worst part about the creative block is that there's no remedy for it. You just get stuck in a rut, and it sucks a whole lot for a completely unpredictable amount of time. Often what I end up doing, whether consciously so or not, is switching to another project and just working on that.

    So far that project has been Courier, but that's at its end and I'm also starting to feel burnt out on it, too. I don't have any other projects queued up that I'd like to tackle, or new ideas on what to do at the moment, so I'm just... stuck.

    I suppose the right thing to do in this situation is to take it easy and not fret too much over it, since that's often one of the many factors causing the block. I've never been good at actually doing that, though. Maybe I should try to take a break from programming in general? I don't know.

    You may be wondering why I'm writing this all to begin with. Well, partly I feel like I promised to do monthly and weekly updates, and I really hate to break that promise without notice. Another part is that I just feel like I owe you the discretion to tell you what's going on with me. I'm very thankful for the email replies and general responses I've gotten for Kandria so far, I really am! Because of that genuine interest, I feel all the more pressured not to disappoint. Since I have nothing to show though, I thought the only proper course of action is to just be open and direct about it. So I'll just say it again: aside from updating the public demo, no progress has been made at all.

    Maybe it would help me to have a more open discussion about this topic in general, instead of just it being me telling you that I'm in a bad place. So please, let me know: have you been in similar situations before? What helped you deal with them? Is there something in Kandria I could try to focus on that you, personally, would like to see?

    You can reach me at shinmera@tymoon.eu.




    as

    Marco Antoniotti: Digging CLAST

    Again, after ELS 2020, I went back to double check the actual status of some of my libraries (after an embarrassing nag by Marco Heisig :) who caught me sleeping).

    I updated the documentation of CLAST, and checked that its current status is ok; the only change I had to make was to conform to the latest ASDF expectations for test systems. Of course, you may find many more bugs.

    CLAST is a library that produces abstract syntax trees munging Common Lisp sources. To do so, it relies on CLtL2 environments, which, as we all know, are in a sorry state in many implementations. Yet, CLAST is usable, at least for people who are ... CLAZY enough to use it.

    (cheers)




    as

    At Least a Decade, Maybe Two

    Heh. K Tempest Bradford happened across an old photo of me and Neil — I’m in a sari, so I’m guessing this was at the Hugos. We look very young, so at least a decade ago — maybe two. 




    as

    Lotus Elise Classic Heritage Edition




    as

    Assembly Coffee Roasters Rwanda Bumbogo Coffee




    as

    Glowforge Pro 3D Laser Printer






    as

    A message from the Grand Master on pandemic response

    The Grand Master Sabazius has provided some useful information and advice to O.T.O. members about how to respond to the COVID-19 pandemic.

















    as

    Kiasmos – Blurred + Remixes

    musicisart magazine Kiasmos – Blurred + Remixes

      Sometimes the best way to relax is to listen to calming, downtempo music. Kiasmos provide a modern twist to perfection. Duo producers Ólafur Arnalds and Janus Rasmussen allow their own creative abilities to gracefully combine. Together their meditative sounds present an ethereal atmosphere mixed with sophisticated storylines told without words, felt within the simplistic beats […]

    The post Kiasmos – Blurred + Remixes appeared first on musicisart magazine.






    as

    The Grand Mask

    Some say we must mask ourselves to save ourselves and others Others say we must unmask to save America and as for the world beyond America it can kiss  our collective unmasked ass Then again  the face we know of  America itself has always been a mask covering hypocrisy with good intentions Contradiction is how it stays […]




    as

    Casual Friday

    Started out as Friday but became a Monday and thus the weekend became confusing. I baked a flourless cake and wept over a Sunday dinner  that felt more like Tuesday’s leftovers, like the whole leftover menu from the whole week. Why do we bother naming the days anyway — it reminds us we once had […]




    as

    Passages

    When the architect passes you still have the building. When the musician passes you still have the music. When the person passes you have what you remember —  when Fats Domino passed, when Little Richard passed, I remember how their hands looked on the keys. I remember how I knew from watching them that the […]




    as

    Wouldn't call that a waste of time

    Wouldn't call that a waste of time



    View Comic!







    as

    [tasty review] United Tastes of America by Gabrielle Langholtz, Jenny Bowers, and DL Acken

      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




    as

    Mr. Gonzi's victory; was the contest necessary?

    PM in Marsascala during his tour for support
    In 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.







    as

    Histogram: You have to know the past to understand the present by Tomas Petricek

    Histogram: You have to know the past to understand the present by Tomas Petricek, University of Kent

    Programs are created through a variety of interactions. A programmer might write some code, run it interactively to check whether it works, use copy and paste, apply a refactoring or choose an item from an auto-complete list. Programming research often forgets about these and represents programs as the resulting text. Consequently, thinking about such interactions is often out of scope. This essay shifts focus from programs to a more interesting question of programming.

    We represent programs as lists of interactions such as triggering an auto-complete and choosing an option, declaring a value, introducing a variable or evaluating a piece of code. We explore a number of consequences of this way of thinking about programs. First, if we create functions by writing concrete code using a sample input and applying a refactoring, we do not lose the sample input and can use it later for debugging. Second, if we treat executing code interactively as an interaction and store the results, we can later use this information to give more precise suggestions in auto-complete. Third, by moving away from a textual representation, we can display the same program as text, but also in a view inspired by spreadsheets. Fourth, we can let programmers create programs by directly interacting with live previews as those interactions can be recorded and as a part of program history.

    We discuss the key ideas through examples in a simple programming environment for data exploration. Our focus in this essay is more on principles than on providing fine tuned user experience. We keep our environment more explicit, especially when this reveals what is happening behind the scenes. We aim to show that seeing programs as lists of interactions is a powerful change of perspective that can help us build better programming systems with novel features that make programming easier and more accessible. The data exploration environment in this interactive essay may not yet be that, but it gives a glimpse of the future.




    as

    Turnstile+: Dependent Type Systems as Macros

    In 2017, a team from Northeastern University released Turnstile, a framework for implementing propositionally typed languages in Racket; cf. naasking's story Type Systems as Macros. The system was really nice because it allowed type systems to be expressed in a manner similar to the way theoretical PL researchers would in a paper, and because it hooked into Racket's clean compiler backend.

    Now Stephen Chang, one of that team, together with new coauthors Michael Ballantyne, Usamilo Turner and William Bowman, have released a rewrite that they call Turnstile+, together with a POPL article, Dependent Type Systems as Macros. From that article's introduction:

    Turnstile+ represents a major research leap over its predecessor. Specifically, we solve the major challenges necessary to implement dependent types and their accompanying DSLs and extensions (which Turnstile could not support), while retaining the original abilities of Turnstile. For example, one considerable obstacle was the separation between the macro expansion phase and a program’s runtime phase. Since dependently typed languages may evaluate expressions while type checking, checking dependent types with macros requires new macrology design patterns and abstractions for interleaving expansion, type checking, and evaluation. The following summarizes our key innovations.

    • Turnstile+ demands a radically different API for implementing a language’s types. It must be straightforward yet expressive enough to represent a range of constructs from base types, to binding forms like Π-types, to datatype definition forms for indexed inductive type families.
    • Turnstile+ includes an API for defining type-level computation, which we dub normalization by macro expansion. A programmer writes a reduction rule using syntax resembling familiar on-paper notation, and Turnstile+ generates a macro definition that performs the reduction during macro expansion. This allows easily implementing modular type-level evaluation.
    • Turnstile+’s new type API adds a generic type operation interface, enabling modular implementation of features such as error messages, pattern matching, and resugaring. This is particularly important for implementing tools like tactic systems that inspect intermediate type-checking steps and construct partial terms.
    • Turnstile+’s core type checking infrastructure requires an overhaul, specifically with first-class type environments, in order to accommodate features like dependent binding structures of the shape[x:τ]...,i.e., telescopes [de Bruijn 1991; McBride 2000].
    • Relatedly, Turnstile+’s inference-rule syntax is extended so that operations over telescopes, or premises with references to telescopes, operate as folds instead of as maps

    The code is available at https://github.com/stchang/macrotypes.




    as

    Last Five Minutes of Fame

    Last Five Minutes of Fame

    To what lengths does one have to go in order to achieve fame? It wasn’t until years later that by simply sucking on someone’s cock (Monica Lewinsky and Kim Kardashian) that the distance one had to go to achieve fame was not that far at all. The only distance they had to go...was down.

    I Mean…What?!?