HNHacker News
TopNewBestAskShowJobs

mfenniak

566 karma · joined January 25, 2008

[ my public key: https://keybase.io/mfenniak; my proof: https://keybase.io/mfenniak/sigs/eo6JiTXuJQV68__kYj4qCWj-PkplQU5F3clSvlBADHU ]
submissionscomments
mfenniak··on GitHub merge queue is generally available
I was surprised by this weird limitation as well. However I found its easy to workaround -- I made my CI checks provide the skipped status when they run on the PR, and then provide the success/failure status when they run on the merge-queue branch.

In a GitHub Action, this is was very easy:

  on:
    pull_request:
    merge_group:
  jobs:
    build:
      name: Whatever...
      if: github.event_name == 'merge_group'
Then the task "Whatever" can be added as a required status check, and "skipped" is good enough to allow it to function on the PR side while it actually executes on the merge queue.
mfenniak··on Framework Laptop 16 Deep Dive: 180W Power Adapter
It looks really easy in their product preview: https://www.youtube.com/watch?v=km3MVZ8HZeY
mfenniak··on The void in Calgary: How office towers emptied in a once bustling downtown
> Cycling in Toronto is a life-threatening activity, and Calgary has something like 150km of paved urban pathway.

Calgary has over 1000km of paved urban pathway. I'm the creator of a small webapp called yycpathways.ca where you can sync your Strava up to a map of Calgary pathways. As you bike/run/etc the pathways, it will "Pac-Man" away the path and just show you places you haven't been before. Two people have completely covered all the pathways using my app.

But if you leave it to actually go somewhere, cycling is still a life-threatening activity.

mfenniak··on EU proposing to regulate the use of Bayesian estimation
> by public authorities or on their behalf

A supermarket chain is not a public authority. This prevents governments from creating systems to evaluate the trustworthiness of people, not private businesses.

mfenniak··on WhatsApp delays privacy changes following backlash
SIGL is not the makers of the Signal communication app. SIGL is a company called Signal Advance (https://www.signaladvance.com/), which makes medical and industrial systems.

Signal, the app (https://signal.org/en/), is a 501c3 nonprofit.

mfenniak··on BadEconomics: Putting $400M of Bitcoin on your company balance sheet
> ..., ignoring that the ability to independently verify the money supply and being able to transfer money across political boundaries without censorship is probably the most important intrinsic value one could hope for in a MoE/SoV.

So, here's what I don't get about Bitcoin. Those capabilities are great. But those capabilities exist whether a Bitcoin is priced at $1 or $25,000. Why are those capabilities enough to drive the price of a Bitcoin up?

To me the "value" and the "price" of Bitcoin seem to be completely unrelated, and that makes me skeptical that it is an investment.

It feels like investing in a hammer -- I love what a hammer can do for me when I want to hit a nail, but that doesn't mean that the price of a hammer should be related to the house I can build with it.

What am I missing?

mfenniak··on AWS NLBs and the mixed up TCP connections
Does anyone know a good way to observe & measure the impact of this? I have a small fleet of Linux servers behind NLBs with cross-AZ load balancing turned on, and they have some significant collection of OS-level metrics via the Prometheus node_exporter.

Would incidents of this be captured by the "node_netstat_TcpExt_TCPAbortOnData" metric ("connections reset due to unexpected data")?

mfenniak··on We Hacked Apple for 3 Months
North Korea does have a well-established cyberwarfare group, https://en.wikipedia.org/wiki/Lazarus_Group. The WannaCry ransomware attack has been attributed to this group.
mfenniak··on The Splitgraph Data Delivery Network – query over 40k public datasets
Write a client? Just use psql, or any of a dozen other interactive DB clients.
mfenniak··on Most “mandatory requirements” in corporations are imaginary
> For instance, there's a restriction at my workplace (not a software company, a regular old industry fortune 500) which prevents git installs from pushing to any non corporate GitHub repo from our work machines.

Oh my! As I have struggled with security incidents caused by people either accidentally publishing GitHub repos that are "public" rather than "private", or pushing corporate code to their own repos (that are... you guessed it, "public"), I have long looked for another IT department that has grappled with this problem. GitHub Support hasn't helped, appealing to public forums hasn't helped. But here, a sign that my problem isn't unique!

Of course, the solution sucks. sigh

mfenniak··on How many pieces can a puzzle have?
In a 2d, rectangular puzzle, with boring die-cut pieces, you have only 4 corner pieces. :-)

Puzzles at higher difficulties are not rectangular, don't have straight sides, or have straight & corner-looking pieces in the middle.

My favorite difficult puzzles are Stumpcraft -- this small business makes wooden, beautiful smelling puzzles with a laser-cutting technique. They're very difficult with intricate and intentionally misleading pieces and geometries. https://www.stumpcraft.com/

mfenniak··on The best way to tour a city is through its grocery store
> In Netherlands, a major chain in Amsterdam would only take cash or a Dutch credit card. Visa/Mastercard from elsewhere were not accepted forms of payment.

Same experience just recently -- Albert Heijn. You'll find this grocery story every 50 meters in a major city like Amsterdam. No credit cards. It was pretty odd to me as a Canadian.

mfenniak··on OpsGenie is joining Atlassian
You're really comparing two different things here.

Prometheus is great at alerting. So, where do those alerts go? How do they reach the right team, the right person who is on-call? How do they know that Person A is on-call between 8am and 5pm, but Person B's shift starts after that? Oh, wait, Person B is on vacation and asked Person C to cover for them.

Person A, B, and C's manager wants to monitor how the MTTR on all of those alerts is. Where does Prometheus provide that data?

These systems don't do the same things. OpsGenie isn't just an "SMS Gateway".

mfenniak··on Ask HN: Who is hiring? (November 2017)
Replicon -- Calgary, Alberta, Canada | Site Reliability Engineer | Onsite | Full Time

Site Reliability Developers/Engineers (SREs) are responsible for creating and improving the tools and processes that power the building, validation, deployment, and monitoring of Replicon's globally distributed multi-tenant SaaS systems. SREs are spreading and evangelizing the DevOps culture throughout Replicon.

Working at Replicon is an opportunity to take on the unique challenges of a successful, large scale SaaS business application that existed before "web applications" as we know them today even existed. We have unusual challenges in such as extreme data consistency & reliability (nobody puts up with being paid incorrectly), large scale, complex legacy systems, enterprise-scale customizability, all combined with a friendly non-technical user experience. It's a "never-stop-learning" environment, where you'll be working with a strong technical team.

Please apply at https://www.replicon.com/company/careers/.

mfenniak··on Ask HN: Who is hiring? (July 2017)
Replicon -- Calgary, Alberta, Canada | Site Reliability Engineer | Onsite | Full Time

Site Reliability Developers/Engineers (SREs) are responsible for creating and improving the tools and processes that power the building, validation, deployment, and monitoring of Replicon's globally distributed multi-tenant SaaS systems. SREs are spreading and evangelizing the DevOps culture throughout Replicon.

Working at Replicon is an opportunity to take on the unique challenges of a successful, large scale SaaS business application that existed before "web applications" as we know them today even existed. We have unusual challenges in such as extreme data consistency & reliability (nobody puts up with being paid incorrectly), large scale, complex legacy systems, enterprise-scale customizability, all combined with a friendly non-technical user experience. It's a "never-stop-learning" environment, where you'll be working with a strong technical team.

Please apply at https://www.replicon.com/company/careers/.

mfenniak··on How to steal a developer's local database
I think it'd be very common to "protect" these services by making them bound only to localhost. The fact that this attack bypasses that protection is pretty interesting.
mfenniak··on Git for Windows accidentally creates NTFS alternate data streams
I laugh these days when OSX warns me, "This application was downloaded from the internet." when I first access an app.

Every application on my machine was downloaded from the internet. Even the OS, after the first upgrade. That's not what is dangerous.

mfenniak··on .NET mocking frameworks, a comparison
You don't. It just makes it easier and requires less code.
mfenniak··on Wal-Mart Plans to Test Grocery Delivery Through Uber, Lyft
I feel like a "mini-supermarket" is just a market; the super and mini should cancel each other out. :-)
mfenniak··on Managed services killed DevOps
In a proportional font. Ew.
mfenniak··on Super small Docker image based on Alpine Linux
I'm pretty new to Docker, so I'm curious about "a project with 75 gems/packages and a couple of native extensions that need to be compiled"...

Is the common procedure in the Docker world to build an application image that includes all the build tools that were used to build native dependencies? That seems like it does generate a pretty large image.

I figured I'd take a three-step approach to my first node.js app in Docker:

1. Build an image to build my dependencies. This uses the same base image as step #2 will, but installs all the development tools and libraries (eg. build-essentials, libpq5-dev), and then outputs a .tar.gz to a shared volume containing my node_modules folder.

2. Build an image with my dependencies; imports the runtime versions of any libraries (eg. libpq5), imports & expands the .tar.gz generated by #1.

3. Build an image with my application, FROM the image in #2.

The process is optimized by having the automation check for the existence of #2 by hashing the contents of the relevant Dockerfiles, and the package.json list of dependencies, and doing a `docker pull` with that hash to see if I've already built #2. If so, my build just needs to build #3.

It's a bit more complex (Hello, everything in Docker-land), but ends up being pretty powerful. But your post makes me think I've over-complexified it a bit.

mfenniak··on The Fall and Rise of SVG
Apple & Xcode support the same concept, but with PDFs. You can add a PDF to an "imageset", and at build time it will be rasterized into different resolutions for different devices.
mfenniak··on Amazon Buys Thousands of Its Own Truck Trailers
But... how does the truck have the inventory to fulfill whatever is ordered, within 30 minutes? You don't know in advance what "the day's deliveries" are going to be, or where they will be, because the drone deliveries are on-demand.
mfenniak··on Snapchat’s new ‘scary’ privacy policy
Here are the updated terms of service, if anyone wants to see them directly: https://www.snapchat.com/terms

And Snapchat's privacy policy: https://www.snapchat.com/privacy

mfenniak··on Surprisingly Turing-Complete
At Replicon, a SaaS timesheet provider, we started supporting Python scripting a couple years ago. At first, it was a component of the application we called "pay rules", which are basically the rules that determine how much regular time, over time, double time, etc. an individual is being paid based upon their timesheets. These rules are very different from locale to locale, and at times can be very complex.

The scripting started pretty simple; one script type. It has access to all of our web services, and runs "as the user" but under a specific fixed permission set. The permission set limits the script to read-only services. It is passed simple data: a timesheet reference, and a user. It returns simple data: an array of dates, pay codes, and amounts to be paid. The scripts run under IronPython, so we're able to use .NET's security to prevent the script from accessing the file-system, network, etc. As an additional precaution, the scripts are run on isolated servers that are firewalled to only have network access to the web services servers, and importantly not the database servers or the Internet. Whenever a timesheet is updated, the pay output for that timesheet is marked as "needs recalculation", and the script is executed in a background task.

It was an ugly roll-out. Our first large customer ran into a ton of intermittent errors, which resulted in stale data calculations being used in actual payroll runs. But we fixed these problems quickly, and it's been incredibly smooth after that first month of hell.

And it was very successful. Its success lead to using scripts more and more for other parts of our application, which gives us some incredible per-tenant flexibility while maintaining a single core application. We've followed a few major rules that have helped:

(a) Scripts always do read-only operations; they can never access services that write data. This makes development of the scripts simple because they can be executed with no side-effects, which we leverage in the form of a script simulator that we provide in the UI.

(b) Scripts always have simple inputs, simple outputs. This is tricky every time we create a new type of script. We've found that the less we feed into the script as an input, the more it has to use services to retrieve data, which is actually a fantastically flexible approach. And the same with data output; it needs to contain the results of a calculation, which the script host then does stuff with.

(c) Background execution is far better than interactive execution. We design for background calculations now, making the UI show that "this is being calculated", and preventing certain operations while data is stale. This makes it easy to scale up and down our script servers, and the occasional badly written script doesn't have much of an impact outside of the specific tenant trying to use it.

Overall, the approach IS somewhat crazy. It's a lot more work than just implementing your product the way you want it to work. But for "enterprise customizability", it rocks.

mfenniak··on How odd is a cluster of plane crashes?
> So I would anticipate the clumping to even out as the sample size increases.

Are you saying we need to crash more planes? That seems a little harsh just to get crashes coming at a consistent rate. ;-)

mfenniak··on To Be Continuous
A Homebrew (http://brew.sh/) package might be a better approach that a .pkg. It's easier to maintain for you, and, definitely easier for a user. Not all OSX users use Homebrew, of course, but I think many in your audience would.
mfenniak··on To Be Continuous
Cool. Very cool.

My first thought (aside from "Cool") was that the current time would be the tricky thing that can't be incorporated into a continuous view. But even that seems to be handled! http://docs.pipelinedb.com/sliding-windows.html

Looks pretty impressive. :-)

mfenniak··on GraphQL Working Draft
I'd suggest that you be wary of going down the route of making your API too flexible. It becomes very difficult to scale up a service that provides flexibility.

Imagine a simple case where you're storing hundreds of records of users, and providing the flexibility to order by any field on the user, and of course, you're paginating those results. Now, scale up; you're storing tens of millions of those same record... how do you quickly retrieve the first ten records ordered by their e-mail address field? Same thing, ordered by their last name. Same thing, ordered by their country. Did you just create database indexes to support each of those use cases? Ugh.

In my opinion, a REST API (well, any API) should be limited to supporting only the business use-cases it is designed to implement. I wouldn't want to build a "Linq/SQL" type of interface, because then I have to support all the weird queries people will come up, and still meet my requirements to scale over time. Don't provide this kind of flexibility unless the value it gives your product is absolutely incredible, because, the headaches it provides could be equally incredible.

mfenniak··on Show HN: Phishing as a service
You could address that by creating a control on the price. "I want to run this campaign against 500 users. But my budget is $100." The service sends out e-mails up to the $100 cost if they all clicked through, then deducts the actual expenses from the budget. In a few days, it sends the next batch of e-mails targeting the rest of the budget. Continue until either the e-mails are all sent, or the budget is expired.
← PreviousPage 2 of 5Next →