Teemoji: Like Tee but with Emojis
45 comments
·January 27, 2025netsharc
MasterScrat
You mean, like the fastapi documentation used to be?
jeffwass
Your Japan comment is a bit strange considering that the Japanese writing system itself uses Kanji which are effectively the OG emoji (well really Chinese is the true OG and emoji are more of a modern take on kanji/Chinese pictographs).
That said, why is a Japanese sentence written using one set of pictographs respectable and proper, but another set of pictographs means the writer is in kindergarten?
notreallymy
That's funny! I've made a "tool"[1] that "automatically" adds emojis to text. It is even worse for your example! It adds two train emojis for some reason. "Yesterday we flew [plane emoji] to Japan [Flag of Japan] and took[train emoji] the train[train profile emoji] and saw Mt. Fuji [emoji of Mt. Fuji]"
I did a ShowHN because I thought it was a good idea but it flopped. Maybe I should pivot my idea toward kindergarteners!
lubujackson
Fun idea! Maybe re-target as a "de-Boomer my text" app...
fsckboy
it sounds like a person who does not know their emojis: Japan is the only country to have its geography available as an emoji, so why wouldn't you use it in this case instead of the flag?
PaulHoule
My RSS reader has an autoposter to post to Mastodon where I always try to choose an appropriate emoji for a post
I've been thinking about training a model, maybe a T5 to automate the task. I've tried asking Microsoft's Copilot to do it, and it is ok but makes decisions that I wouldn't make. I argued with it a lot and couldn't get it to draw ⁰₀⁰₀⁰ as an imitation Olympics logo and had to do it myself.
willswire
Hey HN! I've been playing around with Apple's CoreML framework for some personal projects, and wanted to see how it might work in a CLI context. This is really just something fun I did over the weekend for sh*ts and giggles. I hope you enjoy!
mattbaker
This made me grin and I love that it did. Sometimes our profession can be a little short on whimsy and I think projects like this are actually really important! I’m looking forward to using this :)
ascorbic
An AI-powered dev tool? I expect to see this in the next YC batch
jerf
It may have taken 56 years, but this comprehensively resolves the question about whether shell is better than GUI in favor of shell. Thanks to the endless composability of shell, just this one program finally fixes the biggest flaws in text file handling in Unix, but the GUI equivalent would be quite complicated and composes poorly. This vindicates all of the original developers of UNIX once and for all.
TeMPOraL
That's not fixing the biggest flaw, it's just addressing a small set of specific use cases.
If anything, it's a bandaid that highlights the biggest flaw of UNIX philosophy: everything is passed as unstructured text. Because of it, half of shell programming is just piecing together ad-hoc, buggy parsers that interpret the input, possibly rearrange it, and then dump it down the pipeline as unstructured text, so the next step can do it all over again. And then, of course, every CLI program has to do that too.
This program is using a machine learning model to parse its input; while this may be the only reasonable way to go about guessing emojis from arbitrary text, I can easily see people doing the same to parse outputs of Linux CLI tools at runtime, because it looks much more pleasant and might be even more reliable than writing input parsers by hand. Let's pause here to consider the absurdity of that situation.
jerf
Mmmm... perhaps a </sarcasm> was called for there. Clearly it isn't the biggest flaw of any system that it fails to properly label everything with emojis automatically. Indeed, I think I fear the day when I see an editor pop up on Hacker News and it is listed as a feature that it doesn't use machine learning to automatically splatter whatever open standard GenMojis turns into everywhere into its input, because of what it implies about everything else....
yunruse
I don't use PowerShell often at all, but this IMO is one thing it gets right, by piping .NET objects and implicitly piping to `Out-Default` at the end.
Of course this is another standard that tools would have to be incredibly careful to keep track of, but JSON is decently mature and a bunch of modern tools can operate in it, so at least there's slow progress away from the plaintext quagmire.
imiric
And yet it is precisely that unstructured text which allows programs to be infinitely composable, whether they were written 30 years ago, today, or are yet to be written. This is what allows programs like teemoji to work with any other program, without directly supporting it.
Besides, what format should the data be structured in? In the 1960s and 70s, it might've been GML. In the 80s, maybe SGML. In the 90s, XML, and later maybe JSON, or... shudder YAML? Or, no, it obviously should've been some binary format.
OK, so let's say everyone agrees on a single format for several decades. Should all programs written for all those shells that support it also support the data format? Even if that's handled by shells and not the programs, there will surely be bugs and incompatibilities in each shell implementation, leading to fragmentation.
Furthermore, will the data format support versioning? Will it be backwards compatible? Will all programs or shells need to support this? Will users have to mix and match, and experience all sorts of compatibility issues?
So, clearly, unstructured text is the only "format" that is both flexible and future proof enough, at the expense of convenience for the user to glue programs together. I'd rather have that than have to depend on the structured format du jour that will have to be continuously maintained and supported by all programs in the ecosystem.
Besides, there are projects like Nushell and Murex that wrap the input and output of existing programs or write their own to support piping structured data. I'm not a big fan of them, but it points out that unstructured data is not some UNIX flaw, but a deliberate design decision which is IMO partly what enabled it to proliferate in the first place.
Maintaining a shell that supports piping structured data can only be done by a single entity that oversees the entire ecosystem, like Microsoft does with PowerShell, or the above mentioned projects. That is the antithesis of the UNIX philosophy where disparate tools can be written by anyone, yet somehow still be made to interoperate by the user. It's also a gargantuan project that realistically not even mega corporations can successfully maintain without limiting the user or introducing bugs. Plus it will always be a bottleneck for adding new tools to the ecosystem. For these reasons I don't foresee any of the structured data shells to be nearly as popular as UNIX shells have been and will continue to be 30 years from now.
hnlmorg
I feel you’ve gone on a tangent there. Particularly your unrelated comment about using of using ML because people are too lazy to write parsers.
That all said, I don’t really disagree with any of your individual points. But teemoji is clearly not meant to be considered a serious tool so I wouldn’t be too critical of UNIX that this tool exists.
TeMPOraL
I'm not critical of UNIX for this tool specifically, and I think it would be useful even if UNIX did things differently - a "pick best fitting emoji for arbitrary line of text" is a well-defined task, and I hit scenarios where I'd wish I had such tool surprisingly often.
donaldihunter
/usr/local/bin/teemoji: line 2: /usr/local/Cellar/teemoji/0.0.4/libexec/teemoji: Bad CPU type in executable
:sadface:
internetter
intel?
fsckboy
my major and minor complaints are, in order:
tee does something very specific, it makes an unmodified copy into a file (one branch of the plumbing tee-joint) as it passes the stream to stdout (the other branch); as opposed to sed or awk or even grep, et al, which modify the stream. How in hell is this inspired by tee which does not modify its inputs?
and who capitalizes Tee?
iforgot22
Because it writes to a file like tee.
_nalply
Does it produces the infamous emoji if a certain expletive occurs in the input?
By the way, I use that emoji to test whether astral planes are handled correctly.
I need to recover from the cognitive dissonance now...
neomantra
This is so cute and funny and interesting. Thanks for making and sharing.
I was doing `echo cat | teemoji` tests and it would work, but ironically 'echo happy face | teemoji` and the like didn't work so well for many other obvious single-word emojis. But it did a "checkered flag" for "I got the job done".
willswire
Glad you enjoy it! There are some inconsistencies/surprises for what emoji gets suggested my the model. I’m hoping to generate some better training data and refine the outputs in the next release.
kpcyrd
I wish I could get this on Linux </3 Any ideas how to get there (without reaching out to network apis, like openai)? I assume since it's built on Apple's CoreML framework it's not possible?
sanbor
I am pretty sure you can get the same result using ollama. Like “cat emojiprompt.txt input.txt | ollama run llama3 | tee output.txt”
nilamo
The training data is in the resources, so you could use that to train a model locally and invoke it.
willswire
I’ll have to look into this; it’s something I’d love to add support for if possible!
gherard5555
I feel like this defeat the goal of emojis and icons: highlight important informations for our brain to process. This is just an overwhelming amount of emojis for me, but I guess it has its usecases
The following is a "Get off my lawn!" comment:
When I was in kindergarten there were tasks where you'd get a paragraph of text where you had to fill in blanks, and next to those blanks were pictograms of whatever noun was expected.
Whenever I see people overuse emojis, for example "Yesterday we flew [plane emoji] to Japan [Flag of Japan] and took the train [bullet train emoji] and saw Mt. Fuji [emoji of Mt. Fuji]", I always think, "This person is still in kindergarten."...