Hacker News new | ask | show | jobs
The HTTP TTY (htty.github.io)
168 points by senorgusto 3937 days ago
13 comments

Looks cool, but—

The website lags on my laptop. Scrolling lags. Why does scrolling lag? How?

What's going on with the internet these days...

I fiddled around with the code and I think I found the reason for the lags:

The "stylesheets/styles.css" file contains the following rule at the beginning:

  body {
    ...
    background: url('data:image/png;base64,...') fixed;
  }
If you remove the "fixed" attribute it's... fixed! (Oh, the irony...)
Courtesy of https://fourword.fourkitchens.com/article/fix-scrolling-perf... , remove the fixed background and instead place it in its own layer with will-chance: transform.

  .wrapper::before {
    content: ' ';
    position: fixed;
    height: 100%;
    width: 100%;
    top: 0;
    left: 0;
    background: url('data:image/png;base64,...');
    will-change: transform;
  }
Tested with Chrome dev tools, the repaint troubles disappear. Unfortunately only supported in Chrome, Firefox, and Opera. But just checked, and at least in Chrome the performance problem goes away with this solution even with the will-change removed. YMMV
That's a bit odd, what browser is this? The fixed background should be handled by compositor layers, and while it is certainly more expensive than having a scrolling background, I'm surprised it makes the experience unusable.
Unusable is a bit extreme a description but I also experience the comparatively slow scrolling. It's worse at the top of the page.

It's not a Mac thing like other commenters suspect---I'm on Linux, using Firefox.

There's no javascript on the page at all (with the exception of two IE-compat scripts). The CSS also looks tame enough - a data uri, -webkit-font-smoothing and one Google web font are the only vaguely notable things.

Could be a browser bug on your system? (I see no lag of any kind)

There's also this script:

http://htty.github.io/htty/javascripts/scale.fix.js

which appears to add a 'gesturestart' event, and a weird conditional comment at the bottom that shouldn't appear for non-IE, but whose condition is to explicitly run the function defined in that script in non-IE browsers...

I get the lag too. MBP 15" Late 2014.
No lag here, Mid 2015 MBP 15" driving 2 27" Thunderbolts.
Definitely lagging here, brand new 12" macbook running chrome.
I think it's a mac thing, at least partially - no lag on Windows running Chrome or Linux running Firefox.
This looks like a fantastic, creative, and polished application for learning and debugging. I'd recommend using this to my network friends.
Nice idea/tool :). I mainly use httpie now, does it have any clear advantages over httpie?
Looks cool!

Any non-ruby alternatives with similar features?

I use HTTPie which is similar and easily installed through pip.

https://github.com/jkbrzt/httpie

HTTPie looks awesome, thanks for the tip!
I like httpie a lot personally, but I have also used Bat (if you like Go better than Ruby or Python)

https://github.com/astaxie/bat

Really cool, appreciate the link!
curl in verbose mode.
Why?
From my own experience:

Sometimes installing an entire programming language just to use one tool is not worth the time I could possibly waste just trying to figure out how to get it working (assuming it works). Instead looking for alternatives built around tech that's already available in my system makes more sense to me, because of a higher chance of familiarity and the benefit of less time possibly wasted.

There's also the curiosity of wanting to see the project implemented in a language you're familiar with.

This is why I advocate that software authors package their software for a variety of OS's in their native format. Yes, technically anyone can use Ruby gems or Python eggs or wheels or whatever Go calls their packages, but practically if I can apt-get/brew/emerge/rpm your package, I don't care what language it is written in. It is more effort but it makes a big difference in adoption IMO.
> whatever Go calls their packages

Just fyi, but go doesn't have packages (in this context). Just native binaries with no dependencies.

Well, it has `go get foo` which I'd consider a kind of installer/package manager. That's what I'm referring to since I've seen a good chunk of Go software distributed this way. The README usually says "install Go, then run `go get foo`".

Edit: in fact https://golang.org/doc/code.html refers to this as "Remote packages".

> Sometimes installing an entire programming language just to use one tool is not worth the time I could possibly waste just trying to figure out how to get it working (assuming it works).

That's why I would love to see more Docker containers and docker-compose.yaml files for tools shared on HN. A Docker container for this would be super simple to build using an official Ruby Docker container and it would save so much time for anyone who wants to try the tool.

I'm so sick of people wanting to package literally everything as a Docker container. That assumes:

- You're running Linux (or have access to a Linux box)

- The box running Linux is x86_64

- You have a modern kernel set up

- The box has a bunch of ram

- The box has a bunch of disk space (for installing Docker)

Docker forces you to have modern Intel-based hardware. Which excludes people with stuff like the Novena[1] or an old Thinkpad (because 32bits).

- [1]: https://www.crowdsupply.com/sutajio-kosagi/novena

Docker for a command line tool? I thought docker was more for your public facing service sort of thing. Does it even have a full on terminal, being a container?

I'll be honest I've not been keeping up with Docker. It shows, right?

A Docker container is like chroot, but portable. So yes. You can do

    docker exec -it $NAME /bin/bash
to get a shell in a running container, or

    docker run --rm -it $NAME /bin/bash
to get a shell in a new container that will remove itself upon exit. Neither of these require your docker host to be local.
-t when running a docker container allocates a pseudo-tty.

Docker is useful for trying out cli interpreters like this, iojs, or any thing else of the sort. I wouldn't want to use docker if I planned on keeping it around to use more than a couple of times though.

Well, I've never encountered an ecosystem before where it is so totally painful to install and maintain programs coming from there. It's not necessarily the language but the community mindset that doesn't seem to care one tiny bit about backwards compatibility.

Say I want to run two programs an a server, both written in Ruby. Those programs depend on a bunch of libraries. Ok, so I go on and just install those libraries. WRONG. The programs need specific versions of those libraries (both of which differ from the one coming with my Linux distro) and there's no single library version that works with both of them. To make things worse, one program needs a different version of the Ruby interpreter than the other. Only one of those is included in the Linux distribution I'm running.

So instead of being able to (at least partially) rely on the maintenance done by my Linux distro, I'd have to maintain my own Ruby interpreters and libraries. Yeah, right.

For that reason I consider running Ruby programs a liability. Sure, you have to deal with stuff like that everywhere but I never encountered an ecosystem where things are that bad and things break with any other update. I've heard the Javascript/Node people do an equally crappy job but I'm not going to find out personally.

So while I saw a couple of quite nice things written in Ruby, we're not going to use them if their maintenance is such a pain.

I get sad when I see a ruby tool, and don't bother. I'm lazy.

The ones I've tried have been dependant on a specific version of ruby. So you have to work through that. I'm not a resident of the ruby ecosystem, and I don't want to figure out the "why didn't you just" method of managing that. As the saying goes, it's hard to remember your objective was to drain the swamp when you're up to your ass in alligators.

IIRC, vagrant just includes the version of ruby it depends on. Or maybe it just includes a ruby in case you don't have one. I like and use vagrant.

telnet?
Very good!!!

Can I pre-setup a environment? To debug my service I need to go always to some address, set a referer header, disable SSL and set a cookie before starting. I would be awesome to save a state e continue from it everytime.

Looks nice, took me a little while to get http://httpbin.org/ back out of memory / browser history when I see this.
Oh wow. This is going in the bookmarks. Last time I did REST work, I had to make do with CocoaRestClient and Swagger, and neither were exactly convenient for some things.
The cookie and auth management alone makes this worth using. Really fantastic program, will definitely displace my usage of various Chrome extensions to get the job done.
Slightly off topic, but does anyone know the name of the ASCII Art font used in this application's banner?
It's two different ones.

"HTTY" appears to be written in fraktur. "The HTTP TTY" appears to be written in "grafitti"

The standard figlet fonts are here: http://www.figlet.org/examples.html

Here's the entry on fraktur from the figlet fonts library: http://www.jave.de/figlet/fonts/details/fraktur.html

I don't think there is any special font used for the ASCII art...

You aren't asking for a font that produces ASCII art are you? If so then you might misunderstand how ASCII art is produced.

I think you're the one misunderstanding things here. There are most certainly such things as ASCII art fonts. Here's a very simple one: https://gist.github.com/dmd/6c57d30c1a38c611a99b
You're quite confused - please see my response, but he was looking for the FIGLET fonts that produced the "ascii art" text.
This is awesome for exploring an API. And, apropros of nothing, nice example site choice. :D
Very cool project, thanks for sharing! :)
"Julia Child maneuver", nice
A very nice tool!