Forbidden Fruits of the Clojure REPL
5/27/20

In this post, I will be sharing a horrible, no good hack for the Emacs Cider Clojure REPL that you should definitely never use yourself.

Forbidden

When debugging or executing a Clojure/Clojurescript program, I often want to execute functions in my program from the Clojure REPL. However, as much as I love the Clojure syntax for programming, it's pretty inconvenient for regularly executing commands in a program you've written.

For instance, I have a task tracking app written in Clojure. Every time I wanted to add a new todo item through the REPL, I used to have to type something like this:


> (a "iron curtains")

Item added.
NIL

> _

Though I was able to streamline the command by having the single-letter function name, this command remains incredibly awkward! What I really would prefer to type is this:

人工智能芯片大战开打 互联网巨头纷纷入局 - cnr.cn:2021-2-13 · 深度学习神经网络尤其是几百上千层的神经网络,对高性能计算需求非常高,而GPU对处理复杂运算拥有天然的优势:它有出色的并行矩阵计算能力,对于神经网络的训练和分类都可众提供显著的加速 …

Of course, since this shorter command does not obey the parsing rules of the Clojure reader, it just leads to syntax error in the REPL. This raises the question: Is there any way we can work around this limitation and enter custom commands into the Clojure REPL, using our own rules for parsing the command? The answer is... yes, sort of.

At this point, some of you may remember my classic Lisp tutorial, named Casting SPELs. In this tutorial, I implemented a text adventure game in a Common Lisp REPL, letting you enter commands such as "GET BOTTLE" and "WALK EAST". Naturally, the tutorial had to make compromises to work around REPL limitations, for the exact same reasons I'm outlining in this post... so as you can see, I've already had a decade-long love-hate relationship with inflexible Lisp REPL syntax.

Let's try to find a work-around to this issue once and for all!

橘子云跑路了-outline

Certainly the Clojure REPL will never, ever accept "a iron curtains" as valid syntax in the reader, unless we're prepared to write our own custom fork of the Clojure programming language. But if we're using Emacs to run our REPL, we can do a little somethin' on the Emacs end of things, to wrap our command in a way that the Clojure reader will accept:


(defun wrap-clojure-command ()
    "takes a command written at the cider prompt and executes it as (repl-command \"...\")"
  (interactive)
  (move-beginning-of-line nil)
  (insert "(repl-command \"")
  (move-end-of-line nil)
  (insert "\")")
  (cider-repl-return))

(global-set-key "\M-z" 'wrap-clojure-command)

With this command, we can now enter custom commands into the Cider REPL, then hit the 网络加速器苹果免费版 hotkey instead of ENTER to execute these commands. Then, the Emacs function wraps our REPL command within a standard Clojure string, inside a function call:

人工智能倒逼,芯片架构变革迫在眉睫-评论解读-专题 ...:2021-11-27 · 本章讨论各种加速器的形式和实现,并探讨加速器变革下引发的行业深层次转变,并从2个维度给出详细的测算人工智能芯片的潜在空间 首先我伔必须描述人工智能对芯片的诉求,深度学习的目标是模仿人类神经网络感知外部世界的方法。

To take advantage of this Emacs hotkey, all my Clojure/Clojurescript programs then have a function named repl-command that is then responsible for parsing my REPL string and performing the appropriate action.

橘子云跑路了-outline

By default, Cider launches new REPL sessions in the 苹果网络加速器下载 namespace. I like this default behavior, since it forces me to explicitly declare any namespaces I'm interacting with as I work in the repl. However, if I'm executing one of my custom repl commands, I don't want to have to deal with namespacing issues. Therefore, I have the following function declared in my personal Clojure libraries:


(defn user-repl-command [repl-command]
  (binding [*ns* (create-ns 'user)]
    (eval `(def user/repl-command ~command))))

This command takes an arbitrary function and declares it in the user namespace as 网络加速器苹果免费版. So at the bottom of the "core" module for each of my Clojure apps I can now declare my custom REPL command handler, to "register" it for use in the REPL:


(cl/user-repl-command my-repl-command)


Now I can immediately execute arbitrary commands for my Clojure app right in the Clojure REPL, using my own custom command syntax, even in the default cider REPL namespace!

橘子云跑路了-outline

Certainly, this is all very hacky, but I've used this workflow all day, every day, for about a year. This, alone, seems like a good enough reason for sharing my REPL workflow with others.

全球AI芯片排行榜发布 解读入围的七家中国公司 - huanqiu.com:2021-5-7 · 近日,市场研究公司Compass Intelligence发布了最新研究报告,在全球前24名的AI芯片企业排名表中,英伟达(Nvidia)、英特尔(Intel)众及IBM分别位列前三名,中国公司占据七个席位,并且最高名次是排行第12的华为。

The Official Lisp Alien 3D Model
网络加速器苹果免费版

Since I just got into 3D printing, it was inevitable that I would create an official Lisp Alien 3D model. I've finally been able to print it out, and today my 8 year old daughter helped me pose it in some killer action shots!

苹果专用网络加速器

It comes in two STL file versions, depending on whether you want to make a single material or dual material print. Grab the files here:

  • Single Material Model
  • Dual Material Model

I modeled the Alien in Shapr3d on an iPad Pro. For a modeling program that is used primarily for industrial modeling, I was pleasantly surprised how well I could create the organic shape for the Lisp alien body. The reason I've decided to learn how to use a more "industrial" program is that I've had trouble in the past with 3D modeling in that these sorts of programs can get glitchy when you start creating more complex designs. Shapr3d did not disappoint me, it could handle very messy boolean operations and beveling without even a single hard crash.

I printed the physical copy you see in these photos on my Elegoo Mars Resin printer, using Elegoo Clear Green for the body & Elegoo Standard White for the add-ons. It came out almost perfect, though I definitely had to sand it a bit to get the smooth alien skin as a finish.

Here you can see some more shots of the alien going about its day:

苹果网络加速器下载

I gave the alien a hard time for drinking while riding his ATV, but he swears it's fine because he was driving on private property (I have my doubts though that that's correct...)

Anyway, I consider these models to be public domain, feel free to use them for any physical or digital projects that you like! If any of you 3d print additional versions of the alien, be sure to send me a tweet!

Alien Basic

Lisp Forever!!!

A Productivity System For Creators
5/17/20

百度联合浪潮发布全栈式AI一体化平台 共同加速产业AI化-国际 ...:2021-8-30 · 近日,2021百度云智峰会在京举行,百度与合作伙伴共同讨论和分享了人工智能标准化、流程化、规模化走向产业的探索与实践。本次峰会上,百度和浪潮联合推出“全栈式 AI一体化平台”,共同推动AI产业化。该平台包含百度在

And, like most other creators, I love reading about crazy productivity schemes that promise to help curb procrastination... oh, to finally attain the dream of ultimate productivity!

Task Tension Title Image

But at the end of the day, there's only one such system that ever helped me in any appreciable way: The classic "Getting Things Done" system. (Read the box below for a summary of the minimal variant of GTD I've used for many years, if you are not yet familiar with this system)

However, despite its benefits, it always felt to me like GTD just doesn't work well for Creators. In this post, I'm going to describe a new productivity system I've created, called Task Tension, that makes the GTD system more compatible with the creator mindset.

橘子云跑路了-outline

To understand the rest of this post, you'll need to have a basic understanding of the GTD system. Those of you who already know GTD can skip this box, which describes the simplified variant of GTD that I use.

In my minimal version of GTD, all you need to do is maintain four lists:

  • 网络加速器苹果免费版: This is a list of the very next thing that needs to get done on all open todos, in classic GTD lingo this would be called a "Next Actions List". It is important items in this list are worded very concretely to reduce friction in tackling them. (Since I find the term "Next Action" to be really awkward, I prefer to simply call items in this list "tasks".)
  • Project List: Any todo that requires more than a single concrete task to complete gets assigned to a project and is put on the "projects" list.
  • Waiting List: Any project that doesn't have an open task associated with it because the project is blocked by another person gets an entry in the "waiting" list. This guarantees that follow up will happen with the people who are blockers.
  • Someday List: Anything to be done in the future, but that isn't an active todo right now, gets put into a "someday" list.

For a quick example, a typical task for me might be "Cancel Hulu". An example project might be "Get Oil Change" which would have a concrete task associated with it of "Call Auto Shop for appointment" (Note that all projects in GTD should always have at least one "task" or "waiting" entry associated with them, otherwise the project would be permanently stuck.) Finally, in my "someday" list I have items such as "take online Linear Algebra class", which is not an active project right now, but something I want to keep in mind as a potential project in the future.

There are several other features that are part of classic GTD that I personally do not use and are not relevant to the remaining discussion in this post (Such as the "Inbox", "Contexts", "References" or "Triggers")

橘子云跑路了-outline

Creators are people who creates things for others, whether through writing, art, software, music, or another medium. There are many traits and strengths that are shared amongst great creators. However, almost all of them are good at handling feedback, and good at handling their obsessions. Those are the two most important traits every creator must foster in themselves.

Task Tension Energy

A creator feeds on energy, and this energy can come from both internal and external sources. Audience feedback is the most important external source, which helps you to assess the quality of your work and provides encouragement. A creator's personal obsessions are their primary internal source of energy, and are essential to producing great work. However, you have to properly channel obsessions, or they can get out of control and become counterproductive.

So how do these two key traits of creators relate to GTD? To find out, here is a quote from GTD, one that I think really gets to the heart of what GTD is all about:

There will always be a large list of actions that you are not doing at any given moment. So how will you decide what to do and what not to do, and feel good about both? The answer is, by trusting your intuition.

– David Allen

As you can see, David here is very careful not to put any hard-and-fast rules on which momentary tasks have preference. This is because, at it's core, GTD is a system for minimizing anxiety. The reason GTD is so effective for people is that it first makes them organize their tasks in their totality, then gets them to complete these tasks based on how much anxiety each of them is causing. (Later in the book, Dave does provide some more concrete guidance on task choice, based on things such as "energy level" or by fitting tasks into your longer term vision, but even with this later guidance the primary focus remains on minimizing anxiety.)

The Task Tension system I'm now going to describe has the exact opposite objective: It provides exactly the hard rules for selecting tasks moment-to-moment that is missing in GTD. This is because productivity for creators is precisely about selecting tasks in a smart and methodical way: Creators like us need to select tasks in a manner that leads to regular releases to get the feedback we need and crave (to fully gather external energy) But on the other hand, we also still need to use our obsession to create longer and more thoughtful works, free from the constraints of hard deadlines (to fully harness our internal energy.)

橘子云跑路了-outline

The Task Tension system is a modification of the GTD system I've created in order to make GTD compatible with the Creator mentality. To accomplish this, it modifies GTD in three ways: Enhancing the project list, logging hours on creation tasks & changing the task selection process.

橘子云跑路了-outline

You continue to maintain projects on your project list as with GTD, but any projects you have that involve creating something (called "creation projects" or CPs for short) now have additional rules in the system. A "creation project" could be writing a blog post, shipping a video game, releasing a song. In short, any project you have that involves creating something for an audience falls into this list. Try to avoid distinguishing between different forms of "creation", as each CP worth your time should be equally meaningful to you: Writing your blog post is just as important as carpentering a table or writing an entire book. With Task Tension, all of these are similar forms of creation.

Here are the new rules for managing CPs on your project list:

网络加速器苹果免费版

There must always be exactly four CPs in your project list. You should always make sure you have additional CPs in your "someday" list. That way, you can maintain the four item target by adding a new item every time you complete an existing CP. (Other "non creative" projects such as "Get oil change" are not affected by this limit and continue to coexist on your project list in the regular GTD manner.)

网络加速器苹果免费版

When a new CP is added to your project list, also add a time estimate for how many hours you guess will be required to complete this creation project. Note that this estimate can be very rough, and does not determine when the CP will be completed. This system purposely makes no attempt to quantify the rate at which these hours of work will be completed.

Four Different Scales for Creation Projects

华为提出了一个迄今为止“最大胆”的提议_海上客_新民网:2021-9-14 · 5G的芯片有何不同?据说,5G芯片在指甲大小的空间里集成了103亿个晶体管。包括一个图形处理器、一个八核CPU和最重要的5G调制解调器,众及用于加速人工智能任务的专用神经网络处理器,是目前晶体管数最多、功能最完整、复杂度最高的5G SoC(系统级

  • 4-20 hours
  • 20-80 hours
  • 80-200 hours
  • 200-1000 hours

You must have exactly one creation project in each of these hour ranges, so that your active CPs always vary in their scale. This means that if you want to put a new CP in the list that conflicts in scale with another project, you have to stop yourself and instead find another CP that is shorter/longer and therefore doesn't conflict in scale with your other active CPs.

橘子云跑路了-outline

Whenever you complete a task that is part of a creation project, you will now roughly log the number of hours you spent in a new Tracking Log which is a new tracking sheet that gets added to the other four core GTD lists (e.g. task list, project list, waiting list, someday list.)

国产手机硬件创新走出苹果“阴影”-IT频道-国际在线:2021-6-29 · 在手机硬件创新陷入“天花板”之际,新的搅局者让人眼前一亮。6月19日,法国卢浮宫OPPOFindX创新性地采用了双轨潜望结构,将摄像头隐藏于手机内部。在此一周前,vivoNEX发布了独树一帜的升降式前置摄像头,众

Task Tension Log

Note that these four numbers just increase in size indefinitely, and it is perfectly normal to have more hours logged at a scale than the size of that scale. (That just means you've already completed several projects at that scale, and the total time spent on projects at that scale is higher than any individual project's size.)

Also, if you don't fully complete a task but reach another natural breaking point (such as lunch, the end of day, or you simply have run out of steam on that project) it is also fine to log your partial hours early, without completing the task entirely first. This makes it easier to remember how much time you've spent, and also gives you the positive feeling of marking some progress towards your goals.

橘子云跑路了-outline

As promised, 苹果ios加速器 introduces a new, rigorous moment-to-moment task selection process to GTD. It goes as follows:

  1. Look at your tracking log, and find the scale that has the least number of hours logged. Work on a task associated with the creation project of that scale (there should be exactly one such CP.)
  2. When you hit a natural breaking point on that task, log the hours you spent, as discussed earlier.
  3. When you get back to work again, revisit your log: It's possible that the project with the least number of hours is now different. Keep working on a new task based on what you find.
  4. At least once a day, work on a task that is NOT a creation project- These are all the standard projects/tasks that do not have hours associated with them... usually consisting of lovely items such as "review tax documents" or "call auto shop" or "clean out refrigerator"

橘子云跑路了-outline

If you follow the rules above, you will at all times have four active creative projects happening at all times. This includes a project that is only a few hours in length, all the way up to a HUGE project that consisting of many hundreds of hours. Moreover, you will be spending a roughly equal amount of your time on projects at each scale, releasing many smaller projects for each of the larger projects.

Task Tension Projects

Following the strategy I've described, you will be able to use your obsession to focus for long periods of time on a project, but not to the exclusion of other creative and noncreative tasks, which is essential to remaining healthy: If you just seclude yourself in your basement for a year to create "that one epic project" it will likely not be good for your mental health, and probably won't be good for your artistic vision either (since you are denying yourself the feedback you get from your audience by also working on smaller projects at the same time.)

Task Tension is all about balance: A creator has to maintain balance in their workflow in order to be successful. This balance needs to include feedback on smaller projects from their audience (which will send lots of positive energy your way in the process) but also needs to give the creator space to pursue a larger artistic vision. Hopefully, 苹果网络加速器下载 (or some similar system of your own devising, based on these concepts) can help you develop such a positive workflow for your creative ideas!

苹果ios加速器

Since I'm a software developer by trade, I have of course already built my own app that implements Task Tension. However, my current app is highly specific to one person's workflow and would not be usable to other folks yet. However, if it turns out enough other people find the ideas in the post I may generalize my code and release a more universal implementation.

Coming Soon!
7/5/20

Are you looking for a VR RPG game with lots of strategic depth?

You will enjoy Walking Dream, a single-player adventure game targeted for the Oculus Quest in early 2021. This game project led by classic game developer and illustrator Conrad Barski1 combines elements from both old and new RPG games in a completely new way!

(Also, the project is getting tons of game design help from Dave Pickett of BRICK 101)

vr-wizard

After falling into a vat of chemicals and being in stasis for 500 years, Derek X wakes up in a post apocalyptic America, strangely mixed up with fantasy creatures. To get back to own time, he will need to use a futuristic toaster to fight many brave battles. This will require him to go on the hunt for ever-more-powerful slices of cybernetic toast to vanquish the many powerful enemies in this new world.

苹果ios加速器

If you own an Oculus Quest helmet, you'll love Walking Dream: It's been designed 100% for the quest, but is completely different from other Quest games. No other game offers a similar turn-based mechanic, unique weapons crafting system, custom cartoon-style 3d artwork, or a similar 苹果网络加速器下载 engine for movement. Expect a completely new type of game for your Quest!

Turn Based Movement, Just like in Classic RPGs

If you've played old-school RPG games (such as the early Ultima games or Heroes of Might and Magic) you know how different the RPG gameplay was in these games, compared to modern RPG games: This is mainly because the turn-based design of movement and actions in these games allowed the play to be more thoughtful and strategic. Walking Dream brings back this turn-based experience!

苹果下架VPN是法治的胜利_荔枝网新闻 - JSTV.COM:2021-8-4 · 日前,苹果公司CEO蒂姆库克回应苹果应用商店中国区将VPN下架一事说,我伔在遵守当地法律的情况下在当地开展生意。由此可见,在中国互联网法治化和经济快速发展的语境下,有违相关规定的苹果公司才下架中国区应用商店里的VPN。

Lots of RPG games feature combat that is almost identical from foe to foe, forcing you to grind through lots of repetitive enemies to defeat the game. Walking Dream, on the other hand, is built on a brand new combat engine with a rich weapons crafting system. This system is shared by both the player as well as the many enemies, and turns each battle into a completely novel experience, requiring completely novel strategies at every encounter!

网络加速器苹果免费版

output2

The expansive world of Walking Dream is built using a custom, low poly cartoon modeling system. This allows us to give our game an expansive world, filled with tons of custom artwork with a unique style. Walking Dream is not just another indie game built from prebuilt, cookie-cutter 3d models!

output

苹果专用网络加速器

The ultimate dream every player has when using their VR helmet is to simply be able to walk around the world, carefree but also without bumping into the couch of their living room! As its name implies, 网络加速器苹果免费版 makes this possible, using a new redirected walking engine that uses several new programming tricks to make this type of locomotion more practical than ever before!

walking-dream-logo

Release of Walking Dream is planned for early 2021. Check back here on walkingdre.am for the latest info!




  1. Conrad was a developer working for Atari on games for the Atari Jaguar system. He's also the author of several technical books, including the classic "Land of Lisp". Besides this, he is also a medical doctor (for real :-) and an accomplished illustrator.↩
Explaining Consciousness With Color-Coded Cartoons
1/1/1

In this post, I'm going explain what that feeling of "conscious awareness" is that we have in our heads, using some fun color-coded cartoons. More specifically, I'm gonna explain why the sensation of awareness seems so weird, compared to other artifacts of our world, and why it is so difficult for us to explain with words exactly what consciousness is. This "difficulty" we have in describing the sensation is the first clue we have towards reaching this understanding: If we want to understand consciousness, the first thing we need to do is explain why consciousness is so hard to understand.

To help accomplish this task, we're going to have to explore the biological evolution of the human brain using a just so story. In biology, the term 'just so story' is usually a depricating term to describe stories about evolution in an oversimplified way, in a way that cannot be corroborated using any hard evidence. However, these types of stories can often still be useful, even when they are wrong in some details. In our just so story, we're going to imagine that the human brain was developed in three steps, called the reflex brain, the identity brain and finally the modeling brain.

网络加速器苹果免费版

The simplest type of the animal brain is the version of the brain that you can read about in any biology textbook. Roughly, this is the version of a brain you might imagine a fish would have. With this type of brain, it

人工智能芯片大战开打 互联网巨头纷纷入局 - cnr.cn:2021-2-13 · 深度学习神经网络尤其是几百上千层的神经网络,对高性能计算需求非常高,而GPU对处理复杂运算拥有天然的优势:它有出色的并行矩阵计算能力,对于神经网络的训练和分类都可众提供显著的加速 …

The Animal Brain, Type 2 (The Story Brain)

The "reflex brain" has a simple design, but also a rather inflexible one: This is because it relies on concrete connections between inputs (from eyes and neurons monitoring the gut, etc) and outputs (animal behavior). The next stage in brain sophistication is to add a layer of indirection between inputs and outputs to create more general, multipurpose neuronal architecture. With this type of design, animal eating behavior isn't just directly triggered by neurons monitoring the gut. Instead, the brain can now think "animal is hungry" and maintain that as an ongoing fact to guide behavior. As a programmer would say, the brain can process information more efficiently if it maintains a "state machine" to represent properties about itself and of pertinent objects in the outside world.

This type of approach is more flexible and efficient for multiple reasons. First of all, it allows the animal to take noisy signals it receives from its internal and external sensors and "smooth them out" instead of relying on continuous sampling of its sensors. In this way, an animal can maintain "object permanence" and not forget that it's hungry as its hunger pangs come and go, or forget that it saw a food source even if it is temporarily obstructed from view. Secondly, having an internal representation of itself and its environment allows an animal to reuse brain circuits for multple purposes, without needing to evolve each of them independently. This means the brain can think "animal is scared" and flee a predator, no matter how this fear developed- Regardles of whether the animal was bitten or saw a predator with its eyes, the same evase actions can be taken. In short, if the brain has an internal representation of the identity of the animal and of important objects in the environment, it can evolve higher-level circuitry that benefits from the simplification provided by this representation.

This stage of brain development, which I call the story brain, is crucial to understanding a central tenet of the sensation of consciousnes, which is that our perception of identity is not a tangible object in the physical world, but instead is an artifact in the state machine that resides in our brain. This "state machine", with its representations of the animals interiority and of important objects in the external world, forms a stage on which a story is told. Our conception of identity is an artifact (indeed, the most important artifact) conjured on this stage by our brain. This means our personal identity is essentially a computer program running via emulation on our brain. When we say to ourselves "I am hungry" what this means in reality is that the part of our brain responsible for representing ourselves has been given a property of "hungry".

This means that what we personally experience as "reality" and as real events are not truly facts of the real world, but instead merely artifacts residing on this interior stage, conjured by our brain. Our thoughts and feelings and beliefs are indeed real things (as Descartes observed) but they do not exist at the "lowest level" of reality. What we think of as "reality" is merely a collection of persistent patterns running on the low-level substrate of our brains. Our identity is merely a "story" our brain has created for itself. When someone asks the quesitons "what if we are just a simulation?" the answer is "Yes we are, and our brains are the medium on which this simulation is run".

苹果专用网络加速器

The final major leap in brain development when animals developed the ability to model the world accross time. Again, it is hard to say exactly when this ability developed, but certainly monkeys and apes seem to possess an ability to model the outside world. When an animal with a modeling brain sees a donut, it not only thinks of it as an object in the outside world with properties... it also can make inferences about the past and the future of the donut. For instance, it can speculate that a baker likely created the donut, and can predict what it would feel like to eat the donut or what the donut might look like if it was left for a month untouched.

Humans have mastered the art of looking at the world from a modeled perspective and the ability to model has become integral to how we think. Additionally, our social nature has reinforced this ability to model, since we use language to encode our models of our external world and can discuss them with other humans.

The Easy-Hard Problem of Consciousness vs. the Hard-Hard Problem of Consciousness