Best Practices for Working with Configuration in Python Applications - <AUTHOR> https://tech.preferred.jp/en/blog/working-with-configuration-in-python/ <comment><USER2> Quick list of Python libraries that help with application configuration:

\- Python application configuration -> [https://github.com/edaniszewski/bison](https://github.com/edaniszewski/bison)

\- Configuration with env variables for Python -> [https://github.com/hynek/environ_config](https://github.com/hynek/environ_config)

\- Configuration library for python projects -> [https://github.com/willkg/everett](https://github.com/willkg/everett)

\- Strict separation of config from code -> [https://github.com/henriquebastos/python- decouple](https://github.com/henriquebastos/python-decouple)

This is from my personal notes. See also: [https://github.com/vinta/awesome- python#configuration](https://github.com/vinta/awesome-python#configuration)

Anything else that we've missed ?

<comment><USER3> Marshmallow. You can use its schema validation for any dict/json, which makes it a nice fit for validating json config files (which mitigates some of the json concerns from the article). Just immediately move the json.reads through a schema validate, build some classes around it for different config files.

marshmallow.readthedocs.io/en/

<comment><USER4> dataclass_json is also very useful for schema validation. It combines python's native dataclass objects with marshmallow's schema to provide additional functionalities simply through a @dataclass_json decorator on your dataclass.

[https://lidatong.github.io/dataclasses- json/](https://lidatong.github.io/dataclasses-json/)

<comment><USER5> I made the similar dataclasses_serialization library. It doesn't require a special decorator on your classes, and is extensible for custom classes, and custom serialization methods (JSON and BSON provided by default).

[https://github.com/madman-bob/python-dataclasses- serializati...](https://github.com/madman-bob/python-dataclasses- serialization)

</comment></comment></comment></comment><comment><USER6> While most points are valid, I feel some pieces are missing in this article.

What should I finally do? How to put everything together without creating an hard-to-maintain mess of casting/parsing/configuration? Should I manually cast strings to integers (or other types) for all and each value I parse? Where do I keep default values? It's cumbersome to have them embedded in code for get().

I usually want a) a default configuration kept in a file b) a way to override that config with other files, _but only for certain parts_ (I don't want to rewrite the configuration every time), c) a way to override the config at launch time (e.g. from cmdline)

The fact that Python is dynamically typed/type hinted only makes it harder than statically typed languages at configuration, where most configuration libraries instantiate an adequate type conversion function to put a string somewhere.

I ultimately found that the latest solution (parse from json) is good enough for most use cases for points a) and b); since json is typed, a decent conversion can happen for 95% of the use cases (for the others, just use a string and manually parse).

A sidenote to the author if he/she's reading: datetime.date objects, just as python's own naive datetime objects, are dangerous objects that can lead to unpredictable results when used with actual time-handling code. I wouldn't use them anywhere in my Python code.

<comment><USER7> What's naive and dangerous about Python's Datetime objects?

<comment><USER6> Your question implies that you don't know about the nuisances of the datetime library :-) (see [https://docs.python.org/3/library/datetime.html](https://docs.python.org/3/library/datetime.html) it's the first paragraph!)

Python datetime objects, by design, can be naive or timezone-aware. Timezone- aware datetime objects are OK; they identify a certain instant in time.

Naive datetime objects are Python-only abstractions (AFAIK) that don't identify anything in the real world; they're highly error prone, because there's no "right" way to use them.

They sort of work properly only if used in a very limited scope - e.g. your own code only, for small sections - but they're risky because they're not a different type (with respect to tz-aware), and it's hard to tell what any code accepting a datetime does if passed a naive object. Some libraries like java.time DO have a similar concept (e.g. LocalTime, LocalDate) but they keep it well separate from the "real" concept (e.g. Instant or Date in Java) so you can't use them accidentally.

Example: you pass a naive datetime object to any library which must translate it to an instant, like an ISO string with a well defined timezone. What does the library do? Throw an exception? Associate an arbitrary timezone (e.g. UTC)? Associate the local, current timezone? There's no "correct" behaviour.

<comment><USER8> I agree that python datetime objects are problematic, but for the opposite reason. It is tzinfo that is the sneaky disaster, the plain datetimes are fine.

Transparent timezone awareness always fail, unless you are 100% certain that a tzaware datetime object will remain uncoverted from the very top to the very bottom of the stack and all the way up again no matter who is reading and what they are doing.

For longterm minimization of pain, bugs and effort, you convert datetimes to UTC as early as possible and take them back to some localized version as late as possible (in the frontend, for a webapp, so that the backend never needs to know there is such a thing as timezones (except for separate validation and correction routines, since timezone definitions _always_ end up being incorrect to some degree when you use them at scale)).

If the localization of the datetime is an essential aspect (such as the departure time of a ship leaving port), you store a UTC value together with a record of the location. Only at the latest possible moment of processing, should you do a lookup on the location data to make a local time.

Obviously, there will be exceptions to this rule. If you batch process billions of timestamps under a tight deadline and _must_ do calculations in local time, it might make sense to have the values persisted localized.

<comment><USER9> Actually UTC + timezone is exactly the wrong thing for "wall clock times" (things like meetings or departures where the time at the location is relevant).

The conversion to UTC will lose the original local time so you cannot retrieve it once time zone data changes, unless you perform reconversions every time you detect such a change in tzdata. And countries changing time zones happens more often than we think (and also on short notice).

Thus it is important to distinguish between instants (e.g. for recording when exactly something happened after the fact) and wall clock time (e.g. for coordinating people and goods at a certain place, like meetings, concerts, departure times). For the former use UTC, for the latter use a localised time zone (e.g. Europe/Rome), not an offset time zone (e.g. not +0200).

For more information Jon Skeet has written about this multiple times.

<comment><USER10> I believe this "wall clock time" approach is broken by design as it pushes the burden of figuring out timezone details to those who are not located in that particular timezone.

A fair and therefore safer approach is to decide that by protocol the legally binding time is defined in UTC.

Your system will translate UTC times to and from any given local time using the IANA time zone database which is regularly updated. End users must be aware about the UTC time, that it is legally binding, and that the local time conversions are provided as-is.

This way the time of a meeting or deadline is protected from local governments messing around with timezone changes.

Additionally, dates are rendered in ISO8601 standard format with a proper footnote to help users learn about international standards.

<comment><USER9> I think whether UTC or wall clock time is binding is a problem in the legal and planning (so the business) domain and has to be treated as an external input to the software engineering problem.

Although you are of course free to advocate for UTC. I remember Swatch trying to establish something similar and it never took off: [https://en.wikipedia.org/wiki/Swatch_Internet_Time](https://en.wikipedia.org/wiki/Swatch_Internet_Time)

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> As an ML engineer working in Python, I keep running into a problem:

If parameters are defined close to usage, and strongly typed, then it's hard to cleanly search for good configurations of the parameters. Especially for fancier search strategies, you want all parameter lookups to go through a single file.

On the other hand, there's a lot of code churn until an ML pipeline is finished. And errors from typos and type violations will often only show up after hours of training. So it's _also_ painful to try to keep a separate, loosely-typed parameter file in sync.

So far, my compromise is to:

(1) on a first pass, define all parameters as global variables at the top of the files they are used in

(2) once mostly code-complete, pull them into a separate file that tracks initial values, current values, and search ranges. Make all usages go through a lookup where the key is an enum, but the value is untyped:

      def param(name: ParamName) -> Any:
        return params[name].current_value

Which is not ideal. Does anyone else keep running into this problem and have a better solution?

<comment><USER12> Alas, MyPy doesn't have the concept of "keyof" and mapped types like TypeScript.

So in place of that I would:

1\. Define a variable called Params = Any;

2\. Liberally use Param["foo"] and Param["bar"] anywhere.

3\. Once you stabilize, reimplement Params as a TypedDict. You'll get failures if accessing any invalid key.

You can also use a NamedTuple if you prefer.

If you insist passing a param _name_ , then you'll have to create a big list of Literals for param with every key in your dict. So Param = Literal["foo", "bar"] etc.

<comment><USER11> Thank you! It's surprising that mypy can typecheck based on string keys like that. Cool!

</comment></comment></comment><comment><USER13> I think argparse covers most of the points mentioned as desirable in this article.

* validate at start (using the type keyword argument for add_argument) * access by name as identifier, not string

And what is more is, that default values are stored with the configuration, plus you add a help text for telling everyone what the argument is for.

One downside is that you command line call gets longer.

</comment><comment><USER14> Pretty good guidelines. I like the idea of having a configuration close to the class (perhaps module-level depending on the project size) that uses it. With dataclass the class definition is fairly clean. In addition to that, I'd consider using [https://docs.python.org/3/library/dataclasses.html#post- init...](https://docs.python.org/3/library/dataclasses.html#post-init- processing) for business-specific validations.

</comment><comment><USER15> Kensho has probably the best solution to this problem I've seen so far:

[https://github.com/kensho-technologies/grift](https://github.com/kensho- technologies/grift)

Handles typing really well, as well as config defaults and fallbacks, giving you the ability to configure your app a few ways, and fall back on other configs if something isn't specified.

</comment><comment><USER16> Shout out here for pydantic BaseSettings [https://pydantic- docs.helpmanual.io/usage/settings/](https://pydantic- docs.helpmanual.io/usage/settings/)

That provides typed and validated auto-loading from env vars. I have been quite happy with that in conjunction with an optional .toml file, to do flexible config cleanly and simply like:

        import toml

        from myproj.conf.types import Settings  # a pydantic BaseSettings model

        try:
            _config = toml.load('myproj.toml')
        except FileNotFoundError:
            _config = {}

        settings = Settings(
            **{key.upper(): val for key, val in _config.items()}
        )

</comment><comment><USER17> it's worth looking at python's own configparser[1] before rolling your own.

[1] [https://docs.python.org/3/library/configparser.html](https://docs.python.org/3/library/configparser.html)

<comment><USER18> Isn't that basically the same end result as using json.loads except a different format (that has no actual spec).

<comment><USER19> JSON does not support comments nor string interpolation. Python ConfigParser language does.

<comment><USER18> True, you do get string interpolation but the comment support in ConfigParser isn't very good. Although actually they may have fixed some of that in Python 3 but I'm still using workarounds.

To be clear, I am not suggesting using JSON for config, I think that would be my last choice. My point is that ConfigParser isn't really an alternative to rolling your own if you want decent validation etc (those spec files are horrible to use). You very quickly need to start extending ConfigParser to the point where you've started rolling your own. And at that point you'd be better off with one of the other (tested) solutions already suggested.

<comment><USER20> What's wrong with the comment support?

You can't have comments at the end of a line, but that's sort of the nature of supporting arbitrary strings as values. I don't want my users to have to quote or escape special characters if they happen to want to use them. They're not programmers.

        # The note to display
        note = Our #1 customer!

rather than

        name = Our \#1 customer  # The note to display.

or

        name = "Our #1 customer"  # The note display

<comment><USER18> > What's wrong with the comment support?

Comments are simply ignored. You can't read them. You might want to read a commented config file in, make a change to a setting and then write that out. You can't do that. But you can write comments using the 'allow_no_value=True' hack, as long as long as you put it in a section.

> You can't have comments at the end of a line

You can. You need to use ';' for inline comments and you must proceed it with whitespace. Are your users ready for that?

<comment><USER20> > make a change to a setting and then write that out

Very good point.

> You can. You need to use ';' for inline comments

I have some bugs to fix.

</comment></comment></comment></comment></comment></comment></comment><comment><USER21> As already written by others, the article does not go very deep and is missing many essentials. What I was mostly missing is more about keeping configuration parameters as simple as possible. A much more detailed best practices can be found here: [https://www.libelektra.org/ftp/elektra/slides/cm/](https://www.libelektra.org/ftp/elektra/slides/cm/)

</comment><comment><USER22> Unless the end user is not technical, use a .py file and force them to subclass your Configuration class which has an __init_subclass__ method so you can enforce rules.

When you are ready to move to a more generic solution, your .config or .yml file can generate these.

The advantage here is both flexibility (it's Python) and control (allow/disallow whatever you want).

If you need nested items, use nested classes.

<comment><USER23> This.

Until you the app reaches the level of advanced yaml config files for cloud deployments, it's really hard to beat a "config.py" that does a single read of all your ENV_VARS at startup

</comment></comment><comment><USER24> I have been working on a minimalistic application config library for Python, aiming to consolidate config loading from files, environment variable, and command-line argument parsing. It's an alpha, so please feel free to provide feedback if app configuration has been your pain point.

[https://github.com/okomestudio/resconfig](https://github.com/okomestudio/resconfig)

<comment><USER25> FYI that sounds like exactly the same feature set of 'python-decouple'.

<comment><USER24> Indeed "python-decouple" looks like it serves similar niche. (I didn't know of the package. Thanks for letting me know.) I think I'd like to target a smaller niche though, someone writing a small applications, with a little more flexibility in things like YAML support and dynamic loading. Unless "decouple" eventually supports similar features, I want to keep experimenting.

</comment></comment></comment><comment><USER26> Along these lines and unsatisfied with current solutions I started this project, "Turtle Config." It is format-agnostic and supports type checking as well:

[https://github.com/mixmastamyk/tconf](https://github.com/mixmastamyk/tconf)

I'll see if I can add any advice this article gives; feedback would be helpful.</comment>


Microsoft's Universal Windows Platform app dream is dead and buried - <AUTHOR> https://www.theverge.com/2019/5/30/18645609/microsofts-universal-windows-app-dead-microsoft-store-windows-store <comment><USER2> Actually not,

[https://github.com/microsoft/microsoft-ui- xaml/blob/master/d...](https://github.com/microsoft/microsoft-ui- xaml/blob/master/docs/roadmap.md)

React Native for Windows is being ported from C# into WinUI/C++.

[https://github.com/microsoft/react-native- windows](https://github.com/microsoft/react-native-windows)

Plus these guys should spend more time at BUILD and MSDN.

All major Windows 10 APIs are UWP only, even if the store is gone, UWP is here to stay.

</comment><comment><USER3> The store is there and remains, as are the apps and APIs, but now one can _also_ publish traditional Win32 apps. Which is awesome!

UWP APIs nor apps are dead nor buried - very poor journalism.

<comment><USER4> Right, the worlds have merged/blended together finally. You can have every type of Win32 app in the Store. You can have UWP apps entirely outside of the Store. You can have UWP components inside of Win32 apps, in or out of the Store.

UWP lives on, it just is no longer a walled garden that doesn't understand Win32.

<comment><USER2> It feels like that they just don't bother to understand and use any rumor as means to claim victory over the store's death.

<comment><USER4> I think a lot of the misunderstanding is willful. The "you'll take Win32 out of my cold dead hands" crowd is a fascinating one. Almost don't want to correct some of them because they seem so happy to celebrate any notion that UWP is dead, when the reality is that Win32 has been Weekend at Bernie's for years now and the dreams of UWP are more alive than ever, it's just getting much better at also propping up Bernie and pretending the Win32 corpse is still moving, so that the party keeps raving along.

</comment></comment></comment></comment><comment><USER5> Now Apple is making a similar mistake with Marzipan. If indeed Mac SDK development falls by the wayside in favor of iOS.

<comment><AUTHOR> The big difference being they already have a successful phone/tablet platform, so the prospect holds a lot more potential value for them. Microsoft was trying to bootstrap everything at once, and UWP didn't become a truly _bad_ idea until Windows Phone itself was dead.

<comment><USER2> UWP is here to stay, regardless of the store.

Win32 is in maintenance mode since Windows 7, all new APIs are based on UWP, including most of what was shown at BUILD 2019.

<comment><AUTHOR> Did you even read the article? "new APIs" != "maintenance mode"

<comment><USER2> Those new APIs are based on UWP, and being called WinUI, basically Microsoft has been decoupling UWP from the store.

They still are the same COM based APIs from UWP, just now fully rewritten in C++, because they also want the buy-in from C++ devs attached to MFC.

The article authors should spend some time watching BUILD 2019.

I am yet to find someone from anti-UWP crowd that actually grasps what UWP is all about.

</comment></comment></comment></comment></comment><comment><USER6> I really hope WPF will die along with it, and it will finally force MS to think of making a proper toolkit.

<comment><USER2> It is called WinUI, basically UWP outside of the store.</comment></comment>


The Older You Are the Worse You Sleep - <AUTHOR> https://www.wsj.com/articles/the-older-you-are-the-worse-you-sleep-1507903201 <comment><USER2> Not calling BS but I sleep much better now in my 50s than I did 20-30 years ago. Healthier eating, low stress and average exercise are more important than how old you are I think.

</comment><comment><USER3> Someone not pay walled wanna say why people sleep less as they age?</comment>


Show HN: I'm porting my tiny PHP ORM/ActiveRecord lib to pure Javascript - <AUTHOR>

I've been, like many of you, researching all the new shiny JS frameworks coming out lately, and found some things very lacking in most, if not all of them:

  * Local SQL Data access!
  * Easy CRUD
  * A simple rails-like api for finding relational data
 The TodoMV* demo's are a nice initiative, but none of them show real-world data access. How would you search for todo's that have a certain date created ? How would you find a todo that has a relationship to another object stored in a separate table like a location? sorting? All the frameworks seem to neglect this.
Most of the projects listed have a way of reading and publishing objects to an API endpoint, but none of them seem to be able to easily operate offline to SQLite in a webview.
My project aims to solve this, in a framework agnostic way, and the whole thing stays under 10kb when compressed.
It's still in a very premature state, has no bootstrap yet and works only on predefined databases for now, but the basics and find API already work. Check out the tests.js for some examples, I'd love to hear some feedback on this.
https://github.com/SchizoDuckie/jsdbobject <comment><AUTHOR> Clickables:

<https://github.com/SchizoDuckie/jsdbobject>

[https://github.com/SchizoDuckie/jsdbobject/blob/master/plain...](https://github.com/SchizoDuckie/jsdbobject/blob/master/plain- old-javascript/tests.js)</comment>


What task / ticket management system do you use? - <AUTHOR>

At the company I work with, we use phabricator, we used to use trac, and our CEO either wants to go back to trac or purchase licenses for Jira. We use phabricator for tickets/tasks & liquidplanner for project management. Zend Desk for technical support. Slack for minute-by-minute acknowledgement on technical support w/ devs & IT remotely.<p>What systems do you use, and what makes it special to you and why do you use it over the others? <comment><USER2> You should try [https://www.svyft.com/](https://www.svyft.com/) More here: [https://medium.com/@svyft/how-a-chatlet-works-in- svyft-18870...](https://medium.com/@svyft/how-a-chatlet-works-in- svyft-18870dc8838a)

</comment><comment><USER3> Built my own, on top of slack ( and hipchat ). After all others, simple lists managed simple ways.</comment>


Intelligence, Surveillance and Reconnaissance Design for Great Power Competition - <AUTHOR> https://crsreports.congress.gov/product/pdf/R/R46389 <comment><USER2> In an actual, real war with Russia or China both sides would suffer at least 100 million casualties in the first day from nuclear warfare.

Since that's unthinkable, a real war is not something worth planning for.

So how about finding a way to win the sort of proxy wars the USA has sucked at since Vietnam (and is currently headed towards for no reason in Iran)?

<comment><USER3> You are assuming succssful missile delivery.THAAD is aging but is it that ineffective?

<comment><USER2> Thaad is only for short to intermediate range missiles. No one has ever intercepted an ICBM. There are some crazy/interesting programs researching how to try but no one takes them seriously as far as I know. It's like trying to hit a grain of sand travelling at mach 4 from 1000km away.

</comment></comment></comment><comment><USER4> I don't think the chinese military is real. As in, I don't think that the military is China's primary mechanism for creating and enforcing international hegemony, as it is in the United States.

</comment><comment><USER5> It's interesting that the US submarine force is almost not covered at all in this report, except for two brief mentions of "subsurface". Clearly one of the more classified components of US military strategy.

</comment><comment><USER6> I know it sounds kind of strange, but maybe the solution to this is similar to how you competitively attack a new market with a new company.

The DOD needs to look at a startup/agile mentality and centralize important technical decision making within one room full of competent engineers/architects/developers, rather than farming it out to 50 disparate contractors.

Russia and China will be able to continue to threaten us using only a fraction of our defense budget because of this organizational problem. I feel like our enemies have a much more centralized scope of R&D when it comes to military technology. The only reason the US is competitive is because we can 10x the budget and move mountains every day.

Imagine if we had a monorepo for the entire United States military. All warfighting software systems centralized into 1 location with a unified set of models and logic which can enforce policy across the entire force. A developer should be able to unit test the F35 avionics software at the same time they are working on the air-to-air weapons system. After all, these would likely share many important aspects being that they live in the same damn aircraft.

<comment><USER7> I know it's cherrypicking but:

>The DOD needs to look at a startup/agile mentality

Please god NO! That's a really a bad idea not just for the DOD but for most government services. 90+% of startups fail. This is fine because most startups are not very essential. Government is often inefficient, but it rarely outright fails. Can you imagine how a government run as a startup would be? Garbage collection went bankrupt the other day, won't be another five months until another one is spun up. Oh yeah we haven't implemented the fire department yet, your house might be on fire now but we have it on the roadmap for Q4 2021 so please hold on until then. Oh your wife is in the hospital? We were running an A/B test on that so she's in the part without blood transfusions. Hope everything goes well! When you are taking a VC bet on to get a startup off the ground, many things are acceptable that are not really feasible if people depend on your continued existence for at least the coming decades.

Don't be overly impressed by the Russians and/or Chinese either btw. They suffer from the exact same problems, but "the grass is greener on the other side" is true in defence matters as much as in the rest of life.

<comment><USER8> That's what DARPA is supposed to be for.

</comment></comment></comment><comment><USER9> If Russia can win a war with us with 10% of our budget then our entire military industrial complex is a fraud.

<comment><USER10> We've been at war for 20 years in Afghanistan and can't win that one and they have far less than 10% of our budget.

<comment><USER11> We could have won that one if politicians had listened to their military advisors. In James Mattis's recent book, he talks about how the Obama administration didn't listen to recommendations for a larger military presence because they were scoring too many political points by constantly "bringing the troops home".

<comment><USER10> The military always says they would have won if they had more. I dont think that is the case at all in Afghanistan or Iraq, in Iraq we essentially invented an enemy and lost to them.

</comment></comment></comment></comment><comment><USER12> thanks but the bloom is off. think I will wait on a fresh batch of politicians.</comment>


Comparing Google Vision, Microsoft Cognitive, Amazon Rekognition and Clarifai - <AUTHOR> http://blog.filestack.com/thoughts-and-knowledge/comparing-google-vision-microsoft-cognitive-amazon-rekognition-clarifai/ <comment><USER2> Do msft, amazon or clarifai support video like Google just announced last week?

<comment><USER3> Yes: [https://www.microsoft.com/cognitive-services/en- us/computer-...](https://www.microsoft.com/cognitive-services/en-us/computer- vision-api)</comment></comment>


How to Tell a Mother Her Child Is Dead - <AUTHOR> http://www.nytimes.com/2016/09/04/opinion/sunday/how-to-tell-a-mother-her-child-is-dead.html <comment><USER2> My twenty one year old daughter died two months ago. A young policeman came to my door. It was the first time he had to do the job mentioned in the article and he did it very well.

I have very little memory of those first few hours. I now know what it is to be insane. I was so disconnected from reality that people have told me that I had long conversations with them that I have zero recollection of. The only thing I clearly remember was telling the officer that I had a gun upstairs and that if he didn't take it, I was going to murder the man responsible for her death within the hour. It was the most matter of fact confession of planning a murder imaginable.

After a couple of hours, I saw a Facebook post of hers and lost it, the insane calm left me and I bawled my eyes out.

It's her birthday tomorrow. I miss her so, so much.

Anyway, the point of this post: my daughter died of an overdose. She was at a party, a man gave her powdered pure fentanyl claiming it was cocaine. I have no idea why. She snorted some and overdosed soon after.

All I want to happen is that someone somewhere reads about what happened to my daughter and reminds their kids that without proper testing kits, they have no idea what the fuck they are taking. Drugs may not be bad, but some people certainly are.

<comment><USER3> I've come to hate fentanyl... In the past couple years it has become significantly more widespread, and in the completely insidious way you describe. People think they're buying heroin (or worse, cocaine, at least if they're a heroin user, they have some tolerance to opioids), and it's laced (or completely replaced) with fentanyl.

I'm a paramedic in a nice suburban area. I've been doing this a little over a decade now. I managed to make it a good long while without having to deliver life changing news to a parent. In the past two years I've done it way too many times.

I'm so sorry for your loss. I have witnessed your pain in others, and I know that it's beyond my comprehension...

<comment><USER4> Please do not hate Fentynal, hate the people choosing to use it. As a person who suffers from chronic severe pain due to a near fatal illness, I can tell you that For people like us Fentynal is a life saver as far as the quality of life it provides to those who need it. It is one of the few medications I can take as it does not metabolize in the liver, if any does it is a tiny amount. Fentynal also does not come in a powdered form they are taking a liquid version and mixing it into powders, other then that one form all other preparations are majorly tamper resistant being either in a matrix that almost makes it impossible to even be affective in the system or on a patch which breaks down over time to slowly release in the body. Of course there are exceptions, but please do not hate the drug, hate this sick bastards that are using it to increase their illegal sales! (my apologies to the OP for hijacking their question.)

<comment><USER3> When I say I hate fentanyl, I mean I hate the illicit and recreational use of fentanyl. I'm well aware of its legitimate uses (it's my go-to analgesic in the back of the ambulance). The drug itself isn't 'good' or 'bad', it's just a chemical... it's amoral.

All fentanyl, legal or otherwise, starts out as a powder (generally as the salt, fentanyl citrate, though illicit labs produce a number of variations...). You're right that there is no powdered form sold legally, but most of the illicit sales come from labs in Mexico and China, and is indeed in powdered form.

</comment></comment></comment></comment><comment><USER5> A subject I understand more than I can put into words. It's a duty I have had. A 17 year girl died of an overdose. It was my responsibility to tell the mother, father, pastor, brothers, sister. They were there all night in the tiny, chilly waiting room, after notified their comatose child was brought in.

Some kind of party had been going on when mom and dad were out for the evening. The young woman and assorted friends doing drugs. She passed out, it was hours before anyone thought to check out how she was.

I called in all the docs there were to call. We tried every trick there was known to try. Then heart rate fell to zero. All the effort came to nothing. Everyone was quiet, mumbled their sorrow, and slipped out the private staff access door. That is everyone but me.

That morning was about the hardest I ever faced, even in the decades since. Sure others have died on my watch, one cause or another. But that time was different. I knew I had to say it, give the worst possible news, the unnecessary death of a child, to grieving parents. I truly did not know how such a thing can be said, what phrasing is best, what stings the least?

I don't know how, but summoning the courage I walked out to where they were sitting. I was nearly in a trance, not only from lack of sleep, but stunned by the magnitude of what I had to speak. And I said what happened, the child passed away, never awakened despite the heroic efforts of so many healers sweating all at once.

I sat there for a moment, no more to say, listened to the mournful sobs. Though I felt a failure, more than anything I had no comfort to provide. They didn't find fault, they were not angry that we could not do more.

Seriously, a moment too stark, too profound to ever forget nor would I want to relinquish it. No repeat is necessary, the lesson deeply embedded, the value of life, the meaning of words, the merit of a healer's human voice, these are all worth keeping.

<comment><USER6> You Sir/Mam/Other, make me feel better about the human race.

Can't imagine how hard that was, but you did the difficult thing and your best at it in the hardest circumstance I can think of.

Thank you.

</comment></comment><comment><USER7> I've been a private military contractor for more than thirty years. Some of the companies I was working for had very impersonal procedures to handle deaths. I offered a few times to personally inform the family / next of kin for the guys that were working with me directly but that request was always denied because it was not "cost efficient".

So I always did the trip on my own.

The loss hit them like a truck every time, I have a few memories that make me wake up in the middle of the night three days a week but the look on a mother's face when you tell her that her son is dead is something you will never forget as long as you live.

Still, I am glad I went to see every family of everyone I lost in all those years. There was crying and screaming and tears and a lot of blaming, I even got slapped a few times but I always told them I'll be in a hotel nearby for the next days and if they want to talk they can call me any time of the day.

Some never called but after a day or two most invited me back to their home or came by and we had a few long talks over the next days until I had to go.

I've been in touch with most of those families over the years and I heard a lot of times that it gave them peace to know that I was there when their son / brother / husband / grandson died and that I came by personally to try to comfort them before they got "the letter".

I wish everyone that you will never come into this situation because it's almost as hard and unfair to be the messenger as it is to be the recipient of that message.

<comment><USER8> This comment will be unpopular. When you have gone through something like that, how can you continue to do the work you do? How can it still be worth it? I do not know what exactly you do, but could it someday be someoneelse telling this to your family?

<comment><USER7> I don't see why your comment would be unpopular. These are valid questions.There is no easy answer to them tho without understanding the bigger picture.

When I was young joining the army in my country was an easy decision, the money was good and it was a safe job. Recruiters would tell you that you could make an impact on the world and make it a better place for everyone while making enough money to easily fund your kids future and live a good life if you do the job long enough and are willing to put blood, sweat, and tears in.

But within a few years, I realized that what I did had no impact whatsoever, and the money was only good if you went home in one piece or alive at all.So I quit and specialized in tracking down war criminals in the private sector.

It is a long way before you see some of these people in front of the International Criminal Court for example. Many don't even make it there.

You ask how I could continue the work I did?

I had the chance to talk to these people sometimes for an hour sometimes for days before handing them over and one question I always asked was "What do you think would have been necessary to keep you from doing what you did?" and most of the answers boiled down to "nothing, besides a bullet maybe".

And that is exactly the reason why people like me are necessary. You can't sit down at a table with these guys and talk them out of it. There is real evil in this world. And these people are the living proof.

They think they are invincible and above the law and when you see how long it takes to bring these people to justice you begin to understand why they think that way.

Now I'm retired. So no, I am pretty sure the cause of my death will be natural some day.

As far as I'm concerned I don't need to write a book about what or how I did what I did. And outside those trials, my name will never be mentioned anywhere.

But the families of all the people I worked with that died and all the families and mothers that suffered by losing their sons and daughters and husbands because of the war crimes that person ordered will get a little bit of peace, knowing that no matter how rich or powerful you are there are people coming for you willing to give their lives so you rot in jail for what you did.

<comment><USER9> I was completely unaware that there is a long established market for mercenaries to catch war criminals.

Can you say more about clients and rules of operation?

What is the relationship to the multi-billion mercenary sector (Blackwater/Academi etc.) the Bush administration created to make its wars more palatable?

<comment><USER10> I don't see how the "mercenary sector" was created by Bush administration. For instance, Blackwater got its first government contract after the USS Cole bombing, from the Clinton administration.

<comment><USER9> I should have phrased this better. There have always been mercenaries of course, and I believe there has been an uptick in US government use after the end of the cold war under Clinton. I'm however under the impression that the growth since 2001 has been unprecedented, as is the fact that the number of private sector employees deployed to war zones by the US government outstripped military deployments. So a qualitative change seems to have taken place during that time, even if it was just the continuation of an earlier development.

I could easily be wrong though, because I'm having trouble finding precise and dependable information online – if you have some good pointers about the growth and changed role in US politics of mercenaries, I'd be interested in reading them.

<comment><USER10> I have no numbers, but I'd agree the use of contractor forces has expanded. However, it clearly was an emerging trend already during the Clinton era, and even before that.

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> I just want to say the style of the article and it's direct, terse language really captures the gravity of the situation and seriousness of the subject.

Very sad, but very well written.

<comment><USER12> Two years ago and a day, I could read this and understand the gravity. Two years ago my daughter was born, and now I can't read this, or see commercials from CHOP, or anything else similar without my eyes filling with tears.

I don't know how people lose a child and come back from it. I say I can't imagine, but I do, and it terrifies me.

<comment><USER2> They don't. They are different people. Their old life ended the day their child died.

<comment><USER13> Indeed this is pretty close to it. It's funny the things which can throw you off too. Striking up a conversation with someone and they ask how many kids you have, or if you are going to try again for that boy or girl. Sometimes it's easy, but Some days it will tip your emotional canoe more than you were expecting.

</comment></comment></comment></comment><comment><USER14> _Security is already outside the room and when they hear the first loud noise they will know to come in. No, you will not have to tell them. They know about the family room in the emergency department in summer in North Philadelphia._

What a heartbreaking essay. And how tragic that death by gun violence is apparently routine in North Philadelphia.

<comment><USER15> "We have money for new chairs every summer." Really feels to me like it drives that point home...

I remember reading an anecdote somewhere that when it's hot out (temperature wise) that physical altercations increase.

<comment><USER16> There's actual data on this. The correlation between summer and increased violent crime is real. [http://www.bjs.gov/content/pub/pdf/spcvt.pdf](http://www.bjs.gov/content/pub/pdf/spcvt.pdf)

<comment><USER17> Spike Lee's first famous movie was about this.

<comment><USER18> And it captures the feeling of heat putting everyone on a hair trigger very well.

</comment></comment></comment></comment></comment><comment><USER19> One of my best friends died of an overdose a few years ago. His mother was informed in a horrible way.

The police called her and told her that her son had overdosed and was on the way to the hospital. In the middle of the call they all of a sudden say "actually, he's dead!" like it was nothing special. His mother of course screamed out loud, which made the police upset (they said "hey, it's not my fault" or something like that, I don't remember exactly).

I normally have great respect for the police but I think this was handled catastrophically. They showed very little sympathy.

</comment><comment><USER20> When I was a year out of cancer treatment, I ran into a fellow patient. She and I had a rare cancer and were treated with a handful of others.

Of the three of us who remained, only two of us remained cancer free and she wasn't one of them.

A week earlier, there had been five of us.

I knew this. I didn't know if she did.

I didn't know what I would say if she mentioned them. It was possible she had the same problem in her head.

After we caught up, she asked if I had seen one of them.

Telling her the truth wasn't nearly as hard as answering her next question -- what about the other girl?

</comment><comment><USER21> My father died younger than 50 years old when I was a child. My mother was left behind with several small children and financial struggles. On the day of his funeral there was a funeral of an 18 year old boy afterwards. She has told me she consoled his girlfriend and when she saw the young girl standing there crying, she thought that even though her own situation was as bad as it could possibly get, this was even worse. Must have been a strange moment for her. Maybe even a bit uplifting, as perverse as this sounds.

<comment><USER22> I've been blessed to be very inexperienced with funerals. Two grandparents, an aunt, and a high school classmate. With my grandparents, we knew it was coming and had lots of chances to visit in the preceding year. Granted you always wish you'd done so more, but those ones are relatively easy to handle and feel like family reunions mostly. My aunt, who committed suicide around age 50, was much harder, despite her having dealt with mental illness all her life such that it wasn't out of nowhere. My grandfather, who outlived her by three years, was devastated (his wife, my grandmother, not being around as she'd passed away 45 years earlier).

When my friend died, I saw his parents quite a few times in the following year. Every single one of those times weighed heavier on my mind than any of those three funerals, despite those having been for family members who I knew quite well. When comparing these early life tragedies to older people passing, the only similarity is death.

</comment></comment><comment><USER23> When I occasionally start to think my work in technology is overly important or that the woes of my startup projects are unbearably heavy, I'm glad I can be humbled by something like this. This doctor has responsibilities and gravity I will never know. Great article and great doctor. Wow.

<comment><USER17> Heyif, making fun stuff is important. If we didn't have any fun stuff, our lives wouldn't matter and the serious stuff wouldn't be serious.

</comment></comment><comment><USER24> I had to tell that to my own mother. It was 5 years ago this week. There are no good ways. There are no good outcomes. This is a good article about how bad it is.

</comment><comment><USER25> I've worked as a hospital chaplain in a big and well-respected urban teaching hospital.

From a teaching point of view, I'm really glad this article by Dr. Rosenberg is available. For two reasons...

1\. I wish I had seen it during training. It's spot on in every respect. Dr. Rosenberg's advice to stay with the bereaved, and enter with them into their grief, is good advice. There's no way to do it without simply doing it.

2\. It's good that Dr. Rosenberg is teaching doctors to do this work. Often enough in the past, the Saturday night emergency department staff just said "page the chaplain" when they needed to deliver bad news. We chaplains don't mind doing our jobs, but that leaves the frightened family hanging while we scramble to get to the ED and figure out who / what before sitting with the family. And, there's always some practical decision-making that takes time. For example, a Roman Catholic patient needs a Roman Catholic clergy person. So, "page the chaplain" keeps people waiting.

If you ever have to do this, do everything you can to avoid physically looking down at the bereaved people. Don't stand over them. Sit on the floor if you must. Some waiting rooms have low coffee tables or side tables. That's a good place to sit.

In teaching hospitals, the new residents (fresh-out-of-school doctors) start July 1st every year. And, they staff the ED on weekend nights. So they are getting their first sustained taste of violence, right at the top of the summer heat. They went into medicine to heal people, not to pronounce them. So this is a big shock for them. The ED unit clerk should still page the chaplain, even if the doctor delivers the bad news.

This epidemic of violence is awful. For my part, I count strong narcotics with guns, knives, and cars as instruments of that violence. It's horrible that doctors and other hospital folks have to learn how to do this. But they do. It's horrible that families have to hear this bad news. But they do.

This article should be posted on the wall of every toilet stall in every high school in the country. Why there? Simply because everybody will see it and have a chance to read it in private.

</comment><comment><USER26> For some context, here is a map of poverty in Philly:

[http://www.nytimes.com/newsgraphics/2014/01/05/poverty- map/](http://www.nytimes.com/newsgraphics/2014/01/05/poverty-map/)

The hospital is in census tract 016300 with poverty level 58.5%

</comment><comment><USER27> Somewhat related - One of the reasons my significant other decided to not go into emergency medicine was the high rates of PTSD in ER physicians and nurses: "We don't have good numbers, but the incidence of PTSD in emergency physicians is probably around 17%" [1].

So while I can respect the stoicism and clear focus on the emotions of the mothers of victims, I hope the author and other ER doctors also take some time for themselves to deal with the trauma they experience.

[1] [http://www.medscape.com/viewarticle/840980](http://www.medscape.com/viewarticle/840980)

</comment><comment><USER28> "The depth of the stupidity of the things you will say sometimes is unimaginable." -I'm pretty sure everyone who has ever had to do this has felt the same way.

</comment><comment><USER29> I had to tell friends that one of our closest friends had passed away. The only thing I would add to this article is to invite the recipients of the news to sit down first because there's a good chance they'll fall down.

<comment><USER3> That's why you, as the person delivering the news, sit down. It invites the family member to sit down without the awkward "Why don't you sit down..."

</comment></comment><comment><USER30> Why is this "how to tell a mother her child is dead" instead of "how to tell parents that their child is dead"?

<comment><USER3> I have told parents their child has died. It may not be 'right', but in every case, even when both parents are present, I'm talking to the mother.

I am a father of three. Were I in those horrible shoes, I'm quite certain I would feel that my wife was the one "being told". Maybe that's just some misplaced "macho" attitude on my part, but it's always been true, in my experience.

<comment><USER31> It is certainly a general rule that fathers are not seen as being equal parents; I think FT_intern's point is that they _should_ be treated as equal parents. The headline's casual dismissal of fathers is symptomatic of a societal failing.

<comment><USER3> It's not so much an 'equal parent' thing, in my opinion. Like I said above, I'm a father of three (I'm up feeding our 4 month old twins right now actually...), and we're absolutely 'equal' parents. My wife handles a larger share of the childcare duties, just like I handle a larger share of the landscaping... It's just the division of labor that works best for us. We're both very aware of, and quick to correct, attitudes that she's somehow more of 'parent' than I am (e.g. when she goes out in the evening, I am not "babysitting"...)

So, I am very sensitive to your point, and I think it's an important one, but i don't think it's the primary motivator for the use of "mother" in the article.

I suspect the reasons are (at least) twofold. The primary demographic served by this ER doc has a very high rate of single mothers. I'm not making commentary on that beyond the simple fact that it is the reality. My guess is most of the time she's talking to the mother because the mother _is_ the only parent present.

When the father is there though, I studied he feels as I do... In that awful moment, I would want the doctor's attention on my wife. I would want as much support as possible for her in that time. I'll make do on my own for now... Like I said, that's likely misguided chivalry or a 'macho' attitude on my part, but it's my honest take on the situation, and I suspect I'm in the majority.

<comment><USER31> I have no doubt that you're in the majority; stereotypes very often exist for reasons of statistical predictive power. But that doesn't mean that we shouldn't recognize and push back against the stereotypes, for the sake of those who aren't (or even more importantly _don 't want to be_) part of that majority.

</comment></comment></comment></comment></comment><comment><USER32> this makes all debates about software seem trivial. i agree--it's very well written.

</comment><comment><USER33> As an ex-paramedic this really hits home.

</comment><comment><USER34> It doesn't have to be a child in the sense of being young. No parent should have to outlive their offspring, especially when they are very close daily. I witnessed the effect on a 90+ year old mother of the sudden unexpected death during sleep (natural causes) of her daughter who was almost 60 but very vibrant.

It was crushing. The mother never recovered any of her joy in her own life and only lived another 2 years.

</comment><comment><USER35> Really painful.

</comment><comment><USER36> Absolutely terrifying! "If he left his socks on the floor again today, it is all right." \- the only sentence I could relate to. I hate my life.

<comment><USER37> Why hate the absence of tragedy?

<comment><USER36> I don't hate the absence of tragedy but the things I do at home that bother other people like this socks example.

</comment></comment></comment><comment><USER38> Wow, that was surprisingly moving. For some reason, I expected one of those dry hacker essays.

</comment><comment><USER39> I know this will sound cold, but why is this story here? Does it really fit the guideline of "anything that gratifies one's intellectual curiosity"?

I've shoehorned it into my rationalization for being here as advice on how to have an extremely difficult conversation, but it still feel a bit macabre to have this here.

<comment><USER40> I would say that this does in some way gratify my intellectual curiosity. I hope to never find myself in this situation, but it's good to have some guidelines if I ever do.

</comment></comment><comment><USER41> The article is basically saying not to flip out, but "When you get home, do not yell at your husband. If he left his socks on the floor again today, it is all right." We all know that this doesn't just happen after someone dies on the operating room table.

Seriously people, if your spouse is not cheating on you, beating you, or throwing the family money to the casino, lighten up about the little stuff.

End of public service announcement.

</comment><comment><USER42> > I just want to say the style of the article and it's direct, terse language > really captures the gravity of the situation and seriousness of the subject.

Quick comment about how your _it 's_ instead of _its_ caused an English parsing error in my brain:

I read until the comma and because I saw _it 's_, I assumed I missed a word in the first part of the sentence - I though it may have been something like "I just want to say I _evaluated_ the style of the article and _it 's_ direct, it's frank, it's spot on!", but re-reading it didn't reveal anything I missed. I then considered some less common writing styles/expressions. None of that worked out, so I read past the comma and figured out what happened. All this happened in the span of a second or so. Not sure what it was about this particular sentence that caused me to stop at the comma, I don't think it happens often.

<comment><USER43> We detached this comment from [https://news.ycombinator.com/item?id=12421811](https://news.ycombinator.com/item?id=12421811) and marked it off-topic.</comment></comment>


I wrote an LLVM-powered trace-based JIT for Brainfuck - <AUTHOR> http://github.com/resistor/BrainFTracing <comment><USER2> Hey folks, I'm the actual author of this.

I actually work on LLVM-proper during my day job. This was just a fun exercise to demonstrate that it was possible. I also have plans to write a tutorial based on it.

<comment><USER2> Also an example of how to implement a direct-threaded interpreter.

Some performance data from a Brainfuck mandelbrot benchmark.

Interpreter: 37.787s

Tracing JIT: 11.716s

Static Compiler: 2.402s

The tracing JIT loses out to the static compiler largely because there's no dynamic dispatch in Brainfuck for the tracer to optimize out. There's probably some performance to be recovered by tuning the tracer thresholds and minor optimizations, but I would be shocked if it ever beat the static compiler at least for Brainfuck.

<comment><USER3> Thanks for writing this -- it's awesome to see JIT principles boiled down to the point where you can easily understand the whole system. Please let us know if you publish the tutorial; I'd love to see more detail on the JIT. In particular, it would be the perfect template to demonstrate feedback-directed optimization opportunities and to measure the overhead of tracing; it would be incredibly interesting to see what has to be done to make the JIT outperform the AOT compiler.

<comment><USER2> The tracing overheads are pretty huge. Running with tracing but without compilation takes 107s.

<comment><USER4> The performance problems originate in the design of your trace compiler, not in static vs. dynamic dispatch. Some suggestions:

* The interpreter should have a fast profiling mode (hashed counting of loop backedges) and a slower recording mode (for every instruction call the recorder first, then execute the instruction). Either implement it twice (it's small enough), use a modifiable dispatch table and intercept the dispatch in recording mode (indirect threading), or compute branch offsets relative to a base (change the base to switch modes).

* Don't record traces for a long time and then compile everything together. Do it incrementally:

\- Detect a hot loop, switch into recording mode, record a trace, compile it, attach it to the bytecode, switch to profiling mode (which may call your compiled trace right away).

\- Make the side exits branch to external stubs which do more profiling (one counter per exit). Start recording hot traces and continue until it hits an existing trace or abort if it hits an uncompiled loop.

\- If you completely control the machine code generation (i.e. not with LLVM), you can attach the side traces to their branch points by patching the machine code. Otherwise you may need to use indirections or recompile clusters of the graph after a certain threshold is reached.

\- Region selection has a major impact on performance, so be prepared to carefully tune the heuristics.

* Sink all stores, especially updates of the virtual PC, data pointers etc. Don't count on the optimizer to do this for you.

* Due to the nature of the source language you may need to preprocess the IR or you need to teach the optimizer some additional tricks.

\- E.g. the loop [-] should really be turned into 'data[0] = 0'.

\- Or the loop [->>>+<<<] should be turned into 'data[3] += data[0]; data[0] = 0'.

\- It's unlikely any optimizer handles all of these cases, since no sane programmer would write such code ... oh, wait. :-)

<comment><USER2> > * The interpreter should have a fast profiling mode (hashed counting of loop > backedges) and a slower recording mode (for every instruction call the > recorder first, then execute the instruction).

It already does this. The recording method is specialized for '[' (since loop headers can only be '['). All other opcodes go through a fast path that simply checks if we're in recording mode and stores to the trace buffer.

> * Don't record traces for a long time and then compile everything together.

The tricky part with this is knowing how to start up the profiler when we hit a side-exit. PC 123 may occur at multiple places in the trace tree. If we want to extend the tree on side-exit, we need to be able to recreate the path through the trace tree that led to that point. In essence, we need the compiled trace to continue updating the trace buffer. Certainly possible, but doesn't seem like a great idea offhand.

> * Sink all stores, especially updates of the virtual PC, data pointers etc. > Don't count on the optimizer to do this for you.

Because I'm using tail-call based direct threading, there are no stores to the virtual PC or the data pointer. They're passed in registers to the tail- callee.

> * Due to the nature of the source language you may need to preprocess the IR > or you need to teach the optimizer some additional tricks.

Yes, there's a whole range of pre-processing tricks that could be used to accelerate both the interpreter and the traces. I haven't even scratched the surface of that.

</comment></comment></comment></comment></comment></comment><comment><USER5> Nice work!

Let me make a tiny plug for a short Sunday project as well... Brainf*ck in Prolog:

<http://github.com/danieldk/brainfuck-pl/>

One nice thing is that unit testing is really simple:

[http://github.com/danieldk/brainfuck- pl/blob/master/unittest...](http://github.com/danieldk/brainfuck- pl/blob/master/unittests.pl)

And for some very trivial outputs, it can generate the program to create that output.

      ?- brainfuck:interpret([A,B],[],[0],[0],[1,0]).
      A = <,
      B = + ?

Ps. Yes, it's easy to improve generation...

</comment><comment><USER6> Is anyone else oddly inspired to make an OCaml to Brainf __k translator just to build a staggeringly awesome rube goldberg machine?

<comment><USER7> I can not find it, but I have seen a C to brainfuck compiler. Don't ask.

<comment><USER8> Here's the best reference page for the project:

<http://esolangs.org/wiki/C2BF>

</comment></comment></comment><comment><USER9> Nice work - can you give us some data on how it is?

<comment><USER9> (how _fast_ it is of course)

</comment></comment><comment><USER10> I wish I had free time too! brainfuck is boring though.. why not some stack based language with lisp like syntax or something like that.

</comment><comment><USER11> I don't know... "neat hack", but it seems there is so much out there that could actually have some kind of practical application that it's a bit of a waste to work on "silly" projects. I love to hack on things that don't have any immediately evident business model or real world application, but I think purposefully working on something that never will is perhaps a bit unfortunate. Yeah, he learned something for sure, but that's pretty much all it can be.

To expand on that: if he'd written his own toy language, say, odds are it would never go anywhere, but, who knows... maybe it will find a niche. Using "brainfuck" pretty much guarantees that the code will never find a practical use.

<comment><USER12> I'm assuming you've been downvoted because slightly more than 50% of HNers think of this project as an artistic/fun project.

But the fact is, even a purely artistic/fun project will have some creativity or originality in it. I would consider a toy language or Brainf__k written for the first time as artistic.

But this project is just a JIT for Brainf__k, there's no creativity in it, and all it did was give the author some experience writing JITs. In that sense this is an exercise project, and IMO exercise projects do not belong to HN.

<comment><USER13> Does HN censor the "fuck" in "Brainfuck", or was it just you?

EDIT: Ah, it doesn't.

<comment><USER14> Generally, as long as it's part of something constructive and adds rather than detracts from the message, the community won't downvote profanity. <http://news.ycombinator.com/item?id=1636262></comment></comment></comment></comment>


VS Code without Microsoft branding/telemetry/licensing - <AUTHOR> https://github.com/VSCodium/vscodium <comment><USER2> Note that this doesn't work with VSCode's Remote extensions, such as for SSH, Docker containers, and WSL. Those extensions are closed source and explicitly check that they're running on only VSCode. I thought of using this but since I mainly use WSL, this doesn't work for me. Still, a laudable effort.

<comment><USER3> Forgive the kneejerk reaction but it sounds like we've come full circle back to closed source IDEs. For what reason are any of those extensions closed source? Why are people using and championing tools with closed source extensions that check what they're running on (in order to force you to use/buy the original thing) in 2020?

You can pry emacs/vim from my cold dead hands -- Microsoft is trying (and succeeding) in google-chrome-ing it's way into the productive developer space. If that's true, I wonder what the Firefox in this analogy is? Atom? Emacs/Vim?

<comment><USER4> See [https://code.visualstudio.com/docs/remote/faq#_why-arent- the...](https://code.visualstudio.com/docs/remote/faq#_why-arent-the-remote- development-extensions-or-their-components-open-source)

I love that post, because it encapsulates exactly the kind of internal logic that traps not-fully-open organizations.

MS can't open source the remote Dev extensions, because the service that runs it (and much of the client code) comes from other, proprietary offerings and codebases. More concretely, they come from other teams that aren't used to open source, are discouraged from getting used to it, and/or don't have approval from legal to release code in the open.

This is not an EEE trap, this is normal bureaucracy for an organization the size of MS. Consider that for almost all of VSCode's lifetime, the OSS version has been perfectly full featured, only missing telemetry and copyrighted brand marks. Remote Dev extensions are less than a year old.

They have the same problem with the C# debugger: owned by a proprietary team, can't get permission to open source it.

It is extremely hard to open source "some" or "most" of your code, especially in a company whose USP is tight integration between pieces. The legal quagmires are horrendous. A tool that crosses so many lines, like an integrated IDE, are backed into positions like this.

Disclosure: I work for Microsoft in a totally unrelated department.

Also, fwiw i'm a lifetime vim devotee... used it as my primary IDE for a long time and still use it daily. But vscode won me over exactly with the remote code extensions. Now it's the only proprietary software on my toolchain (apart from my BIOS).

<comment><USER5> I assume that it depends on old code. With old code opensourcing can be really tough.

One reason of course is "embarrassment" as it's "ugly" code and you want to run a full review and audit and eventually cover private APIs from other modules. That's however solvable.

More complicated is another reason: Legacy software often contains code contributed by contractors and acquired from external vendors, where there is no license for making it open source. Sometimes such third party code is even deeply webbed in and legal review is a pain as you have to figure out the origin of essentially each line of code. This can be a lot of work.

I observed how Sun did this with Solaris and over multiple years managed to bring it down to a handful libs with third party code (some internationalisation thing comes to mind, meanwhile replaced in the illumnos sphere)

<comment><USER6> > One reason of course is "embarrassment" as it's "ugly" code and you want to > run a full review and audit and eventually cover private APIs from other > modules. That's however solvable.

Make sure there's no offensive variable names and comments left over from _that one guy_ who used to work here.

<comment><USER7> Everything is offensive today so that is probably a fools errand

<comment><USER8> all the more reason for me to be terrified about some of my comments and commit messages... lol

<comment><USER7> All the more reason me not to care. safetyism is destroying society IMO

"It's now very common to hear people say, 'I'm rather offended by that.' As if that gives them certain rights. It's actually nothing more... than a whine. 'I find that offensive.' It has no meaning; it has no purpose; it has no reason to be respected as a phrase. 'I am offended by that.' Well, so f'in what." \--Steven Fry

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> It'd be really cool if all open source was just designed with this in mind by the original coders. branding/telemetry/licensing should be explicit compile- time parameters that, left unspecified, exclude it completely.

<comment><USER10> Opt out means devs get crappy data.

Only way for software to improve is to get usage data.

Would you rather be stuck with crappy software dictated by the needs and wants by the minority?

<comment><USER11> Apps in the 90s didn't have user data. I was approximately as productive on apps from the 90s as I am in modern apps today. I am more frequently frustrated by modern apps.

<comment><USER12> I think this is something we need to study somehow even if it feels very true. I often find myself wondering why they've made something worse than it was a few years ago. Many parts of iOS and windows 10 have degraded from what they were.

<comment><USER11> I agree totally. It could also be that user data is being used to make more profitable products not necessarily better products for the users.

<comment><USER12> This rings true. We have experts in funneling people to open their wallets but a dearth of ppl who are good at delighting, unless they see it as a way to make you open your wallet.

</comment></comment></comment></comment></comment></comment><comment><USER13> Can anyone explain to me why I should be concerned about vs code telemetry? I have zero personal information in the IDE and all the code I work on is already in the public domain with an open source license, so why should I care?

<comment><USER14> I value silence in my network traffic.

<comment><USER15> It's interesting, if we look at the size of webpages in everyday browsing, which can go from tens of megabytes to a few kilobytes when blocking tracking/analytics scripts.

I wonder what would be the back of the napkin calculations for network traffic and energy savings (local and server side) of regulating tracking and telemetry?

Is there an environmental case to be made against modern web practices on tracking and telemetry?

<comment><USER16> I've really come to dislike Google over the past decade or so, but I do like that their Speedtests, Lighthouse etc don't hide this fact from you.

Pretty much all sites I've been asked to look at were getting low scores because of Google Tag Manager, Adsense and the like. It has a very measurable impact, and yeah, removing it speeds up the page.

The environmental case will probably not fly for regulation, but it just might in public shaming of large companies. "Hey, $company, your usage of $trackingTech uses as much power per year as an average family of four. Is that really in line with your green approach?"

</comment></comment></comment></comment><comment><USER17> How does this differ from disabling telemetry in VSCode's settings? The documentation doesn't seem to include a comparison

</comment><comment><USER18> Isn't there already an OSS version of the Code - [https://flathub.org/apps/details/com.visualstudio.code.oss](https://flathub.org/apps/details/com.visualstudio.code.oss)

Or is this Linux only?

<comment><USER19> That's a Flatpak version of Visual Studio Code, which only works on Linux. Unfortunately, it's unmaintained and stuck on version 1.41.1 (December 2019).

Arch Linux users do have access to a fully open source version of Visual Studio Code in the community repository, which includes access to the Visual Studio Marketplace:

[https://www.archlinux.org/packages/community/x86_64/code/](https://www.archlinux.org/packages/community/x86_64/code/)

</comment></comment><comment><USER20> Not sure if it's still possible to access the vast extension marketplace from Microsoft, which is the true value. If I remember correctly, that can only be accessed from the VS Code released by Microsoft.

[https://cdn.vsassets.io/v/M146_20190123.39/_content/Microsof...](https://cdn.vsassets.io/v/M146_20190123.39/_content/Microsoft- Visual-Studio-Marketplace-Terms-of-Use.pdf)

<comment><USER21> Extension marketplace access it might, but I wonder if the .NET debugger will work with it. I remember it was specifically prohibited to run on the non- microsoft built vscode. Without this extension, the .NET coding experience is very meh

<comment><USER12> Why would you code .Net in vscode vs VS Community Edition (or one of the premium editions)? I find vs ce much better than vscode for .net stuff.

<comment><USER22> Full-blown VS is not available on Linux

<comment><USER12> Fair. I was gonna ask why do .Net on Linux but then I remembered they OSS'ed it

<comment><USER22> Yep, it also works fairly well. I'm maintaining a couple services at my day job that are designed to only work on Linux. VS Code is also involved because we're heavily using the Remote Development feature (which only works in MSFT's VS Code, not in VSCodium, because of licensing) to run the IDE core inside the container, so the dev environment is well standardized and portable across devs/host OS

</comment></comment></comment></comment></comment></comment><comment><USER23> This is the right way to lay out a fork. It can be clearly traced and reviewed in a short amount of time. I'll still use mainline VSCode but it's nice to see someone handling the "just one purpose" approach without throwing in a lot of other unnecessary things.

</comment><comment><USER24> Why would you remove the MS branding? Does it somehow hurt your privacy to acknowledge who the developer and sponsor is?

<comment><USER25> I didn't post the original link. MS collects analytics - which I am not comfortable with. Capability matters and intentions can change later. :)

<comment><USER26> You could always just set `telemetry.enableTelemetry` to false and continue to use the official builds.

<comment><USER27> But only if you trust Microsoft to honour that setting indefinitely, and not for example to just change it back later or hide something shady behind another option instead. At this point, a lot of people understandably don't.

<comment><USER28> It's open source. You could see for yourself. lol

<comment><USER27> Sure, and then you could check again every time there is an update. But why bother, when there is already an uncontaminated version readily available to solve this problem for you?

<comment><USER29> How do you know it is uncontaminated without looking at the source code?

<comment><USER27> Technically you don't, just like any other software, but the risk is surely significantly lower since everyone _including Microsoft_ is saying that what Microsoft is doing is taking that same code and then adding its contaminants on top.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER30> Somebody correct me if I'm wrong, but I'm pretty sure Amazon recommends using this to their employees to prevent Microsoft tracking.

<comment><USER31> You don't need to remove branding to disable tracking for corporates like Amazon. For example, They might have some firewall in the network which blocks tracking API.

<comment><USER32> You need to remove branding to be allowed by Microsoft to distribute an unofficial build. You need to distribute an unofficial build to make sure that the application isn't trying to find holes that might have been accidentally left in your firewall. (Quick, without googling, which ports and dest IPs do you need to block? Which ports/dest IPs will you need to block in the next version that hasn't been released yet? Yeah, a losing battle.)

</comment></comment></comment><comment><USER33> Note that this only includes Microsoft's telemetry, and it seems that Microsoft uses the built in telemetry tooling within their extensions. However, community extensions can still use their own telemetry, which this wouldn't prevent.

</comment><comment><USER34> Is there a listing maintained of all the telemetry info. sent? I personally am not in principle against telemetry, if they do not leak any private info. and are not to chatty.

</comment><comment><USER35> this is at least the 10th HN post about VSCodium.</comment>


First look at Google Chrome's UI design refresh - <AUTHOR> https://www.ghacks.net/2018/04/23/first-look-at-google-chromes-ui-design-refresh/ <comment><USER2> Kinda reminds me of Firefox's last UI a bit?

[http://tipsonubuntu.com/wp- content/uploads/2017/03/firefox-5...](http://tipsonubuntu.com/wp- content/uploads/2017/03/firefox-52.jpg)</comment>


Ask HN: Why does OS X Spotlight's calculator assert N/0 = N? - <AUTHOR> Perhaps a trivial question, but I think it's interesting how digital devices handle mathematical inconsistencies/absurdities.
I can't say I've seen this sort of "screw it" approach before. Anyone out there know why this is the case with Mac?
If anyone is curious, the "Calculator" app returns quite considerately, "Not a number", so they don't seem to be run by the same engine. I also tried in spotlight with 0.0 to see if it was a float/int distinction, but no dice.
Note I'm running 10.10.5 (Yosemite) <comment><USER2> Doesn't do that for me: [https://www.dropbox.com/s/t3igrnerpzu26gn/Screenshot%202017-...](https://www.dropbox.com/s/t3igrnerpzu26gn/Screenshot%202017-03-23%2002.26.18.png?dl=0)

macOS Sierra

</comment><comment><USER3> Apple's Spotlight calculators have had worse problems: [http://i.imgur.com/UMYtIDi.jpg](http://i.imgur.com/UMYtIDi.jpg)

</comment><comment><USER4> I think it doesn't do anything TBH. The N was simply the last successful output as you were typing.</comment>


Dvxk: A Vulkan-Based D3D11 Implementation for Linux with Wine - <AUTHOR> https://github.com/doitsujin/dxvk <comment><USER2> I wonder if this is useful on Windows too.

The driver complexity could be reduced significantly and the quirks for games could be implemented in an industry shared dx2vulkan layer.

Especially as newer games migrate to vulkan, the remaining DX games will run fine on the then much better hardware, compensating the possible overhead.

<comment><USER3> If you want to use Vulkan on Windows 10 UWP apps, yes it might be useful.

Vulkan is only supported in desktop mode using the same ICD driver mechanism used by OpenGL drivers, which is not currently supported in UWP sandbox model.

<comment><USER4> Fortunately, most of us aren't interested in UWP bloat and just want to build good old desktop applications.

<comment><USER3> Win32 is going the way of Carbon even if it takes a couple of years more, like it or not.

Desktop bridge is just a migration tool to migrate Win32 into the store, and help developers slowly migrate parts of the apps into UWP ones.

The majority of new APIs are UWP only, with userspace drivers, DirectX 12, ReFS being the notable exceptions.

Of course you can always switch to GNU/Linux for Vulkan games.

<comment><USER5> The question is whether Windows will die sooner than UWP will be fixed to become an acceptable replacement for Win32. The main reason why Windows is still relevant (even despite Microsoft's desperate attempts to kill it) is Steam games and some legacy software that hasn't been ported to Electron yet. Forcing new apps to use UWP in its current broken state can only accelerate the death of desktop Windows.

<comment><USER6> > some legacy software that hasn't been ported to Electron yet.

«Let's port Photoshop to electron» not

<comment><USER7> I also doubt that it'll be ported to UWP any time soon.

<comment><USER3> Adobe is already adopting UWP, with Adobe XD being the first product for the store.

[http://www.adobe.com/products/xd.html](http://www.adobe.com/products/xd.html)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> Typo: the name is dxvk, not d _VX_ k.

</comment><comment><USER9> Pretty good progress. It's aimed as a drop in replacement for Wine's D3D11 over OpenGL implementation.

Meanwhile Wine developers are working on vkd3d for D3D12 → Vulkan translation: [https://source.winehq.org/git/vkd3d.git/](https://source.winehq.org/git/vkd3d.git/)

</comment><comment><USER10> It really sucks that Dvxk has to warn against the dangers of using it for online gaming:

"Manipulation of Direct3D libraries in multi-player games may be considered cheating and can get your account banned. This may also apply to single-player games with an embedded or dedicated multiplayer portion. Use at your own risk."

<comment><USER11> Ah yes! You could make it draw walls as semi-transparent to see opponents through them!

<comment><USER5> The problem is not only hooking into the rendering, DLL injection can be used to take over the entire process and basically do whatever you want in a game client.

</comment></comment></comment><comment><USER7> Are there any performance comparisons vs. Wine's DX11-over-OpenGL? Also: Has anyone tried running Overwatch with it yet?</comment>


Live performance with iPhones, in NYC subway - <AUTHOR> http://www.youtube.com/watch?v=NAllFWSl998&feature=player_embedded

<comment><USER2> Their sound is a little too good for an iPhone speaker. Sounds like they are using an amp.</comment>


Queueing in the Linux Network Stack - <AUTHOR> http://www.coverfire.com/articles/queueing-in-the-linux-network-stack/ <comment><USER2> Really useful and concise - thank you. It makes me think how useful a 'guide to ethtool' might be, showing the various tunables in the kernel network stack.

Another subtopic is '10G vs 1G NICs'. Settings from the MTU to the queue sizes are all different and buffers are often on the cards themselves.

This is a great topic and I wish I could find more like it. I stumble across articles like this but rarely find them on my own - thanks HN.

<comment><USER3> Or you can program 1G and 10G ethernet cards from userspace if you want to learn how the driver layer works [https://github.com/SnabbCo/snabbswitch](https://github.com/SnabbCo/snabbswitch)

</comment></comment><comment><USER4> I've always wanted to delve deep inside the OS. I noticed that this content was published in the Linux Journal. Is this worth subscribing to? Are there other magazines I should consider subscribing to as someone who aspires to become a better computer scientist/programmer?

P.S. I do read a lot of academic papers. However, these often don't cover the state of the art in industry.

<comment><USER5> Subscribe to LWN.net. It's full of high quality technical content like this on a regular basis and it's cheap. Content is available for free after a week or so, but if you're genuinely interested in this stuff the headlines will sit there teasing you and you'll want to subscribe.

<comment><USER6> This. I can wait for the week myself but it's the only thing with decent technical content out there.</comment></comment></comment>


On Economics and Management - <AUTHOR> http://wb-ce.org/ <comment><AUTHOR> Yesterday Bloomberg published a story [0] on internal tension in World Bank's development economics group. The submitted article is the internal blog of the Bank's chief economist Paul Romer (apparently mirrored publicly by him), which communicates some of his thoughts central to the conflict.

It's fascinating to read his views on trust and communication applied to their work, originally for an internal audience and now shared. These seem like issues worthy of getting everyone worked up.

Also, in the About page [1] he goes into his thoughts on how prose should work and how his approach to the blog embraces that, citing the living nature of Wikipedia as better system than "books in libraries" or "docs on drives" but one that doesn't scale(?). He advocates for text files and DVCS instead. He uses Jekyll to author his blog, although it sounds like in its current form collaboration involves manually emailing files. This reminded me of fedwiki [2]. Time to go check on what Ward's been up to.

[0]: [https://www.bloomberg.com/news/articles/2017-05-25/war- over-...](https://www.bloomberg.com/news/articles/2017-05-25/war-over-words- erupts-as-world-bank-star-economist-is-sidelined)

[1]: [http://wb-ce.org/about/](http://wb-ce.org/about/)

[2]: [https://github.com/fedwiki/wiki](https://github.com/fedwiki/wiki)</comment>


College to use RFID to check class attendance - <AUTHOR> http://badgerherald.com/news/2010/05/04/ariz_college_to_posi.php <comment><USER2> If students are able to learn material on their own then I really can't understand why they should be forced to attend.

If they don't attend and can't learn the material then just fail them.

<comment><AUTHOR> I agree, but I never had a problem when some of my smaller classroom courses took attendance. In that setting there was a value added that even if you passed the class without going you missed a lot. However, lectures (which this article addresses) in general never added any addition value over the material, so this seems pointless.

<comment><USER3> A lecture is a one-way process, so the it's up to the student if the lecture is worthwhile for them or not. If it's not, they shouldn't attend. If no-one attends, the lecturer needs training/putting out to pasture.

Like you say though, it makes sense for a class where you are expected to participate, since then you will be teaching and learning from the other students as much or more than the teacher.

The problem here is you, the student, have become part of the value proposition of the class -- and the penalty against non-attendance is not the school penalising you for reducing your own learning, but a discouragement from reducing the learning of others, who the school promised a classroom full of smart peers.

</comment></comment></comment><comment><USER4> I expect we're going to see a lot of students carrying each other's ID cards to class.

<comment><USER5> It's been going on for over 10 years already with barcode IDs in high schools. Now you don't even see the person doing it because they can hide 2 or more cards in a wallet and scan them all at once. The only tip would be a suspiciously close time stamp if anyone cares to look.

A school setting is the worst environment you can possibly imagine trying to secure anything, let alone attendance.

</comment></comment><comment><USER6> I'm not sure I 'get' the aims of the college here. Why is it important for these students to be in class? I would expect the important bits from the colleges perspective would be:

Did the student pay tuition?

Did the student learn the material the class covered?

I can't see any other things the university need worry about and I can't see how either of those two questions could lead to the need for some strict attendance policies that are connected to student grades.

Perhaps, the school is concerned that if people don't come to class and still do well it will become common knowledge that students can learn the same material more effectively on their own. Bad news, I think that cats already out of the bag.

<comment><USER7> As a parent who plans to pay for my son's college education, I think I'd like this system.

It's a lot harder for a student to whine "I'm failing this class! This biased professor hates me!" while being able to discover that sonny-boy was only in class 25% of the time.

<comment><USER2> Tell your kids you'll only pay for classes they pass and don't accept any excuses.

I never found lectures to be particularly useful anyway.

<comment><USER8> > I never found lectures to be particularly useful anyway.

Nor I. You and I are _not_ the norm (evidence: we are on HN).

But I have taught in a community college in rural/bluecollar area where the only hope that some students had of breaking out of their apathetic, educationally-clueless family/community was to have instructor(s) who _mentored_ them - that is connected personally.

 _Being present_ in class was not _sufficient_ for them to transcend the crippling effects of their upbringings. But it was the first (and necessary) step for those without other mentors in their lives.

[ Apologies for any arrogant sound in the above. Calling it like I have seen it. ]

<comment><USER6> Hmmm. I'm 26 and I still forget all the times my dad admonish me for overestimating people. "You can't assume everyone else thinks like you do or knows all the things you do".

I think the problem though is when you 'require' all students to be in class as part of your grade. This is little different than classrooms in a high school that are set up to help students falling behind that end up hurting / punishing the top performing students.

</comment></comment></comment></comment></comment><comment><USER9> I'd get an RFID blocking wallet, and take photos to prove I was there. And I'd encourage others to do the same. Going to classes where the lecture was worthless (you know the ones: boring, nothing covered not in the book, tested on book-knowledge only, etc) has _only_ hampered my education.

Something like this would encourage _every_ teacher to take attendance and penalize those who don't come; I can only see that as something bad for college. And, as others have pointed out, it doesn't _prove_ someone was there. If anything it could give an easier way to slack, because you can point at the time and say "see, I was there" if they say you weren't. And who will the higher-ups believe? You, the teacher, or the timestamp? I'd be willing to bet the teacher, as you could just give someone your card, making the whole thing pointless.

No, the blocking wallet is too minor. I'd be willing to bet the security on the RFID is minimal at best; I'd attempt to broadcast cards with an RF antenna and a dish, so _everyone_ attends _every_ class.

</comment><comment><USER10> File under your tax dollars (not) at work: "paid for by federal stimulus money"

</comment><comment><USER11> I don't care _how_ much value class attendance adds, students shouldn't be tracked like cattle, especially not 18+ year olds.

</comment><comment><USER12> Every time I read of control system like this one, I always think about 1984 from George Orwell. That book really changed the way I look at things.

When all these systems will be in place, what will prevent some entity to use them improperly? I really find these things scary when I look at them.

<comment><USER13> Orwell wasn't wrong, he was simply a little late.

The funny thing is that the countries best protected against this kind of bull-shit are the former sov-block countries. They have seen what all this can lead to in living memory, it seems to work like a vaccin.

</comment></comment><comment><USER14> Given that most of the time, attendance is checked anyway, _manually by the teacher_ , I really don't see the big problem here. If there is an attendance duty anyway, this is an excellent solution. It adds 10 minutes to each class by not having to spend the time calling out names and awaiting a "present" or "yea".

More time for education while replacing an old-fashioned, outdated system with fancy "new" tech. Why the hate?

<comment><USER15> The underlying technology can be used for purposes other than checking class attendance. As some of the concerned students note in the article, they could probably construct a record of students locations on campus throughout the day. Not difficult to imagine an administrator somehow abusing that information.

If the RFID had an off switch, that might mitigate this concern. (Would be frustrating, though, if you forgot to turn it back on before class and thus did not get credit for attendance.)

<comment><USER14> That is suggesting the school will add RFID scanners on other places than doorposts in classrooms. Certainly that is evil, but it also _isn't the case_ as of this moment.

</comment></comment></comment><comment><USER16> Almost inevitably the classes which required attendance(or granted some sort of bonus) were the boring ones(bad lecturer, outdated concepts, unused concepts, etc).

The interesting lecturers never had required attendance.

</comment><comment><USER17> I would clone my RFID tag a few time and hide it _everywhere_ on campus.

</comment><comment><USER18> I remember a class at CMU where they used a Bluetooth based system.

</comment><comment><USER19> It's just getting people ready for the mark of the beast.

</comment><comment><USER20> Am I bad for thinking of a covert reader, some spare cards, and a bit (ok, a lot) of cloning? (Merely for purposes of promulgating false positive locations; not for theft.)

I _think_ I'm still this side of legal, for merely thinking of such a scheme. Next year, maybe not.

</comment><comment><USER21> At my university we had to sign off on a sheet of paper for each class to document we were there.

How does carrying around an RFID improve that? One could simply carry the chip cards for his buddies to class or to protest the system just wrap all chip cards in tin foil and claim the system obviously failed. This is much easier than learning to fake signatures.

Apart from all that, as a student you should be mature enough to decide which classes you have to attend and which ones you simply study for on your own.

</comment><comment><USER22> I wonder if they are going to make students wear gold stars next?

This isn't high school, Northern Arizona University, grow up.

<comment><USER2> _EDIT: LOL, I get down-voted on this comment along with the parent who said they will be paying for their child's college soon and likes this system? That is comical. You, who through the first stone, are one of those people that must have structure and rules imposed on everyone because you have reformed and you can only feel in control by abiding and making others do so. You, yes YOU, made my day.

I have a feeling the other HNers will override your foolishness._

...and now I regret voting you back up.

<comment><USER7> And I'll vote you up too, because I'm that other guy that got downvoted.

I guess I'm just from a different era. The attitude seems to be "they cashed my check, I can do what I want". Can't say that's totally a wrong attitude, given how colleges in the US work these days. There's a big "don't care" attitude on both sides of the fence now.</comment></comment></comment>