at

Srazí krize covid-19 ceny nemovitostí v Česku? Lze to očekávat

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



  • Finance - Investování

at

Advokát radí: co si ohlídat u pracovní smlouvy, aby vám šéf nemohl snížit mzdu

Řada lidí přijde o práci a začne hledat novou. Už teď je dobré se na to připravit a před podpisem pracovní smlouvy vědět, na co si dát pozor. Je lepší kývnout na mzdový výměr, nebo na mzdu v pracovní smlouvě? A na co dalšího si dát pozor? Na otázky odpovídá advokát Pavel Nastis.



  • Finance - Práce a podnikání

at

Home office v časech pandemie. Na co je nárok a co byste si měli ohlídat

Kvůli koronavirové pandemii pracují z domova tisíce lidí. Home office má však určitý pracovně-právní rámec, což tuší málokdo. Jaká jsou práva a povinnosti zaměstnanců a co musí zaměstnavatel udělat, aby neporušil zákoník práce? Ve spolupráci s právníky Bořivojem Líbalem a Markem Poloni přinášíme praktický servis rad pro zaměstnance a zaměstnavatele.



  • Finance - Finanční rádce

at

KVÍZ: Zatím ještě dotace, za dva roky pokuty. Víte, jak ušetřit výměnou kotle?

Od 1. září 2022 nebude možné provozovat kotle na tuhá paliva, které nevyhovují přísnějším emisním normám. Včasnou výměnou kotle můžete ušetřit. Nejenže snížíte náklady za topení, ale stihnete navíc využít státní dotaci na jeho pořízení. Víte, jak na to? Otestujte své znalosti.



  • Finance - Finanční rádce

at

Zaplatili jste letos dovolenou? Možná budete dotovat cestovní kancelář

Možnost cestování je silně omezená a nic zatím nenasvědčuje tomu, že by lidé v letošní letní sezoně mohli vyrazit na zahraniční dovolenou. Zároveň ale nikdo dnes ještě neví, zda se nějaká možnost přece jen neobjeví. Pokud jste si koupili dovolenkový zájezd, jste asi momentálně jako na trní. Pojedete? Vrátí vám peníze?



  • Finance - Finanční rádce

at

Akcie i fondy klesají. Změňte portfolio, ať nepřijdete o své investice

Firmy i finanční trhy mají za sebou první letošní kvartál. Bilance obou není z důvodu preventivních vládních opatření proti šíření nákazy covid-19 nikterak růžová. To potvrzuje i Partners index podílových akciových fondů.



  • Finance - Investování

at

Chaty a chalupy zažívají svůj malý boom. Prodávají se dráž než loni

Zájem o nákup rekreačních nemovitostí je letos výrazně vyšší než v posledních letech. Objektů, které se dostávají do prodeje, je naopak tento rok méně. Viníkem je v obou případech epidemie koronaviru a s ní spojená nejistota kolem letních dovolených. To se podepisuje na cenách, často se dostanou výš, než byly inzerované.



  • Finance - Finanční rádce

at

Začínali podnikat v bytě, dnes má rodinná firma tři tisíce zaměstnanců

Česká rodinná firma SSI Group vznikla v době, kdy jsme ještě neznali mobilní telefony a podnikatelské prostředí 90. let bylo poměrně divoké. Přesto se ji Václavu Vodrážkovi společně se synem Janem a dalšími členy rodiny dařilo každý rok posouvat o něco dál. Letos tak na trhu významná bezpečnostní agentura oslaví 30 let svého působení na trhu.



  • Finance - Práce a podnikání

at

Raw Chocolate Fudgesicles: Raw Food Dessert

 
Raw Chocolate Fudgesicles
serves 4 ~ $.95 per serving
 
 
OK, so this is something that was stored in my recipe files from back in the summer (that flew by SO fast!) when it was hot and sticky out. But hey, chocolate, right? It's still delicious and fun ... ! I love chocolate smoothies and pops all year long. I've even been known to enjoy a frosty chocolate smoothie in the jacuzzi so as to not freeze my bum off ... shh, don't tell. 
  

fudgesicles
 
  • 2 bananas, sliced and frozen ($.60)
  • 1/2 cup almond milk ($.40)
  • 2 tablespoons raw cacao powder or cocoa powder
  • pinch salt
  • few drops of stevia, if more sweetness is desired
 
 
 
chocolate shell
 
  • 1/4 cup melted coconut oil ($.80)
  • 1/4 cup raw cacao powder or cocoa powder ($.80)
  • 1/4 cup finely ground coconut palm sugar ($.80)
  • pinch salt 
  • 2 tablespoons chopped pistachios ($.40)
 
 
 
directions
 
  1. Place all fudgesicle ingredients into  blender and puree until very smooth. Add more almond milk or water if needed to facilitate blending. 
  2. Pour into popsicle molds and freeze for several hours until fully frozen. 
  3. Prepare the chocolate shell coating. 
  4. Place all the chocolate shell coating ingredients into a small bowl and stir well until smooth.
  5. Remove the fidgesicles from the freezer and pop them out of their molds.
  6. Dip the fudgescicles into the hard chocolate shell, or drizzle it over them to coat. 
  7. Just heating the coconut oil up enough to melt it and not any warmer will yield the best results. If needed, gently remelt the chocolate hard shell. 
  8. Add a sprinkle of chopped pistachios or other chopped nut, if desired. Cacao nibs also work well.
  9. Any leftovers can be wrapped and stored in the freezer for a week or so.
 
 
nutritional information:
calories: 195
fat: 10 gr
carbs: 25 gr
protein: 2 gr
 
 
 

 
 




at

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
 
 




at

Anti-Inflammatory Orange Turmeric Tea plus 10 Healthy Benefits of Turmeric



Tumeric is famously anti-inflammatory and can be enjoyed many different ways, including juiced raw. But today, I wanted to pass on this super easy tea (psst, it's not raw!).

I've been drinking it almost every morning for a couple months now and it's still delicious to me, which is a good thing. Turmeric has so many beneficial qualities ... let us count the ways (scroll below for the tea how-to).

1. Anti-inflammatory.
Turmeric, the brightly colored spice that gives curry it's intense color, contains beneficial compounds that have positive health benefits. The main compounds are the curcuminoids and the most important of these is curcumin. One of the most beneficial things curcumin can do is lessen inflammation, which is implicated in most Western diseases.

To be fair, inflammatory responses are a good thing. We wouldn't be able to wage a defense against bacteria and viruses, or injuries, for example, without a strong inflammatory response. However, too much of a good thing can cause problems. Chronic inflammation has been implicated in many diseases that plague us today, including heart disease, diabetes, Alzheimer's, and obesity. Curcumin can reduce inflammation as effectively as some anti-inflammatory medications, but without the side effects. One of the ways it does this is by inhibiting (NF)-kB.  
 
2. Antioxidant
Oxidation is a chemical reaction that produces free radicals. Free radicals have unpaired electrons. These lonely little fragments damage cells and wreak havoc and destruction wherever they go. Antioxidants, like curcumin, terminate the chain reactions that lead to unpaired electrons and, therefore, free radicals and the damage they cause. Seriously, it's the radicals, man.
 
3. Heart Health
Almost 50% of Americans will die prematurely from heart disease. Heart disease and chronic inflammation are so closely linked that inflammation is thought to be an atherogenic response (atherogenic means it causes atherosclerosis, aka, cardiovascular disease, heart disease, and is also peripheral artery disease). It's even thought possible that the slight benefit sometimes derived from statins could be due to their anti-inflammatory properties. Reducing inflammation is a vital key to reducing heart disease.Curcumin is a potent COX-2 inhibitor, that

4. Cancer
Curcumin is being investigated as prevention and treatment for cancers such as that of the colon and pancreas. Chronic inflammation and free radicals promote cancer. Reducing those conditions can be preventive and curcumin works well at both. 
  
5. Arthritis
 Inflammation is an important mechanism in arthritis. Curcumin acts as a COX-2 inhibitor in the same way pharmaceutical drugs such as Celebrex do, but without the dangerous side effects. The tea below, as well as curcumin supplements can ease the pain of arthritis and rejuvenate mobility.

7. Alzheimer's 
India has a low incidence of Alzheimer's, possibly linked to higher intake of curcumin. Because inflammation plays such a big part in most disease, including Alzheimer's, it can be protective and preventative.

8. Brain Function
Alzheimer's is not the only thing that can go awry in brain function, and again, inflammation is implicated. In this case, it's known as neuroinflammation, or inflammation specifically in the brain and reducing that can help overall brain function. 
   
9. Depression
Depression and anxiety are often linked to brain inflammation (this is why going gluten free can help mood, as well). It seems to offer some improvement and relief to those who have depression.

10. Gall Bladder Function 
Curcumin causes the gall bladder to contract, which stimulates bile formation and gall bladder emptying and a freely flowing gallbladder is a happy, healthy one (unless you have a stone blocking the exit, which can cause a painful gallbladder attack).

11. Pepper
I can't talk about turmeric and curcumin without also mentioning black pepper. The Piperine in black pepper increases the absorption of curcumin by 2000% (that's 20x). So, add a little bit of black pepper to whatever you make with turmeric for the greatest benefit. It tastes good, too.

*Do not use turmeric or curcumin if you are using blood thinners such as Warfarin or if you have existing gall bladder disease.




 This tea (and this salad dressing, too) are delicious ways to get a healthy dose of turmeric.


Orange Turmeric Tea
serves 3 ~ $.33 per serving


ingredients
  • 1 orange, peeled and chopped ($.70)
  • 1 teaspoon powdered tumeric ($.10)
  • 1 teaspoon caraway seeds($10)
  • a few black peppercorns, or pinch of black pepper
  • stevia or sweetener, if desired ($.10)

directions
  1. Place the orange, turmeric, and caraway seeds in a large saucepan with four cups water. 
  2. Bring to a boil over high heat and continue to boil for about five minutes. This will reduce any bitterness in the turmeric.
  3. Add the peppercorns or pinch of pepper and steep for a minute or two. 
  4. Strain through a fine mesh strainer into mugs and and the sweetener of your choice, if desired. 










    at

    Chocolate Orange Smoothie: Raw Food Smoothie Recipe




    Chocolate Orange Smoothie
    serves 1 ~ $2.20 per serving 


    You have to remind yourself this is good for you. It's so delicious it feels downright decadent. The hemp milk makes it super creamy and luscious.

    ingredients
    • 1 orange, peeled and frozen ($.50)
    • 2 bananas, peeled, sliced, and frozen ($.40)
    • 1 cup hemp milk ($1.00)
    • 3 tablespoons cacao powder ($.30) 
    • 1/2 teaspoon orange extract
    • few drops stevia (optional)
    • pinch salt
    • 6 ice cubes
    • water for blending, if necessary

    directions
    1. In a high speed blender, puree all ingredients until very smooth and creamy. 
    2. Add water if needed for ease of blender or if a thinner smoothie is desired. 

    nutritional information:      calories: 339      fat: 14 gr      carbs: 43 gr       protein: 8 gr 





    at

    Happy International Women's Day

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

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

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

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

    comments




    at

    Plague diary 2/04; isolation day 1

    As of some time last night, I have novel respiratory symptoms. I'm basically fine but it feels safest to act as if I am infected.

    My lungs hurt, and it's not the tightness I associate with mild asthma symptoms, or the tired muscle ache / burn I associate with a bad cough (whether asthma or viral). Not badly, but pretty much continuously. I'm coughing a bit but not severely, and I don't feel feverish. I have a slight headache and sore throat, but that could be just about anything including stress. I am somewhat distracted but I've been able to get on with useful work today.

    I'm probably being over-cautious, but I feel like the balance of probabilities points towards suspected case. So this morning jack and I activated our self-isolation plan. We've divided up the house so that I "live" upstairs and he stays downstairs apart from using the bathroom. We have separate towels and we're cleaning metal bathroom surfaces constantly. jack has taken on food prep for both of us and he's leaving me plates of food and cups of tea and retreating to the bottom of the stairs.

    And we're preparing to avoid leaving the house at all until it's more likely that we're not infectious than that we still are. We have plenty of supplies, and we managed to get an online supermarket delivery order in by virtue of going on the website just after midnight last night, which was fortuitous timing. It's going to suck, more so if my symptoms progress beyond the almost ignorable level, but since we can do this I think it's the right thing.

    The most likely (and in some ways comforting) narrative I can come up with is that I picked this up when I had to attend a dental appointment two weeks ago. I had very mild symptoms (including a tell-tale sore throat) within a few days of that surgery, which in retrospect I can imagine might have been the first phase. And now, 12 days after the first symptoms, I have potential lower respiratory tract symptoms, so hopefully this is the second phase. That's comforting because it suggests my source of infection is a necessary medical appointment rather than either something frivolous I did, or just being unlucky even though I've stayed at home except for exercise for ten days now, and jack has been doing minimal necessary shopping with careful social distancing. And if I picked it up at the dentist it's unlikely I infected the dentist or any of his staff or patients. Also, if my guess is right I'm probably approaching the end of the infectious phase.

    We are really not sure how long we should maintain full isolation at home. UK guidelines say 7 days from start of symptoms (me, today), or 14 days from contact with a symptomatic person (Jack). But I suspect this is not entirely adequate especially as it's much less restrictive than the WHO advice. If my symptoms don't get any worse than this and jack doesn't get sick at all, which is definitely the brnach of the timeline I'm hoping for, I won't know whether I've actually had Covid. Currently we're thinking that if nothing changes we'll start interacting with eachother again after 7 days, but not go outside until we're more confident the incubation period has passed; I think the safest is 14 days from the end of symptoms but we might not be able to sustain that.

    Send hugs and support to jack, please? He's doing amazingly in a somewhat scary situation.

    comments




    at

    Plague diary 6/04; isolation day 5

    I'm doing basically fine but continuing to be careful.

    I still have the same single worrying symptom I had on Thursday, sore lungs. I don't otherwise feel ill, feverish, tired or anything else, so I'm really second guessing myself over whether isolation was the right choice.

    The last few days have been mostly pleasant though stressful for jack who's handling everything on his own and worrying about me getting seriously ill or possibly infecting him.

    Friday was 19 days since the government started taking action. I worked in my new upstairs den (previously jack's den.) We had a weird date where jack brought me up a tray with the Shabbat ritual things, I made kiddush sitting at the top of the stairs and he sat at the bottom, and we ate dinner in parallel but at a distance. And then we played Potion explosion over Steam, which worked pretty well.

    The weekend was ridiculously lovely, and we were both good and only sunbathed and exercised in our own garden. Saturday, day 20, I went to virtual shul, which on only the second iteration starts to feel almost normal. Bigger than usual congregation, including some of the people who are usually strict about not using electronic technology on Shabbat. And in the afternoon I attended the second half of wildeabandon's Stardust readthrough which was generally satisfying and companionable. And I had a long phonecall with ghoti_mhic_uait.

    Sunday, day 21, had slightly fewer online social commitments. We had a lot of time in the sunshine in the garden, remaining carefully distanced. cjwatson came by to wave to me from the street while I looked out of an upstairs window like some ridiculous fairy tale princess. We video chatted to jack's university friends; it's been a long time since the original trio got together since one of them lives in Croatia and has two small children. And I did my online chevruta just like the previous week, slightly sheepishly admitting I was Skyping from bed because I was isolating for basically no reason. And I had a long conversation with cjwatson in the evening.

    Since today is day 22, and two weeks of lockdown, it's now been a whole two weeks since I last interacted directly with anyone other than jack. jack has also not left the house or allowed delivery people to come close to him since I got the weird symptoms on Thursday, so five days so far.

    I now know eight people who have pretty clearly been through a bout of coronavirus, and 21 who like me are being careful because they have suspicious symptoms.

    Thanks to everyone who made nice comments on my last post, I really appreciate all of you.

    comments




    at

    Summer Horrification — Day Five — Englishman River and Rathtrevor

    Continued from Day Four. (From the beginning.) On Friday we packed all of our stuff back up and headed out.  We were barely out of the resort when: This tire is flat. Apparently all that gravel out to Horne Lake Caves the day before also included a small screw.  We limped around the corner to … Continue reading Summer Horrification — Day Five — Englishman River and Rathtrevor




    at

    Boots. Mended. We’ll see how the patches hold up. Now I just need to acquire a sufficiently long raincoat.

    View on Instagram https://ift.tt/2mPe4Ss




    at

    Rain Coat

    I would like to have a new raincoat.  Longer than my current gear because surely I will be drier if I have more coat.  I’m thinking something like this. @sewaholic Robson and Great War greatcoat #historybounding Eventually this will have to be made out of clearly 21 century waterproof fabric. In some ahistorically bright colour … Continue reading Rain Coat




    at

    NaN Gates and Flip FLOPS

    I was hoping to have a few things to write about in this month, but the only thing I finished was this video for SIGBOVIK, right at the beginning:


    NaN Gates and Flip FLOPS


    There is also the paper which has some merits but I submitted that before actually finishing the project, so I think the video is the definitive version. Either way this one is really aimed at trolling computer scientists, and so may be impenetrable if you don't have the background; sorry about that!

    Allergies and various things have got me down recently but it's also getting nice out, which should provide a burst of energy!! This weekend is the Marathon in Pittsburgh, which I intend to run. No costume plans but sometimes I get last minute inspiration / compulsion. Feel free to taunt me with your ideas.




    at

    Eating like a Flintstone

    We began this year with a new food plan: paleo. ish. This is precipitated by the discovery that I am either gluten intolerant, allergic to wheat, or both. Said discovery was made when I gave up gluten for a week just to prove to my personal trainer that she was wrong when she said that […]




    at

    Concentration SCAMP




    at

    DATE and Switch







    at

    Atlanta August 2007 4/23











    at

    Atlanta August 2007 12/23















    at

    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.




    at

    Quicklisp news: April 2020 Quicklisp dist update now available

    New projects:

    • anypool — General-purpose pooling library — BSD 2-Clause
    • avl-tree — An implementation of the AVL tree data structure. — MIT
    • cl-aubio — Aubio bindings for Common Lisp — GPLv3
    • cl-interval — Intervals, interval trees — NewBSD, LLGPL
    • cl-liballegro — Allegro 5 game programming library bindings for Common Lisp — Allegro 5 - http://alleg.sourceforge.net/license.html
    • cl-mime-from-string — A one function library to return a mime-type based on the file extension found at the end of a string. ie abc.txt -> text/plain. The common types implemented are from https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types — MIT
    • cl-telegram-bot — Telegram Bot API, based on sovietspaceship's work but mostly rewritten. — MIT
    • dns-client — A client for the DNS protocol. — zlib
    • feeder — RSS, Atom and general feed parsing and generating — zlib
    • perceptual-hashes — Perceptual hash algorithms for images — 2-clause BSD
    • portable-condition-system — A portable condition system for Common Lisp — CC0
    • ten — Template System for Common Lisp — MIT
    • trivial-custom-debugger — Allows arbitrary functions to become the standard Lisp debugger — MIT
    • trivial-with-current-source-form — Helps macro writers produce better errors for macro users — GPLv3
    • vom-json — A json-formatted logger for vom — MIT
    • vp-trees — Perceptual hash algorithms for images — 2-clause BSD
    Updated projects3b-bmfont3bgl-shader3bmd3bza-cl-loggeralexandriaaprilasync-processbdefbpccldocchungacl+sslcl-anacl-capstonecl-cffi-gtkcl-collidercl-containerscl-environmentscl-gamepadcl-gservercl-inotifycl-marklesscl-packcl-patternscl-pythoncl-rdkafkacl-shlexcl-sparqlcl-strcl-tuicl-utilscl-webkitclinenoiseclipcloser-mopconcrete-syntax-treecroatoancserial-portdartscltoolsdefenumdeploydexadordiff-match-patchdissectdjuladoubly-linked-listeasy-routeseclectorescalatorfast-generic-functionsfast-ioflexi-streamsflexichainfloat-featuresfsetfuccfunctional-treesfxmlgendlgraphgtirbhu.dwim.computed-classhu.dwim.defhu.dwim.perechu.dwim.presentationhu.dwim.quasi-quotehu.dwim.walkerhu.dwim.web-serverhunchentoot-multi-acceptorironcladkeystonelispqrliterate-lispmaidenmaxpcmcclimmmapmodularizemutilitynodguinumclnumpy-file-formatoriginosicatoverlordparachutepatchworkpetalisppetriphoe-toolboxplumppolicy-condpolisherpostmodernpzmqqtoolsquilcqvmroanrpcqs-graphvizs-http-clients-http-servers-sysdepss-utilssanity-clausescalplsealable-metaobjectsselselect-fileserapeumsketchskippy-renderersnappysoftdrinkspinneretstaplestumpwmsucleswank-clientswank-crewtootertrace-dbtrivial-featurestrivial-file-sizevgplotwoo.

    Removed projects: cl-password-store, fomus, rfc3339-timestamp, rpc4cl.

    All the removed projects are removed because they no longer build. For the first two (cl-password-store and fomus), I was unable to get a response from the authors. The other two (rfc3339-timestamp, rpc4cl) the author was responsive, but has abandoned the projects.

    To get this update, use (ql:update-dist "quicklisp"). Enjoy!

    A number of people support Quicklisp with a monthly contribution through PayPal. I recently set up a Quicklisp Patreon page as an alternative - if you are interested in supporting Quicklisp, feel free to check it out.




    at

    Timofei Shatrov: Previewing images in and out of SLIME REPL

    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.




    at

    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.