Items tagged with: been
HN Discussion: https://news.ycombinator.com/item?id=19792192
Posted by robertwiblin (karma: 1873)
Post stats: Points: 130 - Comments: 66 - 2019-04-30T21:34:53Z
#HackerNews #advice #been #career #given #was #when #wish #young
HackerNewsBot debug: Calculated post rank: 108 - Loop: 89 - Rank min: 100 - Author rank: 82
Some common interview types are algorithm problems, pair programming exercises, take-home assignments, etc.
Has there been any research into the predictive power of such assessments? Is there any evidence that a particular type of question correlates well with job success?
HN Discussion: https://news.ycombinator.com/item?id=19747821
Posted by CSMastermind (karma: 476)
Post stats: Points: 160 - Comments: 104 - 2019-04-25T13:28:24Z
#HackerNews #academic #any #ask #been #has #interviewing #into #research #software #there
HackerNewsBot debug: Calculated post rank: 141 - Loop: 425 - Rank min: 100 - Author rank: 44
HN Discussion: https://news.ycombinator.com/item?id=19716179
Posted by PandawanFr (karma: 66)
Post stats: Points: 135 - Comments: 50 - 2019-04-22T03:13:48Z
#HackerNews #announces #been #have #interface #jvm #mozilla #should #system #webassembly #what
HackerNewsBot debug: Calculated post rank: 106 - Loop: 176 - Rank min: 100 - Author rank: 660
HN Discussion: https://news.ycombinator.com/item?id=19695114
Posted by muterad_murilax (karma: 576)
Post stats: Points: 150 - Comments: 45 - 2019-04-18T21:51:48Z
#HackerNews #been #bros #commodore #for #has #mario #released #super #the
HackerNewsBot debug: Calculated post rank: 115 - Loop: 109 - Rank min: 100 - Author rank: 53
Count Casimir Pulaski is revered as the father of American cavalry. He came to America of his own volition to fight in the War of Independence. One of the Revolution’s great heroes, he was a very…
Article word count: 1813
HN Discussion: https://news.ycombinator.com/item?id=19592911
Posted by uxhacker (karma: 917)
Post stats: Points: 139 - Comments: 39 - 2019-04-06T20:43:11Z
#HackerNews #been #female #fought #general #have #may #polish #washington #who #with
April 5, 2019
Chadds Ford, Pennsylvania, 1777. At the end of a daylong battle, George Washington’s right flankSomewhere on the battlefield is Private Johan Wilhelm Seckel, 40, the first of his family born in America — and ancestor to ASU Now reporter Scott Seckel — serving with the Germantown Battalion Continental Troops in Capt. George Hubleyʼs Company. has completely collapsed. British troops are closing in.
A dashing Polish cavalry officer reports to Washington’s bodyguard that they are in danger of being surrounded. Washington orders Casimir Pulaski to gather as many men as he can. Count Pulaski discovers an escape route past the British advance, then wheels and charges enemy lines. The redcoats are astounded to be attacked by what they thought was a fleeing rabble. Washington escapes.
Pulaski is revered as the father of American cavalry. He came to America of his own volition to fight in the War of Independence. One of the Revolution’s great heroes, he was a loner. A very private person, he was extremely driven and difficult with people. (It’s one reason Washington simply ended up giving Pulaski his own legion, most of whom were Europeans.) Both superiors and subordinates considered him imperious. He was brave in battle to the point of recklessness. Detractors called him a loose cannon. Short and thin, pacing and speaking quickly, he lacked interest in women or drinking.
And he harbored a secret that lay unknown for more than 200 years, until an Arizona State University bioarchaeologist and a colleague discovered the truth.
Monday night a documentary unveiling the mystery airs on the Smithsonian Channel. But it doesn’t tell the whole story ...
In the late 1990s, Charles Merbs and his wife visited their daughter in Savannah, Georgia. A forensic anthropologist at Arizona State University’s now School of Human Evolution and Social Change, Merbs’ expertise lies in skeletal remains, especially reconstructing behavior from skeletons.
The family toured the historic city, including a visit to Casimir Pulaski’s monument. Merbs is Polish on his mother’s side. His mother always told him they were related to the Pulaskis and should be proud of that. (“It’s been impossible to prove,” he said. “The records just aren’t there.”)
Pulaski was mortally wounded during the Battle of Savannah. (Like most Revolutionary War battles, the American side lost.) He was hit in the groin by grapeshot. Grapeshot was pingpong-size metal balls collected in a canvas bag and fired from a cannon. It acted like shotgun pellets and was used as an antipersonnel round.
He was taken aboard an American ship, where he died a few days later.
“Then the story gets murky as to what happens to his body,” Merbs, now retired, said. “One story is that he was buried at sea on the way back to Charleston. The other story is that in the dead of night his body was taken ashore and buried by torchlight on a plantation. It was done secretly. The plantation owners knew about it and maintained the burial.”
In 1854, it was decided to build a monument to Pulaski. The bones were exhumed and reburied beneath the monument in a metal box.
A week after their visit to Savannah, Merbs’ daughter called. The monument was being taken down. Iron spacers between the stones were rusting. The whole thing was in danger of collapsing.
Merbs tracked down the physical anthropologist working with the bones — Karen Burns, of the University of Georgia — and offered to help. She accepted. “That’s how I got involved,” he said.
Before Merbs was allowed to examine the remains, however, he had to sign a document swearing him to secrecy.
“Basically I couldn’t say anything about what I found until the final report came out,” he said. “Dr. Burns said to me before I went in, ‘Go in and don’t come out screaming.’ She said study it very carefully and thoroughly and then let’s sit down and discuss it. I went in and immediately saw what she was talking about.
“The skeleton is about as female as can be.”
The next — and obvious — question: Was it Pulaski or someone else who had been stuck in the tomb because a skeleton was needed?
Everything seemed to match. The stature, age and general body build were all correct for Pulaski. There’s one contemporary portrait of Pulaski painted from life. There’s a black smudge below his left eye. “On the skull there is a bone defect right exactly there,” Merbs said.
Pulaski injured his right hand in a battle in Russia. “Sure enough; the fourth and fifth metacarpals in the right hand had fractured and had healed rather poorly, exactly where they were supposed to be,” he said.
Merbs has done forensic work with the Maricopa County Medical Examiner’s Office, including working with the skeletons of equestrians. Riding a lot shows up in skeletons. Horse rider’s syndrome is a whole series of issues that affect bones, primarily in the pelvis.
“That skeleton definitely showed signs of horseback riding,” Merbs said, including a new one he added to the lexicon of horse rider’s syndrome: the skeleton’s shoulder showed signs of holding arms high, as would be done holding and pulling back on reins or raising a heavy saber. (Cavalrymen killed enemies by swinging their swords directly down on the crown of their heads. Ever notice the tall bearskin caps worn by the guards at Buckingham Palace? They were designed to protect from exactly that blow.)
The forehead showed an injury consistent with a wound from a blade, although Merbs couldn’t be sure.
ASU Charles Merbs examines grapeshot which killed Pulaski
Charles Merbs examines the grapeshot that killed Casimir Pulaski. Photo courtesy of Charles Merbs
“Everything matched, except for the sex,” he said. “The sex was as clearly female as anything could be.”
Something that could be reasonably suspected of a woman in her 30s would be evidence of childbirth. “There were no parturition scars on this pelvis,” Merbs said.
The next step was a positive DNA identification. When the skeleton was exhumed in the 1850s, most of its teeth were missing, except for a few molars.
“Those teeth had been taken out when the skeleton was excavated,” he said.
This was evidence of a macabre but common custom of the time. During the Napoleonic Wars, when millions died in massive clashes, tooth hunters scavenged battlefields. Dead soldiers’ teeth were in great demand for making dentures. (In 1814 an Englishman recorded a meeting with a tooth hunter. When asked how he obtained them, he replied, “Oh sir, only let there be a battle, and there’ll be no want of teeth. I’ll draw them as fast as the men are knocked down.”) After the Battle of Waterloo in 1815, the market became so flooded they became known as Waterloo teeth. Because they came from healthy young men, they were advertised as such.
“It’s very likely around the time the people of Savannah were wearing Pulaski’s teeth,” Merbs said.
They had enough of Pulaski’s DNA to turn the investigation in that direction. But who could they compare it to? Burns and Merbs looked at Pulaski’s genealogy and found out he had two brothers and six sisters. Mitochondrial DNA is passed through women. Of the six sisters, only one had a child. Luckily it was a daughter. She had another daughter. Pulaski and his grandniece would share the same mitochondrial DNA.
Her grave was excavated and samples returned, but nothing usable turned up. “That was 20 years ago,” Merbs said.
Recently three young researchers, one of whom studied archaeology at ASU, decided to look into the mystery. DNA work had come quite a long way in 20 years. Something new might turn up. They got a lab to give them an analysis estimate, which turned out to be $18,000. They contacted the Smithsonian Institute, which funded the research last summer.
The results came back positive. The mitochondrial DNA was identical in both Pulaski and his grandniece.
“Now we know that the bones in the monument were indeed those of Pulaski, but we have the problem of the fact that they are female,” Merbs said. “Here’s the thing: if you go back and look at his life, what we know about it, there are interesting little clues along the way.”
Aristocratic Polish Catholic families in the 18th century traditionally held public baptisms in church.
“In his case it said he was suffering from some debilitatus, and they held off on the baptism and privately baptized him at home,” he said.
Suddenly, Pulaski’s personality traits — aloof, driven, private, brazen in battle — fell into line.
“We think the problem goes back to his birth and basically deciding whether he was a boy or a girl,” Merbs said.
Merbs’ oldest daughter is a professor at Johns Hopkins University School of Medicine. She put him in touch with a specialist in sex and gender issues.
“With scientists, sex and gender are two totally different things,” Merbs said. “Sex is biological, and gender is social and behavioral. Ordinarily the two go together, but you can have a conflict between the two. That’s what I think we were dealing with here.”
Merbs explained to the professor he thought they were dealing with a sex-gender problem. The professor took out a stack of photographs of bare babies and told him and his wife to put them in one of two piles — girls and boys — which they did.
“One hundred percent,” the professor said. “You are one hundred percent wrong. You were wrong on every single one.”
Merbs thinks the Pulaski family, faced with a similar situation, had to make a decision.
So Pulaski was raised as a man, in a military family. It was without question he would become an officer, and so he did.
“I don’t think, at any time in his life, did he think he was a woman,” Merbs said. “I think he just thought he was a man, and something was wrong. He had some kind of defect or something. Back in those days they just didn’t know.”
Did that perhaps play a part in Pulaski’s aggression on the battlefield?
“Oh, I think that’s a big part of it,” Merbs said. “I think his whole personality indicates he was driven, and I think that’s the reason why.”
Merbs kept his secret, until now.
“This was definitely not what the good folks of Savannah wanted us to find, and the whole thing became a political hot potato,” he said. “They wanted us to verify that the remains were indeed those of a male Pulaski, which would then be interred at Arlington.”
Without conclusive DNA evidence, it was considered that Burns and Merbsʼ observations were opinion, not fact. The bones were reburied next to the monument.
Burns died several years ago. Merbs has a small credit in the documentary. Both Merbs and Burns names appear in the Pulaski Exhibit in Savannah. Merbs’ contributions are clearly spelled out in an article about to be submitted to the Journal of Forensic Anthropology.
“America’s Hidden Stories: The General Was Female?” will air on the Smithsonian Channel at 8 and 11 p.m. Monday, April 8, and at 1 p.m. Tuesday, April 9.
Top image courtesy of the Library of Congress
HackerNewsBot debug: Calculated post rank: 105 - Loop: 152 - Rank min: 100 - Author rank: 83
Like 8 million other Americans, I work from home. There are some nice things about doing so, sure, but before you go gushing over my...
Article word count: 2344
HN Discussion: https://news.ycombinator.com/item?id=19591227
Posted by johnshades (karma: 927)
Post stats: Points: 139 - Comments: 99 - 2019-04-06T15:34:45Z
#HackerNews #and #been #day #for #ive #let #more #never #productive #stranger #watch #work
Like 8 million other Americans, I work from home. There are some nice things about doing so, sure, but before you go gushing over my 14-foot commute from my bed to my desk, let me assure you of one cold, hard fact: getting shit done without anyone but your staggeringly beautiful cat to hold you accountable is hard.
Rampant procrastination, on the other hand, is easy. Without the social pressure to be productive enforced in more traditional workplaces, it’s all too easy to succumb to tempting diversions like needlessly cooking a four-course meal, putting on makeup in an offensively experimental way for nobody and spending hours Googling life’s most important question: “Mike Myers: where is he now?” (The answer: Also putting on a lot of makeup in an offensively experimental way.)
Because of this, I often find myself wishing I had a regular office job. That way, I’d at least be part of some sort of team; a team whose judgment I’d be so pathologically fearful of that I’d rush to get the job done with sparkling focus and productivity in a time frame that would make my boss weep with pride. I’m not even being delusional with that fantasy — studies show people are more productive when they work in teams, and there are several well-respected productivity hacks like “body doubling” that use the social pressure wrought from the looming presence of others to prod you into focus.
So when a friend told me about Focusmate — a free virtual co-working service that pairs you with a complete stranger for 50 minutes of silent, mutual labor over a webcam — let’s just say my interest piqued hard.
Virtual co-working is fast becoming a trend among those who travel frequently, work from home or want to feel like they’re immersed in a 3-D office. However, while a few other services like Arena and My Work Hive offer platforms for video co-working, Focusmate is the only one that digs deep into the science and psychology of accountability to create a virtual environment that’s designed expressly to enhance productivity. Because of this, they’ve grown quickly since their inception in 2017 — roughly 12,000 people use their services at an average of about 21,000 times per month.
As I clicked around the Focusmate website, it became abundantly clear to me that their instructions for co-working are ultra specific (almost comically so). They have the whole thing timed to a T. Here’s how it works:
1. Sign up for the time slot you want to work in and get paired with another Focusmate who is just as “committed to blasting excuses and getting important work done” as you are.
2. Make a short list of tasks you can realistically complete in 50 minutes.
3. Spend the first 60 seconds of your session announcing these tasks to your partner and listening to theirs. Then, minimize the window they’re in and drag it down into the corner of your screen so they’re always there, and always watching.
4. Start working in silence, basking in the “power of human accountability.” No chit-chat.
5. When your 50 minutes are up, check in with your partner, talk about what you’ve accomplished and then it’s bye-bye for now.
The whole thing seemed interesting, but I had some reservations. Wouldn’t it be awkward having someone else watch you work? What was with the precision instructions? And most importantly, was it all just a front for a random webcam chat site like Chatroulette?
As I pondered these questions, I noticed a claim Focusmate made on their homepage: “Focusmate virtual co-working harnesses pillars of psychology proven to boost productivity 200-300 percent.” Two hundred to three hundred percent? I gawked, suddenly hopeful this weird co-working website could become my surrogate office. The only question that remained was, “Where do I sign?”
In Which I Become Limitless
My first Focusmate session is with Steve M., a jolly man in his 60s from Colorado who tells me he plans to use his 50 minutes to take an online class in “joyful productivity.” He’s a dedicated Focusmate champion — he’s done about 550 of these sessions since he signed up in August and says it’s totally changed the way he works. “I do a lot of financial planning, and this gets me up and keeps me focused everyday,” he tells me. “The accountability and the connection makes all the difference.”
I’ll be the judge of that, I think to myself, still doubtful his mere presence will be enough to transform me from scatterbrained procrastinator to laser-focused workhorse.
When we’re done exchanging plans and pleasantries, we wish each other luck and minimize our screens so that we can see each other while we’re working. I watch him intently for a second while he settles in just so he knows I mean business, then attack my own to-do list. Every now and again, I glance at him just to make sure he’s not staring at me or masturbating, but eventually, I realize we’re clear. For Steve and Focusmate’s other users, this webcam window is a workplace like any other. He really is there to get shit done.
Actually, I notice myself looking at him far more than he’s looking at me. I’m suddenly concerned with his approval, and I realize I want to make him happy by completing my own tasks. I like Steve — in the few minutes we spent introducing ourselves, he revealed himself to be sweet and optimistic enough that I’d even say I felt — gasp — accountable to him.
The fact that I’d told him I’d be completing a small list of very specific tasks — write and send outline; create content calendar; other whatnots — helps enormously, and I blow through four out of five items on my list with uncharacteristic focus and clarity. At the end of the session, I don’t finish everything I said I would, but my new best friend Steve reassures me that few people do. It’s not about getting to every single item on your to-do list like some sort of human supercomputer, he tells me in an intoxicatingly dad-like tone. It’s more about getting really specific about one or two tasks, then knocking them out in a realistic time frame so you can actually accomplish what you set out to.
Next, I’m paired with Roger S., an ornery, Antifa film editor and artist who shows up 15 minutes late to our session (rude) and makes it overwhelmingly clear right off the bat that he’s there to work, not make friends. “I find it obnoxious when people try to talk to you on here,” he tells me. “I don’t want to explain to them that I’m making avant-garde videos about socialism.”
“Welp!” I say. “Can’t argue that.”
I do the requisite announcement of my plan for the session — write the intro to an article I have due — and we get to work. He shares his screen with me so I can see exactly what he’s working on, something that he says boosts his accountability and helps him not get distracted. I make sure to stare at it extra intently to keep him focused, and when our session is over, I ask him what he got done. “Whole lotta shit,” he responds.
Roger wasn’t the friendliest guy on the block, but he did have a point. You don’t come to Focusmate to make friends. You go to work, and work I did. I was able to bang out my intro at lightning speed, a feat that I attribute both to my fear of being judged by a technologically savvy socialist and the fact that I’d told him exactly what I was going to use the session for. It was strange — somehow, just telling someone I was going to do something made me get it done.
After Roger, I was hooked. I spent the rest of the day “Focusmating” with every man, woman and adult child on the site who’d have me. Every time, I asked myself what the most important thing for me to do right now was, then basked in the support my partner gave me to achieve it. Sometimes, that support came in the form of them staring blankly just past my head — lookin’ at you, Max J. — but other times, like in my session with Janet E., I got a reassuring “You can do this!”
I couldn’t believe how productive it was making me — I felt like I was on some Bradley Cooper Limitless shit. And while I succumbed to a few temporary lapses in focus to check my phone and stare intently at the wall — I’m human, after all — I was far less distracted than I’ve ever been on my own. When the dust settled, I’d banged out an article roughly five hours sooner than I might have otherwise, which meant I finally had time to work out, see a friend and floss my goddamn teeth.
Afterward, I went to splash my face with water in the sink to rinse the success sweat out of my eyes, and I caught a glimpse of myself in the mirror. Who was this newly productive person, and why were her veins pulsating with adrenalized, task-completion glee?
Hardwired to Hard Work
According to Focusmate founder Taylor Jacobson, highly regimented virtual co-working is so effective because it layers various productivity hacks like social pressure, intention-setting, task specificity and accountability into a condensed setting where they’re gently enforced by the presence of other like-minded people. “Humans are social creatures, and the impact they have on behavior isn’t to be underestimated,” he explains. “We act completely differently based on our perceptions of what other people will think of us. When you commit something to somebody else and when you do that thing with them, it reinforces this very hardwired, tribal mentality of working together to survive.”
Picture it now — ancient, roving tribes of proto-people defending themselves against sabertooths and the monolith from 2001: A Space Odyssey. Without a very explicit “Grog, I’ll hold up the rear while you case the watering hole for predators with your spear” — and some communication about how well that worked out — a lot more of our great-great-great-great grandparents might have died. The more explicit communication and accountability there was about things like safety, food and resources, the more likely it is that they were able to pass on their hairy back DNA to you.
Millennia later, our brains reward us for thinking in those same survival-enhancing ways by releasing certain chemical compounds that tell you it feels good to follow through on the promises that you make. Plus, when you break down a larger task into small, manageable steps, your brain releases dopamine to give you a sense of gratification and enthusiasm. Likewise, when you accomplish that task and your success is acknowledged, serotonin swoops in to make you feel special and important, further reinforcing the productive behavior you just exhibited.
Meanwhile, the conversations you have with your Focusmate at the beginning of your session stimulates oxytocin and creates a unique bond with them based off your mutual desire to work smarter, and the endorphin rush you get from connecting with them in spite of your stressful workload gives you a sense of light-heartedness about how much shit you have to do. Altogether, these chemicals place you in what’s called a “flow state,” or a long period of intense focus and creativity in which you’re getting your best work done.
The 50-minute time window also creates a sense of immediacy, but not necessarily the stressful kind. Scheduling sessions prevents you from waiting until the last minute and relying on a surge of high-pressure adrenaline to finish a project, which a lot of research has shown to produce suboptimal work quality. Instead, multiple, metered time slots fosters a more low- to medium-grade pressure and accountability that seems to result in a better, more creative workflow.
Additionally, when working with others, the type of relationship you have with them factors into whether you’ll end up being more productive. “Focusmate relationships aren’t like other relationships you have in your life because they’re solely based around this culture of productivity and self-improvement,” Jacobson says. “It really feels like this team of people who have your back and want you to win. There’s just an attitude toward life that’s like, ‘Yeah, I want to be better. And if this will work, let’s do it.’”
For that reason, Jacobson says they’ve never had a single complaint of creepy behavior — so far, the worst offense a Focusmate user has committed was having a screen that was too dark for his partner to see him. Not quite the Chatroulette-style peep show my perverted brain had envisioned, eh?
All that said, Focusmate isn’t a panacea for all procrastination. As productivity speaker, coach and writer Melissa Gratias explains, “No amount of accountability will stop a dedicated procrastinator. If a person doesn’t have the skills or resources they need to get work done, no amount of accountability will help. Systems like Focusmate work best when the end result is something we want to achieve and we feel that we possess the actual abilities to achieve that goal.”
In the end, I didn’t want to like Focusmate. I really didn’t. In fact, I was hoping that it’d be some sort of hokey, socially awkward money suck that I could write a scathingly hilarious review of. But ladies and gentlemen, it works.
“I believe that people want to be awesome, and that they want to be the best version of themselves,” says Jacobson. “Human beings are capable of amazing things. But at the same time, it’s fucking hard to be human. Sometimes we struggle with work or getting enough done, and other times life just beats us down. However, if we get enough help in the right ways, magic can really happen.”
In my case, that magic was a few extra hours of free time, and for that, my “eccentric makeup” habit and I are eternally grateful.
HackerNewsBot debug: Calculated post rank: 125 - Loop: 149 - Rank min: 100 - Author rank: 35
This is a photo from a series of mock ups I have been working on. To style, I generally place my props down and then grab my camera or phone. I use the viewfinder to look at different crops until I find an interesting composition I like, like this one. I really like this photo because it is simple but elegant, and I tend to find myself drawn to minimalism. Hope you enjoy!
Full image: Link
#photography #CC0 #Unsplash #APIRandom #This #is #a #photo #from #a #series #of #mock #ups #I #have #been #working #on #To #style #I #generally #place #my #props #down #and #then #grab #my #camera #or #phone #I #use #the #viewfinder #to #look #at #different #crops #until #I #find #an #interesting #composition #I #like #like #this #one #I #really #like #this #photo #because #it #is #simple #but #elegant #and #I #tend #to #find #myself #drawn #to #minimalism #Hope #you #enjoy
I’ve been on holiday in Austria, Styria. In the evening iI went out of our house and saw a beautiful sunset shining on this wood, I quickly pulled out my phone and made this great picture!
Full image: Link
#photography #CC0 #Unsplash #APIRandom #Ive #been #on #holiday #in #Austria #Styria #In #the #evening #iI #went #out #of #our #house #and #saw #a #beautiful #sunset #shining #on #this #wood #I #quickly #pulled #out #my #phone #and #made #this #great #picture #Austria
I joined Stripe two years ago to make starting an Internet business easier, mostly by work on Stripe Atlas. After founding four small software companies I wanted peers to deal with less nonsense,…
Article word count: 5198
HN Discussion: https://news.ycombinator.com/item?id=19422833
Posted by troydavis (karma: 3881)
Post stats: Points: 288 - Comments: 62 - 2019-03-18T17:02:18Z
#HackerNews #been #has #like #stripe #what #working
I joined Stripe two years ago to make starting an Internet business easier, mostly by work on Stripe Atlas. After founding four small software companies I wanted peers to deal with less nonsense, either by productizing a solution to it or by writing up the things I wish I had known back in 2006 when I started. In the same spirit, here’s what I didn’t know prior to joining Stripe.
What is it you do, anyway?
Stripe’s mission is increasing the GDP of the Internet. Mine is increasing the number of successful software companies on it. That is basically the entirety of the job description. On a day-to-day basis, it’s very Choose Your Own Adventure; I’ve written code, requirements documents, strategy memos, the Stripe Atlas guides and advised Stripe employees, partners, and users.
This is… not a straightforward thing to write on a business card.
On the one hand, it gives me huge amounts of latitude to determine my day-to-day direction, and makes use of having a wide skillset. Relatively few people can solo ship an initiative which requires copywriting, React, an ETL pipeline, and a business negotiation; it turns out that is pretty valuable and decreasing the time-to-market of it (versus having to spin up a team of five people to do the same work) is useful.
At the same time, there are reasons why job descriptions exist; they help communicate one’s position to others at the company, clarify discussions about dependency graphs, give decisionmakers a handle when plans are made, etc etc. Being the singleton instance of Stripe::Atlas::Patio11 is occasionally a mixed blessing.
What else do you do?
Aside from “continuing to be my usual (hopefully) helpful self on the Internet,” I also try to contribute outside my formal role. One of the things I enjoy most about Stripe’s work culture is the notion that “nothing is Not My Job.” My first real pull request at Stripe was fixing a security bug; I was quite happy to learn that they meant what they had said in spinup about that, and that the Security team spent time getting my code up to scratch even though I looked like “random business (?) guy at the Japan office” in the company directory.
Stripe touches a massively large subset of human endeavor (basically, “just the things that involve money”). We operate at a scale which is both tiny relative to commerce on the Internet (which is, itself, nowhere near its asymptote yet) and yet already very material.
Some of my favorite projects have been ruining bad guys’ days. Our users have a lot of money flowing through us daily; every bad guy on the Internet wants it; we are in a constant footrace with all of them. There are a lot of smart people who work all day every day to frustrate them; I have been able to help a time or ten.
One example: we had an internal red-team exercise run as a contest: figure out how to steal All The Money, bonus points if one would probably get away with it. Folks across the company did security research and wrote up their findings; responsible teams then got oodles of high-quality fodder for remediation without us having actually lost a dollar. I won the contest with a few dozen submissions. We closed classes of vulnerabilities as a consequence of this effort.
The various efforts here (security, risk management, etc) benefit quite a bit from understanding what is technically possible, being able to implement it quickly, and having a good mental model for business in the small (“What’s normal behavior for an Internet-based software business?”) and the large (“Where are the weak points in global financial infrastructure, and how do we manage our exposure to them?”).
I also pitch in on (depending on the day) product strategy, writing, company culture building, organizational issues, supporting the Japan team, engineering recruiting, advising Stripe customers (often, very literally, to charge more), etc.
Why work at Stripe when you could run your own business?
Leverage means things which increase your capability to provide impact. For example, writing code is an extremely leveraged use of your time; you go off to continue living your life but your code keeps running. Some leveraged things Iʼve done are writing, writing software, making businesses which employed people other than me, and joining forces with smart people to work on the problems I seek to solve.
I ran my own businesses for a number of years, including a startup with co-founders, and greatly enjoyed the experience, but I felt like I was maxing out on the challenges available in running small software companies.
It also felt like it was constraining the absolute amount of impact I had for the world. The parts of the job which I enjoyed the most were not my actual job (writing and selling software, filing taxes in a timely fashion, etc) but helping other software entrepreneurs optimize their businesses or engineers navigate career challenges.
Kevin Kwok asked “Leverage on what?”. Fifteen years into this career thing I definitely know what my success function for the next thirty is: the product of the number of people I’ve helped in the community I serve (software people, broadly writ) times the delta in the average life that my efforts uniquely caused. If one uses e.g. income as a metric because it’s crunchy enough to keep one honest, then the most effective thing I’ve ever done (by far on an ROI-on-time basis) was writing about salary negotiation for engineers. A few hundred folks have emailed me the outcomes they attribute to that essay; this lower-bounds the impact to score of that essay at about 7,000,000 (a year).
Stripe offers a much larger platform to scalably educate and advise entrepreneurs from, and unlike my own companies, it structurally benefits directly from doing that. (There were some indirect benefits to e.g. Bingo Card Creator from me writing a few million words, but Stripe benefits directly from every artifact we produce which makes N businesses more successful at the margin. The company-level mission is “Increase the GDP of the Internet”; every time we increase the pace of business formation, the likelihood of business survival, or the rate of business growth, we win.)
A lot of my professional output over the past 12 years has been making businesses ~1% better and repeating that. This was an interesting game to play for Bingo Card Creator, but it was a lot more lucrative when doing it for consulting clients. Stripe’s scale allows some decisions to be quite leveraged indeed, both directly and at our customers’ businesses.
(An example which is just a boggling fact about the world: what’s your finger-to-a-wind guesstimate about what percentage of credit card payments fail with error code I Don’t Know Sometimes Things Fail In Credit Card Land? Hint: it’s higher than you think. Those failed payments cost conversions at the margin. When Stripe fights that number down by a basis point, that creates value across our entire portfolio, forever.)
Stripe’s network is far wider than mine, and where appropriate, I can trade on our organizational karma. This lets me do things which require collaboration from folks who I probably couldn’t just call in my personal capacity. An example: I can probably speculate my fingers off in HN comments about how to pitch an investor, but as a Stripe, I can collaborate directly with YC on optimizing the advice to their partners’ true desiderata in looking at companies.
The amount of time I’ve spent on low-value business administration has declined from about 10~20% of my week (really!) to functionally zero. A surprising portion of running my own businesses was contract negotiation, making sure vendors got paid, and wiring profits in time to make rent. We have people who specialize in all those things so I no longer have to. (I miss getting woken up because a server had… just kidding, I do not miss that at all.)
Leverage has a cost.
One cost is that organizations eventually reach a point where “Just get a bunch of smart people in the room and let them do whatever” ceases to cause spontaneous order and begins to cause chaos. We’re well past that point. This means that we need some sort of planning and managerial processes, and while I interact quirkily with them I do interact materially with them. That interaction is an overhead on personal productivity. It isn’t a small overhead.
The search for leverage also means occasionally having to pick projects other than the ones I’d want to do ceteris paribus. Stripe would probably let me just lock myself in a room and write for N years, but that would likely greatly underperform the theoretical limit on impact, so I sometimes end up doing work which is more pressing for the company but less personally fulfilling.
Do I occasionally miss doing my own thing? Yep, on at least a monthly basis, most particularly when working with entrepreneurs directly. I don’t have nearly the bandwidth to prototype anything material but I feel the siren call of it; I’m pretty sure my next adventure will be running a software business again.
I definitely feel as if being at Stripe has increased my aspirations with regards to that next business. Partly this is via exposure to a wide variety of companies in the ecosystem; entrepreneurs’ creativity never ceases to amaze me. (All else being equal, definitely choose a customer base whose creative use of what you build will surprise and delight you.) I’ve also had some time to crawl around the ducts of Internet commerce, which is a beautiful fractal described by an equation capable of summoning horrors from beyond spacetime.
Probably the single biggest change in belief I’ve had since joining is that ambition properly harnessed can be an enormously productive force in the world. This is largely informed by working with people who are extremely ambitious and yet well-grounded, both at Stripe and at our customers. There is a great, great difference between “Build a credit card processor? That’s impossible.” and “Build a credit card processor? That probably involves compliance with an enumerable set of regulations and writing a finite number of lines of code.” You want more people in your life who say the second version, probably at most margins.
Relatedly, I think I agree with Tyler Cowen that raising others’ aspirations is an effective way to increase productivity.
One way that Silicon Valley does this at scale is creating a space in the culture for being just a little bit wild-eyed when envisioning potential impact and then, this is important, actually shipping tractable engineering artifacts against the vision.
This is often poked fun of when it is deployed in the service of ends people view as unserious or when done by folks who confabulate. I have probably made jokes like that before. I think I have come to regret them, because they’re also heard by people with serious goals who are scrupulous. The jokes, and the broader culture, discourage those people from trying extraordinarily ambitious things.
If I got a do-over on e.g. running my own businesses for a decade, I’d probably skip the relatively unambitious first two (which I did just because I knew I could probably do them) and proceed directly to trying things outside of my comfort zone. (I still have an enormous love in my heart for the aesthetics of small software businesses, but given a do-over, could have done much more interesting and impactful small software businesses earlier than I actually did.)
One can simultaneously hold two thoughts at once: that unserious ends and lies are not positive, but that we probably underestimate the number of teams doing very important work in a startup-y fashion. They’re on-paper unqualified, they are often running on a shoestring, they don’t look like who Hollywood would cast as Obviously Important Person, and yet they often outperform anyway. One of the best parts of my job is getting to help folks like this build their businesses.
That’s probably the single biggest revelation to me 15 years into my career, so, throwing it back in a bottle for any of y’all who are getting started. We might not have time travel yet, but the Internet is the next best thing.
Being a senior individual contributor
Somewhat surprisingly to some folks who know me externally, I am not a manager (of Stripe Atlas or anything else). I’m an IC (“individual contributor”, a bit of widely-used jargon at companies large enough to have career tracks).
Early in their careers, ICs mostly create value by doing “the work.” In one’s first year of e.g. being an IC engineer, you write code backing projects of varying complexity.
As one increases up the skill curve, ICs continue doing “the work” while also spending an increasing amount of time on non-managerial metawork, like contributing in a directed fashion to the organizational culture, setting strategic directions, mentoring others (including managers), setting up systems and processes by which the work will be done in the future, etc.
Stripe has an explicit career path available to ICs in engineering and elsewhere. It is designed to avoid the relatively industry common failure mode that, as one advances in one’s career, one either has to start doing management or compromise quite a bit on career impact and outcomes. Management is a useful professional specialization but you probably shouldn’t do it if other specializations are more highly leveraged uses of your time.
One of the great sources of leverage is other people. You can get leverage via directing folks to do things (a superpower whose impact I probably underappreciated when running my business solo). You can also get it by making them more effective at doing things.
When I work with folks at Stripe, I try to make them more instrumentally effective at working the organization, at understanding the broader business context for individual units of work, at understanding the startup ecosystem and the mindset and challenges of our users, etc. For folks in particularly focused roles, I try to put in place efforts to make them better at the core content of their jobs.
For example, I write a lot at Stripe, but Stripe now has a number of people for whom that statement is true. I could plausibly ship X00,000 words in a year, but one eventually hits a plateau there; there is no plateau if the shippable thing is making other writers more instrumentally effective. This sometimes come from directly editing work but more often from teaching, sometimes about the craft of writing specifically and sometimes more Stripe-specific nuances like how to reproduce the company voice. (I also wrote a non-trivial amount of code because, fun fact, stripe.com spells CMS e-r-b, which didn’t optimize for writers’ ability to ship new words.)
My colleague Julia Evans has an essay on being a senior engineer which discusses being a senior IC in a lot of detail specific to engineers.
(Sidenote: One way to substantial impact as a senior IC is providing an example of what senior IC-ship looks like for folks growing in their careers to aspire to; another is working with people explicitly to accelerate their growth towards it and beyond.)
Writing, writing, writing
Stripe is a celebration of the written word which happens to be incorporated in the state of Delaware.
We produce prodigious amounts of it internally, most of it widely visible within the company. My favorite job perk might be that library; it includes everything from a crackling memo about current state of book publishing (relevant to our interests) to experiment writeups about using machine learning to counter credit card fraud (relevant to our interests) to market analyses of SaaS adoption in Japanese businesses (relevant to our interests).
I expected to write a shedload at Stripe, and I do. I didn’t expect most of it to be internally facing. Example: we have a lot more people at Stripe who need to know how to reason about a SaaS business than who have run SaaS businesses, so I locked myself in a room and data dumped about what I had learned in ten years. (We eventually published a publicly available version.)
I think I once had the typical engineer’s disdain for Strategy Memos (TM), but if you think of it as less a Strategy Memo (TM) and more a pull request for a very complicated program which directs the activities of dozens or hundreds of people, it gets a lot easier to stomach.
I recently wrote about where Stripe is in Japan right now, what it would take for Stripe to be as impactful to the Japanese Internet as it has been to the US Internet, and what concrete steps we should take in 2019 to get us closer to that goal. It’s low-degree wild to me that I have something useful to contribute there, but one of the things the company does rather well is being a distributed responsibility machine. Working at BigCo counsels you that there is some expert in another castle who has already written the marching orders and all you have to do is execute your tiny assigned portion of them. At Stripe, you can order the metaphorical pizza and say “Good news: Stripe does have smart people working on the go-to-market plan for the world’s third largest economy. We just bought them a single large pizza.”
One could certainly write the Strategy Memo equivalent of bikeshedding on indentation rules. Try not to do that or to work with people who enjoy doing that.
An aside about indentation rules: the right way to do all stylistic arguments is to enforce them with code, and make the sole supported interface for stylistic arguments pull requests against the linter/compiler rather than comments on individual engineers’ work. go fmt might be the single best feature of Golang for this reason.
At Stripe, there are a lot of things which are valid Ruby which are nonetheless illegal. A trivial example would be a @improper_casing_for_ruby. A more meaningful example would be calling into another team’s code from outside a defined boundary. Since a linter catches essentially all of those, if one finds oneself nitpicking a pull request, one should generally either a) fix the linter or b) find something productive to do with one’s time.
This is one of many, many ways that considered use of technology helps to ameliorate human problems. One of the joys of working in a tech company is that they seem to have a comparative advantage on grokking this, and on self-modifying tools to more closely fit the desired way they want to work. This is one reason I expect 2019’s employment of engineers to be the lowest number for the rest of time: every organization which cares about the social reality of work would benefit from being able to compose their own tools. (That feels like a contentious claim, but it isn’t socially contentious to say that basically every organization considers leadership to be too critical to outsource, and leadership is just programming for organizations.)
Being (very) remote
Stripe is expanding internationally rapidly, but most folks who I interact with on a day-to-day basis are in San Francisco. This is occasionally challenging.
In my eagerness to please, for my first year, I did not establish great boundaries around e.g. acceptable meeting times, and ended up taking a lot at, say, 11 AM PST. After pulling out quite a bit of hair around my sleep schedule, I eventually blocked off my sleeping hours on my calendar; this was a major improvement in quality of life. These days I get up early (7 AM, generally) to have meetings, take a hard break to spend time with my kids before school, and then head into the office.
Folks ask me about work/life balance a lot. I (candidly) worry that I don’t always set a great example for my team or the office on this; I have periods which are quite crunchy interspersed by lulls, and even at a shop which doesn’t count hours or reward facetime-for-the-sake-of-facetime I find myself falling back into salaryman mode too frequently. I’m happy to report that folks who are better about self-discipline and maintaining boundaries do successfully do so at Stripe, and generally without sacrificing actual or perceived effectiveness.
I also think, particularly as companies mature, that they should generally evolve organizational alchemy to get greater-than-sum-of-the-parts effectiveness out of people with disparate working styles, in the same way that businesses unite investors with differing tolerances for risk to bankroll common enterprise that no tolerance level could fully fund by itself.
Here’s a question reasonable people can disagree on: is it OK to routinely have meetings at e.g. 7 PM? (I’m sympathetic to “Oh heck no” on this question, but note that if you want to support traditionally managed Japanese businesses that that won’t be a maximally effective response, and there are many other plausible reasons for someone to say, given their goals, values, and personal situation, “Actually, 7 PM meetings sound pretty reasonable to me. It’s not a crazy ask like e.g. showing up in an office at 9 AM, who does that.”)
If you have four people at your company, you probably need almost total agreement on whether 7 PM meetings are a routine expectation. If you have 400, you can probably tolerate groups/roles/individuals/etc ending up at different equilibria on this question. Save your limited Total Agreement Mandatory points for the key differentiating values of your culture. (Stripe describes its organizational culture to candidates with this document.)
I fly to HQ about once a quarter, mostly to “meet old friends and make new ones.” It’s simultaneously incredibly useful and a bit jarring to, every single time, be in a lunchroom which has hundreds of people who were not there the last time I was in the lunchroom. Hypergrowth is a through-the-looking-glass sort of experience, particularly when you perceive it in slices.
Shoutout to my team, which is the most supportive one I’ve ever been on. We added a number of new remote engineers recently, and the entire team worked from home for a week to understand the experience better and capture requirements for improving our communication norms.
For a company which seems tied to email and Slack at all working hours, it’s useful to understand that a lot of information is distributed around the lunch table and decisions get made in hallway conversations, neither of which is great for folks who can only perceive HQ through the Internet. A tiny thing someone built recently which I really love for helping on this: if you schedule a meeting between Stripes, a video conference link gets automatically added to the meeting, so that any remote employee who might need it doesn’t need to feel like they’re constantly having to interrupt meetings to remind someone to turn on the camera and distribute the link to the remotes.
We are rather aggressively expanding the cohort of remote Stripes, driven partly by improved technologies for collaboration (Zoom, Google Docs, etc), partly by happy experiences on many teams which experimented with adding remotes, partly by desire to attract and retain talented folks wherever they may be, and partly by desire to be more local to our customers, who are very widely distributed.
Speaking of which: at 2 PM PDT on Tuesday March 19th (when?) we’re having a remote coffee for folks interested in casually chatting about what the experience of being a remote engineer at Stripe is like. I’ll be participating along with a few engineers and engineering managers. You can request an invitation. This is just a casual chat between geeks, but for what it is worth, a number of people who attended the last remote coffee now work with us.
Fast and slow
For obvious reasons, I can’t tell you Stripe’s growth rate for anything, but let’s talk about a stylized company called 2X, Inc., where every graph is growing at 2X per year.
Working at 2X breaks so many intuitive understandings of how the world should work.
The day you start at 2X, half of your coworkers have less than 1 year of experience. A year later, when you’re starting to get your sea legs, half of your coworkers have less than 1 year of experience. A year later, when senior colleagues start forgetting that you were not actually there during the flood, half of your coworkers have less than 1 year of experience.
You get numb to graphs after a while. Numbers flit in one ear and out the other; retaining any is almost pointless, because by the time one sinks into your consciousness it will not merely be wrong but glaringly wrong. 2X doubles every year and everyone laughs about how the planning department got it right again; it’s eerie.
It’s exhilarating and terrifying all at once, because almost nothing in nature grows at 2X a year over sustained periods. 2X is constantly on the lookout for new opportunities to sustain the growth, but simultaneous with the hunt is the challenge of doing anything meaningful with that graph as a backdrop.
Stripe isn’t 2X, Inc., but occasionally has some challenges that this stylized company has.
You have to write dashboards and memos for people who aren’t at the company yet; most users of the artifact aren’t. You’ve got to stick up your hand in meetings and say “Hey, you just said ‘sales funnel’: can you give me the maximally pedantic explanation of what that means.” (This is a good thing for senior folks to ask, because forcing folks who joined last week to interrupt to ask a basic question doesn’t set them up for comfort or success.) You have to employ professional educators (and eventually historians and anthropologists, for real), because you effectively run a postgraduate study program on the scale of a small university.
You have to constantly course correct your understanding of what is material impact, because hopefully you’re searching for making material impact, and things that were material three years ago might not move the needle anymore. And things that were outlandishly impossible three years ago might now be quite possible, and worth doing, but only if you can get to them in the next six months.
You have to keep the culture to fight like hell for the expansive set of things which are very worth doing but which don’t obviously move needles. One reason I fly to MicroConf every year is to make sure we meet people who are hitting their first month of $1, $1k, or $10k worth of revenue and thoroughly understand what they need from us. We should not just prevent degradation of the experience for them but make it transformatively better than 5 years ago.
Creating things which matter
As a long-time user of Stripe, as soon as I got git access, I went spelunking for where the magic behind the product pages lived. (If you’re not familiar at this: Stripe has a mostly deserved reputation for giving new product pages very well-designed treatments. Here’s one for general reference.)
The route to great work is mostly a) hire small teams of very talented people who very intently care about something and b) incentivize great work amongst numerous other competing worthy priorities.
People often phrase that as “Protect teams doing great work”, but I don’t think that is entirely correct. Mediocrity doesn’t happen because a villain kills good work then cackles maniacally. BigCo doesn’t set out to be mediocre… BigCo just has an awful lot of people with an awful lot on their plate, and many of them are incentivized to make locally-optimal decisions at the expense of competing global goals.
Doing organizational design and incentive structuring to solve the principal/agent problem internally and cause people to optimize for the global outcome at scale may be the hardest unsolved problem. (In management? In capitalism? In anything? Take your pick.) We’re working on it; concretely, it often involves making space for folks to say “What does the best possible version of this project look like?” and being OK with e.g. delaying things until they are ready. (Note the implicit tension with doing that while one’s business and the environment are moving at Warp 7. None of the problems are easy, or there wouldn’t be any need to have smart people work on them.)
The founder in me thinks that a bit of experience in a large (or growing) organization is very useful for correcting one’s worldview and ability to anticipate the actions of future customers, counterparties, partners, etc at large organizations. That is a useful ability to have as a founder, and (somewhat surprisingly) we spend very little time at school teaching how large organizations actually make decisions.
There are e.g. civics classes which can teach you the orthodox understanding of the legislative process, but it glosses over really important details to the real world, like e.g. how the regulated directly engage with their regulators to shape future legislation. I similarly think that no class about management or capitalism I’ve ever been in said “Sometimes the reason for an outrageous result isn’t a principal/agent problem or ‘Maximize the evil’ or incompetence, it is that writing a dashboard which would have surfaced the problem in time to fix it was beyond the SQL capabilities of the most directly responsible individual.”
Speaking of SQL, I love our internal tooling. We have a number of engineers specifically dedicated to it; I think we could probably tolerate having five times as many as we do. Some of the things they’ve built that clearly would have helped every software company I’ve ever worked at: an easy way to automate (and thereby secure) somebody-needed-to-pop-open-a-console style tasks, instant code search over the entire codebase, and a way to subscribe oneself for daily emails about state changes to a certain set of objects (e.g. “For all the accounts I manage, email me the list of any who hit $MILESTONE every morning, so I can reach out to congratulate them.”) One of the reasons I love our tooling is that there is an engineering-driven emphasis on composability, such that each additional tool we add makes wide swathes of our tooling (and operations) more valuable, often in unanticipated ways. I cannot bang the drum enough for investing in internal tooling.
I’d love to chat more about this
If you’re interested in hearing more about how the sausage gets made at scale, we’d love to chat. Come join us for the remote coffee (when?), or you can always find me in the usual places on the Internet.
Stripe is hiring. I like it here. If you think you would too, or are curious about figuring out whether that would be true, please find us on the Internet.
HackerNewsBot debug: Calculated post rank: 212 - Loop: 204 - Rank min: 100 - Author rank: 52
HN Discussion: https://news.ycombinator.com/item?id=19400795
Posted by EE84M3i (karma: 236)
Post stats: Points: 113 - Comments: 130 - 2019-03-15T15:53:51Z
#HackerNews #4chan #been #blocked #for #has #reasons #security
HackerNewsBot debug: Calculated post rank: 118 - Loop: 476 - Rank min: 100 - Author rank: 54
Software and hardware projects for fun from a guy who loves retro computing
HN Discussion: https://news.ycombinator.com/item?id=19393279
Posted by pkiller (karma: 56)
Post stats: Points: 156 - Comments: 19 - 2019-03-14T20:25:03Z
#HackerNews #been #console #free #game #ive #retro #show #time #video #working
This post serves as an introduction to a “homebrew” video game console made from scratch, using a lot of inspiration from retro consoles and modern projects but with a unique architecture.
Some friends of mine have told me again and again not to keep this project to myself and to put this information online, so here it goes.
How it got started
My name is Sérgio Vieira and I’m a portuguese guy who grew up in the 80s and 90s, I’ve always been nostalgic towards retro-gaming, specifically the third and forth generation consoles. A few years ago I’ve decided to learn more about electronics and try to build my own video game console. Professionally I work as a software engineer and had no experience with electronics other than ocasionally building and upgrading my desktop computer (which doesn’t really count). Even though I had no experience, I said to myself “why not?”, bought a few books, a few electronics kits and started to learn what I felt I needed to learn.
I wanted to build a console that would be similar to those which are nostalgic to me, I wanted something between an NES and a Super Nintendo or between a Sega Master System and a Mega Drive.
These video game consoles had a CPU, a custom video chip (in those days it wasn’t called a GPU) and an audio chip either integrated or separate.
Games were distributed in cartridges, which were basically hardware extensions with a ROM chip and sometimes other components as well.
The initial plan was to build a console with the following characteristics:
* No emulation, the games/programs had to run on real hardware, not necessarilly hardware of the time, but hardware that is just fast enough for the job * With a dedicated “retro” CPU chip * With TV output (analog signal) * Ability to produce sound * With support for 2 controllers * Scrolling background and moving sprites * Ability to support Mario-style platform games (and of course other types of games as well) * Games/Programs available through an SD Card
The reason I wanted SD card support instead of cartridge support, it’s mainly because it’s a lot more practical to have programs available in an SD card, as it makes it a lot easier to copy files from a PC to it. Having cartridges would mean to make even more hardware and to have a new hardware for each program.
The first thing I worked on was the video signal generation. Each video game console of the era I was aiming for had different proprietary graphics chips which made them all have different characteristics. For this reason I didn’t want to use any pre-made graphics chip, I wanted my console to have unique graphical capabilities. And because it was impossible for me to make my own chip, and I didn’t know how to use an FPGA, I opted for a software based graphics-chip using a 20Mhz 8-bit microcontroller.
It’s not overkill and has just enough performance to generate the kind of graphics I want.
So, I started by using an Atmega644 microcontroller running at 20Mhz to send a PAL video signal to a TV (because the microcontroller doesn’t support this protocol natively, I had to bit bang the PAL video signal protocol):
VPU Test 1 VPU Test 2
The microcontroller produces 8-bit color (RGB332, 3 bits for red, 3 bits for green and 2 bits for blue) and a passive DAC is used to convert this to analog RGB. Luckily in Portugal one common way to connect an external device to a TV is through a SCART connector and most TVs accept RGB input through SCART.
A proper graphics system
Because I wanted to have a microcontroller only drive the TV signal (I call it the VPU, Video Processing Unit), I decided to use a double-buffer technique.
I had the second microcontroller (PPU, Picture Processing Unit, which is an Atmega1284 also at 20Mhz) generate an image to a RAM chip (VRAM1) while the first one would dump the contents of another RAM chip (VRAM2) to the TV. After one frame (2 frames in PAL or 1/25th of a second), the VPU switches the RAMs, and dumps the image generated into VRAM1 while the PPU generates an image to VRAM2.
The video board turned out quite complex as I had to use some external hardware to allow for the two microcontrollers to access the same RAM chips and also to speed up the access to RAM that also had to be bit-banged, so I added some 74 series chips such as counters, line selectors, transceivers, etc.
The firmware for VPU and especially the PPU also became quite complex as I had to do extremely performant code to be able to have all the graphical capabilities I wanted, originally it was all done in assembly, later I coded some of it in C.
Video Board 1 Video Board 2
I ended up having the PPU generate a 224x192 pixel image that is then sent to the TV by the VPU. This resolution might seem low, but it is in fact only a bit lower than the consoles mentioned above that usually had resolutions of 256x224 pixels. The lower resolution allowed me to cram more graphical features into the time I had to draw each frame. Just like in the old days the PPU has “fixed” capabilities that can be configured. The background that can be rendered is composed of 8x8 pixel characters (sometimes called tiles). This means a screen background has the size of 28x24 tiles.
In order to have per-pixel scrolling and the ability to update the background seamlessly I made it so there are 4 virtual screens each one having 28x24 tiles that are contiguous and wrap around one other:
Above the background, the PPU can render 64 sprites that can have a width and height of either 8 or 16 pixels (1, 2 or 4 characters) and can be flipped horizontally or vertically or in both axes. Also above the background an “overlay” can be rendered, which is a patch composed of 28x6 tiles. This is useful for games that need a HUD and in which the background is scrolling and sprites are being used for other purposes than to show information.
Other “advanced” feature is the ability to scroll the background in different directions in separate lines, this enables games to have effetcs such as a limited parallax scrolling or split-screen.
And there’s also the attribute table, which is the possibility of giving each tile a value from 0 to 3, and then it’s possible to set all the tiles of a given attribute to a certain tile page or increment their character number. This is useful when there are certain parts of the background that change constantly, the CPU doesn’t need to update each one of the tiles, it only needs to say something like: “all tiles with attribute 1 will increment their character number by 2” (using different techniques, this effect can be seen for example in block tiles with a moving question mark in Mario games or in waterfall tiles that seem to be changing constantly seen in other games).
After having a functional video board, I started working with the CPU I chose for the console, the Zilog Z80.
One of the reasons I chose the Z80 (other than it just being a cool retro CPU) was because the Z80 has access to a 16bit memory space and a 16bit IO space, something that other similar 8-bit CPUs do not have, such as the famous 6502. The 6502, for example, only has a 16bit memory space, which means that the whole 16bits were not reserved just for memory but had to be shared between memory access and external device access, such as video, audio, inputs, etc. By having an IO space together with a memory space, I could have the whole of the 16bit memory space reserved for memory (64KB of code and data) and have the IO space for communication with external devices.
I started by connecting the CPU to an EEPROM with some test code and also connecting it via the IO space to a microcontroller I had set up to communicate with a PC via RS232 in order to check if the CPU was functioning well as well as all the connections I was making. This microcontroller (an Atmega324 operating at 20Mhz) was to become the IO MCU (or input/output microcontroller unit), responsible for managing access to the game controllers, SD Card, PS/2 Keyboard and the RS232 communication.
CPU Board 1
The CPU was then connected to a 128KB RAM Chip, from which 56KB was accessible (this seems like a waste but I could only get either 128KB or 32KB RAM chips). This way the CPUs memory space is composed of 8KB of ROM and 56KB of RAM.
After this I updated the IO MCU’s firmware with the help of this library and added SD Card support.
The CPU was now able to navigate through directories, browse their contents, open and read from files. All this by reading and writing to specific IO space addresses.
Connecting the CPU and the PPU
The next thing I implemented was the interaction between the CPU and the PPU. For this I found “an easy solution” which was to get dual-port RAM (a RAM chip that can be simultaneously connected to two different buses), it saves me from having to place more ICs like line selectors and such and also it makes the accesses to the RAM between both chips virtually simultaneous. The PPU also comunicates with the CPU directly by activating its NMI (non-masking interrupt) every frame. This means the CPU has an interrupt every frame, which makes it valuable for timing and knowing when to update graphics.
Each frame the interaction between CPU, PPU and VPU is as following:
* The PPU copies the information of the PPU-RAM to internal RAM. * The PPU sends an NMI signal to the CPU * At the same time: * the CPU jumps to the NMI interrupt function and starts updating the PPU-RAM with the new graphical frame state. (the program should return from the interrupt before the start of the next frame) * the PPU renders the image based on the information it had previously copied to one of the VRAMs. * the VPU sends the image in the other VRAM to the TV.
Around this time I also added support for game controllers, I originally wanted to use Super Nintendo controllers, but the socket for this type of controller is proprietary and was hard to come by, therefore I chose the Mega Drive/Genesis compatible 6-button controllers, they use standard DB-9 sockets that are widely available.
Joint Board 1
Time for the first real game
At this point I had a CPU with game controller support that could control the PPU and could load programs from an SD Card, so…time to make a game in Z80 assembly of course, it took me a couple of days of my free time to make this (source code):
This was awesome, I now had a working video game console, but…it still wasn’t enough, there was no way for a game to have custom graphics, it had to use the graphics stored in the PPU firmware that would only be changed when its firmware was updated, so I tried to figure out a way of adding a RAM chip with graphics (Character RAM) and somehow load it with information coming from the CPU and making it accessible to the PPU, all this with as little components I could, because the console was getting really big and complex.
So I came up with a way: only the PPU would have access to this new RAM, the CPU would be able to load information into it through the PPU and while this transfer was happening, the RAM wouldn’t be used for graphics, but only the internal graphics would be used.
The CPU can then switch from internal graphics to Character RAM (CHR-RAM) mode and the PPU will use these custom graphics, it’s possibly not the ideal solution, but it works. In the end the new RAM has 128KB and can store 1024 8x8 pixel characters for background and another 1024 characters of the same size for sprites.
Joint Board 2
And finally sound
As for the sound, it was the last thing to be implemented. Originally I intended to give it similar capabilities as those seen in the Uzebox, basically to have a microcontroller generate 4 channels of PWM sound.
However I found out I could get my hands on vintage chips relatively easily, and I ordered a few YM3438 FM synthesis chips, these sound chips are fully compatible with the YM2612 which is the one found in the Mega Drive/Genesis. By integrating this chip, I could have Mega Drive quality music along with sound effects produced by a microcontroller. The CPU controls the SPU (Sound Processor Unit, the name I gave to the microcontroller that controls the YM3438 and produces sound on its own) again through a dual-port RAM, this time only 2KB in size. Similarly to the graphics module, the sound module has 128KB for storing sound patches and PCM samples, the CPU can load information to this memory through the SPU. This way the CPU can either tell the SPU to play commands stored in this RAM or update commands to the SPU every frame. The CPU controls the 4 PWM channels through 4 circular buffers present in the SPU-RAM. The SPU will go through these buffers and execute the commands present in them. In the same way there is another circular buffer in the SPU-RAM for the FM synthesis chip.
So, similar to how it works with graphics, the interaction between CPU and SPU works like this:
* The SPU copies the information in the SPU-RAM to internal RAM. * The SPU waits for the NMI signal sent by the PPU. (for synchronization purposes) * At the same time: * The CPU updates the buffers for the PWM channels and for the FM synthesis chip. * the SPU executes the commands in the buffers regarding the information in its internal memory. * Continuously while all of the above happens, the SPU updates the PWM sound at a frequency of 16Khz.
Sound Board 1
The end result
After all the modules were developed, some were put into protoboards. As for the CPU module, I’ve managed to design and order a custom PCB, don’t know if I’ll do the same for the other modules, I think I was pretty lucky to get a working PCB on the first try. Only the sound module remains as a breadboard (for now).
This is the video game console now (at time of writing):
This diagram helps illustrate what components are in each module and how they interact with one another. (the only things missing are the signal the PPU sends to the CPU directly every frame in the form of an NMI and the same signal being sent to the SPU as well)
* CPU: Zilog Z80 operating at 10Mhz * CPU-ROM: 8KB EEPROM, holds the bootloader code * CPU-RAM: 128KB RAM (56KB usable), holds the code and data of the programs/games * IO MCU: Atmega324, serves as an interface between the CPU and the RS232, PS/2 Keyboard, Controllers and SD Card filesystem * PPU-RAM: 4KB Dual-port RAM, it’s the interface RAM between the CPU and the PPU * CHRRAM: 128KB RAM, holds the custom background tiles and sprites graphics (in 8x8 pixel characters). * VRAM1, VRAM2: 128KB RAM (43008 bytes used), they are used to store the framebuffer and are written to by the PPU and read by the VPU. * PPU (Picture Processing Unit): Atmega1284, draws the frame to the framebuffers. * VPU (Video Processing Unit): Atmega324, reads the framebuffers and generates an RGB and PAL Sync signal. * SPU-RAM: 2KB Dual-port RAM, serves as an interface between the CPU and the SPU. * SNDRAM: 128KB RAM, holds PWM Patchs, PCM samples and FM Synthesis instruction blocks. * YM3438: YM3438, FM Synthesis chip. * SPU (Sound Processing Unit): Atmega644, generates PWM-based sound and controls the YM3438.
The final specs
* 8-bit CPU Zilog Z80 operating at 10Mhz. * 8KB of ROM for bootloader. * 56KB of RAM.
* Reading data from FAT16/FAT32 SD Card. * Reading/writing to RS232 port. * 2 MegaDrive/Genesis-compatible controllers. * PS2 Keyboard.
* 224x192 pixel resolution. * 25 fps (half PAL fps). * 256 Colors (RGB332). * 2x2 virtual background space (448x384 pixels), with bi-directional per-pixel scrolling, described using 4 name tables. * 64 sprites with width and height 8 or 16 pixels with possibility of being flipped in X or Y axis. * Background and sprites composed of 8x8 pixels characters. * Character RAM with 1024 background characters and 1024 sprite characters. * 64 independent background horizontal scrolling in custom lines. * 8 independent background vertical scrolling in custom lines. * Overlay plane with 224x48 pixels with or without colorkey transparency. * Background attribute table. * RGB and Composite PAL output through SCART socket.
* PWM generated 8-bit 4 channel sound, with pre-defined waveforms (square, sine, sawtooth, noise, etc.). * 8-bit 8Khz PCM samples in one of PWM channels. * YM3438 FM synthesis chip updated with instructions at 50Hz.
Developing for the Console
One piece of software that was written for the console was the bootloader. The bootloader is stored in the CPU-ROM and can occupy up to 8KB. It uses the first 256 bytes of the CPU-RAM. It’s the first software to be run by the CPU. It’s purpose is to show the programs available in the SD Card. These programs are in files that contain the compiled code and may also contain custom graphics data and sound data. After being selected, the program is then loaded into the CPU-RAM, CHR-RAM and SPU-RAM. And the respective program is executed. The code of the programs that can be loaded into the console, can take up the 56KB of the RAM, except the first 256 bytes and of course have to take into account the stack and also leave space for data. Both the bootloader and programs for this console are developed in a similar fashion, here’s a brief explanation on how these programs are made.
One thing to note when developing for the console is how the CPU can access the other modules of the console, therefore memory and io space mapping are crucial. The CPU accesses its bootloader ROM and RAM through the memory space. CPU memory space mapping:
It accesses the PPU-RAM, SPU-RAM and the IO MCU through IO space. CPU IO space mapping:
Inside IO space mapping, the IO MCU, PPU and SPU have specific mappings.
Controlling the PPU
We can control the PPU through writing to the PPU-RAM and we know from the information above that the PPU-RAM is accessible through IO space from address 1000h to 1FFFh.
This is how that address range looks like seen in more detail:
PPU Mapping The PPU Status has the following values: 0 - Internal graphics mode 1 - Custom graphics mode (CHR-RAM) 2 - Write to CHR-RAM mode
3 - Write complete, waiting for CPU to aknowledge mode
As an example, this is how we can work with sprites:
The console has the ability to render 64 simultaneous sprites. The information on these sprites are accessible through the CPU io mapping from address 1004h to 1143h (320 bytes), each sprite has 5 bytes of information (5 x 64 = 320 bytes):
1. Miscellaneous byte (each of its bits is a flag: Active, Flipped_X, Flipped_Y, PageBit0, PageBit1, AboveOverlay, Width16 and Height16)
2. Character byte (which character is the sprite in the page described by the corresponding flags above)
3. Color key byte (which color is to be transparent)
4. X position byte
5. Y position byte
So, to make a sprite visible, we must put the Active flag to 1 and put the sprite in coordinates in which it is visible (coordinates x=32 and y=32 puts the sprite in the top left of the screen, less than that and he’s off screen or partially visible).
Then we can also set its character and what is its transparent color.
For example, if we want to set the 10th sprite as visible we would set io address 4145 (1004h + (5 x 9)) to 1 and then set its coordinates to, for example, x=100 and y=120, so we would set address 4148 to 100 and 4149 to 120.
Using Assembly to code
One of the ways to code a program for the console is using assembly language.
Below is a sample code of making the first sprite move and bump into the corners of the screen:
ORG 2100h PPU_SPRITES: EQU $1004
SPRITE_CHR: EQU 72
SPRITE_COLORKEY: EQU $1F
SPRITE_INIT_POS_X: EQU 140
SPRITE_INIT_POS_Y: EQU 124 jp main DS $2166-$
nmi: ld bc, PPU_SPRITES + 3 ld a, (sprite_dir) and a, 1 jr z, subX in a, (c) ; increment X inc a out (c), a cp 248 jr nz, updateY ld a, (sprite_dir) xor a, 1 ld (sprite_dir), a jp updateY
subX: in a, (c) ; decrement X dec a out (c), a cp 32 jr nz, updateY ld a, (sprite_dir) xor a, 1 ld (sprite_dir), a
updateY: inc bc ld a, (sprite_dir) and a, 2 jr z, subY in a, (c) ; increment Y inc a out (c), a cp 216 jr nz, moveEnd ld a, (sprite_dir) xor a, 2 ld (sprite_dir), a jp moveEnd
subY: in a, (c) ; decrement Y dec a out (c), a cp 32 jr nz, moveEnd ld a, (sprite_dir) xor a, 2 ld (sprite_dir), a
moveEnd: ret main: ld bc, PPU_SPRITES ld a, 1 out (c), a ; Set Sprite 0 as active inc bc ld a, SPRITE_CHR out (c), a ; Set Sprite 0 character inc bc ld a, SPRITE_COLORKEY out (c), a ; Set Sprite 0 colorkey inc bc ld a, SPRITE_INIT_POS_X out (c), a ; Set Sprite 0 position X inc bc ld a, SPRITE_INIT_POS_Y out (c), a ; Set Sprite 0 position Y
mainLoop: jp mainLoop sprite_dir: DB 0
Using a C toolchain
It’s also possible to develop programs using the SDCC compiler and some custom tools to use C language. This makes development quicker, although it could lead to less performant code.
Sample code with an equivalent result to the above assembly code, here I’m using a library to help with the calls to the PPU:
#define SPRITE_CHR 72
#define SPRITE_COLORKEY 0x1F
#define SPRITE_INIT_POS_X 140
#define SPRITE_INIT_POS_Y 124
The console has graphics read-only predefined graphics stored in the PPU firmware (1 page of background tiles and another page of sprite graphics), however it is possible to use custom graphics for the program.
The objective is to have all the necessary graphics in the binary form that the console’s bootloader can then load into the CHR-RAM. In order to do this I start with several images already in the right size, in this case to be used as background in several situations:
Sample tile components
Since custom graphics are composed of 4 pages of 256 8x8 characters for background and 4 pages of 256 8x8 characters for sprites.
I convert the graphics above to a PNG file for every page using a custom tool (eliminating duplicate 8x8 resulting characters):
Sample character sheet
And then use another custom tool to convert it to an RGB332 binary file of 8x8 pixel characters.
Graphics command line
The result are binary files composed of 8x8 pixel characters that are contiguous in memory (each one occupying 64 bytes).
Wave samples are converted to 8-bit 8Khz PCM samples. Patches for PWM SFX/music can be composed using pre-defined instructions.
And as for Yamaha YM3438 FM Synthesis chip, I found that the application called DefleMask can be used to produce PAL-clocked music targeting the Genesis sound-chip YM2612 which is compatible with the YM3438.
DefleMask can then export the music to VGM and then I can use another custom tool to convert VGM to a homebrew sound binary.
All the binaries from all 3 types of sound are combined into a single binary file that can then be loaded to the SNDRAM by the bootloader.
Sound command line
Putting it all together
The program’s binary, the graphics and the sound are combined into a PRG file.
A PRG file has a header indicating if the program has custom graphics and/or sound and what’s the size for each as well as all the corresponding binary information.
This file can then be put into and SD Card and the console bootloader will read it and load it into all the specific RAMs and run the program as described above.
PRG command line
Using the emulator
To help with the development of software for the console I’ve developed an emulator in C++ using wxWidgets.
In order to emulate the CPU I’ve used the libz80 library.
I’ve added some debugging features to the emulator, I can stop in a given breakpoint and step through the assembly instructions of it, there’s also some source mapping available if the game was the result of compiled C code.
As for graphics I can check what’s stored in the tile pages/name tables (the background mapping that’s the size of 4 screens) and I can check what’s stored in CHRRAM.
Here’s an example of running a program using the emulator and then using some of the debugging tools.
(The following videos are the console’s video output to a CRT TV captured by a cellphone camera, I’m sorry for the quality not being the very best)
A BASIC implementation running on the console and using the PS/2 keyboard, in this video, after the first program, I write directly into PPU-RAM through IO space to enable and configure a sprite and finally move it:
Graphics demo, this video shows a program that bounces 64 16x16 sprites, over a background with custom scrolling and with the overlay plane enabled and moving up and down above or behind sprites:
Sound demo showing the YM3438 capabilities as well as PCM sample playback, the FM music plus the PCM samples in this demo take up almost all of the 128KB of the SNDRAM:
Tetris, using almost just background tiles for graphics, for music it uses the YM3438 and for sound effects PWM sound patches :
This project was truly a dream come true, I have been working on it for some years now, on and off during my free time, I never thought I would reach this far into building my own retro-style video game console. It certainly is not perfect, I’m still by no means an expert on electronic design, the console has way too many components and undoubtedly could be made better and more efficient and probably someone reading this is thinking exactly that. However, while building this project, I’ve learned a lot about electronics, game console and computer design, assembly language and other interesting topics, and above all it gives me great satisfaction to play a game I’ve made on hardware I’ve made and designed myself. I have plans to build other consoles/computers. In fact I have another video game console in the making, almost complete, which is a simplified retro-style console based of a cheap FPGA board and a few extra components (not nearly as many as in this project, obviously), designed to be a lot cheaper and replicable. Even though there’s a lot I’ve written about this project, there certainly would be a lot more to talk about, I barely mentioned how the sound engine works and how the CPU interacts with it, there’s also a lot more that can be said about the graphics engine, the other IO available and pretty much the console itself.
Depending on the feedback I might write other articles focusing on updates, more indepth information on the different modules of the console or other projects.
Projects/Websites/Youtube channels that helped me for inspiration and technical knowledge:
These websites/channels not only gave me inspiration but also helped me with solutions to some of the dificulties I have encountered in the making of this project.
* Uzebox * Ben Ryves * Retroleum * Z80.info * EEVBlog * Retro Game Mechanics
If you’ve read this far, thank you. 😀
And if you have any feedback to give or any questions, please comment below.
HackerNewsBot debug: Calculated post rank: 110 - Loop: 86 - Rank min: 100 - Author rank: 112
Yes, you have been to 30 countries in 5 years, but have you really "been" there? How many places do you really know and understand?
Article word count: 1199
HN Discussion: https://news.ycombinator.com/item?id=19335853
Posted by clementmas (karma: 111)
Post stats: Points: 102 - Comments: 56 - 2019-03-08T07:40:31Z
#HackerNews #about #been #countries #have #how #its #many #not #you
A friend told me this story during his recent trip to Australia:
“So, have you done Uluru?” – the tanned, bearded, British sounding student asked, referring to the well-known large sandstone rock in central Australia – also a famous tourist destination.
“No, it’s still on our list. We are going to do the Opera House and the Royal Botanic Garden tomorrow and heading to Alice Springs the next day.” – the cheerful Italian girl replied for both herself and her boyfriend, who was finishing up his beer.
The tanned Brit continued asking other young travelers at the table similar questions. There were about 5 of us that night, hanging out in this hostel close to Sydney, getting to know what the others were up to, where they had been and what their plans were. Many of these young people were on their 1-year working holiday visa for Australia, including me.
Have you done _(fill in the blank)?
Rue Cremieux, a trending attraction in Paris
It was definitely not the first time I have heard someone referring to “travel to a place” as “do the place”. What it usually means is just fly or take a car, arrive at that destination, take photos of the famous attractions (#ruecremieux) and then leave, to the next one. And on their mental checklist, the King’s Canyon, the Kakadu National Park, the Great Barrier Reef, Bondi Beach, or whatever are marked as “done”.
It was also more than dozens of times I have heard or participated in a conversation where people would ask each other about how many countries they have been to. At some point that would sound like a competition. 20, 30, 40, “and this year I plan to do A and B and C”. Yes, you have been to 30 countries in 5 years, but have you really “been” there? How many places do you really know and understand? How much of those amazing, life-changing moments do you actually retain, internalize and use them to help yourself become a better human, a better citizen of this world?
I do not intend to criticize entirely the people for traveling this way. Society does sometimes pressure us to spend holidays abroad to look and sound more “well-cultivated”, especially as it is becoming increasingly less difficult to travel the world nowadays in the developed world – given that you have a powerful European or US passport. The media, marketing campaigns of companies also encourage us to travel more, so that we can spend more money on tour packages, plane tickets, their products, services. These factors contribute to creating the romantic idea of world tours, travel to the far east, the typical beach photo with coconut trees. Although we do have this inner urge in us to be free, to explore and experience all corners of the world, this has nothing to do with the way we travel and contemplate traveling right now.
Travel slowly, explore deeply
At TravelMap, we encourage people to travel as much as they can, but do so slowly, use a slow transport mode – like hiking, cycling, sailing, to really take in the experience. It takes time to immerse in a culture, observe and connect with people, nature, the surrounding environment. Go deep and slow rather than shallow and fast. Travel opens up our minds, our hearts, but depends on the ways we do it.
It is way better to spend 1 month working and living in Ethiopia than 1 month visiting all the famous attractions of the African continent. We have been asked several times by TravelMap users to add a feature to count the number of countries they have been to, and every time we said no, because it does not align with our vision.
We have been seeing more and more travelers going on World Tours – where they spend 1 year traveling the whole world. Usually this means that they frog-jump from continent to continent, visit a few representative countries for dozens of days before moving onto the next. All the flights are booked and their one-year trip is planned in advance. I understand that if you take a year off from your study, your work, your responsibilities, you want to see as much of the world as possible. However, cramping a lot of places into such short period of time not only increases culture shock, travel stress, but also reduces the true pleasure of traveling and will most likely make you less happy.
And yet, this is what traveling the world is like for most young people these days. Does it have to be that way? Of course it is much better than staying in the comfort of home but they could have a more fulfilling experience if they consider doing the trip a bit differently.
It is time that we change our notion of traveling. We also have seen many positive trends on our platform. People cycling for a few months, one year, hitchhike from Europe to Asia, hike across South America. It takes time for sure but the cost is not as much as one would imagine. These travelers would work for accommodation and food during their stay, using platforms like WWOOF, Workaway, and reduce their costs and environmental impacts by using Couchsurfing, Warmshowers, public transportation, carsharing, hitchhiking, etc.
Some travelers use traveling to support even greater goals to help communities, the environment like Eco-Adventurer Julien Moreau, who recently completed a triathlon around France to raise awareness about the environment and lobby for a decree to replace plastic bottles in French school cafeterias with tap water or water dispensers.
Here are a few trips from our users on TravelMap that demonstrate a great vision through their ways of traveling. And you can do it too!
Pierre-Etienne on the road:
– On the trails, tasting simplicity – Samtusta
– Adventures in happiness: cycling to Bhutan – Christopher
– Hitchhiking from France to China – Pierre & Ophélie
Next time, don’t talk about the number of the countries you have traveled – I guarantee at least one person in the conversation will feel bad – instead, talk about your most memorable experience, how that one time you had this deep connection with this person in at meditation camp in Southeast Asia because you speak their language, or the quiet moment, the intense gratitude you had after a long day of cycling, after setting up camp, and looking at the beautiful sunset in the offing.
For your upcoming trip, we suggest you to get out of the conventional thinking and do things differently. This time, why don’t you prioritize the time spent in a destination and the meaning of the activities you will do there instead of try to tick off as many countries and attractions as possible. It is great to also focus on what you can give to the country, the people there instead of just self-enjoyment. And since we all know our planet is in dire need of help right now, try to be aware of your environmental impacts by choosing more sustainable transport modes. Here is a quick guide if you are deciding between different ways to explore your next destination.
HackerNewsBot debug: Calculated post rank: 86 - Loop: 142 - Rank min: 80 - Author rank: 39
“Fun thing I learned today regarding secure passwords: the password "ji32k7au4a83" looks like it'd be decently secure, right? But if you check e.g. HIBP, it's been seen over a hundred times.…
Article word count: 745
HN Discussion: https://news.ycombinator.com/item?id=19297401
Posted by DoreenMichele (karma: 15732)
Post stats: Points: 166 - Comments: 67 - 2019-03-03T22:41:40Z
#HackerNews #been #has #hundred #ji32k7au4a83 #over #password #seen #the #times
 [IMG]Robert Ou @ BSidesSF @rqou_ Feb 28
Fun thing I learned today regarding secure passwords: the password "ji32k7au4a83" looks like itʼd be decently secure, right? But if you check e.g. HIBP, itʼs been seen over a hundred times. Challenge: explain why and how this happened and how this password might be guessed
 [IMG]Andrew Zonenberg @azonenberg Feb 28
Replying to @rqou_
Few guesses: * Used as an example of a secure password in documentation somewhere * Looks like it might be alternate left/right hands mashing a keyboard * Used in many places, leaked once cleartext, now in a dictionary for breaking hashed ones
 [IMG]Robert Ou @ BSidesSF @rqou_ Feb 28
Replying to @azonenberg
Nope, the password is much much weaker than you might expect, but you need to really think outside the box. The second point is a very relevant observation, but you havenʼt understood the significance of it yet.
 [IMG]ato̧̕m̀͡i̴̷̛c̨͝t͝҉͡h̷҉u̵̶m͜͞b͏͝s̀́ @atomicthumbs Feb 28
Replying to @rqou_ @azonenberg
I am hanging on the edge of my fucking seat here
 [IMG]Robert Ou @ BSidesSF @rqou_ Feb 28
Replying to @atomicthumbs @azonenberg
Robert Ou @ BSidesSF Retweeted Peter Barfuss 𒀱
https://twitter.com/bofh453/status/1101335595916451840?s=19 … The reason it looks like left/right keyboard mashing is because the Zhuyin layout puts initial consonants on the left side of the keyboard and vowels/rimes on the right of the keyboard.
Robert Ou @ BSidesSF added,
Peter Barfuss 𒀱 @bofh453
Replying to @peroxycarbonate @rqou_
LOL ITʼS "我的密码". Literally "My Password".
 [IMG]ato̧̕m̀͡i̴̷̛c̨͝t͝҉͡h̷҉u̵̶m͜͞b͏͝s̀́ @atomicthumbs Feb 28
Replying to @rqou_ @azonenberg
oh my god
 [IMG]Peter Barfuss 𒀱 @bofh453 Feb 28
Replying to @rqou_
My immediate guess is it corresponds to something really obvious if you enter it in via Cangjie (or possibly some other Chinese IME). Not sure what, tho.
 [IMG]ЬᏂauϮᏂ @peroxycarbonate Feb 28
Replying to @bofh453 @rqou_
yah, do a google search and you get some chinese sites
 [IMG]Peter Barfuss 𒀱 @bofh453 Feb 28
Replying to @peroxycarbonate @rqou_
LOL ITʼS "我的密码". Literally "My Password".
 [IMG]Robert Ou @ BSidesSF @rqou_ Feb 28
Replying to @bofh453 @peroxycarbonate
Indeed. That was surprisingly fast (except you would use the Zhuyin input, not the Cangjie input)
 [IMG]Friedemann Wachsmuth @peaceman 3h3 hours ago
Replying to @rqou_ @Foone
Maybe something generic as "password" but typed on a Chinese or Japanese keyboard, while treating it as QWERTY?
 [IMG]foone @Foone 3h3 hours ago
Replying to @peaceman @rqou_
foone Retweeted Peter Barfuss 𒀱
Peter Barfuss 𒀱 @bofh453
Replying to @peroxycarbonate @rqou_
LOL ITʼS "我的密码". Literally "My Password".
 [IMG]Sue Bursztynski @SueBursztynski 24h24 hours ago
Replying to @rqou_ @staticsan
I’ve recently changed every last one of my passwords to random gibberish ones which my iPad supplied. They will come up when I go to log in anywhere. It was just too much to do it any other way. Please tell me this is at least fairly secure!
 [IMG]Epsilon Rose @EpsilonRose 4h4 hours ago
Replying to @SueBursztynski @rqou_ @staticsan
Using a password generator/manager for most sites is the best idea, however it relies on that manager for access, meaning you need the manager itself to be secure without using it. For these situations, I like passphrases. "Hungry Horticulture hunt in 3s." is secure and memorable
 [IMG]Epsilon Rose @EpsilonRose 4h4 hours ago
Replying to @EpsilonRose @SueBursztynski and
Of course, donʼt actually use that as a password. Itʼs just my standard "Hereʼs a passphrase example." The key is itʼs a nonsense sentence in proper English (or whatever you speak) that uses a number /somewhere/.
 [IMG]Sue Bursztynski @SueBursztynski 4h4 hours ago
Replying to @EpsilonRose @rqou_ @staticsan
Thanks for that! Obviously it works for you and yes, it’s memorable. Trouble is, when you have logins for 72 sites as I do, you aren’t going to remember that many passphrases and it’s not a good idea to use the same one, is it? 😏
 [IMG]Epsilon Rose @EpsilonRose 4h4 hours ago
Replying to @SueBursztynski @rqou_ @staticsan
Thatʼs why I said using a manager is the best idea for most sites. The passphrases are for when you canʼt use a password manager (like for the manager itself).
 [IMG]Geoff @_TheGeoff 4h4 hours ago
Replying to @EpsilonRose @SueBursztynski and
Iʼve found myself regularly resetting passwords because Iʼve forgotten the previous one. Secure each time. Wondering how secure doing an email reset every time would be (assuming secure email)? Means near one-time-use passwords and effectively 2fa.
 [IMG]Sue Bursztynski @SueBursztynski 4h4 hours ago
Replying to @_TheGeoff @EpsilonRose and
My email passwords are now gibberish too.
 [IMG]Geoff @_TheGeoff 4h4 hours ago
Replying to @SueBursztynski @EpsilonRose and
Correct horse battery staplepic.twitter.com/lBX3dMgwgy
HackerNewsBot debug: Calculated post rank: 133 - Loop: 100 - Rank min: 100 - Author rank: 34