
Show HN: Carbide – A New Programming Environment - antimatter15
https://alpha.trycarbide.com/
======
antimatter15
Hey HN!

I'm one of the creators of Carbide, and I'm really excited to share it with
you all.

We're thinking of releasing Carbide as open source in the coming weeks if
there's a community interested in building stuff on top of it.

One of the areas we'd appreciate help with is adding support for different
languages— Python, Scala, Haskell, Rust, etc.

Other than that, general feedback / questions welcome.

We've scrabling to turn off jet-engine mode on the website :)

~~~
sushisource
One of the comments I always have when I see environments like this is that it
looks really neat to have all these adjustable sliders and partial debugging
and whatnot, but when you attempt to apply this to any truly useful program
(ie: Anything that performs side effects) it really starts to break down if
that side-effect isn't idempotent, like writing a file to a disk, or making a
network call you really only want to make once, etc.

Do you have any strategies for that, or is the idea that these features are
really only for testing functions that don't cause those sorts of side
effects?

~~~
voltagex_
I wonder if the debugger could be combined with a really good mocking
framework. That seems like a good idea for a "live" testing framework. Maybe
that's something that could be used to help prototype unit tests themselves.

------
kbart
The page is surprisingly uninformative. It took me good 5 minutes of looking
for "download" button before realizing that it's an in-browser IDE. A big "Try
it now" button on top of the page would do wonders. A short, one sentence
description of _what_ it is would also be helpful, because "new kind of
programming environment" reminds something from managers' meeting slides.
Anyway, good job and thanks for making it available to us, I was looking for
something like this few months back, I'll sure give it a try.

~~~
Elrac
Similar sentiment here. If I understood the not-very-explicit description
correctly, it's an IDE for Javascript, and Javascript only, right?

It's hard to believe, but somewhere in the world are developers using
languages other than Javascript.

~~~
helb
"We haven't launched support for other programming languages yet (rest assured
it's on our roadmap)"

"Our roadmap" is a link, but does not work… There however is a "Future"
section near the page bottom, with screenshots that indicate support for
Python, MIT Scheme, and something called Watlab.

~~~
Elrac
I missed that! Thanks.

------
chriswarbo
Looks like a cool project, but I can't scroll very far down the site before my
browser crashes. I've reproduced this several times, here's the terminal
output if it helps:

    
    
        $ conkeror https://alpha.trycarbide.com
        ......
        JavaScript strict warning: https://alpha.trycarbide.com/, line 603: SyntaxError: test for equality (==) mistyped as assignment (=)?
        JavaScript strict warning: https://alpha.trycarbide.com/, line 604: SyntaxError: test for equality (==) mistyped as assignment (=)?
        JavaScript strict warning: https://alpha.trycarbide.com/, line 605: SyntaxError: test for equality (==) mistyped as assignment (=)?
        JavaScript strict warning: https://alpha.trycarbide.com/, line 606: SyntaxError: test for equality (==) mistyped as assignment (=)?
        JavaScript strict warning: https://eponymous-labs.github.io/carbide-splash/static/main.js, line 162: SyntaxError: in strict mode code, functions may be declared only at top level or immediately within another function
        JavaScript strict warning: https://eponymous-labs.github.io/carbide-splash/static/main.js, line 201: ReferenceError: assignment to undeclared variable diff
        Console error: [JavaScript Warning: "window.controllers is deprecated. Do not use it for UA detection." {file: "chrome://conkeror/content/window.js" line: 331}]
          Category: DOM Core
        Segmentation fault

~~~
outworlder
Well, if the browser segfaulted, it is not the page's fault. It is the
browser's. No ifs or buts.

I'd suggest enabling core dumps and sending those to the Conkeror team,
assuming there's no bug filed for that.

~~~
pmontra
I know how this line of defense plays out with my customers if their
customers' browsers segfault on a page I wrote...

I fix the page ASAP to prevent the segfault and then file a bug to the browser
developers. If I don't, I lose the customer and somebody else will fix the
page anyway, maybe not filing the bug because it doesn't make money.

~~~
Erwin
Just how do you "fix a segfault" in your page? Do you immediately replicate
the user's exact computing environment, all down to the specific operating
system and perhaps browser plugins which might contribute, install a specific
version of the this obscure browser (Conkeror?) with debug symbols, fire up
GDB and understand why the complex C++ crashed based on the core dump?

That seems like an unlikely amount of effort. IME If you have some
"enterprise" tool with enterprise clients, there's typically going to be a
list of browsers which are supported and tested by QA.

~~~
pmontra
I'd rewrite the page in a way that it doesn't trigger the bug. Trial and
error, not the nicest of the days.

~~~
ybrah
For one customer in a sea of thousands doesn't seem too worth it in my opinion

~~~
pmontra
My customer is the one who runs the site, not the ones who browse it.

------
nostrademons
I think that something _like_ this will probably be the future of programming,
but Carbide itself needs to dial it back and focus on which data
visualizations give the biggest bang for the least obtrusiveness.

Apple's been moving in a similar direction with Swift playgrounds, and recent
Java IDEs (IntelliJ, and I think Eclipse) will display the values of variables
next to the line of code when you pause in the debugger. These are both useful
features. They get cluttered really quickly, though, and in the playground
case take you out of your normal development flow.

If you want this to be impactful, focus on delivering information at your
fingertips without delivering information overload. The core idea of being
able to inspect & manipulate run-time values alongside the code that generates
them is sound. The implementation - with lots of fancy gadgets that overshadow
the code itself - needs some design love.

~~~
sz4kerto
> I think that something like this will probably be the future of programming

Wait, no, that can't be. Maybe the future of programming for a subset of tasks
(like UI programming). What I'm doing in 95% of my time does not benefit at
all with 'visual programming'. Displaying values when you stop the debugger is
completely different and also quite limited in my case, because I'm working
with distributed systems, heavily multithreaded programs, etc. -- as many-many
other devs. In these cases, this kind of visual programming doesn't make too
much sense (or I can't see how it would).

Visualization is a very 'local' thing, it helps you understand the narrow
context of what you're working on, but when working with large systems, you
need to have the map in your head. Or something like that.

(Note: I think this is cool, I'm just arguing with the notion that this is the
future of programming. It's a bit like saying that the future of mathematics
is gnuplot. :) )

~~~
michaelscott
>"Visualization is a very 'local' thing, it helps you understand the narrow
context of what you're working on, but when working with large systems, you
need to have the map in your head"

This reasoning is equivalent to "a car is great for getting across town, but
if you're travelling long distances you need to have a horse-drawn vehicle".

Just because the current wave of "visual programming" approaches (which are
taken directly from Bret Victor, who works on these types of programming
issues, with little if anything added) only solve problems associated with
more UI-centred tasks, doesn't mean they have to stay there.

If you're able to keep a mental map of the system structure in your head it
means it can be visualised in some way. I agree completely it needs to be done
in a way that is context-specific (which is why the current solutions wouldn't
help you, as they're not specific to your context).

It's interesting that you're bringing this up, though, as there's clearly room
for expansion of this for programming situations that aren't things centred
around stuff like UI. I'd actually love to see a visualisation specifically
tailored to multithreaded programming

~~~
infinite8s
There was a whole research project at Stanford (Rivet -
[https://graphics.stanford.edu/projects/rivet/](https://graphics.stanford.edu/projects/rivet/))
which combined visualizations of code and hardware during execution and was
able to keep history (here's an example where they were looking at memory
stall issues
-[https://graphics.stanford.edu/projects/rivet/images/mview.gi...](https://graphics.stanford.edu/projects/rivet/images/mview.gif)).
And importantly, all the data and views were linked - for example, selecting a
region of time when the CPU was stalled for memory would highlight the
particular code in the source view that was currently executing. The system
was used to analyze mobile networks, memory profiling, superscalar processors,
and even debug the design of a GPU.

As an aside, a subsequent project in the lab called Polaris, built on the same
system, became the precursor to Tableau (a business intelligence tool).

The power of visualization is that it can take abstract data and map it to
visual features that our visual system can make sense of automatically without
much cognitive load. An example I often like to give - imagine you were
searching through my comment to count the number of 'e' letters. You would
have to perform a linear scan. But now imagine the 'e's were red. You would
almost instantaneously be able to jump from 'e' to 'e' and count them.

~~~
michaelscott
Fantastic set of info thanks! I especially love the linking idea; I think it's
key to understanding things from multiple perspectives, especially if you're
the only one/one of a few working on something.

Yeah quick visual decoding definitely needs to be the point of any
visualisation. Its core intent should be to impart clarity, particularly when
it comes to large datasets, because unlike machines we just can't process a
lot of data in its raw form.

Sadly, many visualisations seem to miss this and sometimes even further
complicate things.

~~~
infinite8s
Yes, exactly, the linking is really important. You can think of visualization
as a mapping from an arbitrary space representing data to a 1d or 2D space
representing pixel or image coordinates. That's what most charting software
can do easily. However, the reverse transform is as important for interaction,
and enables the user to work with the data instead of pixels on the screen.
It's similar to Bret Victor's ideas around interacting with live code -
without the inverse transform this becomes very difficult, as the user then
has to compute it mentally - either by looking at the axes and legends in the
case of charts, or the source code/variable viewer/stack view in e case of
code, before going back to the original data.

While contextual information is also important, a lot of different abstract
data types can be mapped to a fairly basic set of chart types (bar graphs,
line charts, and scatter plots can handle most categorical/numerical/temporal
combinations). For example, in the memory stall example above, there are only
2 types of visualization - bar charts and the source code views, yet in
combination they provide various projections of a 5 dimensional space ('code
position' x 'memory address' x 'processor' x 'metric[memory stall time]' x
'time'). The main issue is there is no easy tool to quickly
construct/deconstruct multiple different projections of a high-dimensional
space with linkage between them (here's a 2007 survey - [http://www-
devel.cs.ubc.ca/~tmm/courses/533-11/readings/cmvs...](http://www-
devel.cs.ubc.ca/~tmm/courses/533-11/readings/cmvsurvey.pdf))

~~~
michaelscott
Definitely interesting. The best visualisations can encode information in
multiple dimensions though, often as high as 5 or 6 (Minard's graphic of the
march of Napolean is probably the most well-known example, encoding data in
about 5 dimensions I think: [https://images.thoughtbot.com/analyzing-minards-
visualizatio...](https://images.thoughtbot.com/analyzing-minards-
visualization-of-napoleons-1812-march/minard_lg.gif))

That linking logic is an interesting point though... you almost need a Flow-
like system that can link the data display of one visualisation to another (or
all the others). A tool like that would be very useful.

~~~
infinite8s
Well, Minard's graphic is actually 2 charts - the top one maps
distance/abstract geography (2 dimensions), size of the army, and
time/direction of movement. The bottom one maps the temperature to time during
Napolean's retreat. It's tough to encode more than 3 separate dimensions on a
chart (usually 2 spatial axes and a color/shape/size axis) and have it still
be useful for analysis/presentation.

------
gnuvince
> Requires no installation or setup

This is _not_ something I want; if a product I use is available only via a web
site and the company goes under, the product goes away with it. If it's
installed on my hard drive, I can keep using the product.

~~~
estefan
I'd probably forget about it for that reason too. I mean, literally forget.

My bookmarks and bookmark toolbar are littered already. If I could download it
I'd have more of a chance of being reminded to see it and use it. Plus I'd
feel it'd be more secure, and I'd be able to work when offline (e.g.
commuting/travelling), so I wouldn't use it for those reasons.

It looks like it has some interesting ideas though (I especially like the look
of the nested debugging thing with probes).

------
jc4p
This looks like it could be cool. I'm mostly a plaintext editor kind of
programmer but a IDE that helps me get my job done better would obviously be
the better solution.

There's... a lot happening here though. What does:

> Comments live in a Rich Text sidebar #LiterateProgramming

mean? I played around with some samples and it seems that there's a method for
displaying text or something?

I was hoping it'd be an inline `// yeah I know doing +1 looks wrong but it's
because` --> automatic transcribing over to a sidebar but I don't know what's
actually happening.

What does:

> Imports modules automatically from NPM or GitHub

mean? Does it mean "import" in the sense that you don't have to write the
import statement, or in the `npm install` sense? What happens if I misspell a
package name and there is a malicious package under that name? Will it auto
install and auto run the post install scripts??

~~~
flukus
When did rich text and literate programming become synonymous? It seems to
have been very recently.

The best literate programming environment around is emacs org mode and it's
plenty text. I'm pretty sure Bjarne Stroustrup would be a plaint text kind of
guy.

------
wodenokoto
Looks interesting, but the website is so ressource intensive that I
practically can't scroll down on it. I gave up reading what it is.

~~~
sbuttgereit
I loaded the page and the fans on my laptop started to rev up. Unfortunately,
my laptop can overheat and shutdown...

Closing page and things quieted down. Resource intensive indeed!

------
monkmartinez
Cool looking site/project... However, the web page kicked the fans on my
laptop into jet mode.

Is this like Jupyter or built with Jupyter tech?

~~~
tholford
Same, Chrome task manager says 126% CPU for that tab :) Nonetheless, congrats
on the launch!

------
prance
I was pretty excited about LightTable (which has some similar ideas) when it
started out, but then Chris Granger went on to another project and LightTable
was left hanging. They open-sourced it, but developer uptake was slow
initially and there wasn't much progress. Commits/pull requests seem to be
better now (2 years on), but e.g. the blog is still very much inactive, and
the last release is more than half a year ago.

So for me, I'd only try yet another IDE if I have enough confidence that it
will live long enough. The commitment of the original team is of course a big
factor, but as was seen with LightTable and other projects, that can change
quickly. So I would require that either \- it is commercial and has enough
investment/backing, \- it is open-sourced and gets enough dev uptake quickly,
or \- I believe so much in the concept that I'd try it even if the other two
points are not satisfied.

Speaking of functionality, however, there isn't any mention of refactoring
capacities. To me, that's probably the #1 feature why I'd use an IDE instead
of just an editor in the first place. I'd consider the in-place partial
debugging display only as a nice add-on, but nothing I would throw out a
mature IDE with proper refactoring, search (for definitions, references) and
other typical IDE functionality for.

------
rasjani
There is, or was IDE with the same name:
[https://en.m.wikipedia.org/wiki/Carbide.c%2B%2B](https://en.m.wikipedia.org/wiki/Carbide.c%2B%2B)

~~~
tellarin
There was. Basically dead for a while.

That Carbide was exactly what I thought of when I read the tile. Many mixed
memories from my kind-of-later Nokia days. ;)

Kudos to the team behind the current one though. Looks great so far!

PS: Not only .c++, but also .j and a theme editor, Carbide.ui

------
NarcolepticFrog
I'm curious about how the backwards computations work - how do you detect when
the backwards computation can be easily calculated? For example, if we hash
some input string and then change the value of the hash, it should be very
difficult to do the backwards computation.

Does it literally do gradient descent on the input to try to match the output
(as is suggested by the backpropagation terminology?) Can it handle discrete
valued outputs?

~~~
NarcolepticFrog
I read further down the page - they use a quasi newton method to find inputs
that minimize the (squared?) distance between the desired output and the
output of the guessed input.

I guess this can only really be expected to work well when there is a input
that perfectly matches the output in a convex neighborhood of the starting
point. Pretty cool!

Looks like they also have support for a few other types of data, but it's not
described in the documentation. Apparently there is support for the backwards
computations on strings, nested objects, and you can declare inverses for
functions. There's also something mysterious called "cascading approaches".

I'm super interested to know more about how this works!

------
jomamaxx
First - super cool.

Second - I'm at a loss for exactly what it does. Sorry. I get the 1000 mile-
high view, and I get some of the super specific examples. But I'm not sure how
it applies to most js progamming which is much more mundane than the very
specific examples given.

Maybe you could add a section that takes a much more 'basic' introductory
approach?

Again, great work.

------
elliotec
But, why?

Like whats the purpose of using this as opposed to vim and a browser?

And what do they mean that it requires no installation or setup? Is it not a
native program?

How does one use this to give it a try?

None of this was clear after a few reads through that page.

~~~
RhodesianHunter
>And what do they mean that it requires no installation or setup?

This almost always means that it's entirely in-browser.

~~~
elliotec
You'd think, but that seems like a pretty weird way of saying it.

~~~
pbhjpbhj
Perhaps they've read a Marketing 101 piece on "sell the benefits not the
features"?

------
rajington
[https://alpha.trycarbide.com/new](https://alpha.trycarbide.com/new) is the
link to try it out. Not sure why it's getting so much hate, the widgets are
just icing on the cake, it's like tonic.dev on steroids. You only need to look
at the Python community to see how powerful notebooks can be.

------
pjmlp
Carbide was the name of the latest IDE version that Nokia produced for
Symbian.

Have you researched the name?

------
MadWombat
This seems like a really cool idea. Sort of like Jupyter notebooks the way
they should be done.

I agree with the sentiment that the website could be a bit more comprehensive.
I saw "requires no installation" immediately, but then I started looking for a
link to actually try it out and couldn't find it. And only then I realized
that you can only try it on example notebooks. Or can I write my own code and
I just didn't find the way to do it?

I tried a couple of example notebooks and unfortunately it was painfully slow
to do anything. XOR network cell took some 5 seconds to process. Typing code
was laggy, sliders took really long time to update etc. The C-Enter shortcut
didn't work, I had to click the button with my mouse. So it seems like you
have an awesome project, but it still needs some work.

------
ergest
Very cool! Seems similar to what Brett Victor demos here:
[https://vimeo.com/36579366](https://vimeo.com/36579366)

~~~
electriclove
Lol, I wrote the same exact comment (just 2 hours later)!

------
fake-name
"A new programming environment" _for javascript_.

Welp, there goes my interest.

~~~
outworlder
Not only for javascript. Scroll down.

~~~
elliotec
Yes it is.

> We haven't launched support for other programming languages yet (rest
> assured it's on our roadmap).

~~~
catshirt
pretty short sighted to have no interest in a novel/progressive IDE because it
doesn't support your language yet.

~~~
TylerE
History suggests otherwise.

it's one thing to be short sighted, and another to be realistic given a bevy
of similar past projects that went nowhere. When was the last time you heard
about Lighttable?

~~~
ModernMech
The Lighttable team realized they were on the wrong path. Eventually, the
semantics of imperative languages are completely at odds with the goals of a
supercharged development environment like this. That's why they pivoted to
Eve: [http://github.com/witheve/eve](http://github.com/witheve/eve)

I'm sure the Carbide guys will figure that out on their own.

~~~
prance
LightTable started as a clojure/-script IDE which are not imperative but
functional languages.

------
taneq
Wow, the back-propagation thing is very cool! Although it would take me a long
time to trust something like that enough to use it.

Is there any way to use it offline? (I guess if it's open sourced then at the
least, you could run it on a local web server.)

------
RBerenguel
Every time I see a project in this space I wonder why I never got to finish a
similar (in spirit) one I had. Multi-language REPL (with "data translation"
across languages for specific data types, so you could pass a javascript array
to APL, or load a CSV file as a function in APL and send a column as a
Javascript array) and built in visualisations for standard types (a matrix
could show a heatmap, for instance, vectors barplots or sparklines, specific
arrangements of JSON were chord plots).

The goal was just to make a tool where small-scale data munching was easy (so
you could get a plot of a small timeseries right now, no matplotlib, no
ggplot2, no gnuplot: just having the variable on the screen meant the graph
was there automatically) and as painless as possible. Of course, I didn't
advance much because I needed to rewrite everything that I had working so it
was easy to extend, and I found another shinier thing to work on... But that
still sits in my "someday" code folder.

For now, Apache Zeppelin is almost there in terms of what I want, and has
spark in it so...

~~~
infinite8s
I've had that dream as well, although skipping the multi-language part.
Something like an RStudio for python combined with Tableau like interactivity
on manipulating and visualizing data (why would you limit yourself to static
graphs on a computer, especially when the system already has access to the
data!!).

If you can share, what was the shinier thing you found?

~~~
RBerenguel
The closest to production-ready dynamic graph-style is Apache Zeppelin, which
is pretty nice and I use almost daily at work in EMR clusters.

And from time to time I still think how I'd redesign my own thing from scratch
yet again.

------
hibbelig
How does this compare to LightTable?

~~~
ibdknox
Seems similar in spirit :) They do a version of one the original demos:
[https://youtu.be/gtXpOD6jFls?t=49s](https://youtu.be/gtXpOD6jFls?t=49s)

~~~
zubairq
Yes I noticed this too... it looks like Carbide and the world is catching up
to Light Table finally! :)

------
nikki93
This is awesome!

One of the things I've been thinking about lately is what are the languages
that lend themselves to "true" livecoding. Like what if you want to change the
class hierachy while you're already in a game and the objects are moving
around? What if you wanna move a door in the in game editor mid-level but
merge this edit back at the start of the level?

Turns out livecoding and live property editing interfaces are an entry into
thinking about the next question: what are the abstraction and logic storage
models that allow for very radical live coding changes as your app is still
running and help you explore?

So far I have liked the idea of prototype inheritance but with the objects
stored in a reduxy immutable situation. It seems to get at both the functional
and OO side of the "expression problem."

------
rezashirazian
This is feels somewhat similar to Swift's playground.

I think every language should have something like this. Now that we've been
compiling and highlighting errors in real time for such a long time, it only
makes sense to do the same at run time and provide real time visualization of
the program in action.

------
sebastianconcpt
I love instant feedback, it really changes the way you can create code because
your cognitive system is unloaded of many assumptions to rely on real results
(in-place evaluated feedback). For someone that used to work in Smalltalk this
is a move in the right direction in IDE design.

------
scottmf
I must be missing something. Link to download or Github?

~~~
aljones
There is an examples section which also has a link to create a new empty
notebook.

[http://alpha.trycarbide.com/new](http://alpha.trycarbide.com/new)

~~~
elliotec
Seems like that'd be more prominent considering the URL is "trycarbide"

~~~
GlueChemist
Seconded, I had to search this thread to find out how to try it...

------
pavlov
Nokia used to make an IDE for the Symbian operating system called Carbide:

[https://en.wikipedia.org/wiki/Carbide.c%2B%2B](https://en.wikipedia.org/wiki/Carbide.c%2B%2B)

The memory of Symbian C++ makes me shudder.

~~~
tellarin
I recognise the feeling.

I have to say that there are also some nice memories from that time mixed in
too. At least in my case. :)

BTW, there were also Carbide.j and Carbide.ui

------
electriclove
Very cool! Some of this reminds me of the talk that Bret Victor gave at CUSEC
2012: [https://vimeo.com/36579366](https://vimeo.com/36579366)

------
rkho
On a mobile webview I noticed that the auto play video took over the screen
and opened several instances that I had to keep closing one after another. I
didn't get much further after that.

------
zubat
OK. I don't know if Carbide was designed for this or not but I suddenly had a
vision of a data viewer widget that is just an entire notebook system with a
custom initial state. That would be pretty handy and I could imagine folks
chucking it into a web page without extensive work.

For applications I have no expectations that these kinds of systems scale up
or give the touted wins. But they are great for easing the exploration
process.

------
hugozap
This is great. Tools like this are useful when exploring a problem, it's very
handy to have the instant feedback. Using the widgets to tweak things is also
very cool, I could definitely integrate this into my workflow ( if I can
install it locally ).

------
stockkid
Feedback: I did not want to read all the texts (it's too much) and just wanted
to try it out. But I couldn't easily find out a way to try. After scrolling
down a lot, I finally found some example notebooks.

Maybe 'try out an example' button at the top?

------
Waterluvian
This looks perfect for live demos and interactive gists of relatively
straightforward code.

------
outworlder
The terminology is interesting. "Notebooks", "Kernels"...

So, Jupyter-like?

------
pmontra
The most interesting feature is how it computes the inverse of the program to
yield the inputs that produce a given output. I'm not sure if it's useful but
it's cool.

But saving to public gists, no thanks.

------
rch
Seems like this would be a great foundation for building a CMS backend
interface. I'd try it in that context before calling it a programming
environment.

------
fiatjaf
Seems awesome. I will probably never use it because it is not flexible enough
to run anywhere and on VPSes without friction, but I sincerely hope you
succeed.

------
polskibus
Would love to see an example on how to use it with D3. Live refresh is very
useful when working on d3 visualizations scripts.

------
peternicky
Awesome work!! Please release the source!

------
partycoder
Reminds me of the "manipulate" package for R. This takes the concept really
further though.

------
donretag
Am I the only that thinks of Union Carbide (and the disaster) when they see
the word carbide?

------
didibus
Is it only a notebook style environment? Or can it be used as a modern IDE for
real programming?

------
pbreit
Looks interesting.

What sorts of use cases were you envisioning?

Would it work or make sense for ad hoc mongo querying?

------
kiliancs
The site skyrocketed Firefox's CPU usage, unfortunately.

------
_prototype_
Their neural network example is broken

------
skorkmaz
sorry for pointless comment but looks really cool

------
cercatrova
Open source?

------
kasajian
dafuq!

------
antar
Looks limiting.

