HN user

DougHaber

149 karma

http://www.leshylabs.com

Posts2
Comments28
View on HN

I have two projects that I'm hoping to release in the months ahead. These are both pretty pointless but fun projects.

One is a TRS-80 Model I emulator in JavaScript called Trash80. About 10 months ago I started this project just for fun while experimenting with what now seems to be called agentic loops. I got things working pretty well with the Z80 passing the ZEXALL suite and a lot of real TRS-80 software running fine. It sat for months untouched before I decided it is worth releasing and recently started it up again.

I didn't want to release it without a ROM, so I rigged up some agents to build a clean-room style L2 ROM w/ a fairly complete BASIC and even readline-style control commands, history, and a proper cursor. That went very well, but the agents cheated on floating point and implemented some weird Q5.2 like-thing. I told them to fix it, but I guess I didn't give clear enough instructions because they replaced it with a BCD hybrid monstrosity instead of proper floating point. The proper floating point is now underway, but I'm mostly using excess Codex credits before they expire, so it's only moving forward when I have credits I don't need.

I also built a silly ASCII fractal browser in Z80 assembly so that I can ship with a virtual disk that has software on it. The emulator works in the browser and the terminal. Unicode sextant block graphics map very well to TRS-80 Model I semigraphiccs/squots, so it really does run everything very well in the terminal, even games. I also added a line-mode for line-based applications, so you can use a readline-like interface and feel like it's native terminal app as well, though that has some issues I need to fix. And of course, you can shebang TRS-80 BASIC files and run them through the emulator too.

Another project was a demo of chromesthesia, a form of synesthesia where sounds trigger experiences of color. I thought it was done and ready to release, but then I had a new idea. The visualization while cool, was kind of boring. I decided to replace it with an attempt at a semi-physically accurate cymatics simulation with artificial coloring based on chromesthesia. Cymatics is the practice of making sounds visible by vibrating a surface, such as a plate with sand on it. As the sound changes, symmetrically interesting patterns form and evolve. I've got something working now with wave generation and microphone input, but sometimes it gets a bit stuck and stops evolving as it should, so I have to find time to figure that out.

Currently all unreleased, but when they do release it will be at www.leshylabs.com. I sometimes post updates on X, but not too often. (https://x.com/LeshyLabs)

Years ago, I made one of these at an hackathon style event for developing HTML5 gamedev tools. I didn't know much about audio programming at the time, so I read descriptions of what parameters were and then wrote code that I thought would work similarly. I got enough wrong where the end results sound a bit different than other tools, occasionally in a good way.

This predates the WebAudio API, and so it builds data URLs as WAVs instead. Every sound can be represented as a short string, and the tool can be used as a library that procedurally generates the sounds from the strings. It also has a "song mode" where notes can be provided to guide the sound, which makes certain types of more complicated sounds possible to make, including jingles and short songs.

It's definitely dated now, but if anyone is interested, you can find it here

https://www.leshylabs.com/apps/sfMaker/

See the "Example Sounds" at the bottom of the page to hear what it can do.

I did some experimenting with this a little while back and was disappointed in how poorly LLMs played games.

I made some AI tools (https://github.com/DougHaber/lair) and added in a tmux tool so that LLMs could interact with terminals. First, I tried Nethack. As expected, it's not good at understanding text "screenshots" and failed miserably.

https://x.com/LeshyLabs/status/1895842345376944454

After that I tried a bunch of the "bsdgames" text games.

Here is a video of it playing a few minutes of Colossal Cave Adventure:

https://www.youtube.com/watch?v=7BMxkWUON70

With this, it could play, but not very well. It gets confused a lot. I was using gpt-4o-mini. Smaller models I could run at home work much worse. It would be interesting to try one of the bigger state of the art models to see how much it helps.

To give it an easier one I also had it hunt the Wumpus:

https://x.com/LeshyLabs/status/1896443294005317701

I didn't try improving this much, so there might be some low hanging fruit even in providing better instructions and tuning what is sent to the LLM. For these, I was hoping I could just hand it a terminal with a game in it and have it play decently. We'll probably get there, but so far it's not that simple.

Simulmedia | New York, NY | Onsite | Fulltime

We are building a best-in-class advertising platform for brands and advertisers to take full advantage of the massive reach on television. This is an opportunity to join a team of amazing engineers and data scientists.

We are currently looking for:

* Senior Software Engineer, Core Platform

https://jobs.lever.co/simulmedia/3f5416b2-b43b-4145-8017-fbb...

* Senior Software Engineer, Applications

https://jobs.lever.co/simulmedia/9c18cea4-d874-44c1-9a9f-343...

* Senior Software Engineer, Data Services

https://jobs.lever.co/simulmedia/25aa75bf-ee70-4ad4-8bf2-726...

* Senior Software Engineer, Machine Learning

https://jobs.lever.co/simulmedia/a0337745-ac19-4b59-b3e1-c84...

Please apply directly through: https://www.simulmedia.com/careers/

Tor Browser 8.5 7 years ago

Sadly, most of the replies you've gotten are terribly biased or uniformed. It is a good question. I'm not connected to any of this, so this answer is solely from my own understanding.

For those that don't know, the Brave browser has Tor tabs, which route through Tor. It also has the standard private tabs. Tor support currently exists only on the desktop Brave browser.

Here is the announcement: https://brave.com/tor-tabs-beta

Brave has been supporting Tor, and running Tor relays to improve the network.

Brave is newer at the game. They have had Tor tabs less than a year. They can do fingerprinting protection and no-script, but it's still a full featured web browser, with a lot of risks. The fingerprinting protection isn't as good as the Tor Browser, and unless they changed something, Javascript wasn't disabled by default in Tor tabs.

The Tor Browser has been around for a while and is meant to be a secure web browser from top to bottom. It has had a lot of development looking to find and fix possible leaks and to ensure security. That is its primary focus, and it is pretty good at it.

If you want to use Tor casually, maybe access an onion site, or just get a big boost in your level of privacy, the Tor tabs in Brave are a nice option. They are really easy to use and give great privacy. It is good for casual Tor use.

If you want (or need) serious privacy, the Tor Browser is a better choice. That is its purpose. It is developed to be hardened for protecting the user and it will provide better protection.

Simulmedia | New York, NY | Onsite | Fulltime We are building a best-in-class advertising platform for brands and advertisers to take full advantage of the massive reach on television. This is an opportunity to join a team of amazing engineers and data scientists.

Our tech stack is written in Ruby, Python, and Javascript. We deploy microservices in Docker to AWS.

We are currently looking for:

* Software Engineer, Infrastructure (applications and tools development on an SRE / DevOps infrastructure team)

* Software Engineer, Front End - Applications

Please apply directly through: https://www.simulmedia.com/careers/

Simulmedia | New York, NY | Onsite | Fulltime

We are building a best-in-class advertising platform for brands and advertisers to take full advantage of the massive reach on television. This is an opportunity to join a team of amazing engineers and data scientists.

Our tech stack is written in Ruby, Python, and Javascript. We deploy microservices in Docker to AWS.

We are currently looking for:

* Software Engineer, Infrastructure (applications and tools development on an SRE / DevOps infrastructure team)

* Software Engineer, Applications / Full Stack

Please apply directly through: https://www.simulmedia.com/careers/

Simulmedia | New York, NY | Onsite | Fulltime

We are building a best-in-class advertising platform for brands and advertisers to take full advantage of the massive reach on television. This is an opportunity to join a team of amazing engineers and data scientists.

Our tech stack is written in Ruby, Python, and Javascript. We deploy microservices in Docker to AWS.

We are currently looking for:

* Software Engineer, Applications / Full Stack

* Software Engineer, Infrastructure (applications and tools development on an SRE / DevOps infrastructure team)

* Data Scientist (ML Pipeline / Operations Research)

Please apply directly through: https://www.simulmedia.com/careers/

As pointed out, 25 years later was in the 80s. I wonder if some of the delay in adoption was due to the relevant patents, which were filed around 1959. Maybe that gave a two decade monopoly to Texas Instruments making it hard for others to adopt or innovate around the technology?

This article misses a point as to why the community was outraged at the license change from LGPL to GPL. I was testing switching an application to EXT JS at the time, and I was really liking it. The prototype worked so well that we were preparing to get the commercial license, and then the license change happened.

After the change was announced, a number of people said they would fork and maintain the LGPL versions. One of the people behind EXT JS showed up in online discussions at the time and insisted that would be a violation.

The problem came from it not really being under LGPL. They tacked on this extra piece:

  Ext is also licensed under the terms of the Open Source LGPL 3.0 license. You may use our open source license if you:

   * Want to use Ext in an open source project that precludes using non-open source software

   * Plan to use Ext in a personal, educational or non-profit manner

   * Are using Ext in a commercial application that is not a software development library or toolkit, you will
     meet LGPL requirements and you do not wish to support the project
There was some debate over this, since the GPL prohibits further restrictions in some cases, and a lot of people believed they could ignore those extra restrictions and treat it as true LGPL.

The EXT JS company in online forums insisted they were wrong, and further outraged the community. A lot of people, myself included, decided to stop using EXT JS. We were planning on the commercial license, but the response of the company didn't feel right, and so like many others, we abandoned EXT JS.

According to Wikipedia:

  Udo of Aachen (c.1200–1270) is a fictional monk, a 
  creation of British technical writer
  Ray Girvan, who introduced him in an April Fool's hoax
  article in 1999. According to the article, Udo was an
  illustrator and theologian who discovered the Mandelbrot
  set some 700 years before Benoît Mandelbrot.

  Additional details of the hoax include the rediscovery of
  Udo's works by the also-fictional Bob Schipke, a Harvard
  mathematician, who supposedly saw a picture of the
  Mandelbrot set in an illumination for a 13th-century carol.
  Girvan also attributed Udo as a mystic and poet whose
  poetry was set to music by Carl Orff with the haunting O
  Fortuna in Carmina Burana.
https://en.wikipedia.org/wiki/Udo_of_Aachen

This is a Pitfall! playing agent. The emulator Javatari.js was used as a platform for this and modified to have the needed hooks and behaviors.

The algorithm is very simple. Each screen is treated as a separate level. Commands are randomly chosen, and anything that helps the agent move forward is saved. If the score goes down or the player's height goes below the surface, the game resets and a bit of history is trimmed.

Here is a youtube video of a trained path for 20 minutes: https://www.youtube.com/watch?v=I4j8xWq1Jsc

This will not play an optimal game, which requires using the underground and not accidentally jumping over treasure.

In a sense, I think you are right and perhaps my bias is showing. From the perspective of a judge or prosecutor, they followed a legal process and gave a legal order, so there is no violation of due process in their eyes.

Through the eyes of a person compelled to give testimony, we may reach a different conclusion. Consider a journalist who is granted immunity and asked to give up their source. They refuse and spend six months in jail, with few to no options to appeal for their freedom. This isn't theoretical. It happens occasionally.

The definition of due process can vary from the common definition of fair treatment under the law, to the view more often taken by lawyers and governments that it just means following the process of the law as accepted by the courts and respecting legal rights.

The reporter probably would feel as though they weren't treated fairly under the law, but the prosecutor would argue that they followed the law in full. I probably should not have used the phrase "without due process" in this case, since that will make it difficult to communicate with anyone holding views of the government or lawyers.

That isn't always true. In the U.S. legal system, a person can be granted immunity, and in doing so have their 5th amendment protection against self-incrimination terminated. With that, they could be forced to provide testimony, and refusal could result in fines and jail time without due process for as long as the courts see fit.

I'm a little confused about the way the article is using numbers.

They say their generous worst case calculation of losses is $550 billion, based off of the number of angel investors, throwing out a 1 million number against each, and then valuing companies at $327 billion.

They then compare that to the losses in NASDAQ of 5 trillion. That is based on the peak of 6.7 to the low of 1.6.

Why does the chart in the article only show a peak of about 5 trillion, which would cut the losses from about 5 trillion to to about 3.4 trillion?

Isn't it wrong to compare the estimate of angel investors and valuations against NASDAQ? Why not compare NASDAQ against NASDAQ? To use their style of comparing against extremes, back in 2009 we hit a low of 1.29. In July we hit a high of about 5.2. If those gains were erased, wouldn't we take a loss of about 3.91 trillion, which is a little larger than their chart showed for the dotcom crash?

Am I missing something, or is this article making a misleading comparison?

EDIT: Reading about the NASDAQ composite index on Wikipedia, it says that the index was changed in 2014, and the composition is very different then it was in 2000. So, even NASDAQ to NASDAQ may not work as a comparison, unless it can be recalculated the same way, and even then, other factors such as inflation should probably be factored in, since it was substantial. (The CPI shows $1 from 2000 is worth $1.39 in 2015 dollars.)

EDIT #2: After researching a bit, I think the difference between their chart showing a loss of 3.91 and them saying 5 might be because the 5 trillion is in terms of market cap. On August 18th we were at 9.15 billion, but I don't have a good source for historical market cap data. From the look of things, I'm guessing the losses off our recent peaks to the 2009 lows would be larger than the dotcom losses, but I'd love to hear from anyone who better understands these things.

I wanted to say something very similar about the judging. At hackathons with prizes the criteria really needs to be very clear upfront and strictly adhered to. Everyone works really hard during the event, and if the attendees feel the judging is poor, people will leave upset. For example, if people think a working prototype is important, and the judges instead go with a polished presentation with nothing behind it, that can be very frustrating.

What if I prefer Debian over Ubuntu? Can I be upset then? I'm sure this will be possible to hack around, but we shouldn't have to hack our own computers to use them. A simple option to disable secure boot would solve all the problems. The vendors know this, so I'm curious why they would chose to not provide the option. Is there some belief that by even having the option, the system would be inherently more insecure?

I'm sure that some vendors will provide an option, so this will just likely be an extra thing to research before buying a new system.

Sorry if anything has come off as being too argumentative. I just feel like you are downplaying the large impact that Perl 6 has had on Perl 5 and the public perception of Perl, and the impact that will come when a 1.0 version is officially released. With the new release coming up this may be the last opportunity to avoid the future damage, and that is what my question revolves around. As for everything else, we are really on the same side and I agree with you on the notable points, so I will leave out further discussion.

I am looking forward to the future of Perl 6. I really do like some of the things I've seen going on there, and it is fairly likely that in the future I will be happily writing Perl 6 code on some projects. With that said, I am very concerned about how Perl 6 carrying the Perl name will impact Perl 5, but that is separate from my excitement that a new more modern language will be carrying forward some of the Perl styles.

In short, I do appreciate Perl 6 and I don't mean to downplay anything going on there, but my concern is about what it all means for Perl 5.

And the "Perl" brand is still very strong, so we are loath to give it up.

That is great for you as a Perl 6 developer that gets extra attention for the new language by leveraging the Perl brand, but it is absolutely awful for people in the Perl 5 community. Perl 6 gets free press, but Perl 5 gets mocked and public opinion turns even further against it.

Finally, Perl 5 has many unsolved problems that will hinder its evolution in the upcoming decades. Once Perl 6 has become as fast and mature as Perl 5 is now, we want to provide the future that's closed to Perl 5.

I know Perl 5 isn't perfect, but no languages are. You refer to "unsolved problems" and while I'm sure there are from your perspective, from mine as someone who writes large Perl 5 applications, there are no great issues. I can do everything I need to already, and I can do it really well. I don't need Perl 6, and I won't even consider it until it has a proven track record.

For most people to make the switch, Perl 6 won't need to prove itself as being just better than Perl 5, but it will need to prove itself as the right choice in the full market of languages out there. For at least a few years, and likely many more, Perl 5 will still be the right choice for a lot of work, and Perl 6 will do nothing but confuse people and cause public opinion about Perl and with it Perl 5's market share to sink even further.

Forgive me for this, but why is it still called Perl 6?

I've been a professional Perl developer for a long time, and I've followed Perl 6 since the first announcements. There is some impressive and really interesting work going on there, but from my perspective it seems to be a new language rather than a new version of Perl. I fully support the development of Perl 6, but I really wish the name would change to something that doesn't involve Perl.

It seems like the usage of the name "Perl" has actually done a fair amount of damage to the Perl 5 language, and the Perl community. Non-Perl programmers don't understand what is happening. To them, Perl 6 is just the next version of Perl, and the long wait for Perl 6 is a sign of problems within the Perl community. To many of them when Perl 6 comes out it will be the obvious choice to use for new projects, since the name implies it is the new version, even though the reality is that Perl 5 will likely be the correct choice for a large number of new projects for many years to come.

Perl has become a punching bag by the uninformed who speak about it as a dying, irrelevant, read-only language. Perl 6 carrying the Perl name has helped reinforce those views, allowing them to incorrectly speak of the lack of new versions, the future versions breaking backwards compatibility, and many of the changes being a strong admission that something was very wrong with Perl 5. When Perl 6 is released there will be a lot of confusion and the common belief will become that Perl 5 is even more irrelevant.

So, why not stop using the name "Perl" and call it something different? Wouldn't it be better for everyone if Perl 6 was regarded as a new and separate language?

Perl Already Won 12 years ago

I have written a lot of Perl code over the years, and I also hold the uncommon opinion that it is a great language, and often a far better choice than other similar languages for a lot of tasks. I agree with the author of this article that most people who criticize it are extremely ignorant about it.

The most common complaints about Perl tend to be about the code of people who don't know how to write Perl. Since when is it reasonable to judge a language on how the amateurs use it, instead of the professionals?

Perl does have its warts, but no language is an exception to that. When you learn to use a language well, the warts no longer matter. You get into the habit of writing code in a way that doesn't brush up against them, and that holds true for every language out there.

To clarify any mention of Perl 6, you need to realize Perl 6 isn't Perl. It is a whole different language with a really bad name. I know this has caused great confusion, but Perl 5 is extremely stable, still being developed, and not going anywhere. You don't need your Perl 5 programs to run in a Perl 6 interpreter any more than you would need them to run in a Python interpreter.

I have written my share of code in other languages, but I always return to Perl. As a C and Unix programmer, it feels like a very natural fit in ways that other languages completely do not. It has amazing string parsing, a superb (though extremely misunderstood) OO system, tons of great libraries, direct interfaces to POSIX and other system interfaces, really good database interfaces, networking, and protocol wrappers, very flexible interfaces to native code, and a really brilliant and well evolved design.

While you should always use the right tool for the job, Perl is a better choice far more often than people are realizing these days. There is so much anti-Perl sentiment out there, and the great majority of it is completely misplaced and made by people who haven't properly learned how to use Perl.

Echarts 2.0 12 years ago

I had recently been evaluating JavaScript charting packages, and ended up moving forward developing with HighCharts, just a couple days ago. The demos for Echarts are impressive, so when I saw this today I spent a little time trying it out.

If you want to use the standalone single JavaScript file, their complete "all" build is 910k. That seems a little large, but their full package includes map data and lots of chart types you probably won't use.

They do have a tool for making a custom build, but I just got errors when using it. Google translate helped with their documentation, but even when I followed their exact steps it didn't work. This isn't a big deal though, as a Makefile can be thrown together quickly.

I have been working on a site that is heavy on charts, and I decided to switch my pie chart generators to Echarts as a test. I can't pinpoint all the reasons, but I felt like it was a little awkward to use, though it didn't take long to get through that. The documentation was helpful, but not great, and certain parts of it were not available in English.

There were some oddities that confused me at first, though in some ways they make sense. For example, the DOM element that contains the chart must have a CSS height defined, or you get an error. And, the legend seems to require you to provide a redundant array of all the labels that appear in the series. Nothing too bad.

I don't know if it is just my chart, but the default colors came out awful. I'm sure that can be changed, so it isn't too concerning. I noticed a few other rough edges, for example the save image control saves the exact view into the image file, with the controls included as well.

Mobile worked decently in my test, though charts with the legend enabled often resulted in bad overlaps between the legend and the chart.

I tried messing with maps a little, and that was my favorite part. It was very smooth and easy to get going with. I have been looking for a good JavaScript map package, and this seems to have some potential. (Anyone have recommendations on choropleth maps in JS?)

Overall, I'm a little scared to move forward with Echarts. Searching online makes it seem difficult to find answers to many problems in English. Also, difficulty in modifying code quickly when the comments are not in a language I understand is also worrisome. Still, I'd definitely keep my eye on this. Without too much trouble I was able to convert charts to generate with this instead of HighCharts. It is unquestionably the best JavaScript charting library I have seen with this type of license, and I'm sure it will get even better.

I feel like if I moved forward I'd be spending too much time figuring things out, and so despite really liking the idea of open source charts with no licensing fees, I'm going to play it safe an stick with HighCharts. I'd rather pay the fee for a quality product than spend time trying to get all the features I need working. At the same time, I imagine many others out there with different needs may find that Echarts is a very decent option.

I've been considering migrating a bunch of things to Linode. I have read a lot of reviews and have not seen too many negative things. Do you have any more information or advice on where I can look to find out about what you are referring to?

I currently use Rackspace for anything critical. My experiences have been extremely positive with them. In a few years of using them I've only had one issue where I wasn't happy with them, but in the hosting world that's pretty good. The only reason i'm looking to migrate things is because Rackspace is far more expensive.

If not Linode, which service do you prefer?

Sure. This was based on a life program I wrote in JavaScript a long time ago that used DIVs, because canvas didn't yet exist at the time. The color version was made a few years later by taking the nLife code, switching it to use canvas, and adding the color rules. I just tarred it all up and left in the nLife license, which I think is BSD w/ advertising clause. You can find the source here:

http://www.node99.net/content/nlife/nlife-canvas-color.tgz

I'm fairly certain from watching it that there is a bug in the selection of the most dominant color, since sometimes a color that died off manages to come back. Anyway, if you make it do anything interesting, please share. I'd definitely like to see.

I always liked the idea of color life. I like that this did one game for each bit. That's an interesting take on it and the results look nice.

I made a quick color life a few years ago. I wanted the rules to be simple like life itself, so this is what I came up with:

* Each cell has a color attribute. When generating the initial board, colors are randomly assigned.

* When a new cell is created it inherits the most prevalent color of the surrounding cells, or if there is a tie, any one of the the top colors may be used.

(Randomly assigned colors aren't filtered, so it is possible for dark cells to exist that are the same color as the background.)

Here is the result: http://www.node99.net/content/color_life/index.html

I'm in a similar boat. I use Rackspace for their servers and CDN, and Linode is definitely starting to look nice. It could actually be cheaper to go with Linode and a separate CDN provider, such as MaxCDN. MaxCDN has some of the features that are missing from Cloud Files, which is real nice too. The main thing holding me back is the time it takes to migrate. I know they target the higher end, but hopefully RackSpace will readjust their prices as well at some point.

I also made and released a chromatic instrument tuner using web audio input a while back:

http://www.leshylabs.com/apps/tuner/

I haven't looked too closely, but my technique is probably a bit different. I use FFT only to gain a hint of where to look. FFT itself, at least in the form that is built into the web audio api, is not accurate enough for a tuner. Instead, after FFT tells me where to look, I use auto-correlation to scan those frequencies. I'm not sure if this is the ideal technique, but it seems to work pretty well.

I may have released too early, because back when I wrote this web audio input only worked in limited versions of Chrome. It didn't even work in the main release without changing flags, and so my release went mostly unnoticed on the internet.

I haven't checked in a few months, but I've been waiting for mobile support to catch up. Firefox mobile beta started somewhat working a few months ago, and I don't know if that moved up into the main version. While Chrome works well on the desktop now, on mobile I don't think they have any working web audio input support, unless that changed recently.