Binary analysis tools - Linux Security Expert

Over-Optimizing for Performance

Recently on the csharp subreddit, the post C# 9.0 records: immutable classes linked to a surprisingly controversial article discussing how C# 9.0's records are, underneath it all, immutable classes. The comments are full of back-&-forth over whether one should use records for ease or structs for performance. The pro-struct argument revolved around the belief that performance should always be a developer's #1 priority, and anything less was the realm of the laggard.
Here is a real-world example that shows with stark clarity why that kind of thinking is wrong.
Consider the following scenario:

1

You're working on a game with dozens, maybe hundreds of people on the team; you don't know because when you were cross with facilities about them removing all the fluorescents, you got accused of being against the new energy saving initiative. Now you swim in a malevolent ocean of darkness that on some very late nights alone in the office, you swear is actively trying to consume you.
 

2

The team that preceded you inherited an engine that is older than OOP, when source repositories were stacks of 8-inch floppies, and it looked as if Jefferson Starship was going to take over the world. One year ago they bequeathed upon the company this nightmare of broken, undocumented GOTO spaghetti & anti-patterns. You're convinced this was their sadistic revenge for all getting fired post-acquisition.
 

3

Management denied your request to get headcount for an additional technical artist, but helpfully supplied you with an overly nervous intern. After several weeks working alongside them, you're beginning to suspect they're pursuing something other than a liberal arts degree.
 

4

Despite the many getting started guides you spent countless evenings writing, the endless brownbags nobody attended, and the daily dozen emails you forward to oppressively inquisitive artists comprised of a single passive-aggressive sentence suggesting they scroll down to the part that begins FW: FW: FW: FW: FW: FW: RE: WE BROKE TOOL NEED WORKAROUND ASAP ...
 
...yes, despite all of that, the engineering team still spent days tracking down why the game kept crashing with Error 107221: У вас ошибка after re-re-re-re-re-throwing an ex_exception when it couldn't (and should never even try to) load a 16K-textured floor mat.
 

5

Despite your many attempts to politely excuse yourself, one blissfully unaware artist exhausts 48 minutes of your lunch break explaining how the Pitchfork review for the latest "dope slab" of this TikTok-Instagram-naphouse artist you never heard of was just sooooo unfair.
 
And then in their hurry to finish up & catch the 2:30 PM bus home, they forget to toggle Compress To CXIFF (Custom Extended Interchange File Format), set the Compression slider 5/6ths of the way between -3 & -2, look to their left, look to their right, click Export As .MA 0.9.3alpha7, and make absolutely, positively, 100% SURE not to be working in prod. And THAT is how the game explodicated.
 

6

You know better than anyone the intermediate file format the main game loop passes to Game.dll, memory mapping it as a reverse top-middle Endian binary structure.
 
You know for 381 of the parameter fields what their 2-7 character names probably mean.
 
YOU know which 147 fields always have to be included, but with a null value, and that the field ah_xlut must ALWAYS be set to 0 unless it's Thursday, in which case that blackbox from hell requires its internal string equivalent: TRUE.
 
YOU know that the two tech artists & one rapidly aging intern that report to you would totally overhaul tooling so artists would never "happen" again, but there just aren't enough winters, springs, summers, falls, July 4ths, Christmas breaks, Presidents Days, and wedding anniversaries in a year to properly do so.
 

7

If you could just find the time between morning standups, after lunch standups, watersprint post-mortems, Milbert's daily wasting of an hour at your desk trying to convince you engineering should just rebuild the engine from the ground up in JavaScript & React, & HR's mandatory EKG Monitor job satisfaction surveys, you might be able to get at least some desperately-needed tooling done.
 
And so somehow you do. A blurry evening or two here. A 3:00 AM there. Sometimes just a solitary lunch hour.
 
Your dog no longer recognizes you.
 
You miss your wife calling to say she's finally cleaning out the hall closet and if you want to keep this box of old cards & something in plastic that says Underground Sea Beta 9.8 Grade, you better call her back immediately.
 
And your Aunt Midge, who doesn't understand how SMS works, bombards you one evening:
your father is...
no longer with us...
they found him...
1 week ago...
in an abandoned Piggly Wiggly...
by an old culvert...
split up...
he was then...
laid down to rest...
sent to St. Peter's...
and your father...
he's in a better place now...
don't worry...
it's totally okay...
we decided we will all go...
up to the mountain
 
You call your sister in a panic and, after a tidal wave of confusion & soul-rending anxiety, learn it was just Hoboken Wireless sending the messages out of order. This causes you to rapidly cycle.
 

8

On your bipolar's upswing, you find yourself more productive than you've ever been. Your mind is aglow with whirling, transient nodes of thought careening through a cosmic vapor of invention. It's like your brain is on 200mg of pure grade Adderall.
 
Your fingers ablaze with records, clean inheritance, beautiful pattern matching, bountiful expression syntax, aircraft carriers of green text that generate the most outstanding CHM for an internal tool the world has ever seen. Readable. PERFECTLY SOLID.
 
After much effort, you gaze upon the completed GUI of your magnum opus with the kind of pride you imagine one would feel if they hadn't missed the birth of their son. Clean, customer-grade WPF; tooltips for every control; sanity checks left & right; support for plugins & light scripting. It's even integrated with source control!
 
THOSE GODDAMNED ARTISTS CAN'T FAIL. YOUR PIPELINE TOOL WON'T LET THEM.
 
All they have to do is drag content into the application window, select an options template or use the one your tool suggests after content analysis, change a few options, click Export, and wait for 3-5 minutes to generate Game.dll-compatible binary.
 
Your optimism shines through the commit summary, your test plan giddy & carefree. With great anticipation, you await code review.
 

9

A week goes by. Then two. Then three. Nothing. The repeated pinging of engineers, unanswered.
 
Two months in you've begun to lose hope. Three months, the pangs of defeat. Four months, you write a blog post about how fatalism isn't an emotion or outlook, but the TRANSCENDENCE of their sum. Two years pass by. You are become apathy, destroyer of wills.
 

10

December 23rd, 2022: the annual Winter Holidays 2-hour work event. The bar is open, the Kokanee & Schmidt's flowing (max: 2 drink tickets). The mood a year-high ambivalent; the social distancing: acceptable. They even have Pabst Blue Ribbon, a beer so good it won an award once.
 
Standing beside you are your direct reports, Dave "Macroman" Thorgletop and wide-eyed The Intern, the 3 of you forming a triumvirate of who gives a shit. Dave is droning on & on about a recent family trip to Myrtle Beach. You pick up something something "can you believe that's when my daughter Beth scooped up a dead jellyfish? Ain't that something? A dead jellyfish," and "they even had a Ron Jons!"
 
You barely hear him, lost as you are in thought: "I wish I had 2 days of vacation." You stare down ruefully at your tallboy.
 
From the corner of your eye you spot Milbert, index finger pointed upward, face a look of pure excitement.
 
"Did I tell you about my OpenWinamp project? It's up on SourceForge", he says as he strides over. It's unsettling how fast this man is.
 
"JAVASCRIPT IS JUST A SUBSET OF JAVA!" you yell behind you, tossing the words at him like a German potato masher as you power walk away. It does its job, stopping Milbert dead in his tracks.
 
Dave snickers. The Intern keeps staring wide-eyed. You position yourself somewhat close to the studio's 3 young receptionists, hoping they serve as a kind of ritual circle of protection.
 
It works... kind of. Milbert is now standing uncomfortably close to The Intern, Dave nowhere to be seen.
 
From across the room you distinctly hear "Think about it, the 1st-person UI could be Lua-driven Electron."
 
The Intern clearly understands that words are being spoken to them, but does not comprehend their meaning.
 
You briefly feel sorry for the sacrificial lamb.
 

11

You slide across the wall, putting even more distance between you & boredom made man. That's when you spot him, arrogantly aloof in the corner: Glen Glengerry. Core engineering's most senior developer.
 
Working his way up from a 16-year old game tester making $4.35 an hour plus free Dr. Shasta, to pulling in a cool $120K just 27-years later, plus benefits & Topo Chicos. His coding style guides catechism, his Slack pronouncements ex cathedra; he might as well be CTO.
 
You feel lucky your team is embedded with the artists. You may have sat through their meetings wondering why the hell you should care about color theory, artistic consistency, & debates about whether HSL or CMYK was the superior color space (spoiler: it's HSL), you were independent and to them, a fucking code wizard, man.
 
And there he stands, this pseudo-legend, so close you could throw a stapler at him. Thinning grey-blonde tendrils hanging down from his CodeWarrior hat, white tee with This Guy VIMs on the back, tucked into light blue jeans. He's staring out into the lobby at everything and yet... nothing all at.
 

12

Maybe it's the 4.8% ABV. Maybe it's the years of crushing down anger into a singularity, waiting for it to undergo rapid fiery expansion, a Big Bang of righteous fury. Maybe it's those sandals with white socks. Maybe it's all three. But whatever it is, it's as if God himself compels you to march over & give him a piece of your mind, seniority be damned.
 
"Listen, you big dumb bastard..."
 
That... is maybe a little too aggressive. But Glen Glengerry barely reacts. Pulling a flask out of his back pocket, he doesn't look over as he passes it to you.
 
Ugh. Apple Pucker.
 

13

"I thought bringing in your own alcohol was against company policy", wiping sticky green sludge from your lips. He turns with a look of pure disdain & snorts.
 
"You think they're going to tell ME what I can & can't bring in?" He grabs the flask back, taking a big swig.
 
For what feels like an eternity, you both stand in silence. You swallow, speaking softly. "None of you even looked at my code. I worked very, very hard on that. My performance review for that year simply read 'recommend performance improvement plan." The words need no further context.
 
"I know", Glen² replies. "That was me."
 

14

Now you're not a weak man, and maybe in some other circumstance you would have punched him in the goddamn lip. But you feel nothing, just a hollowness inside. "Why?", you ask, wondering if the answer would even matter.
 
"Because you don't use Bulgarian notation. Because your method names aren't lower camel case. Because good code doesn't require comments. Because you use classes & records over more performant structs, pointlessly burdening the heapstack. BECAUSE. YOUR CODE. IS. SHIT."
 
You clinch your fists so tightly the knuckles whiten.
 

15

He looks away from you, taking another sip of green goo. "You're not a coder. You're an artist masquerading as one" he speaks, as if it were fact.
 
The only thing artistic about you is the ability to create user-friendly internal tooling using nothing but a UI framework, broken down garbage nobody wants to touch, & sheer willpower. If your son's life depended on you getting accepted into art instruction school, you couldn't even draw a turtle.
 
He doesn't pause. "I'll champion ruthless micro-optimization until the day I die. But buddy, I'm going to let you in on a little secret: you aren't here to improve workflow. You're here to LOOK like you're doing something NOBODY else can."
 
He goes on. "What do you think those artists are going to do when they have to stare at a progress bar for 4, 5 minutes? They're going to complain your tool is slow."
 
"Sure, it may take them 20, 30 minutes to do it the old way, there'll be an error, and either they'll stare at it for 30 minutes before adding that missing semi-colon or they'll come get you. And you'll fix it. And 1 week later, they won't remember how. And you'll stay employed. And every. Body. Wins."
 

16

A little bit of the pride, the caring, wells back up inside from somewhere long forgotten.
 
"You don't think we should care about rapid application development & KISS, quickly getting things out that help our team, instead devoting ourselves to shaving off ticks here & there? What do you think artists are going to do with those 4 minutes you talk about?
 
You don't stop. "I'll tell you what they'll do. They'll 9GAG for 20 minutes straight. They'll listen to podcasts about dialectical materialism vis-a-vis the neo-feudalism that is a natural extension of the modern world's capitalist prison. They'll Reddit."
 
His silence gives you the bravery to push the limits.
 
"Christ, man. Are you only in it for the $120K..."
 
He corrects you: "...$123K."
 
"...only in it for the $123K/year? The free snacks from the microkitchen? The adulation? Have you no sense of comraderie?? No desire to push us to something better?! No integrity?!!!"
 
His eyes sharply narrow, face creases in anger. You clearly have overstepped your bounds.
 

17

"You think I don't have integrity? No sense of teamwork? I'm only in it for the cold cash? You think I don't care about you all?", he roars.
 
A light volley of small green flecks land on your face.
 
"Why do you think they made a 16-year old tester the lead developer of a 1993 Doom clone?! Because my code was clean & painless to work with?! Because I made coding look easy?! No! IT WAS BECAUSE I WAS A GOD TO THEM.
 
And from a God, a PANTHEON. We built monuments to over-engineering! We crafted that of 7 weeks onboarding, that of immortal bugs, demonic hosts spawned by legion from the very loins of a fix. It took 2 years before a developer could BEGIN to feel confident they knew what they were doing. And by that time, they were one of US!
 
You think the team we laid off November '19 was fired because they were bad at their jobs? NO! It was because they worked themselves out of one. They didn't leave us a broken pipeline. They left an internal Wiki, a wealth of tools & example projects, and a completely transparent code base.
 
We couldn't have THAT, now could we? No, we couldn't. So we got rid of it. ALL OF IT. Poof. Gone. Just like that. Before anyone even knew a THING."
 
He leans forward, so close his psoriasis almost touches yours.  
With an intensity that borders on frightening, he whispers "You think they left us Game.dll? I fucking *MADE** Game.dll."*
 
The words hit hard like a freight train.
 

18

And without another word, he turns & leaves. You're left there, alone, coworkers milling about, with only one thought.
     
Were one to get a hobby, should it be cocaine?
 

In Conclusion

It's these kinds of situations that make me believe there are far more important considerations than a ruthless dedication to performance, even in the game industry as my real-world scenario so clearly demonstrates.
 
Like, records are cool & shit.
submitted by form_d_k to shittyprogramming [link] [comments]

A proposal to eliminate the spread of COVID-19 in Ireland

This is a long one. There is no TL;DR, but Google tells me it should take about 10 minutes to read. Or, you can skip to The Plan - Summary if you want the bullet points.
But why should you give this any time at all?
My background is in data analysis. Making sense of numbers is what I do for a living. I have been studying COVID-19 since I was locked down in March and the experience has been frustrating in equal measure. The difference between what was happening on the ground, and the story that the media told was genuinely alarming. The government / NPHET never even tried to stop the virus getting into the country, and no one held them to account for their (non)decisions. The disastrous consequences are all around us, and much of it was preventable.
Six months later, and the country has barely moved on. The ‘experts’ have no goals and little control over the virus. The media frame every issue as a crass binary choice between more or less restrictions and are otherwise happy just to have people to point their fingers at. The government / NPHET has nothing to offer the people, other than admonishments to do better and repeated cycle of restrictions.
Meanwhile students, artists, the over 70s, small business owners, the entire events and hospitality industries, and regular people who cannot WFH have been left swinging in the wind. Some have been evicted, others are relying on drugs to get by. This situation is not just a problem for one or two parts of our society: this is a widespread degradation of our quality of life. If I can do anything to help, I feel obliged to try.

Context
As I see it, we have three choices:
I won’t argue over technocratic definitions like ‘elimination’, ‘eradication’ or ‘suppression’. These distinctions are semantic in an environment of oppressive civic restrictions, mass unemployment, waves of business closures, and general misery. Whatever gets us to a place where we can live our lives as normal (or close enough), and the public health infrastructure can take care of the virus, that’s what I’m aiming for.
This proposal cannot work without public support. No proposal can work without public support. Public adherence is the single most important variable in the equation, yet it is the one that the politicians and the media and the ‘experts’ have ignored. FG burned through a lot of goodwill in the first lockdown (and money, and resources, and lives…). Instead of vilifying people who aren’t adhering to the rules, policymakers need to recognise the sacrifices that the people made (which were subsequently squandered) and they need to earn that trust back.
This proposal cannot work without support from the North. That doesn’t mean that we need to convince them to adopt our plan. It means we need to convince them that the goal is worthwhile and achievable. From there we can work together to coordinate our policies. Managing our own affairs with competence, would be a good start. Picking up the phone to talk to them, instead of trying to browbeat them through the media, would also help.
Irrespective of your goals or beliefs, some facts are certain: there will be lockdowns, there will be government spending to support the economy, and the virus will demand public health resources. All of that will happen in the coming months and years, whether we have a plan or not. The question is whether those resources are used to solve the problem, or whether they are wasted on a plan that keeps us going around in circles.
So yes, there will be lockdowns in this proposal, but they will not be FG lockdowns i.e. lock them down and throw away the key. Through intelligent policies and a greater mobilisation of resources, we can do so much more with our lockdowns to reduce the burden on the people and make their experience more tolerable. Indeed, that trade-off always exists in public policy: better policymaking = happier people. Which is why the politicians usually get the blame, and rightly so.
We need to move to a more ‘war time’ mindset. Not because we need a shared enemy to unite us, but because we need to mobilise every possible resource at our disposal and focus it on the single most important issue affecting us all. We need more tests, we need vehicles for mobile testing units, we need facilities for quarantines. Wherever there is spare capacity, we need to find a way to put it to good use. We need to take most of the power away from the narrow-minded medics, and get the rest of our society and our civic infrastructure involved in planning e.g. community representatives, legal experts, business leaders, An Garda, the army etc.
People want to invest in their communities, they want to help their friends and neighbours. There are people all over the country who would rather be volunteering as part of a national plan to get rid of COVID-19, than to be sitting at home on the PUP, going crazy listening to the ‘experts’ – who failed to prevent this – talk about more lockdowns. We need to harness that latent energy and build it into the plan.
One of the most important factors that is within our control, is the degree to which policymakers communicate with the people. And I mean real communication, not press releases or attention-seeking speeches from the other side of the world. We need to talk to the people, listen to them, answer their questions, take their feedback on board. The people aren’t stupid. They know a good plan when they see it – which is why few are paying attention to the ‘Living With The Virus’ stuff – and they have valuable information that can help make that plan work.
Underlying these points is a need to create intelligent rules, and to enforce them strictly. Strict does not mean harsh. Strict enforcement is not authoritarianism, and it is not an invitation to a fight; it is simply administrative competence. In the context of a contagious outbreak, administrative competence is the difference between life and death.
I’ll finish this section with the caveat that all parameters are suggestions or placeholders. The exact numbers will depend on resources, on more data and further analysis, and on input from communities and other stakeholders – all of which is within our control.

The Plan – Summary
Like any problem in life, if you can’t solve it directly, you break it down into smaller, less complex parts.
Instead of putting the whole country into lockdown and trying to eradicate the virus from the whole island at the same time – a miserable experience for all – we should go county by county until the job is done. We seal off a county, flood it with resources, clear it of COVID-19, and then let it reopen as normal. We repeat the process for neighbouring counties and then combine them when they are cleared, to create a larger ‘Cleared Zone’. The process continues and the Cleared Zone keeps growing until it covers the whole island.
This approach allows us to focus our resources on one area at a time (nurses, doctors, tests, volunteers etc) instead of spreading them over the whole country. We can be more comprehensive in our testing and quarantining measures, and more confident in our plans. Short, sharp, strict lockdowns work best.
By maximising the ratio of resources to population, we also lower the burden on the people. In particular, we minimise the amount of time that people spend in lockdown, and the less time they spend in lockdown, the more likely the plan is to work.
This structured approach also makes it easier for us to measure our progress and make reliable forecasts. We can allocate our resources more efficiently and plan our responses more effectively. Observers can watch our progress and judge for themselves whether it is a good idea (i.e. politicians in the North and / or protestors in Dublin).
Perhaps most important of all, the structure makes it easier to explain the idea to the people and get buy-in before anything happens. We can outline the plan, explain how it works, explain how it compares to the alternatives, and then give them realistic estimates of what would be required and how long it would take. Then we can hear their feedback and take the conversation and planning from there.
I have heard any people talking about elimination and ZeroCovid, but do any of them have a plan for getting to zero? Or a plan to get the people on board?
Step 1: More structure and responsibility from leaders
Step 2: Less uncertainty, easier decisions, better outcomes, less stress for everyone
Step 3: Profit. Elimination.

The Plan – Implementation
We isolate a county and lock it down for an initial 3 weeks. An Garda man the county borders. They are supported by the army, who provide boots on the ground so that An Garda aren’t stretched. Most routes are closed off so that all essential travel goes through a few well-manned checkpoints. If we do a good job with planning and communication, there won’t be much work to do.
We test systemically high-risk households and high-risk individuals early and often i.e. large households and essential workers. With help from local volunteers, medics screen as many people as possible every day. We use multiple measures and repeated applications to improve the quality of our results. We want to identify and remove cases at the earliest possible point, both to reduce the chance of further infection, and to protect the individual’s health.
Low risk confirmed cases (young / healthy) go to a safe and comfortable quarantine. Local hotels and guest houses could be used, ideally before we invest in building quarantine facilities. Local taxis, kitted out with extra protective equipment, could take them there. High risk confirmed cases (older / comorbidities) go by ambulance to local medical facilities as required.
During this period, we work with local politicians, community leaders, residence associations etc to ensure that everyone is looked after (in reality, these conversations will have started weeks before). We get our neighbourhoods communicating, looking out for each other, making sure they’ve got enough food or heating or whatever else they need. Local volunteers and taxi drivers can do odd jobs like sending packages, collecting prescriptions, lifting heavy stuff, or just checking in on people. If it is feasible, we can even invite local artists to play gigs for people in their streets or apartments.
Towards the end of the second week, we begin a mass testing program with the ultimate goal of testing every person in the county (scale depends on resources). Once we have completed the tests and cleared the confirmed cases into quarantine, we can begin a slow, staggered opening process. We must be especially conservative at this point to ensure no slippage.
When one county is clear, we move to the next one, and repeat the process. When we have cleared two bordering counties, we can join them together in a bigger Cleared Zone and the process continues from there. Eventually the Cleared Zone covers the whole country, except Dublin (or more realistically, the Pale).
What would the other counties do while they wait for their turn? I’m assuming that, they would be doing whatever the ‘Living With The Virus’ plan dictates. This proposal succeeds in line with what happens in the sealed off zones, so I am more concerned with them. However, it would speed up the process if the bordering counties could be encouraged to get a head start. If the plan is going successfully, I’m confident they would.
With its population density and its complexity, Dublin / the Pale will be the last county to be cleared. However, given that every other county would be cleared by that point, and with so much effort having been put in, it might make more sense just to burn Dublin down. We could go with a concrete mausoleum as per Chernobyl, but it might be easier and quicker if we just raised the city and started from scratch. The country needs to rebalance, so it’d be two birds with one stone.
Or maybe we call that plan B. Dublin’s plan A would follow the same principles as for the rest of the country. Break it into smaller parts, focus resources on one area at a time, use layers of risk measures where precision isn’t an option, and get cases as early as possible, using whatever resources available. By that stage the rest of the country would be clear and the demand for medical resources low. We would have learned a lot along the way, and we would have plenty of ammo to throw at the problem.
In general, the more resources we have, the faster we can move. The county by county approach that I have outlined above is too slow. With greater resources, we can increase the number of counties that are being cleared at any one time. One option is to work by province. Another would be to define the zones with respect to observed travel routes, in order to reduce the risk of leakage and reduce the inconvenience on local communities.
At the end of the day, lines have to be drawn somewhere, and some people will inevitably lose out. The better we communicate with people in advance, the lower the burden on the people and the more of these problems we can avoid.
Following on from that, one of the skills we need to take from this crisis is the ability to isolate and quarantine regions. Whether it is a city, a town, a county, a specific building, or even the entire country, we need to be able to seal it off and control movement in and out. This is an essential tool for outbreak management – whatever the outbreak and whatever the disease.
The same goes for individuals. We need to be able to create and operate safe, comfortable, and effective quarantines, and to do so at short notice. It should be a matter of national embarrassment that FG and NPHET couldn’t even organise a quarantine in a pandemic.
The whole process might take 3 to 4 months. That means we would have cut off all non-essential air travel for that time, but it doesn’t mean the whole country is in lockdown for 3 or 4 months. The lockdown is staggered, and the individual’s experience will depend on their location and their place in the ‘queue’.
The first group of counties to go into lockdown will also be the first to come out. Once they have eliminated the spread of the virus, they will return to a normal, although somewhat isolated, society. The experience steadily improves as more and more counties join them in the Cleared Zone (or steadily deteriorates, depending on your county pride).
While the first group is in lockdown, the rest of the country continues as normal i.e. living with the virus. Everyone watches as the first group goes through its lockdown (just think of the #banter). Several weeks later, as the first group is opening up, the second group is preparing to go in to lockdown. As the second group comes out, the third group goes in etc etc and the staggered lockdowns roll like a wave across the country.
Every county goes from Living With The Virus -> intelligent lockdown (needs a better name) -> Cleared Zone. The earlier you are in the queue, the less time you spend Living With The Virus and the more time you spend in the Cleared Zone. The individual would only be in a strict lockdown for a matter of weeks, maybe 3-6 depending on the complexity of the region and the resources available. For counties with smaller populations that have shown that they can do a good lockdown, it will be quicker. For Dublin, it will be slower.

Strengths
I think this proposal has a lot of strengths. It’s a plan, for a start. We haven’t had a plan since this thing began (the FG lockdown wasn’t a plan – it was the inevitable consequence of not having a plan). The leaders take more responsibility to lower the burden on the people, it mobilises idle resources, and it fosters communication and community across the country.
These are three strengths that I want to emphasise.
1 It provides clarity
This might be the most important point.
Uncertainty is painful. Uncertainty is a cost. Even if the bad thing is unlikely to happen, just the fact that it is a risk, or that it could happen means that you live with a cloud over your head. Suffering is bad enough on its own, but suffering for an unknown length of time is torture. And if that period is determined at the whim of a politician or an ‘expert’, that is a recipe for society-wide anger and even civil disorder.
With this proposal, we can forecast the length of the period of lockdown with greater accuracy. The people will be able to understand what is being asked of them. We can make plans around resources required versus those available. The economists can make forecasts. Businesses can plan their finances. The people can plan their weddings, book their holidays, get back to training, sign up for courses, and have things to look forward to.
At the end of the day, any successful proposal must remove the uncertainty and provide meaningful clarity to households and businesses.
2 Never let a crisis go to waste
This plan will require tools and capabilities like rapid local testing, safe quarantines, rapid isolation of towns and regions, emergency decision-making frameworks etc. If we don’t have a capability, then we need to build it. When people say ‘never let a crisis go to waste’ this is what they mean: you build the tools in the crisis that will help you protect yourself from the next one.
Nature works the same way. You lift weights until the muscle fibres tear, then they grow back stronger. We build aerobic endurance by pushing ourselves to a limit, then our body naturally reacts to increase the limit. A vaccine works similarly by stimulating antibodies for the disease. Well, we need a civic emergency vaccine for Ireland. These tools are the antibodies that will protect us next time. The sooner we build them, the better. Now is the time, not later.
3 It's the only way we can protect the economy
The risk to the economy isn’t the next few months of revenue. We can borrow to cover lost income in the short run. The real risk is a wave of defaults that precipitates a financial crisis.
As more individuals and businesses are put under financial pressure, more borrowers will default on their debts. But one man’s debt is another man’s asset, so as the borrowers default, the lender’s financial situation also deteriorates. Defaults are contagious, and if a wave of defaults threatens a major lender, the entire financial system will be at risk.
Only an elimination plan can protect the economy. Along with the virus and the uncertainty it creates, we need to eliminate the risk of financial contagion.

Weaknesses
Could ya be arsed

The End Goal
Think about what’s on the other side of this…
This is a massive challenge – the kind that defines a nation. However you think of your community, this would give you something to be proud of for generations. It would be like Italia ’90, except 10 times bigger, because we would be the players, we would be the ones making it happen.
We’d become the first country in Europe to eliminate the virus. And of all the countries in the world, we’d be doing it from the largest deficit too. Those Taiwanese and Kiwis made it easy for themselves with their preparation and their travel restrictions and their competent leaders. Our challenge is much greater than theirs, but they show us what is possible.
Have you ever wanted to scoff at the Germans for being disorganised? Wouldn’t you love to have a reason to mock the Danes? Aren’t you sick of hearing about New Zealand? Let’s make the Kiwis sick of hearing about the Irish!
If we take this challenge on, the world’s media will be on us. The FT, the Economist, the NYT, the Guardian, Monacle, Wired, the New Scientist, China Daily, RT, Good Housekeeping, Horse and Hound, PornHub… all of these international media empires would be tracking our progress, interviewing key people, reporting daily, willing us on. The world is desperate for good news, and we can be the ones to give it to them.
We would become a model for other nations to follow. They would take the Irish model and adapt it to their own situation. Instead of us copying other nations, they would be copying us. Instead of a pat on the head for the diddy little Irish fellas, we would be literally LEADING THE WORLD.
Back at home, we get our lives back, and society can breathe again, free of restrictions. The over 70s come out of hibernation. The students go back to university. The protests stop because people go back to work and we announce an inquiry into what exactly happened in February and March. The pubs go back to being pubs. Our hospitality industry is taken off life support. The tidal wave of bankruptcies is avoided. We can play sport and celebrate the wins. We stop talking about things we can or can't do. Just imagine that first session... And imagine how good it would feel knowing that you had worked for it, and knowing that you had set the nation on a better path for generations to come...
I think it’s worth a lash! Don’t you?
submitted by 4SMD1MCW to ireland [link] [comments]

Version Control in Game Development: 10 Vague Reasons to Use It

Version Control in Game Development: 10 Vague Reasons to Use It
Whether you’re a AAA development shop or an indie programmer, building a game will surely take more than just a couple of weekends. Many things can happen between the inception of the game and the time it will be released. To track and manage these changes, developers use version (source) control. Let's talk about version control, branching, and how to select the best version control system.

https://preview.redd.it/br064yidj0z51.jpg?width=2190&format=pjpg&auto=webp&s=16b91701114c2e185a7e33bde1bebf2634cb396e
The software development process is a long and arduous road. Changes might be introduced to the game mechanics, the admin part of the game, or practically anywhere, especially, if you develop a GaaS product.
These changes need to be tracked. Indeed, you don’t want to simply copy the entire folder of the game project and save it under a different name (like mycoolgame_v02). You will need version management. That’s what version control systems are for.

What is version control?

Version control is the practice of tracking and managing changes to the code base. Version control systems provide a running history of how the code changes. Using version control tools also helps to resolve conflicts when merging contributions from multiple sources.

What is source control?

Source control and version control are practically interchangeable, but to put a fine point to it, version control is a more general term. Source control systems typically manage mostly textual data — source control typically means source code or program code. On the other hand, version control refers not only to the source code but also to the other assets of the game app, like images, audio, and video resources.

Branching

When you think of a branch, you’d typically picture a fork-like structure. Initially, there’s only one path, but then the paths diverge. That’s essentially what a branch is in source control lingo.
As you build your game app and expose it to testers, QA, and other stakeholders, they will give input that may force you to introduce changes to the game’s source. Most of the time, the changes will be small, but the changes will sometimes be massive. These large changes are inflection points to the development process. This is typically where you decide to branch.
The purpose of branching in version control is to achieve code isolation. You’re branching probably because the new branch represents the next version of the game, or it could be something smaller, like “let’s fix bug number 12345”. Whatever branching method you choose, you’ll need a version control.

https://preview.redd.it/693agxrej0z51.png?width=640&format=png&auto=webp&s=1a9672b8137f9a53968d6b4159269559b67db644

Why use version control in game projects?

#1 - Code backup

Source control, especially a remote repository, is a backup for your code. Indeed, you don’t want your hard drive to be a single point of failure. Do you? What happens to 10 months of coding work if the drive gets fried? What if your server dies? Do you have an automated backup?

#2 - Better team collaboration

Share the code with other contributors and still be in sync with each other. If you’re not using source control, how will you work with other developers? Do you really want to use Dropbox or Google Drive to share source codes? How will you track each other’s changes? Version control systems take care of synching and resolving conflicts or differences with codes from multiple contributors.

#3 - Roll back to the previous version

Version control systems are a retreat strategy. Have you ever made breaking changes to the code and realized what a colossal mistake it was? If you ever want to go back, it’s a cinch to do that in a version control system.

#4 - Experiments with zero risks

It makes experimentation easy. Do you want to try something radical, but you don’t want to clutter or pollute your codebase? Branch. If the idea doesn’t pan out, just leave the branch and go back to the trunk

#5 - Full audit trail

Provides an audit trail for the codebase. You can go back to previous versions of the code to find out when and where the bugs first crept in.

#6 - Better release management

Monitor the progress of the code. You can see how much work is being done, by who, where, and when.

#7 - Code comparison and analysis

You can compare versions of your code. When you learn how to use diffing techniques, you can compare versions of your code in a side-by-side fashion.

#8 - Manage different versions of the game

Maintain multiple versions of your product. Branching strategies should help you maintain different versions of your game/product. It is a common practice for the developers to have at least a production version (free from bugs, well-tested) and a work-in-progress development version.

#9 - Scaling the game projects and companies

Are you an indie developer? Or you are employed by one of the game giants - Ubisoft, Tencent or King? Whatever project you are involved into at the moment, you may come to the point when you’ll need to deal with more teammates, run more tests, and fix more bugs. Version control software is an indispensable part of your game growth.

#10 - Facilitate the continuous game updates

Thinking about the previous point, how often do you plan to release your game updates? Do you plan to do it once a year, monthly or weekly?
The more frequently you update your game, the more likely you’ll need to do the feature branching or release branching to minimize bugs and achieve flawless user experience. Not to mention if you select the games-as-a-service model.

What to consider when selecting version control systems

If you’re about to start a project and deciding which version control system to use, you might want to consider the following.
  1. Ability to support game projects. Some version control platforms are better suited for application development where most of the assets are textual (source codes), and some are better at handling binaryfiles (audio, video, image assets). Make sure your source control system can handle both.
  2. User experience. The source control platform must be supported by tools. If the platform is a CLI-only (command-line interface), it might be popular amongst developers, but non-dev people (artists, designers) might have difficulty using it. The tools have to be friendly to everybody.
  3. Ecosystem of tools and integrations. Does your CI/CD platform support it? Can Jenkins pull from this repo? Your version control system must play nice with the CI/CD apps in the age of continuous integration. Other questions to ask might be;
  • Can you hook it up with Unreal/Unity?
  • Do our IDEs support it?
  • Is it easy to connect it with Trello? Jira?
  1. Hosted or on-premise. Are there companies offering a hosted solution for this version control system? Or do you have to provision a server yourself and find a data center where to park it? Hosting an in-premise source control system has advantages. Still, it also carries lots of baggage like IT personnel cost, capital cost, depreciation cost, etc. In contrast, a hosted solution lets you avoid all those in exchange for a fee.
  2. Single file versioning ability. Can you check out only a single file, or do you have to download everything? Some version control systems force developers to download all the updates from a central server before you can share or see any change. This might be sensible for application code, but it may not make sense for a game app where some of the assets are large binary files.
  3. Access control. Does the system let you control who has access to what? How granular is the control? Can you assign rights down to the file level? Can you assign read but not write privileges to users for particular files?
Some common version control systems are better at handling some of the things we stated above, and some are better at managing others. You may need to do a comparison matrix to select amongst the version control options.

If you ask an application developer for recommendation, I’m almost sure they’ll tell you Git, Subversion, or CVS. These are heavy favorites of app devs. They’re open-source software and great at handling textual data, but they may be ill-suited for a game development project because of the way they handle BLOBS or binary files (which a game app has lots of).
If you ask a game developer, you’ll get a different recommendation; game development projects have very different version control needs than application development projects. Should it be an independent software or a built-in feature in your database or CMS platform?
How many people are involved in game development? How many databases? How are localization and content delivery done?
Gridly features the built-in version control, which enables branching of the content datasets, tweak them in isolation and merge back to the master branch. Sign up for free and make your first branch.
submitted by LocalizeDirectAB to u/LocalizeDirectAB [link] [comments]

Forex Signals Reddit: top providers review (part 1)

Forex Signals Reddit: top providers review (part 1)

Forex Signals - TOP Best Services. Checked!

To invest in the financial markets, we must acquire good tools that help us carry out our operations in the best possible way. In this sense, we always talk about the importance of brokers, however, signal systems must also be taken into account.
The platforms that offer signals to invest in forex provide us with alerts that will help us in a significant way to be able to carry out successful operations.
For this reason, we are going to tell you about the importance of these alerts in relation to the trading we carry out, because, without a doubt, this type of system will provide us with very good information to invest at the right time and in the best assets in the different markets. financial
Within this context, we will focus on Forex signals, since it is the most important market in the world, since in it, multiple transactions are carried out on a daily basis, hence the importance of having an alert system that offers us all the necessary data to invest in currencies.
Also, as we all already know, cryptocurrencies have become a very popular alternative to investing in traditional currencies. Therefore, some trading services/tools have emerged that help us to carry out successful operations in this particular market.
In the following points, we will detail everything you need to know to start operating in the financial markets using trading signals: what are signals, how do they work, because they are a very powerful help, etc. Let's go there!

What are Forex Trading Signals?

https://preview.redd.it/vjdnt1qrpny51.jpg?width=640&format=pjpg&auto=webp&s=bc541fc996701e5b4dd940abed610b59456a5625
Before explaining the importance of Forex signals, let's start by making a small note so that we know what exactly these alerts are.
Thus, we will know that the signals on the currency market are received by traders to know all the information that concerns Forex, both for assets and for the market itself.
These alerts allow us to know the movements that occur in the Forex market and the changes that occur in the different currency pairs. But the great advantage that this type of system gives us is that they provide us with the necessary information, to know when is the right time to carry out our investments.
In other words, through these signals, we will know the opportunities that are presented in the market and we will be able to carry out operations that can become quite profitable.
Profitability is precisely another of the fundamental aspects that must be taken into account when we talk about Forex signals since the vast majority of these alerts offer fairly reliable data on assets. Similarly, these signals can also provide us with recommendations or advice to make our operations more successful.

»Purpose: predict movements to carry out Profitable Operations

In short, Forex signal systems aim to predict the behavior that the different assets that are in the market will present and this is achieved thanks to new technologies, the creation of specialized software, and of course, the work of financial experts.
In addition, it must also be borne in mind that the reliability of these alerts largely lies in the fact that they are prepared by financial professionals. So they turn out to be a perfect tool so that our investments can bring us a greater number of benefits.

The best signal services today

We are going to tell you about the 3 main alert system services that we currently have on the market. There are many more, but I can assure these are not scams and are reliable. Of course, not 100% of trades will be a winner, so please make sure you apply proper money management and risk management system.

1. 1000pipbuilder (top choice)

Fast track your success and follow the high-performance Forex signals from 1000pip Builder. These Forex signals are rated 5 stars on Investing.com, so you can follow every signal with confidence. All signals are sent by a professional trader with over 10 years investment experience. This is a unique opportunity to see with your own eyes how a professional Forex trader trades the markets.
The 1000pip Builder Membership is ordinarily a signal service for Forex trading. You will get all the facts you need to successfully comply with the trading signals, set your stop loss and take earnings as well as additional techniques and techniques!
You will get easy to use trading indicators for Forex Trades, including your entry, stop loss and take profit. Overall, the earnings target per months is 350 Pips, depending on your funding this can be a high profit per month! (In fact, there is by no means a guarantee, but the past months had been all between 600 – 1000 Pips).
>>>Know more about 1000pipbuilder
Your 1000pip builder membership gives you all in hand you want to start trading Forex with success. Read the directions and wait for the first signals. You can trade them inside your demo account first, so you can take a look at the performance before you make investments real money!
Features:
  • Free Trial
  • Forex signals sent by email and SMS
  • Entry price, take profit and stop loss provided
  • Suitable for all time zones (signals sent over 24 hours)
  • MyFXBook verified performance
  • 10 years of investment experience
  • Target 300-400 pips per month
Pricing:
https://preview.redd.it/zjc10xx6ony51.png?width=668&format=png&auto=webp&s=9b0eac95f8b584dc0cdb62503e851d7036c0232b
VISIT 1000ipbuilder here

2. DDMarkets

Digital Derivatives Markets (DDMarkets) have been providing trade alert offerings since May 2014 - fully documenting their change ideas in an open and transparent manner.
September 2020 performance report for DD Markets.
Their manner is simple: carry out extensive research, share their evaluation and then deliver a trading sign when triggered. Once issued, daily updates on the trade are despatched to members via email.
It's essential to note that DDMarkets do not tolerate floating in an open drawdown in an effort to earnings at any cost - a common method used by less professional providers to 'fudge' performance statistics.
Verified Statistics: Not independently verified.
Price: plans from $74.40 per month.
Year Founded: 2014
Suitable for Beginners: Yes, (includes handy to follow trade analysis)
VISIT
-------

3. JKonFX

If you are looking or a forex signal service with a reliable (and profitable) music record you can't go previous Joel Kruger and the team at JKonFX.
Trading performance file for JKonFX.
Joel has delivered a reputable +59.18% journal performance for 2016, imparting real-time technical and fundamental insights, in an extremely obvious manner, to their 30,000+ subscriber base. Considered a low-frequency trader, alerts are only a small phase of the overall JKonFX subscription. If you're searching for hundreds of signals, you may want to consider other options.
Verified Statistics: Not independently verified.
Price: plans from $30 per month.
Year Founded: 2014
Suitable for Beginners: Yes, (includes convenient to follow videos updates).
VISIT

The importance of signals to invest in Forex

Once we have known what Forex signals are, we must comment on the importance of these alerts in relation to our operations.
As we have already told you in the previous paragraph, having a system of signals to be able to invest is quite advantageous, since, through these alerts, we will obtain quality information so that our operations end up being a true success.

»Use of signals for beginners and experts

In this sense, we have to say that one of the main advantages of Forex signals is that they can be used by both beginners and trading professionals.
As many as others can benefit from using a trading signal system because the more information and resources we have in our hands. The greater probability of success we will have. Let's see how beginners and experts can take advantage of alerts:
  • Beginners: for inexperienced these alerts become even more important since they will thus have an additional tool that will guide them to carry out all operations in the Forex market.
  • Professionals: In the same way, professionals are also recommended to make use of these alerts, so they have adequate information to continue bringing their investments to fruition.
Now that we know that both beginners and experts can use forex signals to invest, let's see what other advantages they have.

»Trading automation

When we dedicate ourselves to working in the financial world, none of us can spend 24 hours in front of the computer waiting to perform the perfect operation, it is impossible.
That is why Forex signals are important, because, in order to carry out our investments, all we will have to do is wait for those signals to arrive, be attentive to all the alerts we receive, and thus, operate at the right time according to the opportunities that have arisen.
It is fantastic to have a tool like this one that makes our work easier in this regard.

»Carry out profitable Forex operations

These signals are also important, because the vast majority of them are usually quite profitable, for this reason, we must get an alert system that provides us with accurate information so that our operations can bring us great benefits.
But in addition, these Forex signals have an added value and that is that they are very easy to understand, therefore, we will have a very useful tool at hand that will not be complicated and will end up being a very beneficial weapon for us.

»Decision support analysis

A system of currency market signals is also very important because it will help us to make our subsequent decisions.
We cannot forget that, to carry out any type of operation in this market, previously, we must meditate well and know the exact moment when we will know that our investments are going to bring us profits .
Therefore, all the information provided by these alerts will be a fantastic basis for future operations that we are going to carry out.

»Trading Signals made by professionals

Finally, we have to recall the idea that these signals are made by the best professionals. Financial experts who know perfectly how to analyze the movements that occur in the market and changes in prices.
Hence the importance of alerts, since they are very reliable and are presented as a necessary tool to operate in Forex and that our operations are as profitable as possible.

What should a signal provider be like?

https://preview.redd.it/j0ne51jypny51.png?width=640&format=png&auto=webp&s=5578ff4c42bd63d5b6950fc6401a5be94b97aa7f
As you have seen, Forex signal systems are really important for our operations to bring us many benefits. For this reason, at present, there are multiple platforms that offer us these financial services so that investing in currencies is very simple and fast.
Before telling you about the main services that we currently have available in the market, it is recommended that you know what are the main characteristics that a good signal provider should have, so that, at the time of your choice, you are clear that you have selected one of the best systems.

»Must send us information on the main currency pairs

In this sense, one of the first things we have to comment on is that a good signal provider, at a minimum, must send us alerts that offer us information about the 6 main currencies, in this case, we refer to the euro, dollar, The pound, the yen, the Swiss franc, and the Canadian dollar.
Of course, the data you provide us will be related to the pairs that make up all these currencies. Although we can also find systems that offer us information about other minorities, but as we have said, at a minimum, we must know these 6.

»Trading tools to operate better

Likewise, signal providers must also provide us with a large number of tools so that we can learn more about the Forex market.
We refer, for example, to technical analysis above all, which will help us to develop our own strategies to be able to operate in this market.
These analyzes are always prepared by professionals and study, mainly, the assets that we have available to invest.

»Different Forex signals reception channels

They must also make available to us different ways through which they will send us the Forex signals, the usual thing is that we can acquire them through the platform's website, or by a text message and even through our email.
In addition, it is recommended that the signal system we choose sends us a large number of alerts throughout the day, in order to have a wide range of possibilities.

»Free account and customer service

Other aspects that we must take into account to choose a good signal provider is whether we have the option of receiving, for a limited time, alerts for free or the profitability of the signals they emit to us.
Similarly, a final aspect that we must emphasize is that a good signal system must also have excellent customer service, which is available to us 24 hours a day and that we can contact them at through an email, a phone number, or a live chat, for greater immediacy.
Well, having said all this, in our last section we are going to tell you which are the best services currently on the market. That is, the most suitable Forex signal platforms to be able to work with them and carry out good operations. In this case, we will talk about ForexPro Signals, 365 Signals and Binary Signals.

Forex Signals Reddit: conclusion

To be able to invest properly in the Forex market, it is convenient that we get a signal system that provides us with all the necessary information about this market. It must be remembered that Forex is a very volatile market and therefore, many movements tend to occur quickly.
Asset prices can change in a matter of seconds, hence the importance of having a system that helps us analyze the market and thus know, what is the right time for us to start operating.
Therefore, although there are currently many signal systems that can offer us good services, the three that we have mentioned above are the ones that are best valued by users, which is why they are the best signal providers that we can choose to carry out. our investments.
Most of these alerts are quite profitable and in addition, these systems usually emit a large number of signals per day with full guarantees. For all this, SignalsForexPro, Signals365, or SignalsBinary are presented as fundamental tools so that we can obtain a greater number of benefits when we carry out our operations in the currency market.
submitted by kayakero to makemoneyforexreddit [link] [comments]

HIRE A HACKER: SOLIDARITY HACKER FOR HIRE REVIEWS

BEST HACKER FOR HIRE TO HACK A CELL PHONE Hire a hacker that needs not to jailbreak your phone in order to use these iOS hacking apps. Once you do that, the option to get the seniorhackers app/service often comes up with an address for you to contact for further directives. The ethical hacking services can be used to analyze keychain contents, including passwords, keys, certificates and messages etc. for any sensitive information.
Speaking in developer language, seniorhacker.tech offers binary analysis using o tool, keychain analysis using keychain_dumper, working, Binary decryption using dump decrypted and database reading using SQLite. Besides these functions, the hacking tool also lets you create, edit and install the tweaks.
The iOS hacking app was developed by senior hackers for an easy to use web GUI and can be used in various programming functions such as Cycript integration, class dumps, automatic jailbreak-detection bypasses, automatic SSL certificate pinning bypasses, re-implemented objc_msgSend for logging and tracing function calls in real-time.
SOLIDARITY HACKER REVIEWS — Best iOS / MOBILE PHONE Hacking Application For iOS Myriam iOS Security App was developed by security researcher and GitHub user Solidarityhacker who created a learning platform for hack techies to become the next big iOS hackers where people can Hire a Hacker. As a result, this iOS hacking tool is the perfect place to start for any newbie iOS hacker to develop their skills.
Some of the hacking challenges a.k.a. device vulnerabilities that newbie hackers can exploit with this mobile hacking application include Authentication, In-App Data modification, App Activation Bypass, Jailbreak Detection, In-App Resources, and variable Modification.
To Provide a powerful tool that makes use of the widely-used Nmap scanner in the background to map and scan the connected networks. Once you install the Network Mapper app from Play Store, it will automatically download and install the required Nmap binaries from the Internet and provide you with an easy-to-use GUI to perform scans. Using Network Mapper, you can do a comprehensive scan on the network to identify live hosts and gather a range of information like open ports, network attributes, OS information, etc.
Trustworthy Certified Ethical Hackers For Hire
Solidarityhacker.com/services/ Hackers For Hire committed to excellence. There are situations when you just think how to hire a hacker, but you just hesitate to contact a hacker. Feel free to get in touch with us and maybe we might offer you the exact hire a hacker service you are looking for.
Here are a few of most widely used hacker for hire services.

Hire a Hacker Today! Your identity will be kept anonymous, Send a message to [email protected]
submitted by jhondaski5444 to u/jhondaski5444 [link] [comments]

New tool can diagnose strokes with a smartphone

New tool can diagnose strokes with a smartphone

Kathryn Atkinson, a patient at Houston Methodist Hospital, participates in a smartphone screening test to analyze stroke-like symptoms she's experiencing. The test is powered by a machine learning algorithm developed by researchers at Penn State's College of Information Sciences and Technology and Houston Methodist Hospital, which could significantly reduce the amount of time it takes physicians to diagnose a stroke. IMAGE: HOUSTON METHODIST HOSPITAL
UNIVERSITY PARK, Pa. — A new tool created by researchers at Penn State and Houston Methodist Hospital could diagnose a stroke based on abnormalities in a patient’s speech ability and facial muscular movements, and with the accuracy of an emergency room physician — all within minutes from an interaction with a smartphone.
“When a patient experiences symptoms of a stroke, every minute counts,” said James Wang, professor of information sciences and technology at Penn State. “But when it comes to diagnosing a stroke, emergency room physicians have limited options: send the patient for often expensive and time-consuming radioactivity-based scans or call a neurologist — a specialist who may not be immediately available — to perform clinical diagnostic tests.”
Wang and his colleagues have developed a machine learning model to aid in, and potentially speed up, the diagnostic process by physicians in a clinical setting.
“Currently, physicians have to use their past training and experience to determine at what stage a patient should be sent for a CT scan,” said Wang. “We are trying to simulate or emulate this process by using our machine learning approach.”
The team’s novel approach is the first to analyze the presence of stroke among actual emergency room patients with suspicion of stroke by using computational facial motion analysis and natural language processing to identify abnormalities in a patient’s face or voice, such as a drooping cheek or slurred speech.
The results could help emergency room physicians to more quickly determine critical next steps for the patient. Ultimately, the application could be utilized by caregivers or patients to make self-assessments before reaching the hospital.
“This is one of the first works that is enabling AI to help with stroke diagnosis in emergency settings,” added Sharon Huang, associate professor of information sciences and technology at Penn State.
To train the computer model, the researchers built a dataset from more than 80 patients experiencing stroke symptoms at Houston Methodist Hospital in Texas. Each patient was asked to perform a speech test to analyze their speech and cognitive communication while being recorded on an Apple iPhone.
“The acquisition of facial data in natural settings makes our work robust and useful for real-world clinical use, and ultimately empowers our method for remote diagnosis of stroke and self-assessment,” said Huang.
Testing the model on the Houston Methodist dataset, the researchers found that its performance achieved 79% accuracy — comparable to clinical diagnostics by emergency room doctors, who use additional tests such as CT scans. However, the model could help save valuable time in diagnosing a stroke, with the ability to assess a patient in as little as four minutes.
“There are millions of neurons dying every minute during a stroke,” said John Volpi, a vascular neurologist and co-director of the Eddy Scurlock Stroke Center at Houston Methodist Hospital. “In severe strokes it is obvious to our providers from the moment the patient enters the emergency department, but studies suggest that in the majority of strokes, which have mild to moderate symptoms, that a diagnosis can be delayed by hours and by then a patient may not be eligible for the best possible treatments.”
“The earlier you can identify a stroke, the better options (we have) for the patients,” added Stephen T.C. Wong, John S. Dunn, Sr. Presidential Distinguished Chair in Biomedical Engineering at the Ting Tsung and Wei Fong Chao Center for BRAIN and Houston Methodist Cancer Center. “That’s what makes an early diagnosis essential.”
Volpi said that physicians currently use a binary approach toward diagnosing strokes: They either suspect a stroke, sending the patient for a series of scans that could involve radiation; or they do not suspect a stroke, potentially overlooking patients who may need further assessment.
“What we think in that triage moment is being either biased toward overutilization (of scans, which have risks and benefits) or underdiagnosis,” said Volpi, a co-author on the paper. “If we can improve diagnostics at the front end, then we can better expose the right patients to the right risks and not miss patients who would potentially benefit.”
He added, “We have great therapeutics, medicines and procedures for strokes, but we have very primitive and, frankly, inaccurate diagnostics.”
Other collaborators on the project include Tongan Cai and Mingli Yu, graduate students working with Wang and Huang at Penn State; and Kelvin Wong, associate research professor of electronic engineering in oncology at Houston Methodist Hospital.
The team presented their paper, “Toward Rapid Stroke Diagnosis with Multimodal Deep Learning,” last week at the virtual 23rd International Conference on Medical Image Computing and Computer Assisted Intervention (MICCAI).
Penn State has also filed a provisional patent application jointly with Houston Methodist on the computer model.
Originally published by Jessica Hallman | October 20, 2020 Penn State News
original article
submitted by kjonesatjaagnet to JAAGNet [link] [comments]

First Time Going Through Coding Interviews?

This post draws on my personal experiences and challenges over the past term at school, which I entered with hardly any knowledge of DSA (data structures and algorithms) and problem-solving strategies. As a self-taught programmer, I was a lot more familiar and comfortable with general programming, such as object-oriented programming, than with the problem-solving skills required in DSA questions.
This post reflects my journey throughout the term and the resources I turned to in order to quickly improve for my coding interview.
Here're some common questions and answers
What's the interview process like at a tech company?
Good question. It's actually pretty different from most other companies.

(What It's Like To Interview For A Coding Job

First time interviewing for a tech job? Not sure what to expect? This article is for you.

Here are the usual steps:

  1. First, you’ll do a non-technical phone screen.
  2. Then, you’ll do one or a few technical phone interviews.
  3. Finally, the last step is an onsite interview.
Some companies also throw in a take-home code test—sometimes before the technical phone interviews, sometimes after.
Let’s walk through each of these steps.

The non-technical phone screen

This first step is a quick call with a recruiter—usually just 10–20 minutes. It's very casual.
Don’t expect technical questions. The recruiter probably won’t be a programmer.
The main goal is to gather info about your job search. Stuff like:

  1. Your timeline. Do you need to sign an offer in the next week? Or are you trying to start your new job in three months?
  2. What’s most important to you in your next job. Great team? Flexible hours? Interesting technical challenges? Room to grow into a more senior role?
  3. What stuff you’re most interested in working on. Front end? Back end? Machine learning?
Be honest about all this stuff—that’ll make it easier for the recruiter to get you what you want.
One exception to that rule: If the recruiter asks you about your salary expectations on this call, best not to answer. Just say you’d rather talk about compensation after figuring out if you and the company are a good fit. This’ll put you in a better negotiating position later on.

The technical phone interview(s)

The next step is usually one or more hour-long technical phone interviews.
Your interviewer will call you on the phone or tell you to join them on Skype or Google Hangouts. Make sure you can take the interview in a quiet place with a great internet connection. Consider grabbing a set of headphones with a good microphone or a bluetooth earpiece. Always test your hardware beforehand!
The interviewer will want to watch you code in real time. Usually that means using a web-based code editor like Coderpad or collabedit. Run some practice problems in these tools ahead of time, to get used to them. Some companies will just ask you to share your screen through Google Hangouts or Skype.
Turn off notifications on your computer before you get started—especially if you’re sharing your screen!
Technical phone interviews usually have three parts:

  1. Beginning chitchat (5–10 minutes)
  2. Technical challenges (30–50 minutes)
  3. Your turn to ask questions (5–10 minutes)
The beginning chitchat is half just to help your relax, and half actually part of the interview. The interviewer might ask some open-ended questions like:

  1. Tell me about yourself.
  2. Tell me about something you’ve built that you’re particularly proud of.
  3. I see this project listed on your resume—tell me more about that.
You should be able to talk at length about the major projects listed on your resume. What went well? What didn’t? How would you do things differently now?
Then come the technical challenges—the real meet of the interview. You’ll spend most of the interview on this. You might get one long question, or several shorter ones.
What kind of questions can you expect? It depends.
Startups tend to ask questions aimed towards building or debugging code. (“Write a function that takes two rectangles and figures out if they overlap.”). They’ll care more about progress than perfection.
Larger companies will want to test your general know-how of data structures and algorithms (“Write a function that checks if a binary tree is ‘balanced’ in O(n)O(n) ↴ time.”). They’ll care more about how you solve and optimize a problem.
With these types of questions, the most important thing is to be communicating with your interviewer throughout. You'll want to "think out loud" as you work through the problem. For more info, check out our more detailed step-by-step tips for coding interviews.
If the role requires specific languages or frameworks, some companies will ask trivia-like questions (“In Python, what’s the ‘global interpreter lock’?”).
After the technical questions, your interviewer will open the floor for you to ask them questions. Take some time before the interview to comb through the company’s website. Think of a few specific questions about the company or the role. This can really make you stand out.
When you’re done, they should give you a timeframe on when you’ll hear about next steps. If all went well, you’ll either get asked to do another phone interview, or you’ll be invited to their offices for an onsite.

The onsite interview

An onsite interview happens in person, at the company’s office. If you’re not local, it’s common for companies to pay for a flight and hotel room for you.
The onsite usually consists of 2–6 individual, one-on-one technical interviews (usually in a small conference room). Each interview will be about an hour and have the same basic form as a phone screen—technical questions, bookended by some chitchat at the beginning and a chance for you to ask questions at the end.
The major difference between onsite technical interviews and phone interviews though: you’ll be coding on a whiteboard.
This is awkward at first. No autocomplete, no debugging tools, no delete button…ugh. The good news is, after some practice you get used to it. Before your onsite, practice writing code on a whiteboard (in a pinch, a pencil and paper are fine). Some tips:

  1. Start in the top-most left corner of the whiteboard. This gives you the most room. You’ll need more space than you think.
  2. Leave a blank line between each line as you write your code. Makes it much easier to add things in later.
  3. Take an extra second to decide on your variable names. Don’t rush this part. It might seem like a waste of time, but using more descriptive variable names ultimately saves you time because it makes you less likely to get confused as you write the rest of your code.
If a technical phone interview is a sprint, an onsite is a marathon. The day can get really long. Best to keep it open—don’t make other plans for the afternoon or evening.
When things go well, you’ wrap-up by chatting with the CEO or some other director. This is half an interview, half the company trying to impress you. They may invite you to get drinks with the team after hours.
All told, a long day of onsite interviews could look something like this:

If they let you go after just a couple interviews, it’s usually a sign that they’re going to pass on you. That’s okay—it happens!
There are are a lot of easy things you can do the day before and morning of your interview to put yourself in the best possible mindset. Check out our piece on what to do in the 24 hours before your onsite coding interview.

The take-home code test

Code tests aren’t ubiquitous, but they seem to be gaining in popularity. They’re far more common at startups, or places where your ability to deliver right away is more important than your ability to grow.
You’ll receive a description of an app or service, a rough time constraint for writing your code, and a deadline for when to turn it in. The deadline is usually negotiable.
Here's an example problem:
Write a basic “To-Do” app. Unit test the core functionality. As a bonus, add a “reminders” feature. Try to spend no more than 8 hours on it, and send in what you have by Friday with a small write-up.
Take a crack at the “bonus” features if they include any. At the very least, write up how you would implement it.
If they’re hiring for people with knowledge of a particular framework, they might tell you what tech to use. Otherwise, it’ll be up to you. Use what you’re most comfortable with. You want this code to show you at your best.
Some places will offer to pay you for your time. It's rare, but some places will even invite you to work with them in their office for a few days, as a "trial.")
Do I need to know this "big O" stuff?
Big O notation is the language we use for talking about the efficiency of data structures and algorithms.
Will it come up in your interviews? Well, it depends. There are different types of interviews.
There’s the classic algorithmic coding interview, sometimes called the “Google-style whiteboard interview.” It’s focused on data structures and algorithms (queues and stacks, binary search, etc).
That’s what our full course prepares you for. It's how the big players interview. Google, Facebook, Amazon, Microsoft, Oracle, LinkedIn, etc.
For startups and smaller shops, it’s a mixed bag. Most will ask at least a few algorithmic questions. But they might also include some role-specific stuff, like Java questions or SQL questions for a backend web engineer. They’ll be especially interested in your ability to ship code without much direction. You might end up doing a code test or pair-programming exercise instead of a whiteboarding session.
To make sure you study for the right stuff, you should ask your recruiter what to expect. Send an email with a question like, “Is this interview going to cover data structures and algorithms? Or will it be more focused around coding in X language.” They’ll be happy to tell you.
If you've never learned about data structures and algorithms, or you're feeling a little rusty, check out our Intuitive Guide to Data Structures and Algorithms.
Which programming language should I use?
Companies usually let you choose, in which case you should use your most comfortable language. If you know a bunch of languages, prefer one that lets you express more with fewer characters and fewer lines of code, like Python or Ruby. It keeps your whiteboard cleaner.
Try to stick with the same language for the whole interview, but sometimes you might want to switch languages for a question. E.g., processing a file line by line will be far easier in Python than in C++.
Sometimes, though, your interviewer will do this thing where they have a pet question that’s, for example, C-specific. If you list C on your resume, they’ll ask it.
So keep that in mind! If you’re not confident with a language, make that clear on your resume. Put your less-strong languages under a header like ‘Working Knowledge.’
What should I wear?
A good rule of thumb is to dress a tiny step above what people normally wear to the office. For most west coast tech companies, the standard digs are just jeans and a t-shirt. Ask your recruiter what the office is like if you’re worried about being too casual.
Should I send a thank-you note?
Thank-you notes are nice, but they aren’t really expected. Be casual if you send one. No need for a hand-calligraphed note on fancy stationery. Opt for a short email to your recruiter or the hiring manager. Thank them for helping you through the process, and ask them to relay your thanks to your interviewers.
1) Coding Interview Tips
How to get better at technical interviews without practicing
Chitchat like a pro.
Before diving into code, most interviewers like to chitchat about your background. They're looking for:

You should have at least one:

Nerd out about stuff. Show you're proud of what you've done, you're amped about what they're doing, and you have opinions about languages and workflows.
Communicate.
Once you get into the coding questions, communication is key. A candidate who needed some help along the way but communicated clearly can be even better than a candidate who breezed through the question.
Understand what kind of problem it is. There are two types of problems:

  1. Coding. The interviewer wants to see you write clean, efficient code for a problem.
  2. Chitchat. The interviewer just wants you to talk about something. These questions are often either (1) high-level system design ("How would you build a Twitter clone?") or (2) trivia ("What is hoisting in Javascript?"). Sometimes the trivia is a lead-in for a "real" question e.g., "How quickly can we sort a list of integers? Good, now suppose instead of integers we had . . ."
If you start writing code and the interviewer just wanted a quick chitchat answer before moving on to the "real" question, they'll get frustrated. Just ask, "Should we write code for this?"
Make it feel like you're on a team. The interviewer wants to know what it feels like to work through a problem with you, so make the interview feel collaborative. Use "we" instead of "I," as in, "If we did a breadth-first search we'd get an answer in O(n)O(n) time." If you get to choose between coding on paper and coding on a whiteboard, always choose the whiteboard. That way you'll be situated next to the interviewer, facing the problem (rather than across from her at a table).
Think out loud. Seriously. Say, "Let's try doing it this way—not sure yet if it'll work." If you're stuck, just say what you're thinking. Say what might work. Say what you thought could work and why it doesn't work. This also goes for trivial chitchat questions. When asked to explain Javascript closures, "It's something to do with scope and putting stuff in a function" will probably get you 90% credit.
Say you don't know. If you're touching on a fact (e.g., language-specific trivia, a hairy bit of runtime analysis), don't try to appear to know something you don't. Instead, say "I'm not sure, but I'd guess $thing, because...". The because can involve ruling out other options by showing they have nonsensical implications, or pulling examples from other languages or other problems.
Slow the eff down. Don't confidently blurt out an answer right away. If it's right you'll still have to explain it, and if it's wrong you'll seem reckless. You don't win anything for speed and you're more likely to annoy your interviewer by cutting her off or appearing to jump to conclusions.
Get unstuck.
Sometimes you'll get stuck. Relax. It doesn't mean you've failed. Keep in mind that the interviewer usually cares more about your ability to cleverly poke the problem from a few different angles than your ability to stumble into the correct answer. When hope seems lost, keep poking.
Draw pictures. Don't waste time trying to think in your head—think on the board. Draw a couple different test inputs. Draw how you would get the desired output by hand. Then think about translating your approach into code.
Solve a simpler version of the problem. Not sure how to find the 4th largest item in the set? Think about how to find the 1st largest item and see if you can adapt that approach.
Write a naive, inefficient solution and optimize it later. Use brute force. Do whatever it takes to get some kind of answer.
Think out loud more. Say what you know. Say what you thought might work and why it won't work. You might realize it actually does work, or a modified version does. Or you might get a hint.
Wait for a hint. Don't stare at your interviewer expectantly, but do take a brief second to "think"—your interviewer might have already decided to give you a hint and is just waiting to avoid interrupting.
Think about the bounds on space and runtime. If you're not sure if you can optimize your solution, think about it out loud. For example:

Get your thoughts down.
It's easy to trip over yourself. Focus on getting your thoughts down first and worry about the details at the end.
Call a helper function and keep moving. If you can't immediately think of how to implement some part of your algorithm, big or small, just skip over it. Write a call to a reasonably-named helper function, say "this will do X" and keep going. If the helper function is trivial, you might even get away with never implementing it.
Don't worry about syntax. Just breeze through it. Revert to English if you have to. Just say you'll get back to it.
Leave yourself plenty of room. You may need to add code or notes in between lines later. Start at the top of the board and leave a blank line between each line.
Save off-by-one checking for the end. Don't worry about whether your for loop should have "<<" or "<=<=." Write a checkmark to remind yourself to check it at the end. Just get the general algorithm down.
Use descriptive variable names. This will take time, but it will prevent you from losing track of what your code is doing. Use names_to_phone_numbers instead of nums. Imply the type in the name. Functions returning booleans should start with "is_*". Vars that hold a list should end with "s." Choose standards that make sense to you and stick with them.
Clean up when you're done.
Walk through your solution by hand, out loud, with an example input. Actually write down what values the variables hold as the program is running—you don't win any brownie points for doing it in your head. This'll help you find bugs and clear up confusion your interviewer might have about what you're doing.
Look for off-by-one errors. Should your for loop use a "<=<=" instead of a "<<"?
Test edge cases. These might include empty sets, single-item sets, or negative numbers. Bonus: mention unit tests!
Don't be boring. Some interviewers won't care about these cleanup steps. If you're unsure, say something like, "Then I'd usually check the code against some edge cases—should we do that next?"
Practice.
In the end, there's no substitute for running practice questions.
Actually write code with pen and paper. Be honest with yourself. It'll probably feel awkward at first. Good. You want to get over that awkwardness now so you're not fumbling when it's time for the real interview.

2) Tricks For Getting Unstuck During a Coding Interview
Getting stuck during a coding interview is rough.
If you weren’t in an interview, you might take a break or ask Google for help. But the clock is ticking, and you don’t have Google.
You just have an empty whiteboard, a smelly marker, and an interviewer who’s looking at you expectantly. And all you can think about is how stuck you are.
You need a lifeline for these moments—like a little box that says “In Case of Emergency, Break Glass.”
Inside that glass box? A list of tricks for getting unstuck. Here’s that list of tricks.
When you’re stuck on getting started
1) Write a sample input on the whiteboard and turn it into the correct output "by hand." Notice the process you use. Look for patterns, and think about how to implement your process in code.
Trying to reverse a string? Write “hello” on the board. Reverse it “by hand”—draw arrows from each character’s current position to its desired position.
Notice the pattern: it looks like we’re swapping pairs of characters, starting from the outside and moving in. Now we’re halfway to an algorithm.
2) Solve a simpler version of the problem. Remove or simplify one of the requirements of the problem. Once you have a solution, see if you can adapt that approach for the original question.
Trying to find the k-largest element in a set? Walk through finding the largest element, then the second largest, then the third largest. Generalizing from there to find the k-largest isn’t so bad.
3) Start with an inefficient solution. Even if it feels stupidly inefficient, it’s often helpful to start with something that’ll return the right answer. From there, you just have to optimize your solution. Explain to your interviewer that this is only your first idea, and that you suspect there are faster solutions.
Suppose you were given two lists of sorted numbers and asked to find the median of both lists combined. It’s messy, but you could simply:

  1. Concatenate the arrays together into a new array.
  2. Sort the new array.
  3. Return the value at the middle index.
Notice that you could’ve also arrived at this algorithm by using trick (2): Solve a simpler version of the problem. “How would I find the median of one sorted list of numbers? Just grab the item at the middle index. Now, can I adapt that approach for getting the median of two sorted lists?”
When you’re stuck on finding optimizations
1) Look for repeat work. If your current solution goes through the same data multiple times, you’re doing unnecessary repeat work. See if you can save time by looking through the data just once.
Say that inside one of your loops, there’s a brute-force operation to find an element in an array. You’re repeatedly looking through items that you don’t have to. Instead, you could convert the array to a lookup table to dramatically improve your runtime.
2) Look for hints in the specifics of the problem. Is the input array sorted? Is the binary tree balanced? Details like this can carry huge hints about the solution. If it didn’t matter, your interviewer wouldn’t have brought it up. It’s a strong sign that the best solution to the problem exploits it.
Suppose you’re asked to find the first occurrence of a number in a sorted array. The fact that the array is sorted is a strong hint—take advantage of that fact by using a binary search.

Sometimes interviewers leave the question deliberately vague because they want you to ask questions to unearth these important tidbits of context. So ask some questions at the beginning of the problem.
3) Throw some data structures at the problem. Can you save time by using the fast lookups of a hash table? Can you express the relationships between data points as a graph? Look at the requirements of the problem and ask yourself if there’s a data structure that has those properties.
4) Establish bounds on space and runtime. Think out loud about the parameters of the problem. Try to get a sense for how fast your algorithm could possibly be:

When All Else Fails
1) Make it clear where you are. State what you know, what you’re trying to do, and highlight the gap between the two. The clearer you are in expressing exactly where you’re stuck, the easier it is for your interviewer to help you.
2) Pay attention to your interviewer. If she asks a question about something you just said, there’s probably a hint buried in there. Don’t worry about losing your train of thought—drop what you’re doing and dig into her question.
Relax. You’re supposed to get stuck.
Interviewers choose hard problems on purpose. They want to see how you poke at a problem you don’t immediately know how to solve.
Seriously. If you don’t get stuck and just breeze through the problem, your interviewer’s evaluation might just say “Didn’t get a good read on candidate’s problem-solving process—maybe she’d already seen this interview question before?”
On the other hand, if you do get stuck, use one of these tricks to get unstuck, and communicate clearly with your interviewer throughout...that’s how you get an evaluation like, “Great problem-solving skills. Hire.”

3) Fixing Impostor Syndrome in Coding Interviews
“It's a fluke that I got this job interview...”
“I studied for weeks, but I’m still not prepared...”
“I’m not actually good at this. They’re going to see right through me...”
If any of these thoughts resonate with you, you're not alone. They are so common they have a name: impostor syndrome.
It’s that feeling like you’re on the verge of being exposed for what you really are—an impostor. A fraud.
Impostor syndrome is like kryptonite to coding interviews. It makes you give up and go silent.
You might stop asking clarifying questions because you’re afraid they’ll sound too basic. Or you might neglect to think out loud at the whiteboard, fearing you’ll say something wrong and sound incompetent.
You know you should speak up, but the fear of looking like an impostor makes that really, really hard.
Here’s the good news: you’re not an impostor. You just feel like an impostor because of some common cognitive biases about learning and knowledge.
Once you understand these cognitive biases—where they come from and how they work—you can slowly fix them. You can quiet your worries about being an impostor and keep those negative thoughts from affecting your interviews.

Everything you could know

Here’s how impostor syndrome works.
Software engineering is a massive field. There’s a huge universe of things you could know. Huge.
In comparison to the vast world of things you could know, the stuff you actually know is just a tiny sliver:
That’s the first problem. It feels like you don’t really know that much, because you only know a tiny sliver of all the stuff there is to know.

The expanding universe

It gets worse: counterintuitively, as you learn more, your sliver of knowledge feels like it's shrinking.
That's because you brush up against more and more things you don’t know yet. Whole disciplines like machine learning, theory of computation, and embedded systems. Things you can't just pick up in an afternoon. Heavy bodies of knowledge that take months to understand.
So the universe of things you could know seems to keep expanding faster and faster—much faster than your tiny sliver of knowledge is growing. It feels like you'll never be able to keep up.

What everyone else knows

Here's another common cognitive bias: we assume that because something is easy for us, it must be easy for everyone else. So when we look at our own skills, we assume they're not unique. But when we look at other people's skills, we notice the skills they have that we don't have.
The result? We think everyone’s knowledge is a superset of our own:
This makes us feel like everyone else is ahead of us. Like we're always a step behind.
But the truth is more like this:
There's a whole area of stuff you know that neither Aysha nor Bruno knows. An area you're probably blind to, because you're so focused on the stuff you don't know.

We’ve all had flashes of realizing this. For me, it was seeing the back end code wizard on my team—the one that always made me feel like an impostor—spend an hour trying to center an image on a webpage.

It's a problem of focus

Focusing on what you don't know causes you to underestimate what you do know. And that's what causes impostor syndrome.
By looking at the vast (and expanding) universe of things you could know, you feel like you hardly know anything.
And by looking at what Aysha and Bruno know that you don't know, you feel like you're a step behind.
And interviews make you really focus on what you don't know. You focus on what could go wrong. The knowledge gaps your interviewers might find. The questions you might not know how to answer.
But remember:
Just because Aysha and Bruno know some things you don't know, doesn't mean you don't also know things Aysha and Bruno don't know.
And more importantly, everyone's body of knowledge is just a teeny-tiny sliver of everything they could learn. We all have gaps in our knowledge. We all have interview questions we won't be able to answer.
You're not a step behind. You just have a lot of stuff you don't know yet. Just like everyone else.

4) The 24 Hours Before Your Interview

Feeling anxious? That’s normal. Your body is telling you you’re about to do something that matters.

The twenty-four hours before your onsite are about finding ways to maximize your performance. Ideally, you wanna be having one of those days, where elegant code flows effortlessly from your fingertips, and bugs dare not speak your name for fear you'll squash them.
You need to get your mind and body in The Zone™ before you interview, and we've got some simple suggestions to help.
5) Why You're Hitting Dead Ends In Whiteboard Interviews

The coding interview is like a maze

Listening vs. holding your train of thought

Finally! After a while of shooting in the dark and frantically fiddling with sample inputs on the whiteboard, you've came up with an algorithm for solving the coding question your interviewer gave you.
Whew. Such a relief to have a clear path forward. To not be flailing anymore.
Now you're cruising, getting ready to code up your solution.
When suddenly, your interviewer throws you a curve ball.
"What if we thought of the problem this way?"
You feel a tension we've all felt during the coding interview:
"Try to listen to what they're saying...but don't lose your train of thought...ugh, I can't do both!"
This is a make-or-break moment in the coding interview. And so many people get it wrong.
Most candidates end up only half understanding what their interviewer is saying. Because they're only half listening. Because they're desperately clinging to their train of thought.
And it's easy to see why. For many of us, completely losing track of what we're doing is one of our biggest coding interview fears. So we devote half of our mental energy to clinging to our train of thought.
To understand why that's so wrong, we need to understand the difference between what we see during the coding interview and what our interviewer sees.

The programming interview maze

Working on a coding interview question is like walking through a giant maze.
You don't know anything about the shape of the maze until you start wandering around it. You might know vaguely where the solution is, but you don't know how to get there.
As you wander through the maze, you might find a promising path (an approach, a way to break down the problem). You might follow that path for a bit.
Suddenly, your interviewer suggests a different path:
But from what you can see so far of the maze, your approach has already gotten you halfway there! Losing your place on your current path would mean a huge step backwards. Or so it seems.
That's why people hold onto their train of thought instead of listening to their interviewer. Because from what they can see, it looks like they're getting somewhere!
But here's the thing: your interviewer knows the whole maze. They've asked this question 100 times.

I'm not exaggerating: if you interview candidates for a year, you can easily end up asking the same question over 100 times.
So if your interviewer is suggesting a certain path, you can bet it leads to an answer.
And your seemingly great path? There's probably a dead end just ahead that you haven't seen yet:
Or it could just be a much longer route to a solution than you think it is. That actually happens pretty often—there's an answer there, but it's more complicated than you think.

Hitting a dead end is okay. Failing to listen is not.

Your interviewer probably won't fault you for going down the wrong path at first. They've seen really smart engineers do the same thing. They understand it's because you only have a partial view of the maze.
They might have let you go down the wrong path for a bit to see if you could keep your thinking organized without help. But now they want to rush you through the part where you discover the dead end and double back. Not because they don't believe you can manage it yourself. But because they want to make sure you have enough time to finish the question.
But here's something they will fault you for: failing to listen to them. Nobody wants to work with an engineer who doesn't listen.
So when you find yourself in that crucial coding interview moment, when you're torn between holding your train of thought and considering the idea your interviewer is suggesting...remember this:
Listening to your interviewer is the most important thing.
Take what they're saying and run with it. Think of the next steps that follow from what they're saying.
Even if it means completely leaving behind the path you were on. Trust the route your interviewer is pointing you down.
Because they can see the whole maze.
6) How To Get The Most Out Of Your Coding Interview Practice Sessions
When you start practicing for coding interviews, there’s a lot to cover. You’ll naturally wanna brush up on technical questions. But how you practice those questions will make a big difference in how well you’re prepared.
Here’re a few tips to make sure you get the most out of your practice sessions.
Track your weak spots
One of the hardest parts of practicing is knowing what to practice. Tracking what you struggle with helps answer that question.
So grab a fresh notebook. After each question, look back and ask yourself, “What did I get wrong about this problem at first?” Take the time to write down one or two things you got stuck on, and what helped you figure them out. Compare these notes to our tips for getting unstuck.
After each full practice session, read through your entire running list. Read it at the beginning of each practice session too. This’ll add a nice layer of rigor to your practice, so you’re really internalizing the lessons you’re learning.
Use an actual whiteboard
Coding on a whiteboard is awkward at first. You have to write out every single character, and you can’t easily insert or delete blocks of code.
Use your practice sessions to iron out that awkwardness. Run a few problems on a piece of paper or, if you can, a real whiteboard. A few helpful tips for handwriting code:

Set a timer
Get a feel for the time pressure of an actual interview. You should be able to finish a problem in 30–45 minutes, including debugging your code at the end.
If you’re just starting out and the timer adds too much stress, put this technique on the shelf. Add it in later as you start to get more comfortable with solving problems.
Think out loud
Like writing code on a whiteboard, this is an acquired skill. It feels awkward at first. But your interviewer will expect you to think out loud during the interview, so you gotta power through that awkwardness.
A good trick to get used to talking out loud: Grab a buddy. Another engineer would be great, but you can also do this with a non-technical friend.
Have your buddy sit in while you talk through a problem. Better yet—try loading up one of our questions on an iPad and giving that to your buddy to use as a script!
Set aside a specific time of day to practice.
Give yourself an hour each day to practice. Commit to practicing around the same time, like after you eat dinner. This helps you form a stickier habit of practicing.
Prefer small, daily doses of practice to doing big cram sessions every once in a while. Distributing your practice sessions helps you learn more with less time and effort in the long run.
part -2 will be upcoming in another post !
submitted by Cyberrockz to u/Cyberrockz [link] [comments]

Installing Qt5Svg with Conan

Apologies in advance, I'm pretty sure this is not a CMake or C++ issue in particular but I've been looking for a Conan related subreddit and couldn't find any.

So I'm trying to port this project I've been working on from qmake to cmake. I also plan to get my qt dependencies through Conan and get a CI service going.
Getting most of the qt libraries was fairly easy using qt/[email protected]/stable. Except one. For some reason, the Qt5Svg module is not included with this package and I couldn't find a good solution for this so I've hit a dead end. Bellow are the error messages and the relevant cmake files.

Error message
> [CMake] CMake Error at src/analysis_tool/CMakeLists.txt:33 (find_package):
> [CMake] By not providing "FindQt5Svg.cmake" in CMAKE_MODULE_PATH this project has
> [CMake] asked CMake to find a package configuration file provided by "Qt5Svg", but
> [CMake] CMake did not find one.
> [CMake]
> [CMake] Could not find a package configuration file provided by "Qt5Svg" with any
> [CMake] of the following names:
> [CMake]
> [CMake] Qt5SvgConfig.cmake
> [CMake] qt5svg-config.cmake
> [CMake]
> [CMake] Add the installation prefix of "Qt5Svg" to CMAKE_PREFIX_PATH or set
> [CMake] "Qt5Svg_DIR" to a directory containing one of the above files. If "Qt5Svg"
> [CMake] provides a separate development package or SDK, be sure it has been
> [CMake] installed.

Conan.cmake (which is called from the top level CMakeLists.txt file) macro(run_conan) # Download automatically, you can also just copy the conan.cmake file if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake") message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan") message(${CMAKE_BINARY_DIR};) file(DOWNLOAD "https://github.com/conan-io/cmake-conan/raw/v0.15/conan.cmake" "${CMAKE_BINARY_DIR}/conan.cmake") endif() include(${CMAKE_BINARY_DIR}/conan.cmake) conan_add_remote( NAME bincrafters URL https://api.bintray.com/conan/bincrafters/public-conan) conan_cmake_run( REQUIRES qt/[email protected]/stable OPTIONS ${CONAN_EXTRA_OPTIONS} BASIC_SETUP CMAKE_TARGETS # individual targets to link to BUILD missing) endmacro() 

Executable CMake
cmake_minimum_required(VERSION 3.8) project(codego) file(GLOB CODEGO_SOURCES "src/*.cpp") file(GLOB CODEGO_HEADERS "include/*.h") file(GLOB CODEGO_UIS "ui/*.ui") file(GLOB CODEGO_RES "res/*.qrc") set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOUIC_SEARCH_PATHS ui) add_executable(${PROJECT_NAME} src/main.cpp ${CODEGO_UIS}) target_include_directories(${PROJECT_NAME} PUBLIC include) target_include_directories(${PROJECT_NAME} PUBLIC ui) target_include_directories(${PROJECT_NAME} PUBLIC res) find_package(Qt5Core REQUIRED) find_package(Qt5Gui REQUIRED) find_package(Qt5Widgets REQUIRED) find_package(Qt5Xml REQUIRED) find_package(Qt5Svg REQUIRED) # Add the include directories for the Qt 5 modules to the compile lines. include_directories(${Qt5Core_INCLUDE_DIRS}/QtCore) include_directories(${Qt5Gui_INCLUDE_DIRS}/QtGui) include_directories(${Qt5Widgets_INCLUDE_DIRS}/QtWidgets) include_directories(${Qt5Xml_INCLUDE_DIRS}/QtXml) include_directories(${Qt5Xml_INCLUDE_DIRS}/QtSvg) # Use the compile definitions defined in the Qt 5 modules add_definitions(${Qt5Core_DEFINITIONS}) add_definitions(${Qt5Gui_DEFINITIONS}) add_definitions(${Qt5Widgets_DEFINITIONS}) add_definitions(${Qt5Xml_DEFINITIONS}) add_definitions(${Qt5Svg_DEFINITIONS}) qt5_wrap_ui(WRAP_UI_MOC ${CODEGO_UIS}) qt5_wrap_cpp(WRAP_HEADER_MOC ${CODEGO_HEADERS}) include_directories(${PROJECT_SOURCE_DIR}) include_directories(${PROJECT_BINARY_DIR}) include_directories(${CMAKE_BINARY_DIR}) include_directories(include) add_library(PROJECT_LIBRARIES SHARED ${CODEGO\_SOURCES} ${WRAP\_UI\_MOC} ${WRAP\_HEADER\_MOC}) target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml Qt5::Svg) target_link_libraries(${PROJECT_NAME} PROJECT_LIBRARIES) 

All the other modules seem to be installing just fine (Qt5Core Qt5Widgets etc) and I can find them in the .conan folder but not the Qt5Svg one. Thanks for taking the time to read through this.
submitted by Butterscotch1993 to cpp_questions [link] [comments]

Installing Qt5Svg with Conan

Apologies in advance, I'm pretty sure this is not a CMake or C++ issue in particular but I've been looking for a Conan related subreddit and couldn't find any.

So I'm trying to port this project I've been working on from qmake to cmake. I also plan to get my qt dependencies through Conan and get a CI service going.
Getting most of the qt libraries was fairly easy using qt/[email protected]/stable. Except one. For some reason, the Qt5Svg module is not included with this package and I couldn't find a good solution for this so I've hit a dead end. Bellow are the error messages and the relevant cmake files.

Error message
> [CMake] CMake Error at src/analysis_tool/CMakeLists.txt:33 (find_package):
> [CMake] By not providing "FindQt5Svg.cmake" in CMAKE_MODULE_PATH this project has
> [CMake] asked CMake to find a package configuration file provided by "Qt5Svg", but
> [CMake] CMake did not find one.
> [CMake]
> [CMake] Could not find a package configuration file provided by "Qt5Svg" with any
> [CMake] of the following names:
> [CMake]
> [CMake] Qt5SvgConfig.cmake
> [CMake] qt5svg-config.cmake
> [CMake]
> [CMake] Add the installation prefix of "Qt5Svg" to CMAKE_PREFIX_PATH or set
> [CMake] "Qt5Svg_DIR" to a directory containing one of the above files. If "Qt5Svg"
> [CMake] provides a separate development package or SDK, be sure it has been
> [CMake] installed.

Conan.cmake (which is called from the top level CMakeLists.txt file) macro(run_conan) # Download automatically, you can also just copy the conan.cmake file if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake") message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan") message(${CMAKE_BINARY_DIR};) file(DOWNLOAD "https://github.com/conan-io/cmake-conan/raw/v0.15/conan.cmake" "${CMAKE_BINARY_DIR}/conan.cmake") endif() include(${CMAKE_BINARY_DIR}/conan.cmake) conan_add_remote( NAME bincrafters URL https://api.bintray.com/conan/bincrafters/public-conan) conan_cmake_run( REQUIRES qt/[email protected]/stable OPTIONS ${CONAN_EXTRA_OPTIONS} BASIC_SETUP CMAKE_TARGETS # individual targets to link to BUILD missing) endmacro() 

Executable CMake
cmake_minimum_required(VERSION 3.8) project(codego) file(GLOB CODEGO_SOURCES "src/*.cpp") file(GLOB CODEGO_HEADERS "include/*.h") file(GLOB CODEGO_UIS "ui/*.ui") file(GLOB CODEGO_RES "res/*.qrc") set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOUIC_SEARCH_PATHS ui) add_executable(${PROJECT_NAME} src/main.cpp ${CODEGO_UIS}) target_include_directories(${PROJECT_NAME} PUBLIC include) target_include_directories(${PROJECT_NAME} PUBLIC ui) target_include_directories(${PROJECT_NAME} PUBLIC res) find_package(Qt5Core REQUIRED) find_package(Qt5Gui REQUIRED) find_package(Qt5Widgets REQUIRED) find_package(Qt5Xml REQUIRED) find_package(Qt5Svg REQUIRED) # Add the include directories for the Qt 5 modules to the compile lines. include_directories(${Qt5Core_INCLUDE_DIRS}/QtCore) include_directories(${Qt5Gui_INCLUDE_DIRS}/QtGui) include_directories(${Qt5Widgets_INCLUDE_DIRS}/QtWidgets) include_directories(${Qt5Xml_INCLUDE_DIRS}/QtXml) include_directories(${Qt5Xml_INCLUDE_DIRS}/QtSvg) # Use the compile definitions defined in the Qt 5 modules add_definitions(${Qt5Core_DEFINITIONS}) add_definitions(${Qt5Gui_DEFINITIONS}) add_definitions(${Qt5Widgets_DEFINITIONS}) add_definitions(${Qt5Xml_DEFINITIONS}) add_definitions(${Qt5Svg_DEFINITIONS}) qt5_wrap_ui(WRAP_UI_MOC ${CODEGO_UIS}) qt5_wrap_cpp(WRAP_HEADER_MOC ${CODEGO_HEADERS}) include_directories(${PROJECT_SOURCE_DIR}) include_directories(${PROJECT_BINARY_DIR}) include_directories(${CMAKE_BINARY_DIR}) include_directories(include) add_library(PROJECT_LIBRARIES SHARED ${CODEGO\_SOURCES} ${WRAP\_UI\_MOC} ${WRAP\_HEADER\_MOC}) target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml Qt5::Svg) target_link_libraries(${PROJECT_NAME} PROJECT_LIBRARIES) 

All the other modules seem to be installing just fine (Qt5Core Qt5Widgets etc) and I can find them in the .conan folder but not the Qt5Svg one. Thanks for taking the time to read through this.
submitted by Butterscotch1993 to cmake [link] [comments]

[N] Tensorflow 2.3.0 Released!

There is also a new experimental tf.data API for saving and loading datasets(https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/data/experimental/save)
https://github.com/tensorflow/tensorflow/commit/4d58a67a9f19ab8d0cfbb2d8e461ebb73ce06db6
https://github.com/tensorflow/tensorflow/issues/38483#issuecomment-640963109

https://github.com/tensorflow/tensorflow/releases/tag/v2.3.0

Release 2.3.0

Major Features and Improvements


In addition checkout the detailed guide for analyzing input pipeline performance with TF Profiler.

Breaking Changes


Known Caveats


Bug Fixes and Other Changes

TF Core:


tf.data:


tf.distribute:


tf.keras:


tf.lite:


Packaging Support


Profiler


TPU Enhancements


Tracing and Debugging


XLA Support


submitted by IIIBlueberry to MachineLearning [link] [comments]

AJ ALMENDINGER

glimpse into the future of Roblox

Our vision to bring the world together through play has never been more relevant than it is now. As our founder and CEO, David Baszucki (a.k.a. Builderman), mentioned in his keynote, more and more people are using Roblox to stay connected with their friends and loved ones. He hinted at a future where, with our automatic machine translation technology, Roblox will one day act as a universal translator, enabling people from different cultures and backgrounds to connect and learn from each other.
During his keynote, Builderman also elaborated upon our vision to build the Metaverse; the future of avatar creation on the platform (infinitely customizable avatars that allow any body, any clothing, and any animation to come together seamlessly); more personalized game discovery; and simulating large social gatherings (like concerts, graduations, conferences, etc.) with tens of thousands of participants all in one server. We’re still very early on in this journey, but if these past five months have shown us anything, it’s clear that there is a growing need for human co-experience platforms like Roblox that allow people to play, create, learn, work, and share experiences together in a safe, civil 3D immersive space.
Up next, our VP of Developer Relations, Matt Curtis (a.k.a. m4rrh3w), shared an update on all the things we’re doing to continue empowering developers to create innovative and exciting content through collaboration, support, and expertise. He also highlighted some of the impressive milestones our creator community has achieved since last year’s RDC. Here are a few key takeaways:
And lastly, our VP of Engineering, Technology, Adam Miller (a.k.a. rbadam), unveiled a myriad of cool and upcoming features developers will someday be able to sink their teeth into. We saw a glimpse of procedural skies, skinned meshes, more high-quality materials, new terrain types, more fonts in Studio, a new asset type for in-game videos, haptic feedback on mobile, real-time CSG operations, and many more awesome tools that will unlock the potential for even bigger, more immersive experiences on Roblox.

Vibin’

Despite the virtual setting, RDC just wouldn’t have been the same without any fun party activities and networking opportunities. So, we invited special guests DJ Hyper Potions and cyber mentalist Colin Cloud for some truly awesome, truly mind-bending entertainment. Yoga instructor Erin Gilmore also swung by to inspire attendees to get out of their chair and get their body moving. And of course, we even had virtual rooms dedicated to karaoke and head-to-head social games, like trivia and Pictionary.
Over on the networking side, Team Adopt Me, Red Manta, StyLiS Studios, and Summit Studios hosted a virtual booth for attendees to ask questions, submit resumes, and more. We also had a networking session where three participants would be randomly grouped together to get to know each other.

What does Roblox mean to you?

We all know how talented the Roblox community is from your creations. We’ve heard plenty of stories over the years about how Roblox has touched your lives, how you’ve made friendships, learned new skills, or simply found a place where you can be yourself. We wanted to hear more. So, we asked attendees: What does Roblox mean to you? How has Roblox connected you? How has Roblox changed your life? Then, over the course of RDC, we incorporated your responses into this awesome mural.
📷
Created by Alece Birnbach at Graphic Recording Studio

Knowledge is power

This year’s breakout sessions included presentations from Roblox developers and staff members on the latest game development strategies, a deep dive into the Roblox engine, learning how to animate with Blender, tools for working together in teams, building performant game worlds, and the new Creator Dashboard. Dr. Michael Rich, Associate Professor at Harvard Medical School and Physician at Boston Children’s Hospital, also led attendees through a discussion on mental health and how to best take care of you and your friends’ emotional well-being, especially now during these challenging times.
📷
Making the Dream Work with Teamwork (presented by Roblox developer Myzta)
In addition to our traditional Q&A panel with top product and engineering leaders at Roblox, we also held a special session with Builderman himself to answer the community’s biggest questions.
📷
Roblox Product and Engineering Q&A Panel

2020 Game Jam

The Game Jam is always one of our favorite events of RDC. It’s a chance for folks to come together, flex their development skills, and come up with wildly inventive game ideas that really push the boundaries of what’s possible on Roblox. We had over 60 submissions this year—a new RDC record.
Once again, teams of up to six people from around the world had less than 24 hours to conceptualize, design, and publish a game based on the theme “2020 Vision,” all while working remotely no less! To achieve such a feat is nothing short of awe-inspiring, but as always, our dev community was more than up for the challenge. I’ve got to say, these were some of the finest creations we’ve seen.
WINNERS
Best in Show: Shapescape Created By: GhettoMilkMan, dayzeedog, maplestick, theloudscream, Brick_man, ilyannna You awaken in a strange laboratory, seemingly with no way out. Using a pair of special glasses, players must solve a series of anamorphic puzzles and optical illusions to make their escape.
Excellence in Visual Art: agn●sia Created By: boatbomber, thisfall, Elttob An obby experience unlike any other, this game is all about seeing the world through a different lens. Reveal platforms by switching between different colored lenses and make your way to the end.
Most Creative Gameplay: Visions of a perspective reality Created By: Noble_Draconian and Spathi Sometimes all it takes is a change in perspective to solve challenges. By switching between 2D and 3D perspectives, players can maneuver around obstacles or find new ways to reach the end of each level.
Outstanding Use of Tech: The Eyes of Providence Created By: Quenty, Arch_Mage, AlgyLacey, xJennyBeanx, Zomebody, Crykee This action/strategy game comes with a unique VR twist. While teams fight to construct the superior monument, two VR players can support their minions by collecting resources and manipulating the map.
Best Use of Theme: Sticker Situation Created By: dragonfrosting and Yozoh Set in a mysterious art gallery, players must solve puzzles by manipulating the environment using a magic camera and stickers. Snap a photograph, place down a sticker, and see how it changes the world.
OTHER TOP PICKS
HONORABLE MENTIONS
For the rest of the 2020 Game Jam submissions, check out the list below:
20-20 Vision | 20/20 Vision | 2020 Vision, A Crazy Perspective | 2020 Vision: Nyon | A Wild Trip! | Acuity | Best Year Ever | Better Half | Bloxlabs | Climb Stairs to 2021 | Double Vision (Team hey apple) | Eyebrawl | Eyeworm Exam | FIRE 2020 | HACKED | Hyperspective | Lucid Scream | Mystery Mansion | New Years at the Museum | New Year’s Bash | Poor Vision | Predict 2020 | RBC News | Retrovertigo | Second Wave | see no evil | Sight Fight | Sight Stealers | Spectacles Struggle | Specter Spectrum | Survive 2020 | The Lost Chicken Leg | The Outbreak | The Spyglass | Time Heist | Tunnel Vision | Virtual RDC – The Story | Vision (Team Freepunk) | Vision (Team VIP People ####) | Vision Developers Conference 2020 | Vision Is Key | Vision Perspective | Vision Racer | Visions | Zepto
And last but not least, we wanted to give a special shout out to Starboard Studios. Though they didn’t quite make it on time for our judges, we just had to include Dave’s Vision for good measure. 📷
Thanks to everyone who participated in the Game Jam, and congrats to all those who took home the dub in each of our categories this year. As the winners of Best in Show, the developers of Shapescape will have their names forever engraved on the RDC Game Jam trophy back at Roblox HQ. Great work!

‘Til next year

And that about wraps up our coverage of the first-ever digital RDC. Thanks to all who attended! Before we go, we wanted to share a special “behind the scenes” video from the 2020 RDC photoshoot.
Check it out:
It was absolutely bonkers. Getting 350 of us all in one server was so much fun and really brought back the feeling of being together with everyone again. That being said, we can’t wait to see you all—for real this time—at RDC next year. It’s going to be well worth the wait. ‘Til we meet again, my friends.
© 2020 Roblox Corporation. All Rights Reserved.

Improving Simulation and Performance with an Advanced Physics Solver

August

05, 2020

by chefdeletat
PRODUCT & TECH
📷In mid-2015, Roblox unveiled a major upgrade to its physics engine: the Projected Gauss-Seidel (PGS) physics solver. For the first year, the new solver was optional and provided improved fidelity and greater performance compared to the previously used spring solver.
In 2016, we added support for a diverse set of new physics constraints, incentivizing developers to migrate to the new solver and extending the creative capabilities of the physics engine. Any new places used the PGS solver by default, with the option of reverting back to the classic solver.
We ironed out some stability issues associated with high mass differences and complex mechanisms by the introduction of the hybrid LDL-PGS solver in mid-2018. This made the old solver obsolete, and it was completely disabled in 2019, automatically migrating all places to the PGS.
In 2019, the performance was further improved using multi-threading that splits the simulation into jobs consisting of connected islands of simulating parts. We still had performance issues related to the LDL that we finally resolved in early 2020.
The physics engine is still being improved and optimized for performance, and we plan on adding new features for the foreseeable future.

Implementing the Laws of Physics

📷
The main objective of a physics engine is to simulate the motion of bodies in a virtual environment. In our physics engine, we care about bodies that are rigid, that collide and have constraints with each other.
A physics engine is organized into two phases: collision detection and solving. Collision detection finds intersections between geometries associated with the rigid bodies, generating appropriate collision information such as collision points, normals and penetration depths. Then a solver updates the motion of rigid bodies under the influence of the collisions that were detected and constraints that were provided by the user.
📷
The motion is the result of the solver interpreting the laws of physics, such as conservation of energy and momentum. But doing this 100% accurately is prohibitively expensive, and the trick to simulating it in real-time is to approximate to increase performance, as long as the result is physically realistic. As long as the basic laws of motion are maintained within a reasonable tolerance, this tradeoff is completely acceptable for a computer game simulation.

Taking Small Steps

The main idea of the physics engine is to discretize the motion using time-stepping. The equations of motion of constrained and unconstrained rigid bodies are very difficult to integrate directly and accurately. The discretization subdivides the motion into small time increments, where the equations are simplified and linearized making it possible to solve them approximately. This means that during each time step the motion of the relevant parts of rigid bodies that are involved in a constraint is linearly approximated.
📷📷
Although a linearized problem is easier to solve, it produces drift in a simulation containing non-linear behaviors, like rotational motion. Later we’ll see mitigation methods that help reduce the drift and make the simulation more plausible.

Solving

📷
Having linearized the equations of motion for a time step, we end up needing to solve a linear system or linear complementarity problem (LCP). These systems can be arbitrarily large and can still be quite expensive to solve exactly. Again the trick is to find an approximate solution using a faster method. A modern method to approximately solve an LCP with good convergence properties is the Projected Gauss-Seidel (PGS). It is an iterative method, meaning that with each iteration the approximate solution is brought closer to the true solution, and its final accuracy depends on the number of iterations.
📷
This animation shows how a PGS solver changes the positions of the bodies at each step of the iteration process, the objective being to find the positions that respect the ball and socket constraints while preserving the center of mass at each step (this is a type of positional solver used by the IK dragger). Although this example has a simple analytical solution, it’s a good demonstration of the idea behind the PGS. At each step, the solver fixes one of the constraints and lets the other be violated. After a few iterations, the bodies are very close to their correct positions. A characteristic of this method is how some rigid bodies seem to vibrate around their final position, especially when coupling interactions with heavier bodies. If we don’t do enough iterations, the yellow part might be left in a visibly invalid state where one of its two constraints is dramatically violated. This is called the high mass ratio problem, and it has been the bane of physics engines as it causes instabilities and explosions. If we do too many iterations, the solver becomes too slow, if we don’t it becomes unstable. Balancing the two sides has been a painful and long process.

Mitigation Strategies

📷A solver has two major sources of inaccuracies: time-stepping and iterative solving (there is also floating point drift but it’s minor compared to the first two). These inaccuracies introduce errors in the simulation causing it to drift from the correct path. Some of this drift is tolerable like slightly different velocities or energy loss, but some are not like instabilities, large energy gains or dislocated constraints.
Therefore a lot of the complexity in the solver comes from the implementation of methods to minimize the impact of computational inaccuracies. Our final implementation uses some traditional and some novel mitigation strategies:
  1. Warm starting: starting with the solution from a previous time-step to increase the convergence rate of the iterative solver
  2. Post-stabilization: reprojecting the system back to the constraint manifold to prevent constraint drift
  3. Regularization: adding compliance to the constraints ensuring a solution exists and is unique
  4. Pre-conditioning: using an exact solution to a linear subsystem, improving the stability of complex mechanisms
Strategies 1, 2 and 3 are pretty traditional, but 3 has been improved and perfected by us. Also, although 4 is not unheard of, we haven’t seen any practical implementation of it. We use an original factorization method for large sparse constraint matrices and a new efficient way of combining it with the PGS. The resulting implementation is only slightly slower compared to pure PGS but ensures that the linear system coming from equality constraints is solved exactly. Consequently, the equality constraints suffer only from drift coming from the time discretization. Details on our methods are contained in my GDC 2020 presentation. Currently, we are investigating direct methods applied to inequality constraints and collisions.

Getting More Details

Traditionally there are two mathematical models for articulated mechanisms: there are reduced coordinate methods spearheaded by Featherstone, that parametrize the degrees of freedom at each joint, and there are full coordinate methods that use a Lagrangian formulation.
We use the second formulation as it is less restrictive and requires much simpler mathematics and implementation.
The Roblox engine uses analytical methods to compute the dynamic response of constraints, as opposed to penalty methods that were used before. Analytics methods were initially introduced in Baraff 1989, where they are used to treat both equality and non-equality constraints in a consistent manner. Baraff observed that the contact model can be formulated using quadratic programming, and he provided a heuristic solution method (which is not the method we use in our solver).
Instead of using force-based formulation, we use an impulse-based formulation in velocity space, originally introduced by Mirtich-Canny 1995 and further improved by Stewart-Trinkle 1996, which unifies the treatment of different contact types and guarantees the existence of a solution for contacts with friction. At each timestep, the constraints and collisions are maintained by applying instantaneous changes in velocities due to constraint impulses. An excellent explanation of why impulse-based simulation is superior is contained in the GDC presentation of Catto 2014.
The frictionless contacts are modeled using a linear complementarity problem (LCP) as described in Baraff 1994. Friction is added as a non-linear projection onto the friction cone, interleaved with the iterations of the Projected Gauss-Seidel.
The numerical drift that introduces positional errors in the constraints is resolved using a post-stabilization technique using pseudo-velocities introduced by Cline-Pai 2003. It involves solving a second LCP in the position space, which projects the system back to the constraint manifold.
The LCPs are solved using a PGS / Impulse Solver popularized by Catto 2005 (also see Catto 2009). This method is iterative and considers each individual constraints in sequence and resolves it independently. Over many iterations, and in ideal conditions, the system converges to a global solution.
Additionally, high mass ratio issues in equality constraints are ironed out by preconditioning the PGS using the sparse LDL decomposition of the constraint matrix of equality constraints. Dense submatrices of the constraint matrix are sparsified using a method we call Body Splitting. This is similar to the LDL decomposition used in Baraff 1996, but allows more general mechanical systems, and solves the system in constraint space. For more information, you can see my GDC 2020 presentation.
The architecture of our solver follows the idea of Guendelman-Bridson-Fedkiw, where the velocity and position stepping are separated by the constraint resolution. Our time sequencing is:
  1. Advance velocities
  2. Constraint resolution in velocity space and position space
  3. Advance positions
This scheme has the advantage of integrating only valid velocities, and limiting latency in external force application but allowing a small amount of perceived constraint violation due to numerical drift.
An excellent reference for rigid body simulation is the book Erleben 2005 that was recently made freely available. You can find online lectures about physics-based animation, a blog by Nilson Souto on building a physics engine, a very good GDC presentation by Erin Catto on modern solver methods, and forums like the Bullet Physics Forum and GameDev which are excellent places to ask questions.

In Conclusion

The field of game physics simulation presents many interesting problems that are both exciting and challenging. There are opportunities to learn a substantial amount of cool mathematics and physics and to use modern optimizations techniques. It’s an area of game development that tightly marries mathematics, physics and software engineering.
Even if Roblox has a good rigid body physics engine, there are areas where it can be improved and optimized. Also, we are working on exciting new projects like fracturing, deformation, softbody, cloth, aerodynamics and water simulation.
Neither Roblox Corporation nor this blog endorses or supports any company or service. Also, no guarantees or promises are made regarding the accuracy, reliability or completeness of the information contained in this blog.
This blog post was originally published on the Roblox Tech Blog.
© 2020 Roblox Corporation. All Rights Reserved.

Using Clang to Minimize Global Variable Use

July

23, 2020

by RandomTruffle
PRODUCT & TECH
Every non-trivial program has at least some amount of global state, but too much can be a bad thing. In C++ (which constitutes close to 100% of Roblox’s engine code) this global state is initialized before main() and destroyed after returning from main(), and this happens in a mostly non-deterministic order. In addition to leading to confusing startup and shutdown semantics that are difficult to reason about (or change), it can also lead to severe instability.
Roblox code also creates a lot of long-running detached threads (threads which are never joined and just run until they decide to stop, which might be never). These two things together have a very serious negative interaction on shutdown, because long-running threads continue accessing the global state that is being destroyed. This can lead to elevated crash rates, test suite flakiness, and just general instability.
The first step to digging yourself out of a mess like this is to understand the extent of the problem, so in this post I’m going to talk about one technique you can use to gain visibility into your global startup flow. I’m also going to discuss how we are using this to improve stability across the entire Roblox game engine platform by decreasing our use of global variables.

Introducing -finstrument-functions

Nothing excites me more than learning about a new obscure compiler option that I’ve never had a use for before, so I was pretty happy when a colleague pointed me to this option in the Clang Command Line Reference. I’d never used it before, but it sounded very cool. The idea being that if we could get the compiler to tell us every time it entered and exited a function, we could filter this information through a symbolizer of some kind and generate a report of functions that a) occur before main(), and b) are the very first function in the call-stack (indicating it’s a global).
Unfortunately, the documentation basically just tells you that the option exists with no mention of how to use it or if it even actually does what it sounds like it does. There’s also two different options that sound similar to each other (-finstrument-functions and -finstrument-functions-after-inlining), and I still wasn’t entirely sure what the difference was. So I decided to throw up a quick sample on godbolt to see what happened, which you can see here. Note there are two assembly outputs for the same source listing. One uses the first option and the other uses the second option, and we can compare the assembly output to understand the differences. We can gather a few takeaways from this sample:
  1. The compiler is injecting calls to __cyg_profile_func_enter and __cyg_profile_func_exit inside of every function, inline or not.
  2. The only difference between the two options occurs at the call-site of an inline function.
  3. With -finstrument-functions, the instrumentation for the inlined function is inserted at the call-site, whereas with -finstrument-functions-after-inlining we only have instrumentation for the outer function. This means that when using-finstrument-functions-after-inlining you won’t be able to determine which functions are inlined and where.
Of course, this sounds exactly like what the documentation said it did, but sometimes you just need to look under the hood to convince yourself.
To put all of this another way, if we want to know about calls to inline functions in this trace we need to use -finstrument-functions because otherwise their instrumentation is silently removed by the compiler. Sadly, I was never able to get -finstrument-functions to work on a real example. I would always end up with linker errors deep in the Standard C++ Library which I was unable to figure out. My best guess is that inlining is often a heuristic, and this can somehow lead to subtle ODR (one-definition rule) violations when the optimizer makes different inlining decisions from different translation units. Luckily global constructors (which is what we care about) cannot possibly be inlined anyway, so this wasn’t a problem.
I suppose I should also mention that I still got tons of linker errors with -finstrument-functions-after-inlining as well, but I did figure those out. As best as I can tell, this option seems to imply –whole-archive linker semantics. Discussion of –whole-archive is outside the scope of this blog post, but suffice it to say that I fixed it by using linker groups (e.g. -Wl,–start-group and -Wl,–end-group) on the compiler command line. I was a bit surprised that we didn’t get these same linker errors without this option and still don’t totally understand why. If you happen to know why this option would change linker semantics, please let me know in the comments!

Implementing the Callback Hooks

If you’re astute, you may be wondering what in the world __cyg_profile_func_enter and __cyg_profile_func_exit are and why the program is even successfully linking in the first without giving undefined symbol reference errors, since the compiler is apparently trying to call some function we’ve never defined. Luckily, there are some options that allow us to see inside the linker’s algorithm so we can find out where it’s getting this symbol from to begin with. Specifically, -y should tell us how the linker is resolving . We’ll try it with a dummy program first and a symbol that we’ve defined ourselves, then we’ll try it with __cyg_profile_func_enter .
[email protected]:~/src/sandbox$ cat instr.cpp int main() {} [email protected]:~/src/sandbox$ clang++-9 -fuse-ld=lld -Wl,-y -Wl,main instr.cpp /usbin/../lib/gcc/x86_64-linux-gnu/crt1.o: reference to main /tmp/instr-5b6c60.o: definition of main
No surprises here. The C Runtime Library references main(), and our object file defines it. Now let’s see what happens with __cyg_profile_func_enter and -finstrument-functions-after-inlining.
[email protected]:~/src/sandbox$ clang++-9 -fuse-ld=lld -finstrument-functions-after-inlining -Wl,-y -Wl,__cyg_profile_func_enter instr.cpp /tmp/instr-8157b3.o: reference to __cyg_profile_func_enter /lib/x86_64-linux-gnu/libc.so.6: shared definition of __cyg_profile_func_enter
Now, we see that libc provides the definition, and our object file references it. Linking works a bit differently on Unix-y platforms than it does on Windows, but basically this means that if we define this function ourselves in our cpp file, the linker will just automatically prefer it over the shared library version. Working godbolt link without runtime output is here. So now you can kind of see where this is going, however there are still a couple of problems left to solve.
  1. We don’t want to do this for a full run of the program. We want to stop as soon as we reach main.
  2. We need a way to symbolize this trace.
The first problem is easy to solve. All we need to do is compare the address of the function being called to the address of main, and set a flag indicating we should stop tracing henceforth. (Note that taking the address of main is undefined behavior[1], but for our purposes it gets the job done, and we aren’t shipping this code, so ¯\_(ツ)_/¯). The second problem probably deserves a little more discussion though.

Symbolizing the Traces

In order to symbolize these traces, we need two things. First, we need to store the trace somewhere on persistent storage. We can’t expect to symbolize in real time with any kind of reasonable performance. You can write some C code to save the trace to some magic filename, or you can do what I did and just write it to stderr (this way you can pipe stderr to some file when you run it).
Second, and perhaps more importantly, for every address we need to write out the full path to the module the address belongs to. Your program loads many shared libraries, and in order to translate an address into a symbol, we have to know which shared library or executable the address actually belongs to. In addition, we have to be careful to write out the address of the symbol in the file on disk. When your program is running, the operating system could have loaded it anywhere in memory. And if we’re going to symbolize it after the fact we need to make sure we can still reference it after the information about where it was loaded in memory is lost. The linux function dladdr() gives us both pieces of information we need. A working godbolt sample with the exact implementation of our instrumentation hooks as they appear in our codebase can be found here.

Putting it All Together

Now that we have a file in this format saved on disk, all we need to do is symbolize the addresses. addr2line is one option, but I went with llvm-symbolizer as I find it more robust. I wrote a Python script to parse the file and symbolize each address, then print it in the same “visual” hierarchical format that the original output file is in. There are various options for filtering the resulting symbol list so that you can clean up the output to include only things that are interesting for your case. For example, I filtered out any globals that have boost:: in their name, because I can’t exactly go rewrite boost to not use global variables.
The script isn’t as simple as you would think, because simply crawling each line and symbolizing it would be unacceptably slow (when I tried this, it took over 2 hours before I finally killed the process). This is because the same address might appear thousands of times, and there’s no reason to run llvm-symbolizer against the same address multiple times. So there’s a lot of smarts in there to pre-process the address list and eliminate duplicates. I won’t discuss the implementation in more detail because it isn’t super interesting. But I’ll do even better and provide the source!
So after all of this, we can run any one of our internal targets to get the call tree, run it through the script, and then get output like this (actual output from a Roblox process, source file information removed):
excluded_symbols = [‘.\boost.*’]* excluded_modules = [‘/usr.\’]* /uslib/x86_64-linux-gnu/libLLVM-9.so.1: 140 unique addresses InterestingRobloxProcess: 38928 unique addresses /uslib/x86_64-linux-gnu/libstdc++.so.6: 1 unique addresses /uslib/x86_64-linux-gnu/libc++.so.1: 3 unique addresses Printing call tree with depth 2 for 29276 global variables. __cxx_global_var_init.5 (InterestingFile1.cpp:418:22) RBX::InterestingRobloxClass2::InterestingRobloxClass2() (InterestingFile2.cpp.:415:0) __cxx_global_var_init.19 (InterestingFile2.cpp:183:34) (anonymous namespace)::InterestingRobloxClass2::InterestingRobloxClass2() (InterestingFile2.cpp:171:0) __cxx_global_var_init.274 (InterestingFile3.cpp:2364:33) RBX::InterestingRobloxClass3::InterestingRobloxClass3()
So there you have it: the first half of the battle is over. I can run this script on every platform, compare results to understand what order our globals are actually initialized in in practice, then slowly migrate this code out of global initializers and into main where it can be deterministic and explicit.

Future Work

It occurred to me sometime after implementing this that we could make a general purpose profiling hook that exposed some public symbols (dllexport’ed if you speak Windows), and allowed a plugin module to hook into this dynamically. This plugin module could filter addresses using whatever arbitrary logic that it was interested in. One interesting use case I came up for this is that it could look up the debug information, check if the current address maps to the constructor of a function local static, and write out the address if so. This effectively allows us to gain a deeper understanding of the order in which our lazy statics are initialized. The possibilities are endless here.

Further Reading

If you’re interested in this kind of thing, I’ve collected a couple of my favorite references for this kind of topic.
  1. Various: The C++ Language Standard
  2. Matt Godbolt: The Bits Between the Bits: How We Get to main()
  3. Ryan O’Neill: Learning Linux Binary Analysis
  4. Linkers and Loaders: John R. Levine
  5. https://eel.is/c++draft/basic.exec#basic.start.main-3
Neither Roblox Corporation nor this blog endorses or supports any company or service. Also, no guarantees or promises are made regarding the accuracy, reliability or completeness of the information contained in this blog.
submitted by jaydenweez to u/jaydenweez [link] [comments]

Top 3 Technical Analysis Indicators - Technical Analysis ... Candlestick Pattern Analysis For Binary Options & Forex ... MASTER PRO SIGNAL FXX TOOL FOR BINARY TRADING  KING ... NEVER LOSS USING CANDLESTICKS ANALYSIS 10 wins  binary ... LCU14-201: Binary Analysis Tools Full Explanation - Trading binary options live tutorial ... 2 Minutes Strategy Binary Options 2020 (IQ Options) - YouTube Binary Options 60 Seconds Indicator 99% Winning Live ...

Analysis is therefore important before purchasing any binary options. When analysis is done, the trader is more equipped to make the right call or put options, if the market trend for a specific time is carefully analyzed. There are two main ways to analyze the market, through fundamental analysis and through technical analysis. Both methods may be used independently or in conjunction with the ... All the articles and all the strategies about trading binary options touch on technical analysis if not talk about it in its entirety. Yes, yes, fundamentals are important and have a big impact on our trading but it is the technicals that are used for pinpointing entries and determining expiry. The time frames used by the average binary trader are just to short for fundamentals to drive the ... One of the most important features IQ Option provides to traders is the ability to stick markers and symbols to an online diagram. To put it simply — the ability to use technical analysis.Web-based binary option platforms are rarely equipped with drawing tools and — even more rarely — with built-in indicators. Binary Options Technical Analysis Tools. In addition to some of the general tools offered by many top brokers such as “roll-over” and “double-up” some also offer access to on-site binary options technical analysis tools. For instance most of the top brokers offer at the very least some version of a pop-out trading chart which is much more detailed than the normal trading platform ... So instead of picking one, it is worth investigating all options. As always, some projects are a safe pick, as they are popular and often requested in professional experience. Radare2 is a good example of such tool that can be found in the toolbox of the professional reverse engineers. Usage. Binary analysis tools are typically used for binary analysis, malware analysis, reverse engineering ... Lesson 2: Tools for Binary Options Trading. Today, we will talk about those tools that a beginner trader must have in order to succeed in binary options trading. The difference between a binary options trader and a gambler is simple. The educated binary options trader does his analysis before he goes into the market. The gambler simply makes his move based on a hunch or bases his bet on luck ... Binary option analysis tools. Most binary option brokers will only offer very basic information. Technical analysis is a science, an imperfect, imprecise social science, that studies financial markets and the price of assets. There are some popular technical Indicator used by both traders and algorithmic trading, such as:. Advanced Binary Options Strategy Guide On this page, we will deepen ... Binomo is a binary options broker with a high-end trading platform with the ability to trade binary options, CFDs, Forex, and cryptocurrency. Binomo is based out of St. Vincent and the Grenadines and they are regulated by the IFC (International Finance Commission). Since Binomo is a Category A member of the IFC, they have deposit insurance of up to $20,000 for all clients. Start trading binary options now. It is achieved using some tools to assist you in identifying technical patterns, indicators and strategies to help you develop future trading strategies Nov 19, 2019 · Traders should practice caution with detailed backtesting and thorough analysis for high-risk, how to analyse binary options high-return assets like binary options. Now, in binary options ... Since most binary options brokers do not offer charting tools, we had to locate a forex broker whose trading platform had charts or us to use. We located one and started the analysis. Fundamental Analysis. In the financial markets, the fundamentals of an asset always supersede the technicals. This is why we did a fundamental analysis first. At the time of analysis, there was a meeting of the ...

[index] [4048] [25361] [3685] [3244] [19855] [5790] [1871] [17674] [14228] [11170]

Top 3 Technical Analysis Indicators - Technical Analysis ...

Visit Binomo Download App : https://bit.ly/2qeQ50g Binomo Link For PC / laptop : https://binomo.com/promo/l28?a=83569bcf4e1a Join Telegram Channel for More H... Technical Analysis is one of the most talked about - and least understood - concepts in stock and options trading. In this video, we break down the top 3 techni... Trusted spots blog https://trustedspots1.blogspot.com/?m=1 To register a free account on desktop or laptop, click here https://bit.ly/3ghvlt5 To register a f... LCU14-201: Binary Analysis Tools ----- Speaker: Christophe Lyon, Omair Javaid Track: Toolchain Location: Grand Peninsula A, Hyatt Regency San Francisco Airport, Burlingame, CA, United States ... Hi Friends I will Show This Video Binary Options 60 Seconds Indicator Signal 99% Winning Live Trading Proof -----... in this channel a lot to talk about trading strategies. like the following important points that traders should know. including: 1. how to read good trends 2... IQ Options -https://affiliate.iqoption.com/redir/...Please subscribe and leave a like for more videos.Online trading is a very risky investment/profession. It i... Hi Guys this is a new strategy I found and it works great. This is not an investment advice and this video is only to impact on your knowledge. Please try fi...

https://arab-binary-option.taihluhummodang.cf