{"id":1537,"date":"2016-12-16T13:57:49","date_gmt":"2016-12-16T18:57:49","guid":{"rendered":"https:\/\/risacher.org\/jfdi\/?p=1537"},"modified":"2016-12-16T13:59:03","modified_gmt":"2016-12-16T18:59:03","slug":"ttyx","status":"publish","type":"post","link":"https:\/\/risacher.org\/jfdi\/2016\/12\/ttyx\/","title":{"rendered":"ttyx: an updated tty.js"},"content":{"rendered":"<p>I created program this week called <a title=\"ttyx on github\" href=\"https:\/\/github.com\/risacher\/ttyx\">ttyx<\/a>, which is an updated version of\u00a0<a title=\"tty.js on github\" href=\"http:\/\/github.com\/chjj\/tty.js\">tty.js<\/a>. \u00a0Tty.js\u00a0is an<\/p>\n<p style=\"margin-bottom: 1.71429rem; line-height: 1.71429;\"><span style=\"font-size: 1rem;\">excellent web-based terminal emulator developed by <\/span><a style=\"font-size: 1rem;\" title=\"chjj on github\" href=\"https:\/\/github.com\/chjj\">chjj<\/a><span style=\"font-size: 1rem;\"> (Christopher Jeffrey), similar in concept to <\/span><a style=\"font-size: 1rem;\" title=\"Anyterm.org\" href=\"http:\/\/anyterm.org\/\">anyterm<\/a><span style=\"font-size: 1rem;\"> or <\/span><a style=\"font-size: 1rem;\" title=\"Ajaxterm on github\" href=\"https:\/\/github.com\/antonylesuisse\/qweb\/tree\/master\/ajaxterm\">ajaxterm<\/a><span style=\"font-size: 1rem;\">, but implemented in node.js on the server side.<\/span><\/p>\n<p style=\"margin-bottom: 1.71429rem; line-height: 1.71429;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-1545\" style=\"margin-top: 0.857143rem; margin-bottom: 0.857143rem; margin-left: 1.71429rem;\" alt=\"screenshot of ttyx\" src=\"https:\/\/risacher.org\/jfdi\/wp-content\/uploads\/2016\/12\/ttyx-small-300x139.png\" width=\"300\" height=\"139\" srcset=\"https:\/\/risacher.org\/jfdi\/wp-content\/uploads\/2016\/12\/ttyx-small-300x139.png 300w, https:\/\/risacher.org\/jfdi\/wp-content\/uploads\/2016\/12\/ttyx-small-624x290.png 624w, https:\/\/risacher.org\/jfdi\/wp-content\/uploads\/2016\/12\/ttyx-small.png 630w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p><!--more--><\/p>\n<p>The only problem with tty.js is that apparently chjj doesn&#8217;t use it himself any longer, as he hasn&#8217;t been actively maintaining it for some time. \u00a0(I&#8217;m guilty of similar neglect with respect to <a href=\"https:\/\/github.com\/risacher\/putty-cac\/\">PuTTY-CAC<\/a>.) Many of tty.js&#8217;s underlying components, such as <a href=\"http:\/\/socket.io\">socket.io<\/a> and <a href=\"http:\/\/expressjs.com\/\">Express<\/a> have fielded new versions, but tty.js hasn&#8217;t been updated to use those new versions. \u00a0Similarly, the actual terminal emulator code is in <a href=\"http:\/\/github.com\/chjj\/term.js\">term.js<\/a>, but the inevitable updates required for current browsers haven&#8217;t happened in that project either. <a href=\"https:\/\/www.sourcelair.com\/\">Sourcelair<\/a> created a fork of term.js called <a href=\"http:\/\/github.com\/sourcelair\/xterm.js\">xterm.js<\/a> that addresses many of the shortfalls of term.js.<\/p>\n<p><span style=\"font-size: 1rem;\">So, this week I created <a title=\"ttyx on github\" href=\"https:\/\/github.com\/risacher\/ttyx\">ttyx<\/a>, which replaces term.js with xterm.js and also is updated to use current versions of socket.io and Express. \u00a0It is available at <a href=\"https:\/\/github.com\/risacher\/ttyx\">https:\/\/github.com\/risacher\/ttyx<\/a>. It is not yet available in npm, although that will hopefully happen at some point.<br \/>\n<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I created program this week called ttyx, which is an updated version of\u00a0tty.js. \u00a0Tty.js\u00a0is an excellent web-based terminal emulator developed by chjj (Christopher Jeffrey), similar in concept to anyterm or ajaxterm, but implemented in node.js on the server side.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,11],"tags":[],"class_list":["post-1537","post","type-post","status-publish","format-standard","hentry","category-it","category-oss"],"_links":{"self":[{"href":"https:\/\/risacher.org\/jfdi\/wp-json\/wp\/v2\/posts\/1537","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/risacher.org\/jfdi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/risacher.org\/jfdi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/risacher.org\/jfdi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/risacher.org\/jfdi\/wp-json\/wp\/v2\/comments?post=1537"}],"version-history":[{"count":9,"href":"https:\/\/risacher.org\/jfdi\/wp-json\/wp\/v2\/posts\/1537\/revisions"}],"predecessor-version":[{"id":1548,"href":"https:\/\/risacher.org\/jfdi\/wp-json\/wp\/v2\/posts\/1537\/revisions\/1548"}],"wp:attachment":[{"href":"https:\/\/risacher.org\/jfdi\/wp-json\/wp\/v2\/media?parent=1537"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/risacher.org\/jfdi\/wp-json\/wp\/v2\/categories?post=1537"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/risacher.org\/jfdi\/wp-json\/wp\/v2\/tags?post=1537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}