Lawyer lawyer lawyer LAWYER lawyer LAWYER - <AUTHOR> http://micheleincalifornia.blogspot.com/2016/05/lawyer-lawyer-lawyer-lawyer-lawyerlawyer.html <comment><USER3> The bizarre thing about this post is that it attacks Patio11's post which emphasized _consulting with a lawyer_ (and _predicted_ that the result of that consultation would be firing the biz dev guy for cause, but emphasized that the consultation was important), rather than any of the many comments that recommended the action that Patio11 _predicted_ that a lawyer would recommend, without advising consulting with an expert in the applicable area first.

This is bizarre, because her objection does not seem to be with the idea of consulting with a relevant expert and being guided by their opinion, but with firing without doing so, which _isn 't what Patio11 recommended_. From other things in the post, its clear that the real issue is that the poster has a personal animus for Patio11 because of some ancient personal drama the two apparently had on HN in the past, and her perception that that interaction resulted in the eruption of negative treatment of her by others in the HN community. And, it really seems like she is mistargeting Patio11's response as a pretext to resurrect drama over that and, simultaneously, make some vague implications about gender dynamics at HN based on Patio11 being a high-karma- rank male poster and her being a high-karma-rank female poster and the relation that has with the old drama.

</comment><comment><USER4> I believe I know why Michelle is dissatisfied with an interaction we had some years ago over email, but that is not my story to share. I'm positive that I've never criticized her, on or off HN, nor attempted to induce other people to do so.

My comment about "A younger, stupider me" does explicitly repudiate advice that I had given before to people, because I had come to realize there are much better ways to freelance; it is in no way a commentary about other people.

That is all I intend to say about this.

</comment><comment><USER5> _> So, I am female._

Yes, but here's the way I read it: "I am [a] female" and you provided one anecdote for us to consider. (E.g. Working relationship turned out fine for you in the end.)

Nonetheless, I don't read it as "I represent females". My experience behind closed doors with HR about harassing males is to err on the side of termination.

Sure, if a man makes 2 offers for a _" drinks after work?"_ and the woman refuses... it's reasonable to take him aside and say, _" dude, cool your jets, she's not interested. Pursuing it is not good for your career. Are you getting what I'm saying??? Great! Now get back to work. (smile.)"_

However, sending a comment with MILF Mother I'd Like to Fornicate is a totally valid trigger for the company to go nuclear and fire you.

I guess we have different thresholds for what is hapless romantic ineptness and what is bad behavior. I respect Mz's perspective but I disagree with it.

<comment><USER6> "Sure, if a man makes 2 offers for a "drinks after work?" and the woman refuses"

Turn that around ... if the woman is making the offer and the man refuses, he's likely to still feel flattered but the woman is likely to get the signal and move on.

But ... many men are absolutely clueless and will never get that signal. On the other hand, if the man asks every day but goes no further, is that really sexual harassment or is it just an expression of interest? I can't speak as a woman, but I'd imagine she's thinking "this guy is truly clueless". Does she also get irritated by it over time? Probably?

So I think part of this discussion needs to acknowledge that you can't write HR policy that will satisfy everyone. What you can do is put absolute limits in place, and provide a way for positive feedback - my favorite part of the story is that the woman and man eventually rebuilt trust and had a good working relationship. In my experience, this will never work with some people - it becomes an obsession for them and policy is irrelevant.

<comment><USER7> > if the woman is making the offer and the man refuses, he's likely to still > feel flattered but the woman is likely to get the signal and move on.

I've had the opposite experience. I didn't feel flattered and she didn't get the hint.

>But ... many men are absolutely clueless and will never get that signal.

Weasel words. We're in Anecdote City right now.

>So I think part of this discussion needs to acknowledge that you can't write HR policy that will satisfy everyone.

The HR policies exist to prevent sexual harassment and to optimize for "safe against lawsuits." They're not supposed to make people satisfied or happy, they're there to protect the company.

<comment><USER6> "Weasel words"? - I don't agree. My observations are based on 35 years in the workforce and I've seen all sorts of weird male-female interaction.

"Broad generalizations"? - Certainly. I'm not surprised at all that you've experienced exactly the opposite interaction (and I've seen extreme cases of that twice). But I also worded my post carefully to convey really loose values - "the woman is likely" and "many men are".

I haven't collected statistics, my experience is that men are more attuned to what's appropriate than "in my distant path" and that women are less tolerant of it (both good things IMHO). So you can disregard my opinions, but if we're going to require double-blind studies to post in HN comments, this place is going to get very quiet.

I do agree with your paragraph about HR policies and lawsuits. Isn't it nice on those occasions when HR is better than that?

</comment></comment></comment></comment><comment><USER8> What is up with this Reddit-like trend towards drama and immature posts on HN? I don't come on here to see this kind of junk, I come on here to find informative posts on topics surrounding tech. I don't care about your beef with patio11. Hell, I don't even care who you two are. Please stop polluting this site with meta posts that reference each other, which encourages less useful information and more clutter on here.

<comment><USER9> I recommend just flagging it and moving on.

</comment></comment><comment><USER10> Can I just say that I <sarcasm>love</sarcasm> how people are immediately jumping on the, LETS FUCKING NUKE THIS GUY bandwagon.

How do we know the complaint was legitamate? Where is the scientific doubt? Where is the investigation?

While I don't approve of the OP raking another HN user over the coals this publicly. She does make a GREAT point.

Seek mediation, don't fire right away. She isn't saying don't get a lawyer, that's what HR would do in almost all cases. They'd probably have independent mediation where they spoke with both people in an attempt to see if things could be worked out.

But that is in fact what adults do. They mediate, they don't act without doing research, finding context and getting both sides of the story. If the male says, "Well I never said that!" and you terminate his employment how is that an appropriate reaction? What if he DIDN'T actually say she was a milf?

For all the sanity I see here on HN a little discretion and taking a little more thought before an action would be something I'd EXPECT this community to applaud. She isn't saying don't fire this guy, she's just saying don't fire him right now.

I also want to go on record saying I do think that the female who filed the complaint was not lying at all. I would suggest that you implicitly trust her statement, but you also need to talk to the other employee. You should get a lawyer involved. BUT you should also get HR involved. If this is something you outsource to a company that does HR then great, but don't just nuke the guy.

<comment><USER11> > But that is in fact what adults do. They mediate, they don't act without > doing research, finding context and getting both sides of the story. If the > male says, "Well I never said that!" and you terminate his employment how is > that an appropriate reaction?

Sorry, but that isn't true all too often.

We have seen both radfems and rad-MRAs starting shitstorms on the Internet over all kinds of stuff where a reasonable adult just thinks "what the fuck have they all been smoking", including SWATting, shitstorming employers, death threats, vile behavior etc.

I desperately wish that everyone calms down a lot and thinks before typing, but unfortunately, this is no longer possible: only maximum brutality will ensure publicity, no matter the costs.

<comment><USER10> I should have written. "But that is in fact what adults should do".

</comment></comment></comment><comment><USER12> Eh, I would say that there is more than one viable way to approach the issue and it totally depends on the people involved and severity of the infraction.

In this case maybe counseling/training could fix the behavior in the harasser, maybe it wouldn't. The other thing is, sometimes there is conduct that merits firing outright, without counseling. For some people/companies that line would have been crossed with the 'milf' comment.

From the standpoint of making the world a better place I do think that incidents like these can be turned into teachable moments so that people can understand better what is, and is not appropriate. But really, companies should make that part of their training when people are brought on so that situations like this can be avoided in the first place. If someone still crosses the line after that, then they won't be surprised when they are fired.

</comment><comment><USER13> > Men and women need to learn to interact at work

I disagree, there is something called respect and politeness, if you need to learn it at work ,then your parents did a bad job raising you.

Calling a woman "a milf" is inappropriate, period. I'm black, if a colleague called me "n__gger", would he need training so he can learn to interact at work with black people ? that's not serious.

If the male employee was just a bit pushy and insistant, while it is inexcusable, I would give him a warning and training. But you can't make up excuses for someone who call a female employee "a milf". There is no training that can fix that. That's not being "insensitive", that's being straight out macho in a professional context.

<comment><USER14> Is calling a black person "nigger" really equivalent to calling a woman "milf"?

Somehow I think that analogy just confuses the issue.

<comment><USER7> I can't speak for the person you're replying to, but I think he's stating that there's lines in the sand that once you cross, sitting with HR and watching some dumb training videos and reading some policy documents is no longer sufficient recourse.

> Over the weekend... He asked to take the conversation off Slack (moved to > Whatsapp) and asked if they could hang out (she said, "sure as friends in > work context"), referred to her as a milf (ugh...), and asked if he could > tell her a secret (she refused)[0]

In the context of the original post, I believe this is one of those cases. To tie this into the analogy to which you're responding, if one of my employees asked another to move off work-chat so he/she could assail him/her and was acting genuinely sleazy, I'd pack up the offending employee's desk, lock down accounts and access on Sunday night, and make sure I was there first on Monday to escort him/her out of the building.

The language that my team uses would make a drunk sailor blush, but I think this is a pretty clear case of justified firing. It's damn hard to hire a great team and nothing will destroy it faster than interpersonal issues.

0 [https://news.ycombinator.com/item?id=11666857](https://news.ycombinator.com/item?id=11666857)

<comment><USER15> Lets compare to a similar situation but without this being about men vs women. Two co-workers go to a bar, and gets into a physical fight. During the fight, one of them call the other something really inappropriate like n__gger or s_ut.

Do you fire both instantly the next day? Physical fights and insults are both unprofessional, and as a zero tolerance policy, that means they need to be let go instantly. Do you only fire the insult throwing employee? Do you talk to either one of them before issuing the boot?

<comment><USER7> Going into another anecdote just confuses the matter. Like most interpersonal issues, the specific context and actions are important.

I will say that the scenario that you've created is markedly different.

</comment></comment></comment></comment></comment><comment><USER16> That's a bit of an odd post.

The original post was by an owner/founder ("just hired a new biz person", "my existing employees", "my employee", "I'm one of the founders"), had they been big enough to have a dedicated HR department with any possible expertise in that (rather than, say, one person in charge of hiring and payroll) they'd naturally have gone through that rather than asked how to handle it on HN.

I thus assumed — and I think most others readers including patio11 did as well — that there was no such HR with any expertise on the subject which could handle the situation.

</comment><comment><USER17> It's not a "[m]en and women need to learn to interact at work" issue. It's not your job to teach employees this. It's a _business continuity_ issue. If an employee is kept on who shows this kind of totally inappropriate behavior it can become an __existential threat __to the company.

If (probably "when") the behavior continues--or worsens--now you're responsible for keeping an employee that has a known history of sexual harassment. I would posit that there is not a single employee so valuable as to be worth this risk.

<comment><USER18> Speaking of business continuity, staff churn is costly and time consuming - advertising the position, doing interviews, negotiating, paying a recruiter... and even when you finally get the new employee, it takes a few months before they're fully familiar with the job.

It's worth having a talk first to try and fix things, warning the employee that it won't be tolerated again. It's not like once you have the talk you lose all future opportunity to fire them.

</comment></comment><comment><USER19> _Please do get HR involved. Please do not listen to the people here who are advising you to nuke the man from orbit, it 's the only way. Doing that will only deepen the problem._

Seems to me that doing this would deepen one problem ( _...please do not use final solution /terrorist tactics. This only hurts women in the long run._) but I'm not sure it deepens the actual problem the poster from yesterday had (a potential lawsuit).

<comment><USER20> I think what she's trying to say is that while firing the individual is an easy solution, it isn't the best solution. In fact I would say it has a number of negative consequences for the employer beyond the cost of losing the employee.

Firing the individual without an investigation by HR sends a message of zero tolerance to intolerance (an intolerance of intolerance) to every other employee in the company, that any employee faux pas is utterly unacceptable. This would create a guarded work environment and have negative impact on the culture.

The two employees agreed to take the conversation from a work platform (i.e. Slack) to a personal platform (i.e. Whatsapp). To me this is akin to asking someone in the Office break room if they'd like to get coffee at Starbucks, it's asking to broaden a relationship beyond the scope of coworker. At this point the scope of their relationship (i.e. work related vs personal) is nebulous and I would argue broadens the scope of acceptable conversation.

From what little we know, it sounds like it wasn't unreasonable for him to think the bounds had been extended and also the guy grossly overstepped his bounds. In that regard, firing him summarily might be grounds for a lawsuit.

</comment></comment><comment><USER21> [https://news.ycombinator.com/item?id=11666857](https://news.ycombinator.com/item?id=11666857)

</comment><comment> squeaky-clean I saw the author's comment on the original thread, I think it's an alright idea in a Fortune 500 company like she mentions, but not so realistic for a startup. How large is the original Ask HN author's company? They might not even have a proper HR department, or person, and nothing set up for sensitivity training.

"Men and women need to learn to interact at work" stuck out to me as well. I think they should learn that... around the age of 12 after getting over their fear of cooties. Not the first few weeks at a new job.

It's fine to be trained on "How to speak to investors during a conference call." or "How to speak to other companies during a sales call or trip.", skills related to the job. But not "How to speak to someone attractive in a professional setting."

If you bring on a new dev, it's expected that you'll have to teach them internal stuff, in-depth details on your current stack. It's a little annoying to have to teach them how to use Git properly, pull, branch, push, but sometimes you pick someone that really doesn't know. But I would certainly want a dev to be fired if they asked me what a for loop was. This feels that elementary to me. I would expect every developer to know what a loop is, and I would expect every single employee to understand at least the basics of human decency.

Also, all the emphasis on gender in the blog post and author's profile. Why is this a gender issue, it's just an etiquette issue. What if it was two men, or two women in this scenario? Why does it matter the gender of the two people involved? And what does it matter the gender of the commenter? For me, everyone on HN is a genderless construct, and I almost never read. I saw the patio11's comment in the other thread and agreed with it most. I had no idea it was patio11 that wrote it.

</comment><comment><USER22> what is the beef with patio11 ? He has given my good comments on my posts over the years. That is how HN is designed.

<comment><USER23> This article reads as "Don't take his advice. I don't like him therefore his advice is bad."

<comment><USER24> I'm kind of getting the same vibe, BUT...

...I'm assuming there's something subtler and importanter to it, because it seems Michele/Mz has a damned decent brain going on. I mean seriously, how often do you find someone with this nuance of opinion:

"I loathe the expression "The Patriarchy" and I think it mostly does not fit the issues of gender disparity seen on HN. I can think of one or two men there who strike me as staunch supporters of "The Patriarchy," but I think most men there are not actively trying to keep "little women" in "their place." They are mostly just human beings, who happen to be male, who don't know a better answer than the crappy situation we currently have. But, then, most women don't have better answers either and have much more vested interest in finding such answers. I see no reason to vilify men for such a prosaic shortcoming of happenstance." [1]

[1] [http://micheleincalifornia.blogspot.com/p/hn- tools.html](http://micheleincalifornia.blogspot.com/p/hn-tools.html)

<comment><USER25> That was very well said. Statements like this attempt to find common cause and allow us to come together for a solution. Calling someone a member of "The Patriarchy" is dismissive and removes men from the conversation.

</comment></comment></comment></comment><comment><USER26> contex context CONTEXT CONTEXT

No two situations are the same. If the behavior can be corrected go for the HR route. If the guy seems like a pretentious idiot, then lawyer up. Its the managers job to assess the situation and act accordingly. If its affecting the team, then something has to be done, which course of action he takes is on him to see if anything can be done.

No one here has all the pieces to judge what the guy should have done. We can give advice, or different perspectives but this michele girl is just about as qualified to give advice as this alleged patio11. This blog is less about the actual situation then just trying to up one patio11 it looks like.

</comment><comment><USER27> I had read the original post and the comment you are referring to, but I did not post in the original thread. While I think you do have very valid points and definitely some words to consider. When I got to this line I paused.

"Men and women need to learn to interact at work."

While I think it is very true the question I asked myself is, should my company be the training ground for people to learn to get along ?

The answer I came up with is a resounding no. I think that knowing how to interact with the opposite sex is something the individual is responsible for before even entering the work place. If they want to pay me to teach them manners then so be it, but I am not going to pay them to teach them manners.

Side note on patio11, I don't know or care who the dude is, from what you describe he sounds a little sketchy but you know how internet rumors etc are. Sometimes internet fanboys rush to support their hero, I didn't want to be confused with those :)

My opinion is, Nuke em from orbit, its the only way to be sure! but I do think your approach can be valid as well, just not the one I personally would take in this day and age.

Side note - I don't like the term terrorist being used so lightly.

<comment><USER6> I tend to lean towards patio11's solution simply because the description of the perpetrator made him sound like someone who already failed to grasp the limits of the social contract.

As for patio11's being sketchy, I think I've read everything he's written (starting on the Joel-on-Software forum) and while I don't agree with him on everything, I do believe he's got reasonable ethics and morals. Why use the word sketchy when you simply don't agree with his opinion? And bear in mind it was an opinion based solely on what was written in that Ask HN.

<comment><USER28> _Why use the word sketchy when you simply don 't agree with his opinion?_

The post described a pretty different situation that just disagreeing with him. Not that I'm taking it at face value, since it wasn't described in enough detail to evaluate it for myself.

</comment></comment></comment><comment><USER29> I read the article for the discussion on sexual harassment and left wondering if I should arbitrarily hate some dude on HN. What is this doing here?

</comment><comment><USER30> As CEO, you have a moral obligation to your employees, a fiduciary responsibility to the board and stockholders, and a legal responsibility under California and Federal law that makes your suggestion poor advice.

It is very nice that in your instance and outcome that was so mutually agreeable was reached by all parties. However, it could have easily gone differently, and can go differently in the future. As other commenters in that other thread noted: if the individual who was harassed was on a PIP, if the individual harasses an external vendor/contractor/customer, if he or someone else harasses another employee in the future, if the harassee leaves the company under circumstances that are not mutually disagreeable... all of these are very likely to result in material civil settlements to the company (and possibly the CEO personally) if this is not handled in a way very close to what patio11 described. Raising with HR vs contacting a lawyer will certainly result in the same outcome, regardless.

<comment><USER31> >>It is very nice that in your instance and outcome that was so mutually agreeable was reached by all parties. However, it could have easily gone differently, and can go differently in the future.

Exactly. It was a big risk and her company frankly got lucky that it worked out.

</comment></comment><comment><USER32> Clickbait. Pure and simple.

Not only that but sentences like "I appear to be the highest ranked openly female member there" appears to be a person obsessed with points, giving validity to clickbait.

I have enough points, go ahead a downvote. They do not translate into money.

</comment><comment><USER33> This is a contender for the dumbest thread on HN of 2016. What _doesn 't_ it have? Drama? Gender parity arguments? Relitigating old threads? It's like an extravaganza of stupid.

<comment><USER34> Please follow the HN guidelines.

<comment><USER33> Everyone posting earnestly on this thread should be embarrassed. I'm even unhappy Patrick did.

<comment><USER5> I think you're overreacting here. Yes, the impetus of the original article was a weird "he said, she said" soap opera. And _some_ comments are feeding on that aspect.

However, it looks like majority of comments are focusing on the "right" way to deal with a MILF comment. Some members express that it is a zero tolerance offense. Some other members express that something like that should only be a warning and the person given a 2nd chance.

I think it's a productive conversation because even if neither side changed the others' opinions, at least we learned what others' thresholds were. I was surprised to learn that MILF is not disrespectful enough for some folks to terminate the employee. Now I question what others think is within the boundaries of not firing. What about a quick butt grab in the hallway? How about sending a nude to a coworker's phone/email? In any case, the only thing that taints the discussion of this important topic is that it was begun by the soap opera article submission. Some of us ignored that part.

<comment><USER35> > I was surprised to learn that MILF is not disrespectful enough for some > folks to terminate the employee.

I suspect that some people are unclear of, or have suppressed in favor of the colloquial use, the definition or expanded form of MILF. If you think of it as "very attractive mother and/or mature woman", which I think the meaning has shifted to somewhat over time, then I can see how some people might have differing interpretations for the severity of the remark. That's not to say it's acceptable, it _is not_ , but I can see how someone could be somewhat surprised _initially_ the severity of the negative reaction to their comment, through _ignorance_ or _carelessness_.

</comment></comment></comment></comment></comment><comment><USER36> The comment by patio11 [1] this article is trying to refute is not an appeal to authority, and as such this article (being an ad hominem) seems ill considered. Why attack the user instead of the comment?

[1]: [https://news.ycombinator.com/item?id=11666947](https://news.ycombinator.com/item?id=11666947)

<comment><USER37> If anything, Michelle demonstrates a good argument for getting rid of the /leaders page on HN.

Comparing e-penises is an adolescent exercise and waste of time.

</comment></comment><comment><USER38> Please, keep your personal conflicts out of HN.

<comment><USER39> People don't write their blog posts exclusively for HN.

Just because someone other than the original author posted an item to HN does not mean the original author should be held to account for some perceived slight to this site.

<comment><USER37> I don't know if you noticed but she has a dedicated section in her site navigation labelled 'HN-related'.

Whether her blog post is exclusively for HN or not, her post is definitely for/about HN.

<comment><USER40> Is the implication that she shouldn't write about HN on her blog?

<comment><USER37> No, the implication is that if the rules of community are no personal attacks, making those personal attacks in another venue where it's still clearly and identifiably about the community/member is still a violation of the rules of community.

<comment><USER40> I think you have made this up.

I can't see anywhere in the guidelines where there is any rule about not posting anything off-site relating to HN, or not identifying members of the community.

There isn't even a rule against what you are choosing to label a 'personal attack', but looks reasonably civil to me.

Even if there were such a rule, attempting to silence dissent _outside_ the communities own spaces is behavior typical of a cult or authoritarian regime. A healthy community isn't afraid of people thinking and saying things that some of its members don't like.

<comment><USER37> [https://news.ycombinator.com/item?id=10906242](https://news.ycombinator.com/item?id=10906242)

I'm not saying silence dissent outside HN. People are free to post on their blogs whatever they want. If they are making a personal attack against someone on HN on their personal blog, the link to that blog post should be blocked from this site and the user absolutely warned/banned if they themselves share it.

<comment><USER40> How do you know it's an attack and not just a statement of fact?

<comment><USER37> I don't think whether it's an attack or not has much to do with the factual basis of a private disagreement that they had 4 years ago and how that speaks to patio11's character or the quality of his advice now.

Not that I'm sticking up for Patrick. I frequently find myself in (often silent) disagreement with him, but the post was extremely flimsy to me and not much more than an offsite meta-discussion that contributes neither to the original discussion nor this community. I flagged the link but since it remains I think this is worth discussing.

<comment><USER40> If it's not an attack then everything you've said on this thread is invalidated.

You may not be sticking up for Patrick, but you are sticking up for something. In the absence of an attack, it's unclear what.

<comment><USER37> It's absolutely an attack.

<comment><USER40> What makes it an attack? If what it says is true, it sounds like Patrick also engaged in an attack. Why isn't he so vehemently sanctioned?

<comment><USER37> I read the linked post. Patrick wasn't even addressing Mz or a comment of Mz. On the face of it, it looks like Mz read too much into it.

<comment><USER40> I didn't see such a post - what are you referencing?

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER41> [deleted]

<comment><USER42> Yes, this guy that operates "The personal blog of Michele in California" and has basically her entire HN profile dedicated to the fact that she's a woman.

<comment><USER43> Gender is irrelevant when it comes to harassment. Men and women both can be harassed. Also, guy is gender neutral, it's 2016.

<comment><USER42> I don't consider myself a feminist by any stretch, and I'm a pretty conservative person generally (certainly more conservative than most of HN). But Jesus Christ, the _definition_ of "guy" is literally "a man." Let's not start this "I didn't mean the actual definition of the word when I said it" trope.

And I didn't say gender had anything to do with harassment. We're discussing the article, which happens to be written by a woman.

<comment><USER37> Absolutely incorrect. [https://www.washingtonpost.com/news/volokh- conspiracy/wp/201...](https://www.washingtonpost.com/news/volokh- conspiracy/wp/2015/05/14/the-origin-of-the-word-guy/)

<comment><USER34> It's not incorrect. Guy does mean "a man." Gal means "a woman." Those are their uses today. They are as gendered as "man".

And just so I can get really pedantic: gender is inferred as a context of speech. If you are calling a cis-woman "guy" or "dude", it is inferred you are speaking colloquially. If you call a transwoman "guy" or "dude", it is inferred [by the subject] that you are mis-gendering them, and is offensive.

And more to the point of the context of the (now-deleted) comment: if you say "guy", "he", "him", and "dude" all about the same subject, you are calling the subject a man. You can't argue your way around blatantly misgendering someone multiple times.

<comment><USER37> That's the thing about language though. It is because you choose it to be so. Other people choose for 'guys' and 'dude' to have a different meaning.

Collectively we decide who wins. Nobody is right or wrong in the present because it's a never-ending battle over an idea. Words change over time - always have and always will. You can only be right historically in context. 'Guy', _historically_, does not mean 'man'. What it means now is your interpretation. You should not get so bent out of shape because other people disagree with you.

There is an inherent problem with basing gender-politics around the meanings of words. How do you deal with people coming from languages that do not have gendered pronouns that are trying to translate their language into English? Do you beat them over the head for how wrong they are (before you say no, I've seen it countless times)?

Also hey, guess what. 'He' has seen use as a gender-neutral pronoun well into the 1960s.

<comment><USER34> So you're saying it doesn't matter what you call someone, because hey, interpretations.

<comment><USER37> No, intent is what matters, not your feelings about certain words. I can't control whether you get upset or not but I can control whether I intended to offend.

Note this is not the same as ignoring someone's expressed choice (when being directly addressed) if they have an issue with certain words.

<comment><USER34> You have lots of control over whether someone gets upset. Don't call someone a racial or sexual slur and don't misgender them, for example. If you know some use of language is or could be problematic, don't use it. If you're not aware what language that may be and accidentally offend someone, obviously you shouldn't be held at fault, but you should then take it upon yourself to learn what the problem was so you don't repeat it.

Because I personally know people who see 'guy' as a gender-specific word - <USER2> because the dictionary says "guy" means "a man" \- I know i'm not going to ever call a woman "guy", because it may offend them. I think this is a pretty simple concept...

<comment><USER35> > If you know some use of language is or could be problematic, don't use it.

I believe this is the disconnect between your argument and the prior commentor's comment. This falls under "Note this is not the same as ignoring someone's expressed choice (when being directly addressed) if they have an issue with certain words." The issue is whether the person speaking should know and consider guys to be gendered, and possibly offensive. The fact some people are saying it's not gendered is evidence that's it's ambiguous to some people. To assume someone was purposefully misgendering you without knowledge of whether it's an honest mistake, as we've seen it might be, is not conducive to communication.

> Because I personally know people who see 'guy' as a gender-specific word - > and because the dictionary says "guy" means "a man" \- I know i'm not going > to ever call a woman "guy", because it may offend them.

Which is fine, but you've been presented with evidence that all people don't necessarily have that same knowledge. You can continue to assume that this knowledge must be universal and people that act in opposition to it are doing so purposefully and without regard for the feelings of others, or you can extend the benefit of a doubt, and assume until further evidence to the contrary that they are misinformed about what you believe to be true. I believe giving the benefit of a doubt it more useful and leads to better outcomes in almost every respect.</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment>


Chart.js Personal Dashboard Challenge (July 11 deadline) - <AUTHOR> http://chartjs.challengepost.com

<comment><USER2> With libraries like this, my first question is always: "Why should I use you instead of _________".

In this case, how are you better than Highcharts, NVD3, Google Charts, and gRaphael?

<comment><USER3> A thread in the d3-js group on nvd3 vs. rickshaw vs. chartjs: [https://groups.google.com/forum/#!searchin/d3-js/nvd3/d3-js/...](https://groups.google.com/forum/#!searchin/d3-js/nvd3/d3-js/BZPDwRcOHsw/sjJ3iHJMFEcJ?utm_source=twitterfeed&utm_medium=twitter)</comment></comment>


Ask HN: Does anyone use Pine (now Alpine) for email any more? - <AUTHOR> I used Pine on a Sun workstation in the early 90s to read my email. Loved it. Fast, efficient.<p>Does anyone still use it? Is it practical? <comment> concrete-faucet The last time I used Pine was in the early 2000s. I had gone on vacation and during that time some computer virus caused mass emails over the course of a few days (can't remember any more detail than that). I returned to work with many tens of thousands of unread emails in my inbox. Outlook crashed upon opening because it couldn't handle it. After a few minutes of trying Outlook over and over again, I remember that I can check my mail through Pine on the UNIX servers. Log in, open Pine, delete mass emails, Outlook is ok again. It's a quality program.

</comment><comment> a-dub Attachments were too annoying... so was tuning spamassassin (I guess that comes with running your own MTA- slightly OT). Off to Gmail I went (after around 10 years of doing my own email)... trading away the awesome decentralized internet for convenience... Whoops!

<comment><USER2> My middle ground compromise on the decentralized Internt was to move my vanity domain to Fastmail. It's not the vision of everyone running their own email system, but it isn't the Google monolith.

Plus, their spam filtering has been pretty good (about as good as Google's IMO), I get push notifications out of the box with iOS, and the general fit and finish of the product suggests to me that they're... a company focused on email.

</comment></comment><comment><USER3> Yes.

My reasons are the same as 10 years ago. It's fast, and easy to use.

I've got a notifier that adds unread to my PS1 [0].

Most awful html-only emails have a "open in browser" link that Alpine can read, which I usually use to go through elinks or similar.

[0] Modified from: [https://unix.stackexchange.com/questions/1830/how-can-i- cust...](https://unix.stackexchange.com/questions/1830/how-can-i-customize- new-mail-notification-in-alpine)

</comment><comment><USER4> I don't use pine anymore, but I do read my email in text mode. I use emacs for reading, notmuch for search/indexing, and w3m for rendering HTML email as text.

</comment><comment><USER5> I'm a mutt user, but I have used Pine. Less is more and either or those are great MUAs. Minimal yet packed with features. You can read HTML fine in mutt. Don't listen to the naysayers.

And, speaking of lesser used mail readers. I was also fond of Slypheed years ago. It's a GUI, but very minimal. You may like to try it sometime too.

        https://sylpheed.sraoss.jp/en/

</comment><comment><USER6> I have used Pine and then Alpine from roughly 1993-2017. The extension for PGP was working, but rather clumsy. I ultimately switched to NeoMutt about a year ago, which has a seamless PGP integration (searching on encrypted mail!), very good filtering capabilities, and a sidebar that shows folders. Goodbye pico, though and hello to vi. [https://www.neomutt.org](https://www.neomutt.org)

</comment><comment><USER7> I hope you don't consider my reply irrelevant, but I use mutt. It's roughly similar: fast, efficient, terminal-based. GUI mail readers are simply not capable of doing what I want. Also, with mutt, I can parcel out tasks such as spam filtering and searching to dedicated programs designed for those purposes.

<comment><USER8> What sort of things does a typical mail client not allow you to do/tweak that Mutt does?

<comment><USER7> For example, copy all messages from my inbox with subject "debug" that are older than 200 days into a new mailbox file, with just a few keystrokes, instantly, even if my inbox contains 10,000 messages.

</comment></comment></comment><comment><USER9> I use pine as my primary email client for all things. Even at work, I have pine set up as a client to Gmail for work's Gmail account. This is because I think that email clients which are basically web browsers are horrible, that I don't want anything to pull any data from any link without my express desire, and because stuff like Javascript has no place, now or ever, in email.

Email is text. If it's not text, then it's not email.

</comment><comment><USER10> The last time I used pine was sometime in 2012 or so, then I switched to mutt. This was how everybody was doing it in that particular organization, for some reason. The only way to check your mail was to ssh into some ancient centos server, and the only mail client available on it was pine.

Mutt is much better. If I did a lot of emailing, or needed to use gpg to sign/encrypt emails more often, I would probably still use it.

</comment><comment><USER11> The problem is that these days everyone is sending HTML mail and expecting to receive it. So it's not very practical for that reason.

The full inbox search and anti-spam capabilities are also way below what you'd get from Gmail, although some of those are not Pine's fault since they're normally performed by a different part of the mail stack.

<comment><USER7> I use mutt and don't understand your comment about HTML email. I can consume it with no problem, and I've never run into difficulties with sending text (non-HTML) emails.

</comment></comment><comment><USER12> I use it daily, connected to a work Exchange server, though supplemented by the Outlook Web client for more HTML-rich content.

</comment><comment><USER13> I still use it through an old terminal based unix email system . Works relatively well (of course opening attachments is tricky), although I feel like whats app/sms has significantly cut down my email use. I do miss Tin and the untamed and distributed Usenet.

</comment><comment><USER14> I still use it and love it. Unfortunately I have to deal with a lot of email and the batch selection (; key) is huge for me.

I do use the pipe command a couple times a week to view a message in an email client that deals with HTML.

</comment><comment><USER15> I cant imagine going without alot/xapian. If you like pine, checkout [https://github.com/pazz/alot](https://github.com/pazz/alot)

<comment><USER16> Pazz/alot checks the right boxes, but the bug list is a concern:

[https://github.com/pazz/alot/issues/1202](https://github.com/pazz/alot/issues/1202)

</comment></comment><comment><USER17> Back when pine was a thing, I preferred elm. Remember, PINE = Pine Is Not Elm (supposedly a backronym). Much later I switched to mutt. Nowadays I've been assimilated by the borg. (Gmail)

</comment><comment><USER18> yes. and run my own mailserver, although the overhead is hard to justify. But the alternative just seems icky.. I mean folks pitch a fit at what data they give to facebook, but don't blink about the mountain of stored private communication they've outsourced to google microsoft and yahoo.

alpine isn't my primary - evenly spread between it, thunderbird on the desktop and k-9 mail on the phone.

<comment><USER8> Have you ran into any large issues running your own mailserver?

</comment></comment><comment><USER19> Pine is an option on freeshell.org; I opt to use mutt

</comment><comment><USER20> I use Pine from time to time on my PC, if I'm on my laptop and I've SSH'd in, or if I'm on my (older) MacBook or iMac.

</comment><comment><USER21> I love pine. It goes well with my use of pico\nano

</comment><comment><USER22> University of Toronto's Department of Computer Science uses Alpine as the default command-line email client.

</comment><comment><USER23> Email has been crap ever since the Sooper Jeenyus children at Micro$oft and @pple foisted WWW browsers on us as email readers. I still use MH/exmh despite the inconvenience because I nurture the illusion that my personal info is slightly less compromised than if I handed it all over to Google to snoop through.

</comment><comment><USER24> I used to use it up until a couple of months ago. Then I switched to claws- mail.

</comment><comment><USER25> Last time was around 1996 or so.

Since then I moved into GUI native ones.

</comment><comment><USER26> I bet Marissa Mayer still does.</comment>


Ask HN: Does watching 2001: A Space Odyssey or Interstellar make you feel weird? - <AUTHOR> I simply empty out.  Insignificance and a sense of puniness surround me.  It's a weird feeling, can't quite put in words.  I feel inconsequential and at the same time my mind gets thrilled by the greatness that humanity can achieve by conquering the vast cosmos.
The daily chores, bugs, programming languages, opinions, news etc. do not matter any more.  The hangover lasts for a few hours, but I feel like I was on an opioid trip (metaphorically, never tried myself).  It's scary and beautiful at the same time.  I usually study Math or Physics after such hangover.
Just wanted to share the weirdness I feel right now. <comment><USER2> More people are starting to think like this. For me, it was Stargate. I'd call it "intellectual evolution," if there were such a thing - we've moved past survival of the fittest (even defy it with modern medicine) and so we have to make progress such as this - else we'll naturally regress along the evolutionary road.

> The daily chores, bugs, programming languages, opinions, news etc. do not > matter any more

I've decided on moving toward coding in an area that serves a purpose (eventually, as there's stuff to get out of the way first). Be it with SpaceX or within clean energy.

<comment><AUTHOR> That's pretty cool. If only SpaceX hired me :) Or Tesla or SolarCity or NASA or the ESA or the ISRO.

</comment></comment><comment><USER3> A few movies left me with some feelings like this. I take it as a chance to try to capture some insight and write it down. Regardless of movies I think is healthy to periodically review life's important questions, but if a movie triggered that, then it would be very welcomed. On the personal side, due to the age at which Carl Sagan's Cosmos catch me, that was profoundly influential and inspiring.

<comment><AUTHOR> Indeed, Carl's sublime and beautiful voice makes it hypnotic. I also liked Neil Degrasse Tyson's remake of Cosmos. But nothing can beat the original one.</comment></comment>


Hey HN Support, Sintel: A complete open source movie by Blender. - <AUTHOR> http://www.sintel.org/

<comment><AUTHOR> Here is the link to video - <http://www.youtube.com/watch?v=eRsGyueVLvQ>

</comment><comment><USER2> I'm curious as to what kind of setup was used to produce this, in terms of render farms, number of animators, etc..

<comment><AUTHOR> Blog seems to be taken off for the release. Will be back tomorrow.</comment></comment>


Send a file to your Dropbox from its URL. - <AUTHOR> https://web2db.ssl.dotcloud.com/

<comment><USER2> Hi nmb, this looks interesting, thanks. Tested it out on small text files and it works. What is your upload and download bandwidth? I think it would be better if it showed the list of files, their status/progress, and ability to delete a file from the queue.

<comment><AUTHOR> The app is completely run and hosted on DotCloud, so bandwidth is limited by their capacity. Right now when you submit a URL it's added to a global queue, and a separate python process goes through that queue and uploads them asynchronously on a first come, first-served basis. So with my current architecture it would be difficult to implement the functionality you describe but I agree that it would be cool. Smugmug's photo uploader has a similar feature; I should look into how they do it. (Or if anyone knows or has an idea, feel free to chime in!)

<comment><USER3> How do you host an app on DotCloud? Is that functionality built in or did you arrange it with them?

<comment><AUTHOR> Yeah, DotCloud is all about hosting apps on their platform. ;) They have support for background processes, redis, postgres, and wsgi, so they were basically perfect for my use case. The best place to get started is DotCloud's own docs, as well as this blog post (specifically for django): [http://kencochrane.net/blog/2011/04/deploying-my-django- appl...](http://kencochrane.net/blog/2011/04/deploying-my-django-application- to-dotcloud/)

Oh and they let you use their SSL certificate for free, which is pretty nice. The only downside is that the certificate isn't recognized by some versions of the Android browser, but I'm sure that will be fixed soon enough as their support guy is incredibly quick to respond to issues.

</comment></comment></comment></comment><comment><AUTHOR> 2-day project of mine. Hope someone finds it useful!

<comment><USER4> That's totally awesome.

<comment><AUTHOR> thanks :)

</comment></comment></comment><comment><USER5> Out of curiosity, what use case do you see for this?

Future features would be being able to let users specify which folder they want the file to go to and be able to change the file name. Also, just FYI the example link is broken for me. But I'm more interested in the use case, since this seems cool but I don't know when I'd find it helpful.

<comment><AUTHOR> People might use it for different things, but I made it so that I'd have a convenient way to download a file to my desktop from my phone. Using the native Dropbox client, I'd have to download the file to my phone first, then upload it.</comment></comment>


Ask HN: Ecommerce startup - Shipping and Return labels? - <AUTHOR>

I'm looking for an API that I can use on an ecommerce site to generate shipping and return labels (UPS and FedEx options). Are there alternatives to directly using UPS API (which doesn't look like an optimal solution from reading the docs)? <comment><USER2> Check out <http://www.endicia.com/Products/>.</comment>


Ask HN: What metaprogrammable language do you/would like to use? - <AUTHOR> Like many folks here, I probably spend too much time reading about, trying and contemplate using many new languages. The (overlapping) paradigms that interest me are metaprogramming, functional, and (newer) statically-typed. I decided to focus only on metaprogrammable ones from now on (as a time saver and to step up).
I made a list and ordered them by how much I would be interested in using them (which combines my curiosity with current/expected adoption).
My short-list for metaprogrammable ones are:

  Clojure
  Elixir
  Nim
  Crystal
  Rust (would be higher if I did more low-level work)
  Pony
 I left most other functional ones off my list because that's an exploration in itself for another time. I was surprised that I put Clojure and Elixir first given my preference for static types. Of all the kitchen-sink features that Nim has, I can't accept camelCased == under_scored names otherwise it could have been first. Ruby is notably absent as I use it and am looking for something better/different.
For future adoption, I think interoperability is a key factor, whether it's with C or in a VM runtime (e.g. JVM, CLR, BEAM, v8).
Which metaprogrammable language do you use or are most interested in using? How compact are your programs (i.e. how extensive do you metaprogram)? <comment><USER2> I just add "Julia" for this list;

Ideal for Scientific computing. ( LLVM based; Optionally typed; Dynamic )

[https://julialang.org/](https://julialang.org/)

[https://docs.julialang.org/en/v1/index.html](https://docs.julialang.org/en/v1/index.html)

Julia Metaprogramming:

[https://docs.julialang.org/en/v1/manual/metaprogramming/inde...](https://docs.julialang.org/en/v1/manual/metaprogramming/index.html)

Julia: "Building a Language and Compiler for Machine Learning" ( compiling to GPU; TPU )

[https://julialang.org/blog/2018/12/ml-language- compiler](https://julialang.org/blog/2018/12/ml-language-compiler)

"Why Does Julia Work So Well?"

[https://ucidatascienceinitiative.github.io/IntroToJulia/Html...](https://ucidatascienceinitiative.github.io/IntroToJulia/Html/WhyJulia) ( _" Core Idea: Multiple Dispatch + Type Stability => Speed + Readability"_ )

<comment><USER3> I'd like to say I'm a huge fan of Julia, and don't have much experience with metaprogramming in other languages.

I'm sure I do more of this than necessary, but much of my code ends up being "generated functions".

@generated foo(x, y) ... end

When you write an `@generated` function, you write code that creates a Julia expression. Using "x" and "y" in the function give you the types of these arguments. Defining parametric structs lets you pass any information you want (eg, array sizes) to specialize code and algorithms.

A very useful library: [https://github.com/MikeInnes/MacroTools.jl](https://github.com/MikeInnes/MacroTools.jl)

<comment><USER4> Mike Innes produces so many cool Julia libraries!

Flux is easily the coolest ML framework I've used, and I've just discovered Lazy.jl.

</comment></comment></comment><comment><USER5> Python has way more metaprogramming capabilities than people think.

Of course you can intercept pretty much anything with __dunder__methods (attribute missing, method access, instantiation, etc), you have full instrospection of pretty much anything (functions, objects, modules, call stacks...) and you also have monkey patching, decorators, metaclasses, bytecode injection...

But while we are far away from Lisp based languages, import hooks give you access to the ast of any module, and allow to use your own parser, before the result is loaded, to decide what to return. Which means you can pretty much make your own syntax and import it like a regular module.

However, the reason those tools are not very well known is that the community regards magic as dangerous as it is powerful, and everybody agrees on using it sparingly.

Hence the only popular libs that use a lot of magic are ORM (lot of metaclasses, dunders, etc) and test libs (monkey patching, bytecode injection, ast parsing), but not a lot more. I don't know of any popular lib that actually uses the import hooks to create a DSL.

<comment><USER6> The Hy language (HyLang) is a good example of this. A lisp syntax to transformed to an AST that is executed as Python is. Hy is an interesting project and a good bet if you really want to use Keras and TensorFlow in a Lisp language.

</comment></comment><comment> phoe-krk I use Common Lisp for its really insane metaprogrammability (reader macros, compiler macros, ordinary macros, and the MOP to edit the object system) and the ability to bend to the problem that I am trying to solve. It has decent interoperability via its CFFI interface.

</comment><comment><USER7> > _Of all the kitchen-sink features that Nim has, I can 't accept camelCased > == under_scored names otherwise it could have been first._

Just to clarify for the general public (because this is often a source of confusion and misunderstandings): first letters are case-sensitive in Nim, so you can do `var car: Car` (where `car` is a name of the variable, and `Car` is a type).

When it comes to style-insensitivity, I also thought this would be a problem when I discovered Nim, but now—2 years later—there was not even _one_ situation where that would cause a problem. (And if you use different styles of the same name to mean different things in other languages: this will bite you sooner or later)

Nim's standard library is written uniformly in camelCase style, which is what I also accepted for my code (even though I come from snake_cased Python).

So why this even exists? To make easier to use libraries written (in another language, e.g. C) in another style, while keeping the uniform style in your code. Basically, this feature makes it _easier_ to use just one style consistently.

To conclude:

If this is the only (or just a major) thing that keeps you from using Nim: I would suggest you to reconsider and give it a chance.

<comment><AUTHOR> I don't see how this is required for one drop and if that's the use case, it sho_uLd only be used there and not everywhere. It makes it harder for tooling and for searching for all references. Inconvenient, like spaces in filenames.

<comment><USER8> One of the main benefits is in wrapper libraries for C. Another one is using libraries that have a naming style that I don't like.

Searching for names is not a problem as people don't mix different styles within the same project. Also there's nimgrep for this.

Finally, getting a compiler error when I try to use variables called should_run and shouldrun in the same scope is a feature, not a bug: it encourage using less misleading names.

<comment><AUTHOR> If it treated 'same scope' to mean something more like a module (i.e. library), that would be better.

Also, it should never consider hell_owl and hello_w_l to be the same, although each could match hellOwl and helloWL. Basically it takes the style- insensitivity too far.

<comment><USER8> And yet, after using Nim for many years hell_owl == hello_w_l has never been a problem. Again, it warned me in few occasions when I tried using confusing names like new_dir and newdir.

There are style guides and nimpretty to help further.

</comment></comment></comment></comment></comment><comment><USER9> If you are asking about learning metaprogramming as a paradigm I would rather suggest Racket. Lisps are famous for their metaprogramming capabilities and you have Clojure at the top of your list but writing macros are way easier in Racket than in Clojure. This is primarily because Racket IDE provides good debugging and tracing tools. Clojure is notorious for its cryptic error messages. This certainly doesn't help while you try to do code transformations. Once you learn the fundamentals you can apply them in (somewhat) more mainstream functional programming languages like Clojure or Rust.

<comment><USER10> But Racket doesn't have macros a la Common Lisp, which are the most powerful way to achieve metaprogramming in the Lisp family.

<comment><USER11> Nonsense. Racket has hygienic macros just like CL.

<comment><USER12> CL doesn't have hygienic macros.

<comment><USER11> I stand corrected. Racket does.

</comment></comment></comment></comment></comment><comment><USER13> I use Red (full disclosure, I'm on the team), and have used Rebol (Red's direct ancestor) since 2001. When I find something that works, I stick with it, though I also keep an eye out for new things.

Red's heritage comes from Lisp, Forth, and Logo. It's homoiconic and metacircular (it is its own meta language). Where Rebol was strictly interpreted, Red can also be compiled, and has hygienic macros. But you don't really need them. They're nice for moving things to compile time, but Red puts a twist on Lisp's sexpr model that obviates the "need" for them in most cases. Technically, you can say Red uses an fexpr model, but a more human-friendly way to say it is that "Everything is data until it is evaluated.", and you have a lot of control over when evaluation occurs.

For interop, Red has a system-level dialect called Red/System. It's a C level language and is a dialect of Red. That is, Red is high level and is used to define the Red/System dialect, which is used to implement Red. It's the circle of life. :^) You can also compile Red as a library and call into it via an API, so you can use it as an embedded language, or doing things like the Excel example in this blog entry about Red's macros: [https://www.red- lang.org/2017/03/062-libred-and-macros.html](https://www.red- lang.org/2017/03/062-libred-and-macros.html) which also mentions one of the easiest ways to preprocess input, with the `system/lexer/pre-load` feature.

ASTs are mentioned in a few comments, so I should add that while you can certainly do that with Red, it's another thing that can often be avoided entirely. With other langs and tools, you almost have to take that approach, to make it manageable. With Red, there is a function called `parse` which consumes input and supports BNF-like rules to process it. `Parse` is a Red dialect, and the rules are just data it interprets. Rather than building ASTs (though there are some cool examples, and tree-rewriting systems out there), just interpret the input directly.

If it sounds like I'm against metaprogramming, while being on a team creating a language that supports it deeply, that's not the case. Metaprogramming is a great tool for thinking, but it can also make things much harder to debug and maintain. For real work, use what makes your intent clear, and avoids as much complexity as possible.

</comment><comment><USER14> Interoperability + meta-programming? You have to go with the king, Common Lisp! There's a bunch of implementations for different platforms [0]. It's also much simpler to write macros in a homoiconic language like a lisp, than using something like Rust's elaborate macro system.

Although your phrasing ('expected/future adoption') makes it sound like you value picking a language that will have loads of jobs available. Clojure has a few solid niches (same number of users as Kotlin IIRC) and is 'symbiotic' with JVM and JS environments. Rust is growing and has supposedly 'safe' BEAM NIF support. Elixir is popular with the Ruby crowd. Although I have to say, 'meta- programming' & 'functional programming' isn't exactly the hottest job market filter.

[0] [https://common-lisp.net/implementations](https://common- lisp.net/implementations)

</comment><comment><USER15> I would recommend that you definitely look into Scala. The language that was fundamentally designed to be "scalable" with and/for frameworks. Check this resource for more information.

\- [https://scalameta.org/](https://scalameta.org/)

\- [https://speakerdeck.com/itakeshi/metaprogramming-in-scala- th...](https://speakerdeck.com/itakeshi/metaprogramming-in-scala-the-past-and- the-present)

\- [https://geirsson.com/post/2016/02/scalameta/](https://geirsson.com/post/2016/02/scalameta/)

\- [https://github.com/milessabin/shapeless](https://github.com/milessabin/shapeless)

\- [https://vimeo.com/217863345](https://vimeo.com/217863345)

</comment><comment><USER11> If you're interested in functional programming and meta-programming as paradigms, then you should really focus on functional first. The reason is that functional is all about transformation of data structures as a whole (as opposed to altering them bit by bit as in procedural programming) and meta- programming is about treating programs as data and transforming them. You really can only do advanced meta-programming using functional techniques. It's no accident that Lisp is the granddaddy of both paradigms.

As for which language to use to explore these paradigms, the answer would have to be a modern Lisp, i.e. Clojure or Racket. Of those two Clojure is more about being a "pure functional" language and Racket more about meta- programming... in fact Racket has been called a "meta-language".

<comment><USER12> > _You really can only do advanced meta-programming using functional > techniques._

My `loop for (symbol value) on bindings by #'cddr` and "push onto list in a loop, nreverse and return at the end" macros beg to disagree.

Metaprogramming is just like any other programming, except that the output is fed to the compiler. The way Lisp is compiled, you can even use code generated by code in code that generates other code.

That said, functional programming does indeed fit well with most of the stuff you do when writing code that writes code.

</comment></comment><comment><USER16> Personally, I use Nim to develop domain specific language for VM, JIT, emulators and neural networks.

I'm currently writing a compiler for deep learning with both AOT (emitting Nim code) and hopefully later JIT (emitting LLVM IR) capabilities complete with SIMD support. I don't see how I could do that in another language.

My biggest successes:

\- include a quite maintainable JIT for x86_64 (compared to asmjit and xbyak I don't need to parse or codegen the C++ code): [https://github.com/numforge/laser/blob/master/laser/photon_j...](https://github.com/numforge/laser/blob/master/laser/photon_jit/x86_64/x86_64_ops.nim#L24-L51)

\- a DSL for neural network: [https://github.com/mratsim/Arraymancer#sequence- classificati...](https://github.com/mratsim/Arraymancer#sequence- classification-with-stacked-recurrent-neural-networks)

\- a matrix multiplication BLAS written from scratch competitive with OpenBLAS and MKL on select matrix shape (2000x2000) but that can also support int8/int16/int32/int64 and not just float32/float64 thanks to metaprogramming. Expanding to new SIMD architecture (ARM) is very easy:

\--> benchmark: [https://github.com/numforge/laser/blob/master/benchmarks/gem...](https://github.com/numforge/laser/blob/master/benchmarks/gemm/gemm_bench_float32.nim#L418-L465)

\--> Metaprogramming AVX512 support: [https://github.com/numforge/laser/blob/master/laser/primitiv...](https://github.com/numforge/laser/blob/master/laser/primitives/matrix_multiplication/gemm_ukernel_avx512.nim)

The most important thing for me for metaprogramming is being able to operate on the AST directly

</comment><comment><USER17> Haxe has pretty good metaprogramming capabilities. It has expression macros (compile-time evaluated calls that return expressions to be inserted at call place) as well as type-building macros (build fields and/or define whole new types). Both have access to compiler and system API and information about the context (e.g. expected type).

<comment><USER17> Oh, and regarding "how compact are your programs", well every time I see boilerplate code or reflection usage that cannot be refactored into something nice without sacrificing clarity and/or performance, I use meta-programming to generate it instead.

Usual suspect here is any kind of "support" code, like serialization, RPC, dependency injection and such.

</comment></comment><comment><USER18> I have used Nim extensively and done a lot of metaprogramming in it. The biggest risk to metaprogramming is that it allows crazy syntax that you have to learn separately. Nim does very well here to enforce limitations which work well in reducing this risk.

Comparing Nim's metaprogramming to Rust's shows what I mean. In Rust you can write macros that act on token streams, so as long as the token stream is valid it can be used. This allows libraries like the typed-html package[1].

In Nim you cannot do this unless you put the HTML in a string literal. This limitation created a syntax that is far more idiomatic, admittedly at the expense of familiarity for users of HTML:

        buildHTML():
          html():
            head():
              title: text "My webpage"
          body:
            p(class="red"): text "Hello World"

In my experience this works quite well, you can see a larger example in our Forum's code which is written using a SPA framework called Karax[2].

Please don't let style insensitivity discourage you from using this wonderful language.

1 - [https://docs.rs/typed-html/0.2.0/typed_html/](https://docs.rs/typed- html/0.2.0/typed_html/)

2 - [https://github.com/nim- lang/nimforum/blob/master/src/fronten...](https://github.com/nim- lang/nimforum/blob/master/src/frontend/threadlist.nim#L116-L155)

<comment><AUTHOR> Please don't let adherence to stlye-insensitivity limit language adoption.

<comment><USER18> If it was up to me I would have removed this feature long, but not because it's a problem, only because of people like you who judge programming languages based on what they see at the surface.

There are still plenty of people who dislike Python because "significant whitespace, bleh" with no objective reason why they dislike it except "it gets messed up when I copy the code". That's a tooling problem, just like with style insensitivity, it's not hard to search in a style insensitive manner and in fact all tools should allow this mode for convenience.

<comment><AUTHOR> Okay, so what's the regexp for finding all the style insensitive versions of myVariable? Something like

      m_?[Yy]_?[Vv]_?[Aa]_?[Rr]_?[Ii]_?[Aa]_?[Bb]_?[Ll]_?[Ee]

I never want to type a regexp like that just to find all occurrences of a simple var name. Even if a plugin did it for me, it would still be slower and it doesn't help me on the command line.

</comment></comment></comment></comment><comment><USER19> This list is missing Haxe, which is strictly-typed (with type inferencing), supports object-oriented, generic, and functional programming and is highly extensible thanks to meta-programming (macros). Interoperability is where it excels, since it compiles to to multiple language targets/platforms, including VM bytecode.

<comment><USER20> Note: Haxe does not typecheck macros.

See [https://haxe.org/manual/macro-ExprOf.html](https://haxe.org/manual/macro- ExprOf.html)

For example, this seemingly ill-typed definition (which should return Int as suggested by the type paramater, but in fact returns a string) successfully typechecks:

      class StringGetter {
        public static macro function getString():haxe.macro.Expr.ExprOf<Int> {
          var s:String = "";
          return macro $v{s};
        }
      }

<comment><USER21> Incorrect. To quote the page you've linked: "For the most part, this type is identical to Expr, but it allows constraining the type of _accepted_ expressions." or otherwise put: ExprOf only affects macro arguments, not return value. What you want is this:

      class StringGetter {
        public static macro function getString() {
          var s:String = "";
          return macro ($v{s} : Int);
        }
      }

</comment></comment></comment><comment><USER22> Considering only production code here.

Do use: Common Lisp, Racket, Python, Ruby

Would like to use: Julia, Rust, Elixir

I metaprogram when I see I have already built a mini-language/pattern in my code. Even when writing Lisp, I begin with simple code without extending the language, and only when I have written a bit do I consider looking for patterns.

<comment><USER4> Out of curiosity, why do you have Python on your list? Python doesn't really support metaprogramming? I've written my fair share of Python but don't remember ever coming across anything meta in the language. Even if it has some passing implementation, it definitely doesn't have it in the way Lisp/Julia/Rust/etc have it.

<comment><USER22> > it definitely doesn't have it in the way Lisp/Julia/Rust/etc have it.

Yes, but then again, Rust, Julia, and Lisp are _high_ standards of metaprogramming. Python's approach to metaprogramming, like most of its other parts, is simple and concise. For simple tasks that are repeated often, Python sometimes provides easy ways to abstract the how and show only the what. While Python does have metaclasses — which, unfortunately or otherwise, I've never needed to write — I've sometimes found myself reaching for simpler tools like decorators, magic dunder methods, even iterators and generators. And, of course, there's always the ability to generate Python AST, or have something generate it for you.

Examples:

1\. the new-in-3.7 feature: dataclasses[0];

2\. the library that inspired it: attrs[1];

3\. the (de)serialisation library with a strikingly simple design: marshmallow[2];

4\. the leaky-abstraction of SQL that makes it somewhat composable: sqlalchemy[3];

5\. Google's python bindings for Protocol Buffers[4]; and, of course

6\. the lisp-in-Python: Hy[5];

\----

[0]: [https://www.python.org/dev/peps/pep-0557/](https://www.python.org/dev/peps/pep-0557/)

[1]: [http://www.attrs.org/](http://www.attrs.org/)

[2]: [https://marshmallow.readthedocs.io/en/3.0/_modules/marshmall...](https://marshmallow.readthedocs.io/en/3.0/_modules/marshmallow/schema.html#Schema)

[3]: [https://docs.sqlalchemy.org/en/13/orm/extensions/declarative...](https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/api.html)

[4]: [https://developers.google.com/protocol- buffers/docs/pythontu...](https://developers.google.com/protocol- buffers/docs/pythontutorial?csw=1#the-protocol-buffer-api)

[5]: [http://docs.hylang.org/en/stable/language/internals.html](http://docs.hylang.org/en/stable/language/internals.html)

</comment></comment></comment><comment><USER23> You can do some nice things in Lua [1], but the one I'm most interested in at the moment is probably Terra [2]. Its concept is that it's a language like C, but uses Lua as a sort of preprocessor Language, so you can use complex macros, templates, etc. There's even a java-like class-system, if I remember correctly.

[1] [https://github.com/darkwiiplayer/moonxml](https://github.com/darkwiiplayer/moonxml)

[2] [http://terralang.org/](http://terralang.org/)

</comment><comment><USER24> It depends a bit what you mean, but Groovy is quite interesting from a meta- programming point of view. Much of the syntax can be completely reprogrammed at run time through an object's 'metaClass', and you can write AST transformations that deeply rearrange the code at compile time.

Although it is certainly not as pure as the Lisp-like languages, it can be an incredibly fast and easy way to create a DSL to solve your problems in a very idiomatic way.

<comment><AUTHOR> I never thought of Groovy for metaprogramming but it's used to make DSLs so it makes sense. My only run in has been with Gradle which is so slow and/or a memory hog so didn't leave a good impression on me.

<comment><USER24> It's unfortunate that most people meet Groovy through Gradle. It's a really confusing and unpleasant experience and I think is responsible for a lot of the bad rap that Groovy gets. It's actually way better than Gradle makes it look!

</comment></comment></comment><comment><USER25> When I hear metaprogramming my brain just goes "Lisp". So I am a bit surprised to not see CL in your list. :)

</comment><comment><USER26> > Ruby is notably absent as I use it and am looking for something > better/different

what issues do you have with ruby? it's the de-facto standard for meta- programming

I often use things like `define_method`, `constants`, `method_missing`, etc in select places.

last fun thing I did was adding `let` and `it` to rails's tests.

<comment><AUTHOR> Every large, long -lived Ruby app I've worked on eventually needs more performance, better concurrency, and would benefit from static typing. It's great that each company got to the point of 'a problem you want to have'. I'm just looking for the best of both worlds: good to start, good to scale.

</comment></comment><comment><USER8> Nim. I use it a lot and the case insensitivity has never been a problem and it's often useful.

</comment><comment><USER27> It's worth to mention Factor programming language - [https://factorcode.org/](https://factorcode.org/)

[https://en.wikipedia.org/wiki/Factor_(programming_language)](https://en.wikipedia.org/wiki/Factor_\(programming_language\))

[https://github.com/factor/factor/](https://github.com/factor/factor/)

[http://andreaferretti.github.io/factor- tutorial/](http://andreaferretti.github.io/factor-tutorial/) \- Good introduction and Metaprogramming section.

</comment><comment><USER20> Haskell with TemplateHaskell is definitely worth giving a shot.

You can find good examples of its use by searching for reverse dependencies of template-haskell package[0].

One of these is my tiny experiment that features program synthesis by given type[1]. Recently I added an ability to handle sum types and product types (a.k.a. Either and tuples) -- see 'rewrite' branch.

[0] [https://packdeps.haskellers.com/reverse/template- haskell](https://packdeps.haskellers.com/reverse/template-haskell)

[1] [https://github.com/8084/haskell-holes- th](https://github.com/8084/haskell-holes-th)

<comment><USER28> Template Haskell is nice, but doesn't allow higher meta-programming, eg. meta- meta-programmming.

</comment></comment><comment><USER29> Definitely take a look at Forth: each word in the language can have separate compile-time and run-time behavior, and the compiler is simple enough that it's easy to extend it with your own compile-time words. [https://www.forth.com/starting-forth/11-forth-compiler- defin...](https://www.forth.com/starting-forth/11-forth-compiler-defining- words/) is a good overview.

</comment><comment><USER30> I would love to try Rebol (or Red) for some meaningful task.

</comment><comment><USER31> I am surprised nobody has mentioned C++

I know its hated passionately, but I learned about metaprogramming from it.

Also, imo, Racket is the best language for metaprogramming.

</comment><comment><USER32> OCaml has some metaprogramming facilities through the ppx system. It wouldn't be my first choice for metaprogramming, but it's there if you just want to know the full map of how different languages do it. I have found the ppx system a little bit underdocumented and challenging to use, but it can be very powerful. OCaml fits all of your other requirements.

<comment><AUTHOR> I've run into OCaml before but haven't taken the time to get into it. If I were to, I think I might look at F# but I have no idea if the metaprogramming is the same.

</comment></comment><comment><USER33> I like Elixir overall as a language and love it as a platform. That said, the metaprogramming feels passable for me. I would much prefer to write and read things in a Lisp but it works fine in Elixir

</comment><comment><USER34> I'm interested in trying Rascal, but it's meta-meta: [https://www.rascal- mpl.org/](https://www.rascal-mpl.org/).

</comment><comment><USER35> I am surprised Prolog did not make the list. I have used SWI Prolog on a profession project in the past.

Its quite powerful for certain types of problem domains like expert systems.

</comment><comment><USER36> Elixir all the way. :)

</comment><comment><USER37> Using github and gradle plugins I metaprogramm java. Can't recommend it through. It's extremely error prone and hard to reason about.

</comment><comment><USER28> Scala has the most advanced meta-programming facilities. And Scala's MP is widely used.

If you are interested in research-prototype languages, [https://convergepl.org/](https://convergepl.org/) is interesting. But Converge is no longer under active development.

<comment><USER14> Which features make it the most advanced?

<comment><USER28> Compile-time MP and run-time MP. Support for AST and quasi-quote MP, and support for LMS (= lightweight modular staging).

<comment><USER12> You haven't seen any Lisp yet, have you?

Compile and run-time MP and quasiquoting are basic features; I'd argue that a language without these doesn't even qualify as "supporting metaprogramming".

<comment><USER28> Sure, I'm intimately familiar with the Lisp family of languages. It lacks features that I prefer in a modern meta-programming language, in particular an expressive typing system with type inference, and a platform / eco-system like the JVM.

<comment><USER12> I stand corrected, and I agree with you here on both accounts - I'd love if CL in particular had a better type system standardized (current one sits in a kind of uncanny valley) and a better ecosystem. CL implementations are solid, but the mindshare unfortunately isn't there anymore.

</comment></comment></comment></comment></comment></comment><comment><USER38> JavaScript. It is awesome.

<comment><USER30> Not sure if it's sarcasm. True, JavaScript is fun to meta-program. But it's hell to debug.

<comment><USER38> You never know about sarcasm. But I just wanted to give a shoutout to good old JavaScript as it lends itself beautifully to metaprogramming and it is actually widely used unlike some of the more academic languages mentioned here.

</comment></comment></comment><comment><USER39> Something better than ruby? No such thing ;-)</comment>


Ask HN: Did you (attempt to) switch from Backbone to Vue.js? - <AUTHOR> Most of the comparisons I've found between Backbone and Vue.js are high-level, without insights from practical long-term usage on both, eg https://www.slant.co/versus/32/11378/~backbone_vs_vue-js
We're happily using Backbone, but considering Vue in order not to be left behind with maintained frameworks/tooling.
What insights could you share from switching (attempts) ?
What do you use instead of models/collections?
Considering productivity on your project, which framework between the two do you prefer, and why?
Thanks! <comment><USER2> Hi there! At Snipcart we are currently doing exactly that. We are progressively migrating our Saas from Backbone to Vue.js, and just wrote a blog post that can answer all of your questions: [https://snipcart.com/blog/progressive-migration-backbone- vue...](https://snipcart.com/blog/progressive-migration-backbone-vuejs- refactoring)

For us, it has been a really positive experience so far and we LOVE working with Vue.js. The transition between the two frameworks has been really smooth so far, and I'm sure it can benefit your project too ;)</comment>


Vocabulary as a Meta Mental Model - <AUTHOR> https://neilkakkar.com/vocabulary-mental-model.html <comment><USER2> Two quick unrelated thoughts on this.

\- I noticed one day that I was absent mindedly staring into the refrigerator. This has happened before of course, many times actually, but at the time I was trying to learn a bit about mindfulness and I thought this was an opportunity to try to decompose how I got there. Working my way backwards, I realized that I had experienced this little pang of a sensation that I 'chunked' as 'hunger'. But then, instead of responding to the sensation and all its subtlety, I responded to the word and went to the refrigerator. It then occurred to me that I probably do that a lot and don't even realize it. The subjective experience is full of these incredibly rich and nuanced sensations, and yet I compartmentalize them with my relatively coarse and dull vocabulary, and then act on that chunk.

I'd be curious if people that have a native tongue that is more expressive in a specific domain tends to cause them to operate differently within it.

\- Second thought is that language, or specifically the ability for one mind to inject an idea into another without the second having to experience it _AND_ the ability for the second mind to retain that information almost as if they have experienced it, is an evolutionary shortcut that our biological evolution has enabled. Essentially an evolution of evolution. (I then see technology as the third type of evolution, in which our language allows us to develop capabilities that exceed our biology, and ultimately AI will likely be the fourth, in which technology enables a mind that exceeds our own).

<comment><AUTHOR> For the first one: Have you heard of the Piraha Tribe and their counting system?

[http://web.archive.org/web/20040825185826/http://paulgraham....](http://web.archive.org/web/20040825185826/http://paulgraham.com/piraha.html)

<comment><USER2> OK so that seems to be 100% applicable to what I'm thinking. Very cool, thank you for sharing the link!

<comment><AUTHOR> Cheers :)

</comment></comment></comment></comment><comment><USER3> Another way to say that "the limits of my language mean the limits of my world" (Wittgenstein). It is so true on many levels.

</comment><comment><USER4> Great post -- re: exploring new vocabularies, Ted Gioia touched on this in regards to cultivating music taste which I found helpful.

"So what you need to do, if you really want to broaden your horizons as a listener, is to get exposed to new things. Pick somebody. [...] Find somebody who you trust as a guide, and let them open your ears to these new experiences."

So what's the best way to find new guides?

Ref: [https://medium.com/conversations-with-tyler/tyler-cowen- ted-...](https://medium.com/conversations-with-tyler/tyler-cowen-ted-gioia- music-history-jazz-9a042d13b268)

<comment><AUTHOR> Thanks!

I think there's a lot of person matching involved here. Hard to find a one- fits-all guide.

Luckily, there's lots of people publishing on the internet.

But how do you search through them? I don't know. That's something text based search hasn't solved yet.

</comment></comment><comment><USER5> A lot of this post seems to be loosely plagiarized from the "Eat Dirt" chapter of the CFAR handbook: [https://drive.google.com/file/d/1UZYBtOJ3QZ7FTI_4eKjVzBSNUqC...](https://drive.google.com/file/d/1UZYBtOJ3QZ7FTI_4eKjVzBSNUqC_Uba3/view)

Not good!

Edit: he does link to it in the post. But if you read his post then read the CFAR "Eat Dirt" chapter it'll leave you unsettled.

<comment><AUTHOR> Hey Nathan, sorry you feel that way.

The third paragraph has a footnote stating that the 3 para above were "heavily inspired" by the "Eat Dirt" chapter. I'm assuming you didn't see this first footnote.

And a bit later, I do link to the manual as well (which is what you saw, I guess)

Not my intention to copy Duncan's work. A big red disclaimer hurts readability, and not attributing the source would indeed be plagiarism. I think I struck the right balance.

I use that example because I love how it shows the concept I was trying to explain pretty well. It's not the main point of the post.

</comment></comment><comment><USER6> This is true not only of words but also of artistic 'qualia'. More entertainment means more availability of such 'movements' or pallette.

Of course, if you have proper words to identify such things, it's even better.

<comment><USER7> Very true. From those classic movies I've watched frequently my brain has gleaned a collection of images, phrases and situations which readily pop into mind. They're not all fully-fledged parables: they're mostly quick analogies which help me to grasp and sometimes to communicate what's going on in the real world.

<comment><USER6> Yeah referencing/re-enacting movies is such a great way to transfer implicit knowledge

<comment><AUTHOR> Same for fiction. I used to read a lot as a kid, but it tapered off as I switched to non-fiction. 5 years later, I'm now coming back to it.

There's something about fiction that makes things click - it's the story standing in for experience :)

<comment><USER6> I can't do fiction sadly ):

I think there is something that clicks with people, and people should indulge in whatever they end up indulging in. But I am definitely jealous

</comment></comment></comment></comment></comment><comment><USER8> It seems like there's a lot in common here with the idea behind design patterns and pattern languages: giving names to "chunks" of expert knowledge in order to allow those chunks to be communicated, taught, and put in relation to other ideas.

</comment><comment><USER9> "If you want to wage war, start by attacking your enemy's language."

<comment><USER10> c.f. [https://en.wikipedia.org/wiki/Overton_window](https://en.wikipedia.org/wiki/Overton_window) [https://en.wikipedia.org/wiki/Newspeak](https://en.wikipedia.org/wiki/Newspeak)

</comment></comment><comment><USER11> I don't entirely agree with this article, but I do understand its merits.

When I was really young, around 8, I didn't have books, TV, and the internet wasn't around. I spent much of my time thinking about computers because I saw them once and was fascinated by them. One of the thoughts I had was about multi-socket computers. How did the two CPUs communicate and run in the same system.

I eventually came up with the concept of race conditions, but I had no word for this concept, but I could see it in my mind's eye. I eventually thought of different ways to work around race conditions by making certain assumptions.

Nearly 2 decades later I was in my first job when a CPU bound problem showed up and I quickly slapped together some multithreaded code that worked the first time and was not only the first time I ever wrote multithreaded code, but was also my first real world programming project. I hand rolled a lockless queue. It was messy, it had some redundancies, but what I wrote was based on the concepts that I thought about when I was 8 years old.

It was at this point that I decided to look into my concerns about "data access ordering multithreading" and learned about the term "race conditions".

Of course learning this term opened up my mind, furthering my understanding of the concept both in communications and in more concrete concepts than the abstract blurs in my mind.

I actually deal with unknown unknowns all of the time. When I envision a problem in my head, I tend to focus on guarantees. I enumerate assumptions that my designs require, and if I can't prove to myself that I can guarantee that assumption, then it is now a known unknown.

I have a track record at my work of finding corner cases. I do this entirely by my "guarantee" approach. If I can't guarantee something, can I think of a proof of concept that could cause the assumption to be violated. This also works well for multi-threading. I don't need to worry about thinking about a problem in a serial fashion, I only have to think about "in order for this to work, what assumptions do I have to make and can I prove those assumptions."

It's quite often that I learn about new concepts by describing an assumption that I can't guarantee, and I will find an existing answer or solution.

I've reflected on my obsession with correctness. I've found my issue is my ADD. If I can't prove something can't happen, my mind will wander uncontrollably thinking of what might go wrong. In order to cull these distracting rabbit trail thoughts, I have to prove to myself that no issue can occur.

This approach works well enough that I've had large complex mulithreaded projects where the process deadlocked several times. When the problem got priority and my team lead asked me if I had any ideas, I told him "I read thought my code, it must be .Net framework". He thought I was joking at first. Three times in a row, non-reproducible deadlocks that rarely occurred, I diagnosed as "not my code", and 3 times I was correct.

Not only does this process seem to work well for me, but I've also used it with other's who were stuck pair programming a bug that they couldn't figure out. I can generally just start asking questions and eventually the programmers figure it out on their own.

I think if more people focused on guarantees, there would be fewer issues.

Where was I? Oh yeah. If you can't guarantee something and you can't figure out why, then there must exist an unknown. You don't need to know what this is in order to know it exists. Having a word for it helps tremendously, but it is not required in order to reason about it.

<comment><AUTHOR> I enjoyed reading this, thanks!

.. I don't think you're disagreeing with me at all.

I agree with this: "You don't need to know what this is in order to know it exists. Having a word for it helps tremendously, but it is not required in order to reason about it."

</comment></comment><comment><USER6> i think eating ice is actually a pretty ridiculous but fun and very inventive way to 'solve the problem'</comment>


I'm a digital marketer. I work with coders. Lots. What stuff should I learn? - <AUTHOR>

I work in digital marketing, often involved in the production of "Web 2.0" buzzword compliant mashups, viral games, microsite etc for entertainment brands. I consider myself very technically literate, and like to think I'm generally recognised as such by the programmers I work with.
As I work very closely though - sometimes even in a way that could be construed as "managing" them - I want to learn as much as I can about what they do so we can speak the same language, if you'll pardon the pun.
So what stuff should I read about? I'm finding the Joel on Software articles very enlightening (especially the recent one about program managers, who seem to have lots of parallels with my work), as well as Paul Graham (from a less tech POV). I think I'm gonna try to learn about the inner workings of a LAMP stack. What programming language should I dip my toe in the water of?
Any thoughts? <comment><USER2> uh, php?

<comment><AUTHOR> May sound like a silly reply, but I genuinely wouldn't have known whether best to spend my time on this or Java etc.

<comment><USER2> if your intent is to learn the inner workings of the LAMP stack, there's no reason not go after php first.

<comment><AUTHOR> Sure, but LAMP aside, is there something that you think would be more useful for me to read a "Dummies guide to..." or similar?

<comment><USER2> for your purposes, imo, php will probably not only suffice, but will be easiest.</comment></comment></comment></comment></comment>


Test Driving the Tata Nano - <AUTHOR> http://wheels.blogs.nytimes.com/2009/03/25/tata-nano-test-drive/?hp <comment><USER2> people in those comments are missing the point of the car, they are comparing this thing to other cars, instead they should compare it to the motorcycles that populate India's roadways.

Is it safer than a civic? Obviously not. But its leaps and bounds safer, than having a family with kids riding around on a motorcycle

<comment><USER3> Yes, if these become affordable in countries such as the Philippines (where emissions choke the air and it's not uncommon to see 3+ people sharing a motorbike or trike), I can imagine it would improve quality of life to a noticeable degree.

<comment><USER4> Could you elaborate on how moving from (motor)bikes into cars would improve quality of life (if air quality is a component of that) ? Don't cars emit more exhaust gas?

<comment><USER5> A lot of the motorbikes used in countries like India and the Philippines are two-stroke engines, which pollute far more than the more modern four-stroke engine used in the Nano and most other cars and newer motorcycles.

<comment><USER4> Ok, this makes sense. However, one also needs to factor in the pollution/ energy-usage in manufacturing a new car to the total product lifetime cost.

</comment></comment></comment></comment></comment><comment><USER6> For those interested in a peek at the Nano this is an interesting set of photos:

[http://www.time.com/time/photogallery/0,29307,1887087,00.htm...](http://www.time.com/time/photogallery/0,29307,1887087,00.html)

</comment><comment><USER7> Woohooo...great review. These cars are now built at a factory near my hometown (Ahmedabad). Believe it or not, that's one of the main things keeping the real estate prices there up when they are plummeting across the rest of the country (and the world).

<comment><USER8> your claim about real estate prices is surely in jest.

<comment><USER8> WTF, why am I getting moderated down?

To be clear: I was referring to the "fact" that real estate prices are not being affected in Ahmedabad due to a car plant being built in a location about 50km away from the city. That is simply not true -- my parents are in the market to sell their house in Ahmedabad, and the price is nowhere close to what they would have gotten a year ago.

<comment><USER7> The fact that the Gujarat govt. managed to convince Tata to bring the Nano plant to Gujarat is just the most noticeable example of how, for all the chief minister's flaws, he has done well at attracting commerce to the state. And that is what has kept the prices there up (relatively speaking).

The city infrastructure development [3] has been happening at an incredible pace (for India anyway). This (along with Ahmedabad's property prices being low compared to Bangalore or Mumbai) has attracted a bunch of companies to move there. For example just last week Vodafone moved their service hub to Ahmedabad and relocated 1500 employees there [2].

In the area near the nano plant (which is less than 15 KMs from the posh residential areas in West Ahmedabad like Satellite Rd) prices have definitely gone up very very substantially [1] because of the plant itself and how quickly builders have latched onto the opportunity to develop the area: for e.g. the Gulmohar greens golf club is coming up pretty close to the place and Goyal just launched another development there. I know because my parents have owned land in that area for almost 10 years that was worth almost nothing and is now suddenly worth a lot!

Within Ahmedabad proper, in the western areas prices haven't gone down anywhere close to they have in Bangalore, for example and in some cases have gone up. I don't know what kind of house your parents are looking to sell or where (the eastern end - the old city is not very attractive to outsiders who move to the city). Also, an incredible amount of new/modern construction has happened in the past few years.

Also, FWIW, I did not mod you down.

1: [http://www.ndtv.com/convergence/ndtv/story.aspx?id=NEWEN2008...](http://www.ndtv.com/convergence/ndtv/story.aspx?id=NEWEN20080069466)

2: [http://www.business-standard.com/india/news/ahmedabad-set- to...](http://www.business-standard.com/india/news/ahmedabad-set-to-become- vodafones-services-hub/352206/)

3: <http://en.wikipedia.org/wiki/Ahmedabad_BRTS>

Edit: FWIW here's an article about a builder that cut prices by 30% (and 40% of his houses got booked on the first day). Note though that his project is in Paldi which is still central Ahd. [http://www.moneycontrol.com/india/news/business/ganesh- housi...](http://www.moneycontrol.com/india/news/business/ganesh-housing-cuts- prices-by-30-gets-good-response/390282)

</comment></comment></comment></comment><comment><USER9> is it just me or did any of you feel that the reporting on this a bit mediocre ... seriously ... did you ?!

<comment><USER10> Yeah, I did. For a car review, I was expecting, obviously unrealistically, a review of a car.</comment></comment>


Brilliant.org doesn't allow you to delete accounts - <AUTHOR> https://brilliant.org/discussions/thread/delete-brilliant-account/ <comment><USER2> Hi – it has been possible to delete your Brilliant account for several years. You can do so here: [https://brilliant.org/account/social/connections/](https://brilliant.org/account/social/connections/)

</comment><comment><USER3> Having to jump through hoops to delete an account is one of my pet peeves. It shouldn't be difficult. It _definitely_ shouldn't be impossible.</comment>