HNHacker News
TopNewBestAskShowJobs

bweitzman

331 karma · joined July 18, 2014

submissionscomments
bweitzman··on Why we built Align: the only extensible video chat platform
Thank you! Our SDK is written in Typescript and we're starting with support for building apps using React, but we plan to support other frontend frameworks as well.
bweitzman··on Tracking users via CSS
Server side tracking would mean that ad companies don't have access to cookies + user fingerprints, so they would be less effective at serving targeted ads.
bweitzman··on Ask HN: How to be fluent in functional language speak?
That's right. Type constructors are related to generics. For example if you have a generic type `List<A>` you could think of `List` as a type constructor.

In most languages, however, that's not a construct you can do much of anything with.

bweitzman··on Ask HN: How to be fluent in functional language speak?
To be fair, the term "map" comes from math [0], and so at the time these functions were created, there weren't other good naming choices. Mappable and Functor are just about as opaque as each other if you don't know what mapping is.

Though now that FP concepts are mainstream, I think there is a good case to offer some friendlier, more familiar names:

Functor -> Mappable

Applicative -> Pairable

Monad -> Thenable

[0]: https://softwareengineering.stackexchange.com/questions/2033...

bweitzman··on Juul is reportedly laying off 800 to 950 employees
From the Clerky docs:

> The company shall ... for a period of three months from such date to repurchase all or any portion of the Unvested Shares (as defined below) held by Purchaser as of the Termination Date at the original purchase price per Share (adjusted for any stock splits, stock dividends and the like)

You wouldn't lose any money, they'd basically reverse the early exercise.

bweitzman··on Show HN: A UDP to TCP proxy server for sending HTTP requests with zero latency
What would be the use case of this versus say making an HTTP request over TCP in a background thread?
bweitzman··on A startup is building computer chips using real neurons
An artificial brain being fed a stream of bits will not necessarily feel like it's in an empty room processing an abstract data problem.

If we can create an AI with different goals and reward mechanisms, there is a potential that we could create agents that are experiencing bliss doing data processing tasks.

Of course how we tell the difference between a miserable agent and a joyous agent is still an open question ..

bweitzman··on Launch HN: Fly.io (YC W20) – Deploy app servers close to your users
There's one in the Newark area:

`ewr Parsippany, NJ (US)`

from https://fly.io/docs/regions/

bweitzman··on Implement with types, not your brain (2019)
changing a record requires a more specific type than `forall a. a`

the type `forall a . a -> a` does truly have one single (non exception throwing) implementation since there is no information you can glean about your argument other than the fact that it exists.

Once you have more structure, for example in `Person -> Person` or even `forall a . [a] -> [a]`, you have more possible implementations than just the identity function.

bweitzman··on Flutter vs. Other Mobile Development Frameworks: A UI and Performance Experiment
I tried writing a small app using Flutter. It was really a fantastic experience IMO.

To answer some of your questions:

1. Long lists are pretty painless to implement. There a some helper views included for building list views that aren't backed by in memory lists, and they feel really nice and fluid (https://api.flutter.dev/flutter/widgets/ListView/ListView.bu...)

2. Flutter has lots of built in animation support. Almost every aspect of a view is animatable out of the box (see https://api.flutter.dev/flutter/widgets/AnimatedContainer-cl... for an example). I definitely got carried away with the animations because of how fun and easy they were!

3. I had to deal with native code for push notifications, sharing flows, and universal links. Google publishes libraries for dealing with a lot of the common stuff, and there's great community support as well.

bweitzman··on Ask HN: Who is hiring? (May 2019)
I think Haskell's been working really well for us. Strong types give a lot of confidence during refactoring. The language is performant too which has definitely helped us as we've been scaling.

Personally, I like to stay pretty close to the javascript when doing web work. Elm, Purescript, GHCJS all have their benefits but I find it just too difficult to integrate with the rest of the (disjointed) web development toolkit.

bweitzman··on Ask HN: Who is hiring? (May 2019)
Co—Star Astrology | Full-time | On-site | New York | $130-150k + equity https://www.costarastrology.com

Co-Star is bringing astrology into the 21st century with a social, personalized experience that helps people reflect and connect in real, meaningful ways. Over half of millennials and nearly a third of American adults are into astrology. We just raised $5m from the people behind companies like Glossier, Rent the Runway, eBay, Periscope, and Everlane.

We’re looking to bring talented software developers to join our 8-person team in Chinatown, NYC. We’ve been taking a full-stack approach to the way we work but are open to having you dive deep into areas you’re especially passionate about.

Our stack includes

* Haskell for our backend API

* Swift and Android Native for our mobile apps

* React and TypeScript on the web (costarastrology.com + internal tools)

* AWS to host our infrastructure

* PostgreSQL

We want your help

* Shipping new features in our iOS app

* Scaling our backend infrastructure to >1M daily users

* Developing internal tools to give our content editors super powers

* Using TB of analytics data to help the product team develop insights

* Making this the best place to work

$0 deductible fully-covered health care, unlimited vacation (min 4 weeks), conference/book/whatever budget

Read more details here -> https://www.costarastrology.com/jobs + feel free to email directly with questions -> ben at costarastrology.com

bweitzman··on 310 Bitcoin challenge has been solved
> I don't want to donate to charity (I have my own reasons for that, don't ask) but whoever cracks the code can do whatever he/she wants (including donating to charity).
bweitzman··on Railway-Oriented Programming (2015)
This railway pattern sounds exactly like a pipe/filter pattern to me. What would you say is the difference between the two?
bweitzman··on Ask HN: Who is hiring? (June 2018)
Co—Star Astrology | Software Developer | Full-time, On-site in Brooklyn, NY | Salary $100k | Equity 1%

We are looking for a full stack developer who is familiar with at least one of Haskell, Swift, or AWS and is open to learning the others. We love types at Co—Star, and a passion for statically verifying code is a plus. Some of the technologies we use include:

- Haskell (our whole web api is written in this!)

- Swift

- Python (we use AWS Lambda to wrap python libraries we don’t want to port to Haskell)

- React + TypeScript

You’ll be our first engineering hire (joining two engineering founders), so you’ll have a big say in what we do and how we do it. We’re growing quickly and want you to be a part of helping us scale up, tackling problems like partitioning our database, switching to a more sophisticated messaging queue and improving our machine learning pipelines.

Full-time, on-site in Brooklyn. Unlimited snacks, vacation, insurance, etc. Email us your resume -> jobs ∀ costarastrology.com

About Us: Co—Star is a mobile application combining traditional methods of astrology with modern technology to create a hyper-personalized and social astrology experience. We are making astrology – along with the meaning and connection it engenders – accessible to the entire world. Read more here: https://www.costarastrology.com/about

bweitzman··on Monads for functional programming (1995) [pdf]
I think the killer app of the monad is really the language feature that Haskell has called "do notation". This is where it really shines. You can definitely use the monad interface in other languages, but it can feel clunky and unintuitive sometimes because you end up either foregoing some of the effectiveness to better fit the language, or you end up in essentially callback hell. Example:

In Haskell, you can use do notation:

  do
    x <- someFunction
    y <- anotherFunction x
    z <- yetOneMoreFunction y x
    return (x + y + z)
This is syntactic sugar for something like (using `flatMap` in place of >>= (bind) ):

    flatMap someFunction (\x ->
      anotherFunction x (\y ->
        yetOneMoreFunction y x -> (\z ->
          return (x + y + z)
        )
      )
    )
 
If Haskell programmers had to write code like this (which is what monads look like in other languages), there's no way they would use monads!

In languages with objects, you can sometimes get away a minor victory by using what I'll call a "shallow bind". Consider promises in javascript (which form a monad with unit a = Promise.resolve(a) and flatMap p f = p.then(f) ):

  someHttpRequest().then( response => {
    if (response.body == undefined) {
      return Promise.reject("no body error");
    } else {
      return Promise.resolve(response.body);
    }
  }).then(body => {
    try {
      return Promise.resolve(JSON.parse(body));
    } catch (e) {
      return Promise.reject(e);
    }
  }).then(parsed => {
    if (parsed.status == undefined) {
      return Promise.reject("no status");
    } else if (parsed.status == 500) {
      return Promise.reject("server failure");
    } else {
      return Promise.resolve(data);
    }
    // what would you do if you decided you wanted to reference `response` here somewhere?  
  });

This is definitely an improvement over a deeply nested callback style from 10 years ago, but it does sacrifice some flexibility. You can't refer to previously handled promises because the callbacks are shallow. You can do that with do-notation, and that's what makes the concept of monads stick in Haskell.

Once you have that, and in Haskell, it's amazingly implemented as an overloadable piece of syntax, the doors are wide open. Example: at my work, we use free monads to get a similar effect as dependency injection in other languages (clean separation of concerns, easy mocking, etc) but with two huge benefits: 1. Any function is limited to using only the dependencies/effects you allow it to, it won't type check if you try to sneak something in, and 2. Because of the overloadable syntax, we use it to collect timing info on all of our operations that are doing IO in a way where we get a flame graph style hierarchy of effects _for free_. We never have to specify when to start and a stop the timers, the syntax knows when to. It's pretty powerful.

bweitzman··on Ask HN: Who is hiring? (April 2018)
We start by using NASA data to get the precise positions of the planets. Then we assign semantic meaning to these raw data points using the rules of astrology (i.e what significance the Moon has, what the different signs mean, etc). And lastly, we combine them together into human readable text which we show to the user.
bweitzman··on Ask HN: Who is hiring? (April 2018)
Co—Star Astrology | Software Developer | Full-time, On-site in Brooklyn, NY | https://www.costarastrology.com/

Co-Star is a mobile application combining traditional methods of astrology with NASA data and modern technology to create a branded, hyper-personalized and social astrology experience. Nearly half of millennials believe in astrology – and that number continues to rise as more people are searching for meaning, connection, and community across all aspects of their lives. Since launch in October 2017, Co-Star has grown incredibly quickly and was ranked in Apple's top 100 entertainment app weeks after launch. We are an early stage startup (we just raised a seed round of funding) looking to expand the team as we continue to gain traction and develop the app!

Some of the technologies we use include

  - Haskell (our whole web api is written in this!)
  - Swift 
  - Python (we use AWS Lambda to wrap python libraries we don’t want to port to Haskell) 
  - React + TypeScript 
We are looking for a full stack developer who is familiar with at least one of Haskell, Swift, or AWS and is open to learning the others! We love types at Co—Star, and a passion for statically verifying code is definitely a plus!

There are currently three of us (founders) working on this. You’ll be our first hire, so you’ll have a big say in what we do and how we do it.

Contact jobs@costarastrology.com

bweitzman··on 61% of “Entry-Level” Jobs Require 3+ Years of Experience
The word caries with it a history of a workforce dominated by men.

If there's going to be a new made up system for standardizing and measuring the proficiency of software developers, then we may as well make up new words too that don't have this baggage.

bweitzman··on I spent two weeks delivering for Uber Eats and made $4.40 per hour
> Minimum wage is just saying "if you can't produce at least $X of value per hour, you're not allowed to work at all". That's not fair.

Employees don't get paid the full value they generate, so that's not a reasonable way to interpret minimum wage.

bweitzman··on I spent two weeks delivering for Uber Eats and made $4.40 per hour
Perhaps, but they do owe it you to not pay you an exploitative wage.
bweitzman··on Set up a cheap cloud hosted adblocker in an hour for $2.50 a month
It would also have to serve the not found responses, no?

Still, if they're short it seems unlikely that you'd have any issues.

bweitzman··on How to leak to the press
They're also leaving themselves open to MITM attacks, where an attacker could change all of the tor addresses.
bweitzman··on Show HN: A partial HTTP server written in brainfuck extended with syscalls
Why call it systemf? That name is already taken: https://en.wikipedia.org/wiki/System_F
bweitzman··on Fake News May Not Be Protected Speech
Interesting concept, but what gives readers any authority to vote on the truthfulness of a story?
bweitzman··on Google dealt setback in age bias case by judge interested in 'Googleyness'
One would hope that the age/gender/race/etc profile of a company would at least reflect the profile of the applicants.
bweitzman··on How the Sugar Industry Shifted Blame to Fat
Do you drink beer at all? I'd be open to trying to a low sugar diet, but I homebrew and don't want to give that up right now.
bweitzman··on Higher-kinded types: the difference between giving up and moving forward
If you instantiate `t` as a promise then you have to always consider that it isn't there yet, even if you're saying that it's going to be. If you instantiate `t` as `Identity` [0] then you have a type level guarantee that your value is there. You have a guarantee that your program blocks when you say it will.

And that's the point of a lot of these abstractions. It's not about being able to write something that you couldn't in another language. After all, we could create the same functionality in assembly.

[0] https://hackage.haskell.org/package/transformers-0.2.2.1/doc...

bweitzman··on AI’s Language Problem
If there is an innate language structure in the brain then we know that it's possible to develop such a structure by statistical optimization, since this is exactly what evolution did, no?
bweitzman··on AI’s Language Problem
The Mary's Room thought experiment is garbage, if you ask me. You can't just assume your hypothesis and then call the result truth.

If you assert that a person can understand everything there is to know about the color red and then still not understand what it is like to see red, you have either contradicted yourself or assumed dualism.

← PreviousPage 2 of 7Next →