Defective Heat Sinks Causing Garbage Gaming - <AUTHOR> http://randomascii.wordpress.com/2013/08/06/defective-heat-sinks-causing-garbage-gaming/

<comment><USER2> _> "When I told the customer of my suspicions they said that they had recently replaced their processor heat sink. When they put the old heat sink back on their performance problems went away."_

A person who buys and installs their own heatsink, but can't troubleshoot a temperature-driven performance problem impresses me as an odd combination.

I expect providing support to members of the "enthusiast" PC market is an interesting challenge.

<comment><USER3> I'd actually be capable of buying and installing my own heat sink (I have never bothered doing so; I don't really do hardware mods), but I do not know how to troubleshoot a temperature-driven performance problem.

I mean, it's just thermal paste on a fan, right? That's not exactly hard, after a fairly low threshold of know-how.

<comment><USER4> I think that you are overthinking it, this sort of troubleshooting doesn't require all that much domain specific knowledge (certainly the author of the article came at it with more than was strictly necessary).

If you install new fancy fuel injection nozzles in your car, and suddenly your car is shit, then swap them back out and see if the problem goes away. After you determine that it does, you can start investigating if the installation was botched or if they are broken, or whatever. You don't need to know anything about cars to do that, it's just generic troubleshooting.

</comment></comment></comment><comment><USER5> Cleaning the CPU heat sink and fan from dust (and in my case, cat hair) can sometimes give a surprising performance boost. Especially on cheap laptops that are often sold with inadequate cooling.

CPU thermal throttling can have a huge effect on performance.

<comment><USER6> Pulling the gaming boxen over to the garage & blasting them out with the air compressor hose is part of spring cleaning here.

<comment><USER7> If doing this (or using canned air) it's a good idea to use a small stick or bit of plastic to jam any fans to stop them spinning too hard and ruining their bearings or throwing a blade, both of which I've had happen. Laptop ones seem particularly susceptible, probably down to size and typically higher usage temps.

<comment><USER8> Or acting as a generator and throwing an over voltage into a circuit that isn't protected from it. (Also, don't push your robot with the motors wired unless you know you protected the motor driver circuitry.)

<comment><USER6> I had never considered this possibility -- either in my laptop's fans nor in my Arduino robot. But that's a great pro-tip I'll keep in mind. (It may be why my Arduino stops working normally after a couple hours and takes a couple days to straighten out)

</comment></comment></comment></comment></comment><comment><USER9> Its common in hardware enthusiast forums and discussion now when there is a performance problem for there to be 2 initial questions. The first is regards to clock speed and the second is temperature. Its really common for clock throttling to be the underlying cause of performance problems on today's systems and temperature is also the number one cause.

But the second major cause, representing about 30% of cases is software/firmware bugs in the drivers for the graphics card or the Windows scheduler doing odd things for the CPU under a particular workload. As more of the performance of components becomes dependent on boosting and clock increasing in order to save power the more we are seeing inconsistent behaviour and problems with the implementations.

</comment><comment><USER10> > Thermal throttling is extremely difficult to detect in xperf traces. It is > done automatically by the CPU or the motherboard, and the operating system > (OS) doesn't realize that it is happening. I use the xperf toolset for these > investigations but its CPU frequency graphs show the CPU running at full > throttle and its power management events say that all is well, and yet…

At least with a Sandy Bridge CPU on Linux you get power management events which show up in dmesg and the reduced frequency is correctly reported. Definitely a case of the drivers/monitoring software not looking for the right things rather than the hardware not exposing this information.

<comment> X-Istence > I hope that some day the ETW code in Windows that provides the CPU frequency > will be fixed to detect thermal throttling – and a temperature provider > would also be nice. Chapter 14 in the Intel Software Developer's Manual, > Volume 3A:, System Programming Guide, Part 1 would be a good starting point…

He mentioned that in the article ...

</comment></comment><comment><USER11> This should be made more visible by OS vendors.

Windows popping up one of those alert baloons would be very helpful.

</comment><comment><USER12> I recently discovered 'turbostat' for reading actual CPU frequency on Linux: [http://lxr.free- electrons.com/source/tools/power/x86/turbost...](http://lxr.free- electrons.com/source/tools/power/x86/turbostat/turbostat.c)

Bruce's direct testing approach has a certain elegance, but instead of timing a loop 'turbostat' queries the CPU's performance registers. So in addition to being handy if you are running Linux, it could serve as a guide for developers of other systems trying to figure out which MSR's are needed and how to interpret them.

<comment><USER13>
        cat /proc/cpuinfo

<comment><USER12> This would be simpler, but doesn't work if you are running a non-standard clock. /proc/cpuinfo gives you the nominal frequency, but turbostat gives you the actual. In the example below, the 3.79 GHz reported by turbostat is the actual speed and the 2.527 reported by /proc/cpuinfo is not. I think thermal throttling is another case where turbostat is correct but the kernel info is not.

      nate@centos:~$ cat /proc/cpuinfo | grep -i mhz
      cpu MHz		: 1596.000
      cpu MHz		: 1596.000
      cpu MHz		: 1596.000
      cpu MHz		: 1596.000
      cpu MHz		: 2527.000
      cpu MHz		: 1596.000
      cpu MHz		: 1596.000
      cpu MHz		: 1596.000

      cor CPU    %c0  GHz  TSC    %c1    %c3    %c6   %pc3   %pc6
                2.82 3.75 3.79   2.92   0.57  93.69   0.00   0.00
        0   0   0.29 2.76 3.79   0.26   1.24  98.21   0.00   0.00
        0   7   0.11 3.02 3.79   0.45
        1   3   0.14 2.45 3.79   0.14   0.56  99.16
        1   6   0.03 2.79 3.79   0.25
        2   1   0.06 3.07 3.79   0.12   0.26  99.56
        2   5   0.05 2.85 3.79   0.13
        3   2   0.05 2.81 3.79  21.88   0.23  77.84
        3   4  21.83 3.78 3.79   0.11</comment></comment></comment>


Girl Scout Does Brisk Business Selling Cookies Outside San Francisco Pot Club - <AUTHOR> http://www.nbcbayarea.com/news/local/Girl-Scout-Does-Brisk-Business-Selling-Cookies-Outside-San-Francisco-Pot-Club-246452511.html

<comment><USER2> Wonder why Girl Scouts of Northern California were okay with it and Girl Scouts of Colorado tweeted-- "Consistent with our policy for many years now, @GSColo doesn't allow girls to sell cookies outside of any adult-oriented business..."

</comment><comment><USER3> This girl scout is brilliant! I see bright future in front of her.</comment>


For kids, addictiveness of screens can rivals heroin - <AUTHOR> http://nypost.com/2016/08/27/its-digital-heroin-how-screens-turn-kids-into-psychotic-junkies/ <comment><USER2> Ah yes, the eerie glowing screen at night, the hypnotic state, etc.

But have you noticed that people who _read books_ sit very still, as if transfixed, with the only movement being rapid flicks of their eyeballs?

</comment><comment><USER3> Isn't it the same for adults, as well as kids? Maybe we don't throw temper tantrums, but otherwise?

<comment><AUTHOR> Good question. I guess we don't fully know if it's worse for kids because they've not grown up yet. There's a chance (non-trivial, I'd guess) that screen addiction in childhood could end up being harder to kick than adult- onset screen addiction. Also, even occasional use of drugs has been shown to be worse in children than adults. This could have the same disparate impact.</comment></comment>


The Bay Bridge is gradually disappearing from Google Maps - <AUTHOR> https://www.google.com/maps/myplaces?hl=en&ll=37.816599,-122.355552&spn=0.017663,0.036263&ctz=420&t=m&z=15

<comment><USER2> The Bay Bridge is currently closed until Tues at 5am. It's actually two bridges that meet at Treasure Island. The Eastern half is being rerouted this weekend onto a newly completed bridge. (A pretty amazing project, by the way.) This includes a slight change in the connectors at Treasure Island and in Oakland. And since it's an entirely new bridge, the map probably treats it as a new road.

So, quite possibly, the new tiles for the map are in transition or not yet propagated?

Edit: A correction - they meet on Yerba Buena Island technically, not Treasure Island.

<comment><USER3> Both eastern spans have displayed on Google Maps for the past month or two. The traffic data was even available, just directions didn't tell you to use the new bridge yet.

</comment></comment><comment><USER4> I assume its an intentional modification so that Google Maps doesn't give driving directions that use the bridge.

</comment><comment><USER5> I clicked on the link from my iPhone. I'm offered to download the Maps app even though I already have it. When I click "no thanks" I'm taken to the homepage.

Fuck you to the PMs and devs at google for such big screw ups all across google priorities.

<comment><USER6> Take it up with Apple, on android there's an API apps can use to launch themselves for certain web requests. However, there's no way to do this with iOS.

<comment><USER7> Not being able to tell whether the app is installed is Apple's fault. Redirecting to the homepage rather than the specific link is not.

<comment><USER8> Being able to tell whether the app is installed sounds like a privacy violation. There is a mechanism for linking to apps in iOS; Google should be using it.

<comment><USER9> Actually it fires an intent, and if the application is there it will catch it, if not, it won't. No privacy violation needed as IIRC it won't communicate back to the website.

Could be wrong, haven't done much android programming.

</comment></comment></comment></comment></comment><comment><USER10> On a similar vein, I was very impressed to note that, when the I-5 bridge over the Skagit River in Washington collapsed in May this year, it took roughly 1-2 hours from the news breaking (around 7:00pm PDT) for Google to have removed that section of the I-5 from their maps.

I would be very interested if anyone has insight on how it was done so quickly (particularly as to whether it's some automated process driven by a reliable data feed, or whether human intervention was required). It seemed too quick to be instigated by Map Maker edits, but maybe if enough people submit the same change, updates are pushed through faster?

<comment><USER11> I used to work for a map company when the Macarthur Maze fire hit, and we were able to push out a change at about that rapidity. The data files for the maps aren't terribly complicated to parse, so pushing a change isn't difficult at all.

<comment><USER12> What sort of data files are they (hoping you don't say MID/MIF).

<comment><USER11> We were using deCarta's DDS software, so their proprietary RMF format.

</comment></comment></comment></comment><comment><USER13> BTW, I found this super-cool construction cam page earlier today, where you can look at the construction over the past few years.

[http://baybridgeinfo.org/construction- cams](http://baybridgeinfo.org/construction-cams)

The YBI camera is the most interesting IMO

<comment><USER14> I don't get why people made so much fun of Apple Maps for showing bridges as weird, collapsed, accordion-looking structures when Google Maps does the exact same thing on the exact same bridges.

</comment></comment><comment><USER15> The Bay Bridge is gradually appearing on Google Maps.

Zoom in and you'll see the missing segments with "Planned" on them.

<comment><USER16> Doc: Don't you see? The bridge _will_ exist in 1985. It's safe and still in use. Therefore, as long as we get the DeLorean up to 88 miles per hour before we hit the edge of the ravine, we'll instantaneously arrive at a point in time where the bridge is completed. We'll have track under us and coast safely across the ravine!

</comment></comment><comment><USER17> Even more impressive in the 3d satellite view: [http://i.imgur.com/J1apYPf.jpg](http://i.imgur.com/J1apYPf.jpg)

</comment><comment><USER18> Probably because it is under construction.

[http://baybridgeinfo.org/](http://baybridgeinfo.org/)

</comment><comment><USER19> What's amusing is that if you do a hard refresh of the page it shows the old bridge routing for a fraction of a second and then reloads new tiles with the truncated new bridge.

Maybe this just says I'm easily amused...

<comment><USER20> Probably has to do with chrome cacheing

</comment></comment><comment><USER21> I don't really know the significance of this, it just looks like an error to me and it's certainly not news that errors exist.

A quick Google search and apparently there's a new section of the bridge opening or something? I still don't quite see why this is significant?

<comment><USER22> It's not an error. If it were, it would be a very big error, as their directions would be completely broken for everyone going to or from San Francisco and Oakland, dis-servicing hundreds of thousands of people.

But the bay bridge is closed this weekend:

[http://www.sfmta.com/baybridgelaborday](http://www.sfmta.com/baybridgelaborday)

The reason why this is interesting is that it shows that google is very responsive about updating their maps in real time based on recent events. It's impressive. It is also interesting because the Bay Bridge is a major thoroughfare in the area, and it's odd and unique to see a portion of it cut off in the map.

<comment><USER23> This is a bridge in Bay Area next to the center of their world. I'm pretty sure african bridges are not updated for road work or even for a long time after completion.

<comment><USER24> It'd be interesting to see some stats on average update times for various places. Do they update North Dakota road work with the same frequency/speed? Canada? Norway? Italy? Japan? Australia?

<comment><USER25> I know that I was trying to hike near Mt. St. Helens in Washington, and Google maps gave directions along a road that was gone in a landslide at least 3 years ago. In fact, we never found the way to the trail -- several roads were washed out or blocked with boulders, but Google didn't have the info.

</comment></comment></comment></comment></comment><comment><USER26> More frustrating is that the "New" google maps doesn't support this link, and it rolls back to "classic maps". The new maps significantly lack parity with the "old" maps. I guess we should be grateful that we can roll back at all.

<comment><USER27> Another regression: you can't 'add a stop' to directions using the new maps.

"Currently, you can only route between two locations in the new Google Maps. If you'd like to add a destination or waypoint, you can temporarily use the classic Google Maps experience." [https://support.google.com/maps/answer/3092447?ctx=c2n_direc...](https://support.google.com/maps/answer/3092447?ctx=c2n_directions2)

</comment></comment><comment><USER28> It's actually the opposite: it's gradually appearing. At least it looks to me like its displaying the new unfinished span and will connect it when the transition is done.

<comment><USER29> I don't think so. I noticed a slight removal this morning, and the now missing area has grown.

</comment></comment><comment><USER30> Bay Bridge is undergoing repair works till Sept 3rd, 5am.

[http://baybridgeinfo.org](http://baybridgeinfo.org)

</comment><comment><USER31> Google Maps never worked well for that bridge anyway...you'd be driving along to go to either end and it would get confused and start giving you directions like you had gotten off on treasure island.

</comment><comment><USER32> Directions are routed away from the bridge while it's closed, so maybe they removed it for this reason.

</comment><comment><USER33> I tried navigating from Moraga to Treasure Island, and it flat out says it can't route me there.

<comment><USER34> And it's probably correct; access to Treasure Island is restricted until the new bridge is opened.

<comment><USER35> They have a ferry don't they?

<comment><USER34> Not that I can locate. You may be thinking of Alameda or Angel Island.

<comment><USER35> I guess I figured it was a logical place to have a ferry. Wikipedia says it was created the same year as the bridge opened (1936), so a totally bridge dependent island does make sense.

Googling for "treasure island ferry" has a lot of results. Apparently some would suggest there is one planned?

</comment></comment></comment></comment></comment><comment><USER36> It is also showing the new bridge with east and west lanes side by side.

</comment><comment><USER37> Google sign in is required. I'd appreciate if HN had less posts from the "walled" sources.

<comment><USER38> No, it's not required. Try the link in a private mode tab or different browser.

This is one of those evil tricks, if Microsoft or Google know somehow you have an account they'll try to force a sign in ever after.

<comment><USER39> "evil trick" is pushing it, a bit. If I had to guess, the algorithm is more likely something like "you have a Google auth token in your cookies but it's too old, so you need to log in again"</comment></comment></comment>


Microsoft Gives Paint the 11th Hour Reprieve It Deserves - <AUTHOR> https://www.thurrott.com/windows/windows-10/205446/microsoft-gives-paint-the-11th-hour-reprieve-it-deserves <comment><USER3> I think commenters here are missing the point. Yes there are alternatives. Yes there are open source versions. But Microsoft isn't bringing paint back because it needs a powerful image editor. They are bringing paint back because many folks are very familiar with it, it gets the job done for them, and has a certain nostalgia factor to it to boot.

The point is to bring back paint _exactly as it has been for years_. Not iterate on the project.

One of my favorite examples of paint is the popular streamer destiny doing a Bob Ross painting. It actually comes out looking pretty okay...

[https://youtu.be/8XxsgEw49p0](https://youtu.be/8XxsgEw49p0)

<comment><USER4> I find paint extremely useful for screenshots. PrintScreen, Win+R, mspaint, crop it, add some red boxes, done.

Using the snipping tool is infinitely slower for me. Win, snipp, click new, select region, click the edit in paint 3d button, wait for Paint3D to open, add boxes.

mspaint opens instantly and is sufficient for basic tasks, that's why I like it when using windows.

<comment><USER5> Yes, this is 99.99% of the image work that I do. Take a screenshot, add a box.

On Ubuntu there is no default tool for this, to my knowledge. I installed `pinta`, and it's _way_ overkill and far more complex than paint.

A sane, default, "draw box on image" app is a good thing.

<comment><USER6> > A sane, default, "draw box on image" app is a good thing.

Speaking of that, is that still insanely hard to accomplish in Gimp? I haven't used it in years but I remember being extremely frustrated with it.

<comment><USER7> Gimp was never meant to do those kinds of operations, and it still can't - <USER2> least not "easily"; it's still as cumbersome as before.

You can still do "pixel level" editing - you just can't do primitives.

Honestly, though, it's not the right tool for that.

If I need to do vector art, then I'll use a vector art program like inkscape. If I need to do CAD, then there's a number of options in that space as well.

If I need to do pixel level editing, or something similar, my go-to editor on Linux is:

[https://en.wikipedia.org/wiki/GrafX2](https://en.wikipedia.org/wiki/GrafX2)

...mainly because I'm familiar with it since it is virtually a clone of various editors I used on my Amiga back in the day.

<comment><USER6> That makes sense. I remember being frustrated though because Gimp was usually the only imaging app that came installed in a desktop Linux system. And I never found a good Paint-like app that wasn't super buggy.

</comment></comment></comment></comment></comment></comment><comment><USER8> I'm surprised MS don't just strike a deal with Paint.NET [1]. It would help fund a worthwhile project (which feels as simple as Paint, but is significantly more advanced) that appears to be run from donations only.

[1] [https://www.getpaint.net](https://www.getpaint.net)

<comment><USER9> Paint.NET and IrfanView represent the best-of-best for simple image creation and viewing, and I cannot believe that they're free.

<comment><USER10> At my last job some busybodies started inspecting whether or not we have correct licenses for everything we use and explicitly deleted IrfanView from peoples' computers because they didn't. When word got around, actually went out and _bought_ IrfanView license just for the "not gonna let you do that" moment. It's damn useful, and I've been using it for over a decade now on every Windows machine I had. Before that, I remember using something called "ACDSee", but they must have made the software worse in important ways, because I eventually switched to Irfan.

</comment></comment></comment><comment><USER11> In my opinion Paint is one of the best ever examples of good software UI & UX.

It's so simple and obvious how to use it - all the most important controls are right there to hand and the few slightly more advanced features are easily discoverable in a well organised, fairly flat menu system. You can literally figure out every function either by intuition or very quick trial and error.

It uses skeuomorphism and icons wonderfully to make everything absolutely clear in form and function, even for a very novice user.

And - I think this is an important - it deals with images as a 2D grid of pixels without any abstractions on top. No semi-3D overlapping 'layers', etc. In keeping it simple, they give the user maximum control over the image with no abstractions to get in the way.

In all sincerity, I think it should be a case study in simple, right-tool-for- the-job UX and UI design.

</comment><comment><USER12> I would LOVE something as simple as the Windows XP version of Paint on Linux. Something that opens instantly, doesn't have a bazillion options, nested and floating tool menus, etc.

I've tried Gimp and a few others and I end up wasting way too much time just trying to figure out how to do basic stuff like draw a red box around something.

<comment><USER13> I've always used Kolourpaint for this, which scratches exactly that itch for me.

<comment><USER14> The following additional packages will be installed: kinit kio kwayland-data kwayland-integration libdbusmenu-qt5-2 libfam0 libhfstospell9 libkf5archive5 libkf5attica5 libkf5auth-data libkf5auth5 libkf5bookmarks-data libkf5bookmarks5 libkf5codecs-data libkf5codecs5 libkf5completion-data libkf5completion5 libkf5config-bin libkf5config-data libkf5configcore5 libkf5configgui5 libkf5configwidgets-data libkf5configwidgets5 libkf5coreaddons-data libkf5coreaddons5 libkf5crash5 libkf5dbusaddons-bin libkf5dbusaddons-data libkf5dbusaddons5 libkf5doctools5 libkf5globalaccel-bin libkf5globalaccel-data libkf5globalaccel5 libkf5globalaccelprivate5 libkf5guiaddons5 libkf5i18n-data libkf5i18n5 libkf5iconthemes-bin libkf5iconthemes-data libkf5iconthemes5 libkf5idletime5 libkf5itemviews-data libkf5itemviews5 libkf5jobwidgets-data libkf5jobwidgets5 libkf5kdelibs4support-data libkf5kdelibs4support5 libkf5kdelibs4support5-bin libkf5kiocore5 libkf5kiofilewidgets5 libkf5kiontlm5 libkf5kiowidgets5 libkf5notifications-data libkf5notifications5 libkf5parts-data libkf5parts- plugins libkf5parts5 libkf5sane-data libkf5sane5 libkf5service-bin libkf5service-data libkf5service5 libkf5solid5 libkf5solid5-data libkf5sonnet5-data libkf5sonnetcore5 libkf5sonnetui5 libkf5textwidgets-data libkf5textwidgets5 libkf5wallet-bin libkf5wallet-data libkf5wallet5 libkf5waylandclient5 libkf5widgetsaddons-data libkf5widgetsaddons5 libkf5windowsystem-data libkf5windowsystem5 libkf5xmlgui-bin libkf5xmlgui-data libkf5xmlgui5 libkwalletbackend5-5 libphonon4qt5-4 libpolkit-qt5-1-1 libqt5qml5 libqt5quick5 libqt5script5 libqt5test5 libqt5texttospeech5 libqt5waylandclient5 libqt5waylandcompositor5 libqt5xml5 libvoikko1 phonon4qt5 phonon4qt5-backend-vlc qtwayland5 sonnet-plugins

That's a lot, but it does work well.

<comment><USER15> Yeah, if you do not have the KDE libraries already, installing any program that uses them will give you this package vomit. One way to manage this is to do apt-get install kolourpaint and then close your eyes, press enter, y, enter enter enter (repeat enter around 30 times or so, depending on your terminal size), open your eyes, type exit and go watch a couple "top 10" videos on youtube or something.

After that you can use Kolourpaint.

<comment><USER13> Careful where you suggest something like that. Next week we might see a front page HN shell script that blacks out your screen, starts an install, and queues up some top 10 videos.

And people will use it.

</comment></comment></comment></comment></comment><comment><USER16> One of the most nostalgic things about Windows was messing about with MS Paint to kill time in the days when the internet didn't exist yet. I wish OS X had some kind of native paint program. Seems like such a basic thing, why not include it with the OS?

<comment><USER17> osx has a perfectly useable markup tool, the one that pops-up when you print- screen. Weirdly enough, I don't know how to launch that with a blank canvas.

<comment><USER18> Seashore (a severely gimped GIMP) is a decent simple editor for OSX.

[https://github.com/robaho/seashore](https://github.com/robaho/seashore)

</comment></comment></comment><comment><USER19> I don't know why they don't just give it a facelift, but keep all the core functionality and interface...instead of the Paint3D route of making it overly confusing and keeping a very dated looking paint .net app.

<comment><USER20> I know the common sentiment is that software is never "done" and there's always something that could be better about it, but I think Paint is fine as it is without any facelifting.

<comment><USER21> Most of the software I rely on feels done to me. If anything, I'm afraid that some of the companies have built monstrosities that just aren't sustainable.

Evernote, for example, feels like it should be made way, way smaller so that it can be maintained by a small group of people.

</comment></comment></comment><comment><USER22> Thank goodness. What would Jim'll Paint It do otherwise?

[https://jimllpaintit.tumblr.com/](https://jimllpaintit.tumblr.com/)

</comment><comment><USER23> [I started the Twitter thread this article links to, and work with Paul and Brad.]

Some context via a timeline:

* Dec 12, 2017: The Microsoft Paint utility in Windows was officially deprecated [1].

* Dec 20, 2017: A Product Alert button [2] was added to the app that, when clicked, indicated Microsoft Paint was going to move to the Microsoft Store [3]. That is, it was going to be available on-demand rather than ship in-box with the operating system [4].

* ~1H 2019: Microsoft has now fully reversed this decision [5] and removed the Product Alert button from the application altogether [6]. There is no official communication as to why this change was made.

[1] [https://support.microsoft.com/en-us/help/4034825/features- th...](https://support.microsoft.com/en-us/help/4034825/features-that-are- removed-or-deprecated-in-windows-10-fall-creators-up)

[2] [https://i0.wp.com/www.onmsft.com/wp- content/uploads/2017/12/...](https://i0.wp.com/www.onmsft.com/wp- content/uploads/2017/12/paint-thing.png?resize=1031%2C580&ssl=1)

[3] [https://www.kunal- chowdhury.com/2017/12/windows-10-paint-3d-...](https://www.kunal- chowdhury.com/2017/12/windows-10-paint-3d-to-replace-mspaint-soon.html)

[4] [https://blogs.windows.com/windowsexperience/2017/07/24/ms- pa...](https://blogs.windows.com/windowsexperience/2017/07/24/ms-paint- stay/#PzlGpp3WmTXhFwEV.97)

[5] [https://twitter.com/brandonleblanc/status/112055486957057229...](https://twitter.com/brandonleblanc/status/1120554869570572290)

[6] [https://twitter.com/h0x0d/status/1119940129450184704](https://twitter.com/h0x0d/status/1119940129450184704)

</comment><comment><USER24> I don't really care that much since I rarely use paint or paint 3d. I just find it odd that MS devoted any time to paint3d. I remember when they announced it they went on and on about all these great 3d things you could do. And no one cared. Did enough people in charge really believe that people would be into the 3d stuff or was it just trying to convince people that they wouldn't really need Pain any more?

</comment><comment><USER25> Does anyone know why they don't update the built-in apps more frequently? Paint, Notepad, Wordpad and others are pretty much remnants from the Win95 days. On some controlled machines it would be a godsend if Windows had a better built-in editor.

Updating these apps can't be that hard compared to all the other stuff they are doing.

</comment><comment><USER26> Even if the new apps for Windows 10 are better I still go out of my way to uninstall 3D Paint and the rest. If they didn't cram candy crush and all of the other garbage down our throats I probably wouldn't be so sensitive to additions like 3D paint.

</comment><comment><USER27> I think it's lame that macOS doesn't ship with anything like Paint.

<comment><USER28> MacOS Preview has (very) basic image editing built in, but it's not widely advertised. Open it up and look through the menus.

</comment></comment><comment><USER29> As an avid user of paint, I noticed that it was replaced only weeks after it was first removed (accessed by right-clicking on an image and using "open with").

</comment><comment><USER30> It made me smile that Paul Thurott's SuperSite lives on.

</comment><comment><USER31> What on earth is Iker doing in that article?

<comment><USER32> He's saving Paint

<comment><USER33> The connotation of using a goalkeeper is more like "avoiding Paint to pass", which is not what the article talks about.</comment></comment></comment>


Don't Call Yourself a Programmer (2011) - <AUTHOR> https://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/ <comment><USER2> Multiple discussions on this article can be found here: [https://hn.algolia.com/?query=Don%27t%20call%20yourself%20a%...](https://hn.algolia.com/?query=Don%27t%20call%20yourself%20a%20programmer&sort=byPopularity&prefix&page=0&dateRange=all&type=story)</comment>


Show HN: Awesome GitHub Topics – Top 500 GitHub topics filtered and categorized - <AUTHOR> http://www.gitlogs.com/awesome-topics <comment><AUTHOR> Last week, GitHub released an awesome feature called Topics. It allows authors to tag their repository.

In response, I'm launching a simple project, Awesome Github Topics. It's an indexed list of the top 500 topics on GitHub that's painstaking filtered and categorized into different categories based on developer interests.

While Github hasn't released an API endpoint for the new topics feature yet. I just crawled the top repos on Github and scanned the tags then ranked all the most commonly used tags based on the total number of stars it had in the collection of repos. It's not a perfect count but it should be good enough on a relative measurement.

Hope you find it useful.

<comment><USER2> Maybe add some info about how active they are?

</comment></comment><comment><USER3> This is not a point against this site, but isn't using programming language names as topics pointless? You can already search and filter by the main programming language a repo is in as well as the languages used in the files within a repo. Searching for something like "concurrency" or "threads" comes up with zero results (at least on this site).

</comment><comment><USER4> Do you have the link of GitHub Topic feature? Is your awesome-topics project also available on the github?

<comment><AUTHOR> [https://github.com/blog/2309-introducing- topics](https://github.com/blog/2309-introducing-topics) here's the release notes</comment></comment>


We can teach women to code, but that just creates another problem - <AUTHOR> https://www.theguardian.com/technology/2017/mar/14/tech-women-code-workshops-developer-jobs <comment><USER2> For fuck sake- you want to code on the backend, code on the backend.

Write good code, hit the deadline, deploy.

Couldn't care less what you look like, how you were born, etc.

These articles serve only to gratify people who enjoy inequality horror stories.

<comment><USER3> The guardian has been pushing more clickbait because their revenue is falling.</comment></comment>


Amazon Is Thriving Thanks to Taxpayer Dollars - <AUTHOR> https://newrepublic.com/article/146540/amazon-thriving-thanks-taxpayer-dollars <comment><USER2> I've always wondered what it's like. Wake up in the morning, look in the mirror, and say to myself, "I personally have enough money to end world hunger for three years." And then not do it. Instead, just go off to work, a little spring in my step, knowing the US government would foot the bill for food stamps for my employees instead. While 600,000 children starve to death worldwide in the new year. I wonder how that would feel? Would I be conflicted about it?

<comment><USER3> Then what happens after those 3 years? Nevermind what would happen if Bezos liquidated 100% of his stock.

There are side effects of him creating such wealth. Maybe you can't see them directly but they are there. Advances made in tech allow for people everywhere in the world to benefit. Look at smart phone penetration which allows people knowledge, greater communication, etc.

None of this comes about by what you're commenting on. Take a look at the Gates foundation and how many tens of billions which are pledged by the world richest.

It's very easy to judge and comment from the stands. I'd love to see what your daily activities are to help the world's poorest. I'd dare say what they want is a job that comes from foreign investment rather than a sack of UN grains for the month's rations.

<comment><USER2> It seems you guys missed the point of the comment. It's not a generic rant about Bezos being rich. That would be against HN posting guidelines.

Bezos has enough money to feed the world BUT doesn't even pay his own employees enough to feed themselves. "Evil corporations" like AT&T and Comcast have taken their Trump tax windfall to pay bonuses to all hands. Amazon takes the money and pockets it... while their employees are food insecure.

</comment></comment></comment><comment><USER4> Welcome to Feudalism 2.0 - your new overlords are no longer the Duke of Aquitaine, Lorraine or Normandy but Google, Amazon, Facebook and Apple.

<comment><USER5> Nobody forces anybody to buy or use for free anything from those companies. Try not paying tax to your duke though...

<comment><USER6> I'm not anti-Amazon or anything, but I do think that characterization is inaccurate, and the article is raising legitimate concerns. It's not the way these problems work.

No, no one is forced to buy from these companies, but that's not how the coercion works. How it works is that there is a coercion in making an offer too good to refuse, where the costs to others of that offer are hidden in some way or another. Then because those other people are getting hurt, they have less, which forces others to take a cut to stay viable, which hurts them, and so forth and so on.

It's a kind of runaway process, and how monopolies often come to be. They don't come and threaten you if you don't use their services, they make an offer that is too good to be true, because it is, except that the costs of that fraud are borne in production, not the product, or in the long-term.

The fraud comes in the form of avoiding financial obligations by hiding them. It's how a lot of these financial inequities develop: Corporation X hides the costs, especially where those costs are long-term, fuzzy, or loosely monitored (ecologically, in public health, in welfare), and then profits by passing those costs on to society more broadly. It's like someone saying they can build a house for you cheaply, then hiding all the short-cuts they use to do so, and then disappearing when you're left to foot the bill 10 years later for their irresponsibility and lies.

With the financial crisis underpinning the Great Recession, it happened by firms passing on the risk costs to the public through bailouts. Various manufacturing and energy-sector companies get out of the real ecological costs of their activities by plausible deniability in lawsuits, etc.

Here, Amazon is hiding the costs of that free shipping, etc. by not providing their workers fair conditions and by passing those costs on to the public. So their employees get injured every day, and they shouldn't pay that?

The reason people become irate when a certain level of financial success is reached is because so often, the greater the inequity, the higher the likelihood that inequity was obtained through unfair means. It's not guaranteed, but the probability increases rapidly, and society is full of these extreme forms of inequity. Corruption isn't driven toward impoverishment, and human attributes are usually bell-shaped, not grotesquely skewed.

These companies become so bloated and their monopolies so extreme that often it is understandable that government give into their demands. So we end up with companies "too big to fail"\--really, isn't that a euphemism for "too big to stand up to"?--and rationalizing the bullying and unfairness by telling ourselves these companies are really making a better place, as if it's only these companies, no one else, that no one else would have done these things if they could compete fairly, that we're buying from _this_ company in particular because we preferred that company, and not because the choice was really to buy or go without, and that it's justified that the profits should be unevenly distributed throughout the company.

Isn't, after all, Amazon's success due to Bezos? Isn't he the one doing all the work?

<comment><USER5> I fail to see how offer can be too good to refuse. I don't use google services, because it's evil. Period. No matter what's the offer.

And could you elaborate on hidden cost to others? All I see right now is thousands if not millions workplaces created thanks to Amazon, hundreds businesses having a relatively cheap marketplace to sell their goods, which in turn creates workplaces, millions of kids in their third world countries having their chance to leave the farm and go and try to build a skill, billion of people went out of poverty in last 30 years, all of it just because Bezos and others like him managed to make that offer "too good to refuse".

This line with Bezos didn't do all of the job himself is really a slippery slope, blink of an eye and you're sending kulaks to Siberia with their families. [https://en.m.wikipedia.org/wiki/](https://en.m.wikipedia.org/wiki/)

I also fail to see why it's Bezos's problem that nobody wants to hire those people for bigger salaries. At least he's giving them something. Would they be better off without Amazon existence? Or are they better off because it's existence?

</comment></comment></comment></comment><comment><USER7> this article is highly misleading and is clearly shoehorning particular statistics in to paint a rather manipulative and damning portrait of a greedy jeff bezos and the soulless company he's running. that's okay, i assume anyone here would have the mental wherewithal to discern this sort of trickery and not allow such drivel to influence their opinions too much.

the reality is that the few people in the first world (let's face it, if you're reading hackernews, you're probably in the first world) aren't benefiting directly from amazon in someway, whether it be directly or indirectly.

it's frustrating to see this generalized hatred towards anyone who surpasses a certain level of success, as if what he's doing to make the world a better place isn't quite enough and he should be off in africa spoonfeeding starving children. it's such a cartoonish and unrealistic notion that anyone with that amount of money would be able to solve the most complex issues that we face as a species simply because he has a high net worth.

i'd take facebook, google and amazon as my technocratic overlords over just facebook and google any year of the millenium.

</comment><comment><USER8> They will get more once they figure out which city they can use to extort seattle. Then more again when they use Seattle to extort tax breaks from their new HQ.

<comment><USER9> I hate the fact that's probably exactly what will happen. We need better ways from keeping corporations from taking advantage of the tax payer unfairly.

<comment><USER10> What else can you do when cities want/need large corporations more than more than the corporation needs them? I mean one of the wealthiest areas in my metro area is sustained mostly by a single fortune 500. If they threatened to leave you better believe they'll grovel at the font of wealth that allows their entire community to exist.

<comment><USER8> and if the next city tells them to get fucked how many times can they manage to move around before they get the message?

Amazon is going to uproot huge amounts of engineers? Doubt it. I wouldn't move just to help jeff make a bit more.

<comment><USER11> Stop growth in that city and increase headcount exclusively elsewhere. Growth rate for headcount is something like 10-20% a year.</comment></comment></comment></comment></comment>


New date rape drug test allows women to check if drinks are spiked - <AUTHOR> http://www.independent.co.uk/life-style/date-rape-drug-test-women-check-spiked-drinks-undercover-colour-a8527791.html <comment><USER2> ...or anybody I guess.</comment>


Why I Still Use Vim - <AUTHOR> https://medium.com/@caspervonb/why-i-still-use-vim-67afd76b4db6 <comment><USER2> Thanks for taking the time to do those comparisons. Very interesting. I was always too afraid of using a "terminal text editor", but the last 12 months or so I have made the effort to learn, and it's been quite enjoyable. Having said that, I'm still torn between Focuswriter and Vim for writing my prose, and I haven't settled on one or the other yet.</comment>


Israeli hacker retaliates to credit card hacking - <AUTHOR> http://www.bbc.co.uk/news/world-middle-east-16526067

<comment><USER2> I think it would be interesting if new technologies emerge from this apparently new front in the middle east conflict.</comment>


Ask HN: What are the best conferences you've attended?  - <AUTHOR>

Any advice/anecdotes about getting the most out of the experience? <comment><USER2> From 13 days ago:

<http://news.ycombinator.com/item?id=1577896>

When you have a question, searching often turns up a previous discussion:

[http://searchyc.com/submissions/best+conferences?sort=by_dat...](http://searchyc.com/submissions/best+conferences?sort=by_date)</comment>


Show HN: Have you been hire pwned? - <AUTHOR> https://hirepwned.xyz <comment><AUTHOR> _The story of this_

TL;DR — I got hire pwned and made a site to let others share.

I was on Hacker News and complained (later regretting it, I don't like complaining, especially not like this) of a bad experience I had while hiring with a YC company.

I didn't think much of this comment, it was just a good way to vent, even if as I said, I felt bad about doing it a day or so later.

But the comment garnered a lot of attention, more than 30 votes and 10 sub comments. I started thinking I had hit some nerve, which surprised me.

I was also surprised how most of the comments were supportive of me. I expected the usual HN contrarian, "yes, but,it's probably the exact opposite of how you see it, here's why," but there wasn't really any of that, at least not strongly stated. A few of the comments even started calling for me, or people in general, to "name and shame" the company the anecdote related to.

I still have not decided, and right now don't feel as if I can say I agree with, the notion of complaining about these things in public forums as being something that works, either for the person complaining, or just in general. But I think other people want that sort of thing ( one comment even called for a database of these experiences ), and I realized I had just the sort of simple code lying around from another ( failed ) side project so I thought I could reuse it ( finally implement that Redis search ) and let people vent their experiences in a database where you can search by company name.

That's it. That's the experience that led to creating this. Let's see what happens. I don't think anything will come of it, but let's see. It will certainly be interesting to read other people's experiences, and maybe it will be useful for people to do so.</comment>


A video which induces visual hallucinations in healthy people - <AUTHOR> https://www.indy100.com/article/hallucinate-science-optical-illusion-eyes-brain-hurt-drugs-eyes-7359381 <comment><AUTHOR> OK, I just tried it. Not seeing any gray blobs. I don't really want to do it again; it was a little annoying.

</comment><comment><AUTHOR> I haven't watched it myself yet.</comment>


How to Write Portable C Without Complicating Your Build - <AUTHOR> http://nullprogram.com/blog/2017/03/30/ <comment><USER2> Just to reality-proof that: Redis managed to survive 7 years without autotools so far, using similar techniques, you just type "make" regardless of the unix system you want to compile Redis with. No major complexity was faced in order to do so, however Redis depends on nothing externally if not libc. For software projects with many external deps it may be worth to use autotools instead.

<comment><USER3> Quick, how do you install redis to a different prefix? Everybody knows `./configure --prefix=...` (or if they forget, there's `./configure --help`), `make PREFIX=...`, not so much.

<comment><USER2> No way other than "cp redis-server /your/path".

</comment></comment></comment><comment><USER4> The article downplays a little bit the value of the autotools. It's not just about building for 30-year ago hosts, it's also about providing a lot of convenient tools and providing the user with a known interface. If you write your own configure, people may expect to be able to pass additional CFLAGS (not overriding the existing one), setting the path to various elements, installing in a different root, having certain targets for the generated makefiles (like dist, clean, install, uninstall), having cross-compilation work (including crosscompiling to Windows with mingw64 which solves the toolchain problem of releasing binaries for Windows), ... It's a tedious task and easy to get wrong.

On the other hand, using the autotools in a modern way is dead easy. You don't need to add many many tests if you don't intend to support old stuff. You get access to automake which is a fantastic tool on its own.

Don't read old tutorials, don't look at how big established projects are doing, look at the Autotools Mythbuster instead (autotools.io) and start with a minimal configure.ac.

<comment><USER5> > If you write your own configure, people may expect to be able to [...] It's > a tedious task and easy to get wrong.

The author's point is to do without a configure step entirely, not write your own.

A standard Makefile is perfectly capable of implementing these things in a manner which is clean, reasonably portable and without the level of indirection that makes things hard to debug.

My own experience is that autotools has evolved to feel less standard than the modern platforms it purports to smooth over the differences in; I seem to frequently find that I can't generate a 'configure' for a 3rd party software or libraries from Git repositories because I of the wrong autotools versions. Efforts to investigate this by unpicking the various macros etc. provided in the build have almost always been unsuccessful, leaving me building from distributed .tar.gz files. With something that feels like such a moving target after 30 years, I'm glad to see people realising the benefit of a simple Makefile that's easy to customise for the edge cases.

<comment><USER6> There's no way you can do what autotools does in a Makefile without implementing half of autotools yourself. How do you check for headers? How do you check for functions? How do you test if qsort_r expects

        (*)(void*, const void*, const void*)

or

        (*)(const void*, const void*, void*)

as function pointer? If people are forced to detect that kind of stuff in Makefiles, they get the urge to match `uname` against some hard-coded platforms and that's a terrible solution.

<comment><USER7> > _There 's no way you can do what autotools does in a Makefile without > implementing half of autotools yourself._

That's part of the argument: with standards compliant code, you don't need to do "what autotools does".

<comment><USER6> ENOTSUP is part of the standard and I do have autotools macros checking if some function calls produce that error value on the host system.

</comment></comment></comment></comment></comment><comment><USER8> In the past, I've wrangled with autotools more than I'd care to admit. I spent very many hours indeed perfecting my automake files, configure scripts, libtool and gettext integrations, making sure you can pass in CPPFLAGS and LDFLAGS as one might expect, cross compiling, with all the .in and .in.in and .h.in files, with all the m4 macros, publishing some of my own autoconf macros, all the while figuring out how to make it all work on Linux, mingw, the various bsd derivatives, AIX, Solaris, HP-UX, OS X, Visual C compilers, and what have you.

From the developer's perspective, it is an absolute nightmare – and I consider myself a seasoned professional with the various unix-like systems and their shells. Even with this deliberate care, dedication, and time spent preparing the scripts beforehand, the build usually doesn't work properly out of the box on a new platform.

My mistake was in thinking that the value in autotools system is that you can build a system that will compile for anything. I imagined all you need to do is use (or create) feature tests to sniff out any differences between platforms, and your code will build and work anywhere.

The real value of autotools is for the user. The user can run "./configure && make && make check && make install".

Don't make the mistake I did, thinking that autotools will save you time. It absolutely will not.

<comment><USER9> I really wish there were an alternative to the autotools that offered that configure make install interface without the nightmarish developer experiente. Perhaps by compromising on the portability, if that is the only way.

<comment><USER10> CMake, SCons, maybe. This question was closed as not constructive, but the discussion looks reasonable to me:

[http://stackoverflow.com/questions/600274/alternatives-to- au...](http://stackoverflow.com/questions/600274/alternatives-to-autoconf-and- autotools)

<comment><USER11> CMake was a step in the right direction, but it, too, suffers from thousands of under-documented options and fiddly behavior. In a former life I was tasked with maintaining a CMakeLists.txt for a project with multiple dependent libraries, binary blobs, open source dependencies that needed to get pulled in, and the whole thing had to be built for Windows, Linux, Mac, iOS, Android, and a handful of other lesser-known mobile platforms. I wouldn't wish that on my worst enemy.

<comment><USER12> It's not so bad. I have experience with two slightly different build systems based on CMake, which had to have customized toolchain definitions and build Cairo and WebKit. The Cairo build had a custom backend, which we integrated into Cairo's autotools. Cairo was driven using its autotools via CMake's "superproject" system.

</comment></comment></comment></comment></comment><comment><USER13>
      If you're coding to POSIX, you must define the
      _POSIX_C_SOURCE feature test macro to the standard you
      intend to use prior to any system header includes:

Nooooooo.....

Take it from someone who religiously keeps many of his very complex libraries portable across many systems (AIX, FreeBSD, Linux/glibc, Linux/musl, NetBSD, OpenBSD, Solaris, and others), the _last_ thing you want to do is define the POSIX portability macros.

Once you do that, you're in for a _world_ of hurt trying to use any extension, including routines from newer POSIX standards that are almost universally supported, but because some systems don't claim 100% compliance to the latest POSIX release, become hidden once you start using the user-definable feature macros.

Most systems (particularly the BSDs) make _everything_ available by default. On Linux, however, you should define _GNU_SOURCE; on Solaris, define __EXTENSIONS__ and _POSIX_PTHREAD_SEMANTICS; on AIX define _ALL_SOURCE; on Minix define _MINIX. This way, anything you might possibly want to use is available.

There are a few cases where a native extension conflicts with a POSIX routine. The classic case is strerror_r on glibc. Dealing with these cases is easier to deal with than fumbling with feature macros.

Remember, you'll _always_ want to use extensions unless you're writing pure ANSI C (C90) code. Portable is not the same thing as POSIX compliant. And many POSIX routines are effectively extensions on systems not yet certified for the latest POSIX standard.

</comment><comment><USER14> In my experience, I've found that the configuration management aspect of writing software is the least understood and hardest to learn.

All the books on learning languages I've read just skip it entirely, or provide a default setup with no explanation. Which is somewhat understandable. But then the documentation for various projects also do the same thing. I'm left reading the man pages for various tools that some project says I need and going "Why do I need this?" on a higher level than the man pages.

And in my professional life it's much the same. On one project we have one or two people who understand how the system is setup, reject any kind of change or improvement, and just keep throwing bailing wire at it to keep the process going.

On my own, partly as a result to institutional intertia, we have an ancient TFS build controller running a powershell script running gulp running webpack running babel, and then deploy it using robocopy to network share in IIS (using iisnode). It's amazing it all works. It often breaks, rarely with the same error. It also takes 10 times as long as building on my local machine.

</comment><comment><USER15> I will write this rant here because it will get a bigger audience than any blog I would have.

Speaking of someone who occasionally ports software to less common environments I have a few things to say that I was hoping to find in this article.

First the case for and against autotools:

autotools are _well_ supported by every packaging system out there (freebsd ports, pkgsrc, apt, rpm, etc) where it's really just a line or three to do the build in the package definition.

The main things that are not usually thought about by developers but are _loved_ by porters and packagers (and come out of the box with autotools) are: DESTDIR support (installing into an intermediate path, so DESTDIR/PREFIX/usr/bin/myapp) and cross-compilation, which is one of the biggest strengths of using C in the first place!

The biggest argument _against_ autotools is that feature discovery at build time is complete bullshit. I hate it. It reduces determinism and ties execution environment to the build environment.

So if you can support DESTDIR and cross compilation without autotools, go for it! It's not that much extra work!

\---

The second point I was hoping this article would address is project layout. In the last few years a nice, standard-ish layout for portable projects has emerged but package maintainers end up having to teach it to every new (big) project.

Here are examples where it has gone okay: [https://github.com/nodejs/node/tree/63243bcb330408d511b3945c...](https://github.com/nodejs/node/tree/63243bcb330408d511b3945c53719425d8b7abb8/deps/uv/src/unix)

[https://github.com/golang/go/tree/964639cc338db650ccadeafb74...](https://github.com/golang/go/tree/964639cc338db650ccadeafb7424bc8ebb2c0f6c/src/net)

Where you are writing to non-portable parts of unix you can build non-portable stuff into their own files named simply after the platforms and include the correct stuff higher up in a .h

and an exmaple of it not going so well: [https://github.com/dart- lang/sdk/issues/10260](https://github.com/dart-lang/sdk/issues/10260)

(fwiw you can find [https://github.com/mulander](https://github.com/mulander) all over this "teaching" effort, so points to him)

<comment><USER16> Totally agreed about autotools. It's fine (if very slow) when it works, when it doesn't work right away it's a massive pain.

Sometimes I need to build C code for iOS and Android. Libraries with a nice clean setup like the author of this article describes are great. Libraries that use autotools are more trouble than they're worth.

</comment></comment><comment><USER17> One of the nice (perhaps underappreciated) side effects of Rust has been first-class support for all major platforms. If you're linking against other Windows bits you still need to think about mingw vs. msvc, but beyond that you don't need to customize/hack up a build system to get things compiling sanely on both. I recently switched back to C for a particular project and there's been quite a bit of reverse-culture shock when it comes to setting up builds & projects.

<comment><USER18> Rust still doesn't have first class support for UWP.

<comment><USER19> UWP?

EDIT - I should clarify. I google UWP and it could be Universal Windows Platform. If so, how is that different than the windows builds that Rust does support?

<comment><USER18> Think of UWP as Windows Longhorn reborn.

It is the same programming model as .NET, but built on top of COM and just the minimal set of Win32 APIs to support COM based APIs.

It is also sandboxed, just like on OS X.

For Rust to support UWP, it needs to be able to consume COM with the new UWP semantics and at the same time expose traits as COM interfaces accessible to any programming language able to consume UWP libraries.

<comment><USER19> That doesn't sound like a good idea at all, any of it. Why is microsoft doing this?

</comment></comment></comment></comment></comment><comment><USER20> _The nice alternative is MinGW(-w64) with MSYS or Cygwin supplying the unix utilities, though it has the problem of linking against msvcrt.dll_

You can use MingW's make but compile with cl instead of gcc and that problem is not present. You will have to check if all compiler flags are supported though. Or use a wrapper around cl which translates compiler flags, pretty sure that exists already.

 _My preferred approach lately is an amalgamation build_

That won't scale well though. For large projects you'll really want to use something as mentioned above, or have seperate Makefiles and VS projects, or use a build file generator like CMake.

 _edit_ another thing I wanted to add: instead of using

      #if defined(_WIN32)
      void foo() {
        //win implementation
      }
      #else
      void foo() {
        //unix implementation
      }
      #endif

all over the place another option is to split the implementations over source files like impl/win32.c and impl/unix.c then have the build system deal with selecting the correct one. Especially when there are more than a couple of platforms this is much cleaner and more convenient.

<comment><USER21> #if defined(PLATFORM)

I would recommend against that as well.

I have a directory structure where there's a module/hello.c (stub or generic, platform independent code) and then there's module/platform/hello.c which my Makefile selects over the generic one based on the platform. Primary issue is that there's some code duplication, and it's hard to keep .h files general across platforms all the time (not possible all the time), but in general it does make life a lot easier - especially if platform number grows over time or certain are removed.

<comment><USER22> That's quite similar to how Go does it (Go would have something like hello_platform.c), which in my opinion works quite well. I actually find it to be one of the nicest things about Go, compared even to Haskell, which for some bizarre reason uses the C preprocessor (!!) to pepper code with #ifdefs.

<comment><USER23> Go took this idea from Plan 9. In fact, Go shares a lot with Plan 9 C compiler structure.

Related: [http://doc.cat-v.org/henry_spencer/ifdef_considered_harmful](http://doc.cat-v.org/henry_spencer/ifdef_considered_harmful)

</comment></comment></comment></comment><comment><USER24> I don't mind Make for small projects, but it can be a bit of a nightmare for large ones - there are some very unwieldy Makefiles out there. It gets more complicated when you want to have several libraries and/or executables in a project, each of which link against different external libraries. I've always found CMake makes this much easier IMO, and while the language is a bit janky, it does the job.

<comment><USER21> Make is kind of write only. I have this library of mine for image and graphics processing that I wrote and which I'm rolling through years. In the beginning I wrote in all this functionality I thought I needed, basically an architecture of project and it does what I need - I can make a static or dynamic library, it works on Windows, MacOS, and Linux, it has "modules" which can be overriden based on if there's a certain subdirectory within a module with OS/Platform name (basically a compile time multiplatform specialisation) and several other things.. It works and is rock solid. However, if you've asked me now what's in there and why and how... Just by glancing at that spaghetti code in there I know in general what's where, but damnit if I would be brave enough to make significant changes to it. It works though and it works great. I must also point out that I use gcc (different versions) and clang here and there on all three platforms and I change compiler/tools in the environment itself, not within Makefile.

If I would to do it again (I'm not active developer anymore though - it's more for personal use now) I would do it again with make. There's certain straightforwardness to it when writing it, and from my experience there's zero to almost none maintenance, but ymmv of course. I would probably look into CMake if I were using vastly different compiler tools (configuration-wise), but I'm not.

</comment></comment><comment><USER25> This guy has some really interesting blog posts about system level programming.

</comment><comment><USER26> autotools sucks for developers, but as a user I highly value "make uninstall".

Every time I see software without a make uninstall, I have to manually create a textfile with the stuff the application installed so I can do a clean upgrade... it sucks.

Hell, most Windows software ships (mostly crappy) uninstallers, and most OS X software can be uninstalled by dragging the app folder into the Trash, but there are loads of .nix programs without uninstall support? What the f..k?

Oh, and .nix software using standard build systems has another advantage: it's usually trivial to package them in .deb/.rpm if you want to distribute e.g. custom ffmpeg/vlc builds on a fleet of servers.

</comment><comment><USER27> For the thorny Windows platform: how about using cygwin so you have the shell and regular Linux commands but use the Visual C++ compiler for a more native exe.

</comment><comment><USER28> Slightly off-topic or meta but still: the layout, CSS styles, fonts, colors and contrast on this blog (article) are just PERFECT. Rare occurrence.

</comment><comment><USER7> > _The man page also documents secure_getenv(), which is a GNU extension: to > be avoided in anything intended to be portable._

GCC itself is portable, so?

<comment><USER29> That's like arguing that because cows are vegetarian, so is beef. Portable means that any system implementing the standard interface can use it; secure_getenv isn't part of the standard, therefore it's not portable.

<comment><USER7> No, it's more like arguing that if one is OK with the (lots) of platforms GCC covers, then it shouldn't matter if some extension is GCC specific. Your program is still portable for your use cases.

<comment><USER29> Not everyone uses GCC, or glibc.

</comment></comment></comment></comment><comment><USER13> I don't like plugging my projects on HN, but in this case I'll make an exception.

Though I've recently warmed to autoconf, I still agree it's overkill for most cases. For many years I have, like many others, maintained an ad hoc library of purely preprocessor-based feature checks that I would copy from project to project. When recently writing a comprehensive Unix system API module for Lua I basically ended up with a ridiculous number of feature checks. I broke those out into a separate project I called autoguess.

      https://github.com/wahern/autoguess

Autoguess is a config.h file that exclusively uses preprocessor-based feature checks. It's very comprehensive. Much more comprehensive than most need, but compared to autoconf, or relative to modern C++ projects, all those preprocessor conditionals are effectively free.

autoguess doesn't provide any compatibility routines--just the detection. (For compatibility routines see my Lua module, lunix. Compatibility interfaces can be tricky, and context matters, so I've learned to stay away from trying to comprehensively "solve" that problem. One needn't look further than Gnulib to understand the pitfalls of trying to maintain such a beast.)

Most of the code in the autoguess repository is a framework for running autoconf checks and comparing feature detection results with the autoguess header. The library is just the single file "config.h.guess".

Autoguess uses the same naming conventions as autoconf, though in the autoconf universe consistency can be poor and HAVE_FOO names can differ from project- to-project. However, autoguess recommends to use "#if HAVE_FOO" arithmetic conditionals, not "#ifdef HAVE_FOO". That makes it possible to override feature detection macros from CPPFLAGS. Autoconf's rule about using #ifdef is an archaic solution to a mostly non-existent problem these days--broken C preprocessors not evaluating an undefined macro as 0 in arithmetic expressions. (There's a 6 line preamble at the top of configure.ac in my repository that will fix how autoconf generates config.h files.)

Of course, as new operating system releases are made, the autoguess checks can become outdated. Though many autoguess checks aren't directly reliant on version numbers, autoconf feature checking is, I agree, a more robust method. But autoconf checks aren't immune to regressions, either. There's no substitute for regularly building your software on various platforms.

Autoguess does much more than detect system and compiler versions, but I've benefitted greatly over the years from this project:

      https://sourceforge.net/p/predef/wiki/Home/

</comment><comment><USER30> Why are people still so obsessed by C? There are better alternatives for almost any usecase. Where there are none, there portability is a non-issue (eg. embedded stuff. although C is also not especially suitable for that use, yet still prevails, because of the existing tooling.)

<comment><USER31> Obsessed? I don't think so.

It's just that C has been around for 40 years, it'll stay around for at least another 40 years. You can still compile source code from 20-30 years ago with little or no modifications.

C gets the job done fast and efficient.

That said, I'm waiting for a good excuse to learn Rust. Prior to that there have been very few alternatives to C.

<comment><USER30> I've seen C used for safety critical software. I've used it for that. I've seen the insane amount of tooling and support and processes and rules to make it suitable for the task it is utterly not suitable for.

It does not get the job done fast and efficient, if you consider the develpment costs. The fast code the compiler generates could be genrated from other sources just as well, it's not especially the merit of that language.

<comment><USER31> I write security critical software with C and I know exactly what you're talking about.

It's written in C because the tooling to analyze and certify it for security in embedded/automotive/aerospace is targetting C (or C++). For some industries, Ada might be an alternative.

It may be paradoxical, but you're not going to be able to write safety critical software in Rust because the tooling to certify it for security doesn't exist and it'll still take years to get there.

Do I like this situation? No, I do not. Do I think it's a big problem? No, not big enough that it can't be solved by pouring money and engineering resources on it.

<comment><USER32> I also write safety critical software, in C++. I disagree that the necessary tooling for certification doesn't exist for Rust. You don't need that much tooling. Measuring test coverage is the hardest part (and Rust doesn't do this very well currently, but it is possible). Most of the things coding standards for C (e.g. MISRA) require are irrelevant for safer languages, so you don't need complex checkers. For static analysis the story is similar.

<comment><USER33> In safety stuff, not only has the source to be vetted. Also the compiler building the target binary must be blessed and hopefully well understood.

<comment><USER30> I have seen a certified compiler (GreenHill) compiling invalid code happily (not one relying on undefined behaviors), despite its certifications, for which even an ancient 3.x gcc complained (rightfully!)

These certifications unfortunately often are on the level of the golden shields CAs provide to customers to put on their sites as sign of trustworthiness.

So yes, _blessed_ is a nice word for it.

<comment><USER33> I hate GreenHill C compiler as much as the next guy [insert huge rant] but the Blessed Compiler of Choice in its frozen buggy state at least usually means it's a KNOWN ENTITY. We code around the bugs, we compile in -O0 mode etc etc, we analyze the assembler output to death and so on.

I see these "certified" stamps less as "secure" and more of a huge slowing down of progress and change - which strangely can translate to more secure since you know what you are dealing with.

If I can dream, I'd take a "certified" GNU Ada, or Rust, or something over C. But that is bound to take many years to happen if ever. I think we sooner will see Rust compiled to C which is fed to something like the abominable Greenhill so security consultants can pour over the intermediate C output and put it through the abominable Greenhill.</comment></comment></comment></comment></comment></comment></comment></comment>


Ask HN: Why are SF startup salaries stagnant? - <AUTHOR> In the Bay Area for early stage startups, I'm still seeing a common salary offer of 140K.  Contrast that with Lincoln, Nebraska, I've seen a couple of posting for devs up to 160K (https://bit.ly/2MRqmRI ).
Meanwhile the big players, Facebook, Google, have distanced themselves with comp packages in the 300-500K range (with RSUs).
Is the midwest finally becoming competitive? <comment><USER2> It's odd to compare the top end of a few top-end job postings to the median salary in another location. I would guess that the folks accepting 140k salaries in SF are either really hopeful about their equity, or are just not the people who would get offered 160k in Nebraska.

But in any case, why are startup salaries stagnant? Because for most positions at startups, they don't really need "the best", they need someone with basic competencies, so there's no need to pay more than that.

</comment><comment><USER3> I don't really know about the midwest vs. California divide, although I would say that 140 is base before options, and that the expected value of those options is greater.

There does seem to be a bit space that's opened up between the bigs, and startups. 10 years ago it was 200K at Apple, 100 at startup + options.

Now it's 140-180K at startups and 400K at BigCo. There are lots of BigCos btw. Apple, Facebook, Stripe, Dropbox, Uber, Lyft, Airbnb, Square, Twitter, Slack. Anyone with 300M+ valuation. (Even if they still call themselves startups :-)).

I worry a bit that startups at the 5-50 person level will have trouble getting the talent they need to challenge BigCos.

Here's a good discussion from the VC/founder perspective.

[https://mobile.twitter.com/andrewchen/status/101387729764709...](https://mobile.twitter.com/andrewchen/status/1013877297647095808)

</comment><comment><USER4> Think large pond - small pond. In the bay area you have the quintessential large pond. Thus lots of fish and lots of fishers - who have found that a bait of 140K attracts a steady stream of nibbles. These fishers assess the nibbles and make offers - back/forth. The big fishers, lets call them sharks, Google, FB also get nibbles and they assess them with a lot more experiential depth, as well as $$, and when they see a fit they make a crushing offer. In Lincoln Nebraska, small pond, few fish, fewer offers - but a very nice place to work with lower cost of housing, less traffic, but remote enough to need extra offer $$ for the isolation (which I call a hidden bonus)

</comment><comment><USER5> Maybe there's a ceiling on perceived value added per employee?

</comment><comment><USER6> Where are you getting these numbers?

</comment><comment><USER7> the 300k RSUs are very uncommon

<comment><USER8> Don't push this narrative because it's completely untrue.

These RSU packages are very common among Bay Area companies for an engineer with 5+ years of _quality_ experience. You don't even have to go to a company like Facebook or Google. Take your pick of Twitter, Square, Box, Uber, Lyft, Pinterest, AirBnB, Splunk, Dropbox, or take your pick of any decent public company really...even Oracle will make these offers in their cloud division...

Yes you have to be talented and work hard, but it's completely within reach for most reasonably talented devs whether they know it or not.

Caveat? Reasonably talented.</comment></comment>


Ask HN: Should I offer to buy a domain name that is about to expire? - <AUTHOR>

For a new project I'm working on I've been looking at a particular domain name that is set to expire next month. It isn't a very "special" name, but it fits with what I'm looking for. Based on that, I don't think the actual domain name is worth very much to others and it appears it has never been used by this individual.<p>I would assume that this person is just going to let the name expire, so my question is do I just let that happen and then grab it up after the waiting period or am I better off just offering a small fee to this person now and trying to get it transferred? I know it is hard sometimes to get an expiring name, but also afraid that once you contact someone a seemingly worthless name becomes valuable. Anyone else been in this same situation? <comment><USER2> Do some research on the person holding the domain, meaning how many others they are currently holding. Form my own experience "set to expire" doesn't mean anything. I renew most of mine just a few days before they expire. Or sometimes even miss that period and buy them back in the deletion period. Also you should check at which registar the domain is currently registered. This gives you a better idea which snapping service best to use.

</comment><comment><USER3> Where is it registered?

If GoDaddy, try to buy it out of tdnam.com. You can probably get it for $20.

Else, I'd make a direct offer to the owner once it expires. At that point the domain has entered the redemption period[1]. What that means is for 30 days only the previous owner can reregister, but it will cost an extra $75. After this period, the domain is released "into the wild."

That's your best position. They didn't want it for $10, so they don't want it for $85. But who would turn down $500 out of the sky for something they were "throwing way"?

[1] [http://www.cyberindian.com/domain- registration/article.php?a...](http://www.cyberindian.com/domain- registration/article.php?article_id=185)

</comment><comment><USER4> If it does expire, odds are a lot more people will eyeball it. I am talking thousands of people. You think it has no appeal or are you SURE it has no appeal? In most cases I would recommend just contacting the person.</comment>


Ask HN: cloud computing options? - <AUTHOR>

Are there any easy ways to move into the cloud yet? Amazon seems very expensive, Google App Engine and Heroku are too limited (though Heroku is really cool for basic Rails). Just hosting vServers somewhere would probably be OK, though I am not much of an admin. <comment><USER2> Are you sure you REQUIRE a cloud? Phrase "Amazon is too expensive" suggests that it might be not the solution you're looking for.

Maybe you could be a little more clear on what you need, because it's hard to imagine what are your requirements that fall in-between of "Google App engine is too limited" and "Amazon is too expensive"?

Also the phrase "I'm not much of an admin" makes it all sound really confusing... Rarely the cloud is the solution for one person's needs. Typically something like dedicated server or vps should be the answer. VPSes can be 6$/m including server's control panel so that you dont have to be "an admin".

<comment><USER3> Where do you get VPS for $6/m?

Those are usually shared once, aren't they?

<comment><USER2> Firstvds.ru (they have US branch at minivds.com). VPSes are never "shared", but they are on "shared" server. I.e. you have root access to your own VPS as root, nobody has access to it (1), but there are many VPSes on one physical server.

(1) ...except for the provider, but even Amazon has access to your files on EC2... (Tin-foil hat time.)

<comment><USER4> Looking at the Russian version of the site, you can get the same type of VPS for $4.44 a month instead of $6, although you get 25GB of traffic instead of 30.

Cloudkick should support this provider.

<comment><USER5> The more the merier, but I would vote for <http://www.prgmr.com/xen/> The guy has been doing this thing since 2005, writes here and on his blog about how he is going about setting up his servers (<http://wiki.xen.prgmr.com/xenophilia/archives.html>) and writes a book about Xen (<http://nostarch.com/xen.htm>). The FirstVDS/MiniVDS on the other hand, go very dry official on their site, I'm not sure which virtualization technology they use and whether or not they are going out of business real soon (miniVDS forums are a ghost town).

<comment><USER5> But mostly I'm just excited about the coming of technologies like cloudkick which will help push cloud providers (i.e. EC2, VPS'es) into being a commodity.

<comment><USER6> yes. this is the way of the future... (I mean, APIs that make it easy to move from one provider to another.) without that, well, the 'cloud' will quickly become uncompetitive with dedicated servers.

Lock-in is bad for customers; long-term, lock-in can kill industries.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> Broadly speaking, there are two sets of questions you want to answer:

1\. The "really?" set of questions: Is the cloud what you really need? If so, can you architect your system to exploit the advantages of the cloud?

2\. The "how?" set of questions: do you outsource the cloud to AWS et al or do you build your own? The details of this are probably worth half a book, but there are many databases to choose from (CouchDB, MemcacheDB, Tokyo Products and LightCloud, thrudb, Project Voldemort, redis, and others) and build-or- manage-your-own cloud computing datacenter (EUCALYPTUS, AppScale, Enomaly, ELASTRA, 3tera, etc).

The answer to these questions starts with "what are you trying to do?" In many cases, the cheapest and fastest way to get going is to provision some virtual servers from Linode or Slicehost and have a go. If you grow too much, 1. congratulations and 2. look at the cloud options.

</comment><comment><USER8> If all you want is VPS that is cheaper than AWS then Slicehost may be the thing for you - <http://www.slicehost.com>

EDIT: I forgot about Linode since I haven't used them myself. Here's a comparison between the two from last November: <http://journal.dedasys.com/2008/11/24/slicehost-vs-linode>

</comment><comment><USER9> If you're just looking for storage and have access to extra machines then Tahoe allows you to store your files reliably for little to no cost.

You can learn more here: <http://allmydata.org/~warner/pycon-tahoe.html> You can download it here: <http://allmydata.org/trac/tahoe>

EDIT: How do I create proper hyperlinks?

</comment><comment><USER10> Explain what you are doing. The cloud is very much over-hyped and can mean many different things. Are you looking for storage? For hosting? For dynamic hosting?

Explain a bit what your app is and we can give your architecture advice.

</comment><comment><USER11> Paying for machines by the hour opens new opportunities (ad-hoc staging environments, for example). We can do things now that we could never do before.

You may not be ready to move _production_ to the cloud but there is an opportunity for you to improve your development process.

</comment><comment><USER3> AWS is not expensive, not at all. However, you can combine GAE and AWS where serving all HTTP from GAE and doing the "rest" on Amazon - that will make it some cheaper

<comment><USER10> Depends what AWS service you talk about. Having one slow EC2 instance online 24/7 for a month will cost you roughly 60 dollars. I don't think that is very expensive but considering the available options I also don't think it is cheap. At Mosso you get a similar host for 1/6th of the price these days for example. Charged by the hour.

Anyway, it depends on the specific AWS service.</comment></comment>


Ask HN: What do you think of this slogan "things you make real" - <AUTHOR>

Hi, we are building this event oriented social network called tymr
I would love to ear your thoughts about a slogan we got after a brainstorm: tymr - "Things You Make Real"
ps.: we have a buggy prototype at tymr.com <comment><USER2> It doesn't produce an emotional response from me, and it doesn't give me any idea of what you are / what you're offering.

My best guess based on the slogan would be that you're some kind of prototyping site or crafting site. I'm not seeing any connection to events.</comment>


"How to...if nobody is following you on twitter" reply from the target audience - <AUTHOR> http://romansnitko.posterous.com/a-reply-to-even-if-nobody-is-following-you-on

<comment><USER2> Was the original blog entry really anything to do with American advantages? In my opinion, this response is miles off-track and I'm surprised it got enough votes to appear on the front page.

In the comments on that HN entry, I saw people getting stuck on the schools mentioned or the count of Twitter followers. They're largely irrelevant.

The key message is: if you can't leverage your network of contacts (through background/education and a social media starting point) to create a single major venture, you can still incrementally create yourself passive revenue.

<comment><AUTHOR> The reason the original post got all this attention is not because it suggested an alternative plan (nice try, a fail though), but because it was really emotional about the unfairness of inequality between US and non-US citizens (specifically programmers). That's what so many people are really concerned about.

<comment><USER3> Definitely not what I took away from the OP. I thought it was all about smart techies vs. internet noobs and their battle to make dough.

As I read this blog post, I too felt like it wasn't really a response to Max's post.

</comment></comment></comment><comment><USER4> Being in the US has its advantages, but there are definitely downsides too.

When you're going to look at Max' suggestions you actually stand a better chance at doing that from a country where the cost of living is lower than in the US.

Things like rent-a-coder and the mechanical Turk thrive on that difference in cost of living, it's a cynical form of outsourcing, but it definitely does seem to fill a need.

Russia - and most of the former eastblock - are in between two worlds, the cost of living is fairly high, and the opportunities are less prevalent. That makes for a challenging situation, but I've seen quite a few people overcome those challenges and do _very_ well for themselves.

<comment><USER5> The cost of living for software developer in the US is one of the lowest in the whole world. Stuff that software developers care the most (such as Fast Internet, computers, safe environment, cars, etc.) cost less than in most of the world.

<comment><USER6> I live in the UK. Recently I ran numbers to move to other places because Im fed up of the political climate and in no position to make changes.

Anyway; the US was the most expensive move. Im staying here because the UK is close to the cheapest option but there were other places a lot cheaper than the states.

<comment><USER7> I'd be really interested to see your numbers and methodology.

Care to share them?

<comment><USER6> Ill dig them out tonight. The biggie in the US was health insurance - it's phenomenally cheaper for me here.

</comment></comment></comment></comment></comment><comment><USER8> Hehe, I am truly amused. The three items Romansnitko listed at the end are the true secret mental power of the US, even though it must be commonly thought otherwise. American culture is _all about_ making you feel like you suck, you just get with the program and make something of yourself. I will buy you a beer if you make it here.

</comment><comment><USER9> "Let me first say, that I'm from Russia and I'm a self-educated programmer, I want to live in US (or Australia, or Canada). Good enough? So I guess I'm the target audience ..."

You're only the target audience if you roughly fit the demographic, _and_ you've given up on the shiny path (either before or after trying).

You don't give the impression that you've given up, so ... he wasn't talking to you. :)

<comment><AUTHOR> dammit, I knew it. Nobody talks to me! But seriously - I don't think there's such thing as "giving up", because "there are no final decisions". One day I'm giving up, the next day I have a plan. It's dangerous to convince one that he indeed gave up. Or so I believe now.

</comment></comment><comment><USER10> I can't help but wonder: you want to work in the US, right? How do you plan to get a work visa (H-1B, I assume) without a degree in the field?

<comment><AUTHOR> Would you clear this up for me? That's what I got from the official website "To Qualify for the H1B Visa Program, you must work in a specialty occupation: IT, Computing..." Good. I have a Bachelors degree, but in an unrelated field. Would that be a problem for authorities as long as it's not the problem for the company?

</comment></comment><comment><USER11> Don't follow some but his closing is spot on - consistent drive and willingness to adapt is a tough combo to beat.</comment>


50 years on, we're living the reality first shown at the "Mother of All Demos" - <AUTHOR> https://arstechnica.com/information-technology/2018/12/50-years-on-were-living-the-reality-first-shown-at-the-mother-of-all-demos/ <comment><USER2> Sorry but Russians were already living in that reality at that time. Especially MIR-2 with light pen and all that shit of 1969. It had the weirdest symbolic programming language with its own character set. [http://www.icfcst.kiev.ua/MUSEUM/GL_HALL2/COMPUTERS/MIRS.htm...](http://www.icfcst.kiev.ua/MUSEUM/GL_HALL2/COMPUTERS/MIRS.html)

<comment><USER3> Well... At that time some people were witnessing the future as it was invented. The point is that it's now more evenly distributed.

And now we have lowercase.</comment></comment>