A Step-by-Step Guide to Binary Options Trading

Everything You Always Wanted To Know About Swaps* (*But Were Afraid To Ask)

Hello, dummies
It's your old pal, Fuzzy.
As I'm sure you've all noticed, a lot of the stuff that gets posted here is - to put it delicately - fucking ridiculous. More backwards-ass shit gets posted to wallstreetbets than you'd see on a Westboro Baptist community message board. I mean, I had a look at the daily thread yesterday and..... yeesh. I know, I know. We all make like the divine Laura Dern circa 1992 on the daily and stick our hands deep into this steaming heap of shit to find the nuggets of valuable and/or hilarious information within (thanks for reading, BTW). I agree. I love it just the way it is too. That's what makes WSB great.
What I'm getting at is that a lot of the stuff that gets posted here - notwithstanding it being funny or interesting - is just... wrong. Like, fucking your cousin wrong. And to be clear, I mean the fucking your *first* cousin kinda wrong, before my Southerners in the back get all het up (simmer down, Billy Ray - I know Mabel's twice removed on your grand-sister's side). Truly, I try to let it slide. I do my bit to try and put you on the right path. Most of the time, I sleep easy no matter how badly I've seen someone explain what a bank liquidity crisis is. But out of all of those tens of thousands of misguided, autistic attempts at understanding the world of high finance, one thing gets so consistently - so *emphatically* - fucked up and misunderstood by you retards that last night I felt obligated at the end of a long work day to pull together this edition of Finance with Fuzzy just for you. It's so serious I'm not even going to make a u/pokimane gag. Have you guessed what it is yet? Here's a clue. It's in the title of the post.
That's right, friends. Today in the neighborhood we're going to talk all about hedging in financial markets - spots, swaps, collars, forwards, CDS, synthetic CDOs, all that fun shit. Don't worry; I'm going to explain what all the scary words mean and how they impact your OTM RH positions along the way.
We're going to break it down like this. (1) "What's a hedge, Fuzzy?" (2) Common Hedging Strategies and (3) All About ISDAs and Credit Default Swaps.
Before we begin. For the nerds and JV traders in the back (and anyone else who needs to hear this up front) - I am simplifying these descriptions for the purposes of this post. I am also obviously not going to try and cover every exotic form of hedge under the sun or give a detailed summation of what caused the financial crisis. If you are interested in something specific ask a question, but don't try and impress me with your Investopedia skills or technical points I didn't cover; I will just be forced to flex my years of IRL experience on you in the comments and you'll look like a big dummy.
TL;DR? Fuck you. There is no TL;DR. You've come this far already. What's a few more paragraphs? Put down the Cheetos and try to concentrate for the next 5-7 minutes. You'll learn something, and I promise I'll be gentle.
Ready? Let's get started.
1. The Tao of Risk: Hedging as a Way of Life
The simplest way to characterize what a hedge 'is' is to imagine every action having a binary outcome. One is bad, one is good. Red lines, green lines; uppie, downie. With me so far? Good. A 'hedge' is simply the employment of a strategy to mitigate the effect of your action having the wrong binary outcome. You wanted X, but you got Z! Frowny face. A hedge strategy introduces a third outcome. If you hedged against the possibility of Z happening, then you can wind up with Y instead. Not as good as X, but not as bad as Z. The technical definition I like to give my idiot juniors is as follows:
Utilization of a defensive strategy to mitigate risk, at a fraction of the cost to capital of the risk itself.
Congratulations. You just finished Hedging 101. "But Fuzzy, that's easy! I just sold a naked call against my 95% OTM put! I'm adequately hedged!". Spoiler alert: you're not (although good work on executing a collar, which I describe below). What I'm talking about here is what would be referred to as a 'perfect hedge'; a binary outcome where downside is totally mitigated by a risk management strategy. That's not how it works IRL. Pay attention; this is the tricky part.
You can't take a single position and conclude that you're adequately hedged because risks are fluid, not static. So you need to constantly adjust your position in order to maximize the value of the hedge and insure your position. You also need to consider exposure to more than one category of risk. There are micro (specific exposure) risks, and macro (trend exposure) risks, and both need to factor into the hedge calculus.
That's why, in the real world, the value of hedging depends entirely on the design of the hedging strategy itself. Here, when we say "value" of the hedge, we're not talking about cash money - we're talking about the intrinsic value of the hedge relative to the the risk profile of your underlying exposure. To achieve this, people hedge dynamically. In wallstreetbets terms, this means that as the value of your position changes, you need to change your hedges too. The idea is to efficiently and continuously distribute and rebalance risk across different states and periods, taking value from states in which the marginal cost of the hedge is low and putting it back into states where marginal cost of the hedge is high, until the shadow value of your underlying exposure is equalized across your positions. The punchline, I guess, is that one static position is a hedge in the same way that the finger paintings you make for your wife's boyfriend are art - it's technically correct, but you're only playing yourself by believing it.
Anyway. Obviously doing this as a small potatoes trader is hard but it's worth taking into account. Enough basic shit. So how does this work in markets?
2. A Hedging Taxonomy
The best place to start here is a practical question. What does a business need to hedge against? Think about the specific risk that an individual business faces. These are legion, so I'm just going to list a few of the key ones that apply to most corporates. (1) You have commodity risk for the shit you buy or the shit you use. (2) You have currency risk for the money you borrow. (3) You have rate risk on the debt you carry. (4) You have offtake risk for the shit you sell. Complicated, right? To help address the many and varied ways that shit can go wrong in a sophisticated market, smart operators like yours truly have devised a whole bundle of different instruments which can help you manage the risk. I might write about some of the more complicated ones in a later post if people are interested (CDO/CLOs, strip/stack hedges and bond swaps with option toggles come to mind) but let's stick to the basics for now.
(i) Swaps
A swap is one of the most common forms of hedge instrument, and they're used by pretty much everyone that can afford them. The language is complicated but the concept isn't, so pay attention and you'll be fine. This is the most important part of this section so it'll be the longest one.
Swaps are derivative contracts with two counterparties (before you ask, you can't trade 'em on an exchange - they're OTC instruments only). They're used to exchange one cash flow for another cash flow of equal expected value; doing this allows you to take speculative positions on certain financial prices or to alter the cash flows of existing assets or liabilities within a business. "Wait, Fuzz; slow down! What do you mean sets of cash flows?". Fear not, little autist. Ol' Fuzz has you covered.
The cash flows I'm talking about are referred to in swap-land as 'legs'. One leg is fixed - a set payment that's the same every time it gets paid - and the other is variable - it fluctuates (typically indexed off the price of the underlying risk that you are speculating on / protecting against). You set it up at the start so that they're notionally equal and the two legs net off; so at open, the swap is a zero NPV instrument. Here's where the fun starts. If the price that you based the variable leg of the swap on changes, the value of the swap will shift; the party on the wrong side of the move ponies up via the variable payment. It's a zero sum game.
I'll give you an example using the most vanilla swap around; an interest rate trade. Here's how it works. You borrow money from a bank, and they charge you a rate of interest. You lock the rate up front, because you're smart like that. But then - quelle surprise! - the rate gets better after you borrow. Now you're bagholding to the tune of, I don't know, 5 bps. Doesn't sound like much but on a billion dollar loan that's a lot of money (a classic example of the kind of 'small, deep hole' that's terrible for profits). Now, if you had a swap contract on the rate before you entered the trade, you're set; if the rate goes down, you get a payment under the swap. If it goes up, whatever payment you're making to the bank is netted off by the fact that you're borrowing at a sub-market rate. Win-win! Or, at least, Lose Less / Lose Less. That's the name of the game in hedging.
There are many different kinds of swaps, some of which are pretty exotic; but they're all different variations on the same theme. If your business has exposure to something which fluctuates in price, you trade swaps to hedge against the fluctuation. The valuation of swaps is also super interesting but I guarantee you that 99% of you won't understand it so I'm not going to try and explain it here although I encourage you to google it if you're interested.
Because they're OTC, none of them are filed publicly. Someeeeeetimes you see an ISDA (dsicussed below) but the confirms themselves (the individual swaps) are not filed. You can usually read about the hedging strategy in a 10-K, though. For what it's worth, most modern credit agreements ban speculative hedging. Top tip: This is occasionally something worth checking in credit agreements when you invest in businesses that are debt issuers - being able to do this increases the risk profile significantly and is particularly important in times of economic volatility (ctrl+f "non-speculative" in the credit agreement to be sure).
(ii) Forwards
A forward is a contract made today for the future delivery of an asset at a pre-agreed price. That's it. "But Fuzzy! That sounds just like a futures contract!". I know. Confusing, right? Just like a futures trade, forwards are generally used in commodity or forex land to protect against price fluctuations. The differences between forwards and futures are small but significant. I'm not going to go into super boring detail because I don't think many of you are commodities traders but it is still an important thing to understand even if you're just an RH jockey, so stick with me.
Just like swaps, forwards are OTC contracts - they're not publicly traded. This is distinct from futures, which are traded on exchanges (see The Ballad Of Big Dick Vick for some more color on this). In a forward, no money changes hands until the maturity date of the contract when delivery and receipt are carried out; price and quantity are locked in from day 1. As you now know having read about BDV, futures are marked to market daily, and normally people close them out with synthetic settlement using an inverse position. They're also liquid, and that makes them easier to unwind or close out in case shit goes sideways.
People use forwards when they absolutely have to get rid of the thing they made (or take delivery of the thing they need). If you're a miner, or a farmer, you use this shit to make sure that at the end of the production cycle, you can get rid of the shit you made (and you won't get fucked by someone taking cash settlement over delivery). If you're a buyer, you use them to guarantee that you'll get whatever the shit is that you'll need at a price agreed in advance. Because they're OTC, you can also exactly tailor them to the requirements of your particular circumstances.
These contracts are incredibly byzantine (and there are even crazier synthetic forwards you can see in money markets for the true degenerate fund managers). In my experience, only Texan oilfield magnates, commodities traders, and the weirdo forex crowd fuck with them. I (i) do not own a 10 gallon hat or a novelty size belt buckle (ii) do not wake up in the middle of the night freaking out about the price of pork fat and (iii) love greenbacks too much to care about other countries' monopoly money, so I don't fuck with them.
(iii) Collars
No, not the kind your wife is encouraging you to wear try out to 'spice things up' in the bedroom during quarantine. Collars are actually the hedging strategy most applicable to WSB. Collars deal with options! Hooray!
To execute a basic collar (also called a wrapper by tea-drinking Brits and people from the Antipodes), you buy an out of the money put while simultaneously writing a covered call on the same equity. The put protects your position against price drops and writing the call produces income that offsets the put premium. Doing this limits your tendies (you can only profit up to the strike price of the call) but also writes down your risk. If you screen large volume trades with a VOL/OI of more than 3 or 4x (and they're not bullshit biotech stocks), you can sometimes see these being constructed in real time as hedge funds protect themselves on their shorts.
(3) All About ISDAs, CDS and Synthetic CDOs
You may have heard about the mythical ISDA. Much like an indenture (discussed in my post on $F), it's a magic legal machine that lets you build swaps via trade confirms with a willing counterparty. They are very complicated legal documents and you need to be a true expert to fuck with them. Fortunately, I am, so I do. They're made of two parts; a Master (which is a form agreement that's always the same) and a Schedule (which amends the Master to include your specific terms). They are also the engine behind just about every major credit crunch of the last 10+ years.
First - a brief explainer. An ISDA is a not in and of itself a hedge - it's an umbrella contract that governs the terms of your swaps, which you use to construct your hedge position. You can trade commodities, forex, rates, whatever, all under the same ISDA.
Let me explain. Remember when we talked about swaps? Right. So. You can trade swaps on just about anything. In the late 90s and early 2000s, people had the smart idea of using other people's debt and or credit ratings as the variable leg of swap documentation. These are called credit default swaps. I was actually starting out at a bank during this time and, I gotta tell you, the only thing I can compare people's enthusiasm for this shit to was that moment in your early teens when you discover jerking off. Except, unlike your bathroom bound shame sessions to Mom's Sears catalogue, every single person you know felt that way too; and they're all doing it at once. It was a fiscal circlejerk of epic proportions, and the financial crisis was the inevitable bukkake finish. WSB autism is absolutely no comparison for the enthusiasm people had during this time for lighting each other's money on fire.
Here's how it works. You pick a company. Any company. Maybe even your own! And then you write a swap. In the swap, you define "Credit Event" with respect to that company's debt as the variable leg . And you write in... whatever you want. A ratings downgrade, default under the docs, failure to meet a leverage ratio or FCCR for a certain testing period... whatever. Now, this started out as a hedge position, just like we discussed above. The purest of intentions, of course. But then people realized - if bad shit happens, you make money. And banks... don't like calling in loans or forcing bankruptcies. Can you smell what the moral hazard is cooking?
Enter synthetic CDOs. CDOs are basically pools of asset backed securities that invest in debt (loans or bonds). They've been around for a minute but they got famous in the 2000s because a shitload of them containing subprime mortgage debt went belly up in 2008. This got a lot of publicity because a lot of sad looking rednecks got foreclosed on and were interviewed on CNBC. "OH!", the people cried. "Look at those big bad bankers buying up subprime loans! They caused this!". Wrong answer, America. The debt wasn't the problem. What a lot of people don't realize is that the real meat of the problem was not in regular way CDOs investing in bundles of shit mortgage debts in synthetic CDOs investing in CDS predicated on that debt. They're synthetic because they don't have a stake in the actual underlying debt; just the instruments riding on the coattails. The reason these are so popular (and remain so) is that smart structured attorneys and bankers like your faithful correspondent realized that an even more profitable and efficient way of building high yield products with limited downside was investing in instruments that profit from failure of debt and in instruments that rely on that debt and then hedging that exposure with other CDS instruments in paired trades, and on and on up the chain. The problem with doing this was that everyone wound up exposed to everybody else's books as a result, and when one went tits up, everybody did. Hence, recession, Basel III, etc. Thanks, Obama.
Heavy investment in CDS can also have a warping effect on the price of debt (something else that happened during the pre-financial crisis years and is starting to happen again now). This happens in three different ways. (1) Investors who previously were long on the debt hedge their position by selling CDS protection on the underlying, putting downward pressure on the debt price. (2) Investors who previously shorted the debt switch to buying CDS protection because the relatively illiquid debt (partic. when its a bond) trades at a discount below par compared to the CDS. The resulting reduction in short selling puts upward pressure on the bond price. (3) The delta in price and actual value of the debt tempts some investors to become NBTs (neg basis traders) who long the debt and purchase CDS protection. If traders can't take leverage, nothing happens to the price of the debt. If basis traders can take leverage (which is nearly always the case because they're holding a hedged position), they can push up or depress the debt price, goosing swap premiums etc. Anyway. Enough technical details.
I could keep going. This is a fascinating topic that is very poorly understood and explained, mainly because the people that caused it all still work on the street and use the same tactics today (it's also terribly taught at business schools because none of the teachers were actually around to see how this played out live). But it relates to the topic of today's lesson, so I thought I'd include it here.
Work depending, I'll be back next week with a covenant breakdown. Most upvoted ticker gets the post.
*EDIT 1\* In a total blowout, $PLAY won. So it's D&B time next week. Post will drop Monday at market open.
submitted by fuzzyblankeet to wallstreetbets [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]

MAME 0.216

MAME 0.216

With the end of November in sight, it’s time to check out MAME 0.216! We’ve addressed the reported issues with last month’s bgfx update, and made a whole lot of little improvements to MAME’s internal user interface. In particular, setting up controls should be easier, and several issues affecting macOS users with non-English number format settings have been fixed. Some of the issues caused bad settings to be written to INI files. If you still don’t see the filter list panel on the system selection menu, try removing the ui.ini file.
This month, we’re able to present two unreleased 1970s prototypes from Italian developer Model Racing: their internal code names are Cane and Orbite. With the assistance of former Model Racing employees, the source code was extracted from the original disks. These games are incomplete, but they provide a unique look into early CPU-based arcade development. Game & Watch titles continue to be emulated, with the addition of Mario The Juggler, and the panorama screen Mickey Mouse and Donkey Kong Circus games in this release.
This release brings GameKing emulation to MAME. The system-on-a-chip used in this low-cost, low-resolution hand-held console from the early 2000s has been identified and emulated. Games for the colour-screen GameKing III are also playable. Acorn BBC Micro emulation has been re-worked to support internal expansion boards, and a number of additional peripherals are now available. ZX Spectrum emulation has been enhanced with better open bus read behaviour and support for two Miles Gordon Technology peripherals.
Of course, these are just the highlights. You can get the source and Windows binary packages from the download page.

MAMETesters Bugs Fixed

New working machines

New working clones

Machines promoted to working

New machines marked as NOT_WORKING

New clones marked as NOT_WORKING

New working software list additions

Software list items promoted to working

New NOT_WORKING software list additions

Source Changes

submitted by cuavas to emulation [link] [comments]

Success To Be [OC, M.2 DualBoot, AMD R5, RX 5700 XT, 16GB RAM, BCM94360CD]

Success To Be [OC, M.2 DualBoot, AMD R5, RX 5700 XT, 16GB RAM, BCM94360CD]
--OUT OF DATE--

OpenCore AMD DualBoot Hackintosh! This would absolutely not have been possible without this community and especially Khronokernel! Many, many thanks - this is my first Hackintosh and self-built PC!! :D
https://preview.redd.it/ciem302abff41.png?width=1920&format=png&auto=webp&s=e8d551bec88509a6ff164d27c528dde794a3070a

Components

See also: OpenCore config below!
Part Model
Motherboard MSI B450 GAMING PRO CARBON AC ATX AM4
CPU AMD Ryzen 5 3600X 3.8GHz 6C
Video Card PowerColor Radeon RX 5700 XT 8GB Red Devil
Memory G.Skill Ripjaws V 2 x 8 GB DDR4-3200C14
Storage ADATA XPG SX8200 Pro 2TB M.2-2280 NVMe SSD
Power Supply Corsair HX750 750W 80+ Platinum Certified Fully Modular ATX
CPU Cooler Noctua NH-D15S
Case Fan 2x Noctua NF-A14 PWM 140 mm
Thermal Paste Thermal Grizzly Kryonaut, 1g
Case Fractal Design Meshify C ATX Mid Tower
Monitor AOC 24G2U/BK 24" 1920x1080 144Hz
Keyboard Apple MB110LL/B Wired
Mouse Logitech G Pro Wireless Optical
Wifi/BT Card via PCIe Fenvi BCM94360CD, AliExpress (Fenvi FV-A436CD)
USB 3.0 PCIe Card Some cheap thing (no brand found?!) I had laying around, not expected to work on macOS, good on Win10
PCPartPicker Part List (without BCM94360CD) About $1600, most parts - especially the expensive ones - where bought on sale, though!
I had these goals in mind:
  • Hackintosh, of course!
  • DualBoot
  • 2K Performance (Everyday PCing to AAA Gaming) with proper heat management, unlike Apple
  • Longevity, my previous Main, a MacBookPro 13'' (Early 2011), still flourishes! :) Good boi!
  • Low noise, hence the Powercolor Graphics Card and the beefy NH-D15S (also for performance)
  • As little dust as possible (see case)
  • As small as possible - without compromising on goals
  • As little RGB as possible (sorry.), which turns out to be difficult
Max credit goes here and here!! Also, here, here, here, here and here. Totally solid work, guys! This Project was started on December, 1st 2019. Now it is February, 7th 2020!

Features

  • Vanilla Hackintosh
  • OpenCore 0.5.5
  • DualBoot on one 2TB M.2 SSD with Win10
  • AMD Ryzen 5 Processor with RX 5700 XT (Navi 10) and 16GB RAM on MSI B450
  • Wifi and BT via BCM94360CD over PCIe (Windows compatible)
  • Sleep/wake works
  • Fixed iServices, even though I probably won't use them...
  • I consider my goals met.
  • Mapped USB ports, see below.

Known issues

  • Bluetooth is always "on", but not working. Probably USB Mapping; Resolved here.
  • Internal drives shown as externals (yellow-orange). Solved..
  • Black screen when setting resolution to 1080i instead of 1080p in system preferences. Minor issue.
  • Cannot boot into Recovery mode. Solved.
  • Won't sleep after set time (system prefs). "HibernateMode" set to "Auto" in config & port mapping KEXTs, see below.
  • Cannot adjust volume of built-in-monitor speaker (DisplayPort)~~~~. Solved with software.
  • Some Motherboard RGB issues - Solved by USB Mapping.
  • Choosing to boot into Windows via Bios (F11) - I don't consider this much of an issue.
I will try to solve these issues in separate threads and update this one, but any help much appreciated! Any comments - e.g. on Kexts; do I need them all?! - are welcome too...

Not tested yet

  • Microphone jack on case.
  • FileVault - don't need that, probably won't test

Advice for interested people


  • -- PLEASE BE ADISED THAT THERE ARE NEWER VERSIONS OF OPENCORE AND THAT THE PATH BELOW (ESPECIALLY THE CONFIG CHANGES) MIGHT NOT WORK WITH OC VERSIONS AFTER 0.5.5!! -- For a working EFI folder for OC 0.5.6 see in the comments.

My Hackintosh configuration

  • OpenCore 0.5.5
  • macOS Catalina 10.15.3
  • The following EFI is on my OpenCore stick. There is also the latest macOS on there. If you go for DualBoot, keep this stick around & updated as Windows seems to be able to mess around with your EFI... With this stick you'll always be able to boot your Hackintosh and repair its EFI partition.
  • FULL EFI FOLDER: See in comments ("PlatformInfo" has to be populated in config.plist - see below... You can copy over the info from your current config. Also, my changes in DeviceProperties/Add might be a problem for your storage setup.)
  • OpenCore EFI files:
  • Config.plist: http://www.filedropper.com/configreddit EDIT: See comments (only use if exactly same components as me; see below. Change according to OpenCore Guide!! [PlatformInfo removed; Populate this yourself like this!] I'd advice you to make your own config.plist.) Changed with ProperTree strictly according to the OpenCore Guide. Differences to sample.plist:
    • Probably outdated: All of the following modifications are for OC 0.5.5. If you are on a later version of OC it is likely that these have changed!
    • 5 initial Warnings removed.
    • DeviceProperties/Add: Removed "PciRoot(0x0)/Pci(0x1b,0x0)" and "PciRoot(0x0)/Pci(0x2,0x0)" as well as their children
      • Added Key "PciRoot(0x0)/Pci(0x1,0x1)/Pci(0x0,0x0)" as child of "Add" with Type "Directory". Added child beneath the just made child with name "built-in", type "Data" and value "01000000". To address drive issue above, see here.
    • Populated this config.plist with OC snapshot function of ProperTree (CMD/CTRL+R, point to EFI/OC/) . Adds KEXTs and SSDT.
    • Kernel/Emulate: Removed "CpuidMask" and "CpuidData" (were blank anyway).
    • Kernel/Patch: Ryzen/Threadripper(17h) Patch applied.
    • Kernel/Quirks:
      • "DummyPowerManagement" set to True
      • "ExternalDiskIcons" set to True
      • "PanicNoKextDump" set to True
      • "PowerTimeoutKernelPanic" set to True
      • "XhciPortLimit" set to True (set to False after USB mapping in step F)
    • Misc/Boot:
      • "HibernateMode" set "Auto" after USB mapping
    • Misc/Debug: Nothing changed.
    • Misc/Security:
      • "AllowNvramReset" set to True
      • "AllowSetDefault" set to True
      • "AuthRestart" left False
      • "RequireSignature" set to False
      • "RequireVault" set to False
      • "ScanPolicy" set to 0
    • Misc/Tools: Shell.efi added by the OC snapshot function.
    • NVRAM/7C436110-AB2A-4BBB-A880-FE41995C9F82:
      • "boot-args" set to "-v keepsyms=1 debug=0x100 agdpmod=pikera alcid=1"
      • "nvda_drv" set to <>
      • "prev-lang:kbd" set to my preferences. (Use "656E2D55 533A30" = HEX for keyboard layout "en-US:0"; find your own with a TEXT to HEX converter and this.
    • NVRAM/"WriteFlash" set to True,
    • PlatformInfo: Populated with info according to the Guide with GenSMBIOS. Went with a "iMacPro1,1". Found "Purchase Date not Validated" numbers after about 3 (x10) times.
    • UEFI/Drivers: Drivers auto-added by the OC snapshot function.
    • UEFI/Input:
      • "PointerSupport" changed to "Data" and set to <>
      • "PointerSupportMode" changed to "Data" and set to <>
    • UEFI/Protocols/"ConsoleControl" set to True
    • UEFI/Quirks:
      • "ProvideConsoleGop" set to True
      • "RequestBootVarFallback" set to True
  • Bios settings strictly according to the OpenCoreGuide:
    • Disabled:
      • "Fast Boot"
      • "CSM" [UEFI instead]
    • Enabled:
      • "EHCI/XHCI Hand-off"
      • "Above 4G decoding"

My process (only successful part)

(You'll need 3 USB sticks! 2 with at least 4GB, 1 with at least 8GB. I am not sure, whether the Linux Part is really necessary, or if the partitioning can also be done from the macOS or Win10 stick...)
A) The basic build
  1. Built PC.
  2. Installed Windows 10 from USB stick [8GB] (made from Microsoft Media Creation Tool, instructions here, don't forget to install in UEFI mode - see second link in 3.!). Did some fan adjustments in BIOS too... Keep that stick!
  3. Set up Windows 10, installed drivers (see here, here).
  4. Installed Python 3.7! (For SSDTTime, below. Don't get Python 3.8.1!)
Do not set up Windows too much yet, it will be deleted completely and reinstalled again.

B) Creating the OpenCore Stick
  1. Followed Snazzy Lab's Video (read its description!) to create the OpenCore stick, everything on the above Win10: (useful additional help: khronokernel and VanillaAMD and Github)
    1. (Maybe format your stick to GUID HFS+ via Linux or Mac first... See Github.)
    2. Downloaded latest macOS via gibMacOs.bat (Recovery package!) (Admin privileges needed!). Update 7zip first for step B)1.II. and B)1.III. and use a Lan connection!
    3. Made a bootable install of that via Makeinstall.bat (Number + o) (Admin privileges needed!).
    4. Opened the EFI folder on the now newly made USB stick.
    5. Deleted everything (3 files) in EFI/OC/Drivers/, except FwRuntimeServices.efi.
    6. Deleted everything (2 files) in EFI/OC/Tools/.
  2. Put in the following drivers from AppleSupportPkg on the stick to EFI/OC/Drivers/:
    1. ApfsDriverLoader.efi
    2. VBoxHfs.efi
  3. Put KEXT and SSDT and Drivers on the stick:
    1. For troubleshooting afterwards - while booting from the stick - consult: khronokernel/troubleshooting!!
    2. Put the above KEXTs on the stick, all in EFI/OC/Kexts (instructions: khronokernel, more kexts: onedrive).
    3. Put the following SSDTs on my stick (into OC/ACPI)
      1. See above! SSDTTime not needed.
    4. Created config.plist with ProperTree (search with crtl+f!) (full instructions: khronokernel plus config documentation mentioned above in B)3.a.!!):
      1. Renamed "simple.plist" in the downloaded OpenCorePkg folder to "config.plist" and copied it over to the stick into EFI/OC/.
      2. Open Propertree.bat (Admin privileges maybe needed!) and opened said config.plist via the menu bar "File" of proper tree.
      3. Created my own config via "OC snapshot" in the menu bar "File", navigated to EFI/OC of my stick.
      4. Patched my config with patches.plist from AMD_Vanilla (17h): Open simultaneously in ProperTree. (See Snazzy Laps Video and this on how!)
    5. Edited config.plist, followed Vanilla Guide/amd-config.plist (partly later because of errors): See above!
    6. Saved via menu bar "File".

C) Created bootable Linux stick and made partitions on my internal SSD for dual boot (I was recommended this procedure here), install macOS:
  1. Still in Windows 10: Followed the Ubuntu Tutorial to make another stick.
  2. Shut down Windows 10.
  3. Booted again, with the OpenCore Stick connected, temporarily changed the boot partition with F11 and chose my stick (some of the above mentioned config.plist changes were applied AFTER this step, because certain errors occured):
  4. Got to the boot picker and reset NVRAM.
  5. Restarted the same way and chose the macOS installer (Step 3).
  6. Went into the macOS installer's Disk Manager. Formatted the whole internal SSD (maybe ExFat? Probably doesn't matter) and made two partitions for macOS (APFS) and Windows (don't remember what, maybe ExFat?, doesn't matter)
  7. Exit the Disk Manager and enter the installer. Install macOS. Maybe create a backup of that.
  8. Do this: Especially the EFI copying! How to mount the EFI partition on macOS.
  9. Shut down.

E) Created Windows:
  1. Booted into Linux, via Stick.
  2. Got synaptic and hfsprogs for Linux:
    1. Searched the Programs for "Software & Updates". Enable second option: Community-maintained free and open-source software (universe). "Close" this window and let it do it's download.
    2. Opened Terminal (Ctrl+Alt+T), entered:
      1. sudo apt-get update
      2. sudo apt-get install synaptic
      3. sudo apt-get install hfsprogs (not needed anymore?!)
  3. Searched for "Disks". Designated the 200MB partition from above as EFI (I believe via the cog wheels > Format Partition). Close that window.
  4. Searched in progs for "GParted":
    1. Format the second, partition to NTFS.
    2. (You should see three partitions on your internal SSD: EFI, Mac (APFS - probably unrecognised) and Windows)
  5. Shut down Linux.
  6. Boot with Windows Stick connected into the Windows installer.
  7. Install Windows on that NTFS partition.
  8. (Mac and Windows will write their EFI on the same partition! Keep at least your OpenCore Stick!!)
F) Finished. Set up both machines (Windows: here and here) completely!! :D
  • Mapped my ports by removing the XHC0 controller with this kext completely (lost two ports in the process, but that's ok) and (optionally) mapped the PTXH controller with this kext (you might have to adjust this!). For why, see here. See here and here, too!
  • Disabled OpenCore logging: Values set to 0. (In config above not included!)
  • Found "valid" SMBIOS numbers, fixed iServices according to this. (In config above not included!)
  • Didn't enable FileVault or OpenCore Security Features yet... Probably won't.
submitted by CrayCJ to hackintosh [link] [comments]

MAME 0.216

MAME 0.216

With the end of November in sight, it’s time to check out MAME 0.216! We’ve addressed the reported issues with last month’s bgfx update, and made a whole lot of little improvements to MAME’s internal user interface. In particular, setting up controls should be easier, and several issues affecting macOS users with non-English number format settings have been fixed. Some of the issues caused bad settings to be written to INI files. If you still don’t see the filter list panel on the system selection menu, try removing the ui.ini file.
This month, we’re able to present two unreleased 1970s prototypes from Italian developer Model Racing: their internal code names are Cane and Orbite. With the assistance of former Model Racing employees, the source code was extracted from the original disks. These games are incomplete, but they provide a unique look into early CPU-based arcade development. Game & Watch titles continue to be emulated, with the addition of Mario The Juggler, and the panorama screen Mickey Mouse and Donkey Kong Circus games in this release.
This release brings GameKing emulation to MAME. The system-on-a-chip used in this low-cost, low-resolution hand-held console from the early 2000s has been identified and emulated. Games for the colour-screen GameKing III are also playable. Acorn BBC Micro emulation has been re-worked to support internal expansion boards, and a number of additional peripherals are now available. ZX Spectrum emulation has been enhanced with better open bus read behaviour and support for two Miles Gordon Technology peripherals.
Of course, these are just the highlights. You can get the source and Windows binary packages from the download page.

MAMETesters Bugs Fixed

New working machines

New working clones

Machines promoted to working

New machines marked as NOT_WORKING

New clones marked as NOT_WORKING

New working software list additions

Software list items promoted to working

New NOT_WORKING software list additions

Source Changes

submitted by cuavas to MAME [link] [comments]

Best books on binary options insurance - Binary Trading ... Best Options Trading Books #Binary Options For Dummies Pdf 3 Simple Techniques For Binary options for dummies book ... Binary options best books - Conversica for Dummies - YouTube The Best Guide To Binary options for dummies book - Cgbcjr ... Binary options for dummies book - Cgbcjr - Truths - YouTube

One book that has made binary options trading easy is ‘Trading Binary For Dummies’, by Joe Duarte. Video tutorials & seminars – Engaging and easy to follow. There are numerous online video tutorials out there that can walk you through making a trade. With seminars, you’ll also be able to have questions answered and the binary options trading basics explained, plus some brokers offer ... You as a binary option trader will choose the stock that you wish to buy or sell by if you believe the price will go up or down on the date of expiration Jul 02, 2020 · Binary options binary options for dummies for dummies : definition Even if you trade it for a very short timeframe, you usually buy an asset with the hope of selling it later at a higher price to book a profit. Basics of ... Although there are plenty of great options trading books for beginners, "Trading Options For Dummies" offers a basic, yet comprehensive overview of the subject. Updated with new facts, charts, and strategies, this 3rd edition will help you understand today's markets and evaluate the right options for your needs—showing you how to weigh option costs and benefits, build a strategy, and broaden ... with Binary Options How to Execute a Classic Trade with Binary Options Executing a classic binary options trade through your Cedar Finance account is easy. Just follow these steps: If you already have an account, just log into it. If you don’t have an account, create one and log into it. Deposit funds3 into your account. 1 2 2 1 4 3 trading binary options for dummies There is no need to make huge investments when starting trading binary options. The hidden truth behind this is that majority of the. Here are some of the topics you'll discover while reading the book: The single most critical factor to binary options strategy success - …. Tweet. The former pays some fixed trading binary options for dummies amount of cash ... The binary options sector has sometimes attracted a lot of misinformation online, fortunately that problem has not blighted the printed word in the same way. Most of the books written on the subject are honest, and describe binaries accurately. There are of course, some books that are better than others, and below, we highlight the books we think are the best for traders at particular points ... Candlestick Charting For Dummies Russell Rhoads; Understanding Company News: How to Interpret Stock Market Announcements – Rodney Hobson; From knowing how to read signals through to coming up with your very own strategy, even the most experienced traders can benefit from some outside input from time to time. While the best binary options brokers tend to offer hints and tips and dummy ... Binary options basics are helpful to understand how they work. You do not need any binary trading for dummies pdf to understand it. Beginners guide to binary options trading. This is a short and simple binary options tutorial.They are easy to understand.This is why they are growing fast.They are easy for the beginners. What are binary options? They’re called ‘binary’ because there can be ... How to Trade Binary Options Successfully - Free Binary Book Download. Binary options trading provide you with an opportunity to trade stocks, currency and commodity options using a simple platform interface using one mouse click. In contrast to standard investing, binary option (BO) trading offers you an extremely clear picture of pre-determined ROI. This is an excellent chance to command the ... Trading Binary Options For Dummies. Anyone can trade binary options. Even a dummy can win any given binary trade, too. It is one or the other choice, it is hard to get it that wrong all of the time. However, to be a long term winner you have to develop a method and strategy that works for you. You have to consistently profit by winning more trades than you lose. Since there is risk involved ...

[index] [29231] [16433] [15442] [2216] [3133] [22387] [23281] [12845] [24663] [26329]

Best books on binary options insurance - Binary Trading ...

Quick, Easy and Profitable Trading? YES! TOP SECRET Formula! Click Here Now! http://tiny.cc/Profit-Autopilot Unique Scalping Technology that WINS! 170+ Pips ... The Full Report: https://bit.ly/2FarbXd - The Best Guide To Binary options for dummies book - Cgbcjr You might select 1 minutes, 2 min, 5 minutes, 1 hour or ... Our Website Here: https://bit.ly/33K3FdW - Binary options for dummies book - Cgbcjr - Truths The Pakistan monetary market has just recently been opened up to... Look Here: https://bit.ly/33LEUhA - 3 Simple Techniques For Binary options for dummies book - Cgbcjr The Pakistan monetary market has actually just recently ... Go To Our Site: https://bit.ly/33IKuBd - Best books on binary options insurance - Binary Trading for Dummies In this book, the simpleness of binaries is one ... Read More Here: https://bit.ly/2DtHrlO - Binary options best books - Conversica for Dummies The book and then it changes to intermediate level subjects like:...

http://arab-binary-option.dhealtogwatchdistucy.gq